okr/CLAUDE.md
Kjell Tore Guttormsen 30545b982e fix(okr): credibility-sanering fra 360-re-evaluering + bump 1.6.1
Lukker de 5 credibility-kritiske funnene fra docs/evaluering-360-2026-06-26.md:
1. okr-quality-rubrics.md omskrevet til korrekt norsk (var ASCII-strippet, 0
   aa/oe/ae; lastes brukervendt av /okr:kvalitet + kvalitetssjekker +
   freshen-references). Regresjon i samme klasse som v1.3.0-showstopperen.
2. SKILL.md flaggskip-eksempel: strippet norsk rettet (per aar/hoyrisiko/
   spoerreundersoekelse/Gjennomfoere moeter).
3. okr-second-brain-search ~-glob: literal ~ ekspanderes ikke av Glob ->
   hjemme-roten ble aldri soekt. Naa eksplisitt absolutt hjemme-sti.
4. Uverifisert kb-search-sitat fjernet (motsagt av innboks-ingestion-funn);
   erstattet med funksjonell Glob/Read/Grep + discovery-moenster.
5. okr-oboard-guide.md KR1-regnefeil 52% -> 65% (per filens egen formel).

Bump alle flater 1.6.0 -> 1.6.1 (plugin.json, CLAUDE.md, README badge+hist,
begge SKILL.md, CHANGELOG). Suite 55/55 groenn. C+ -> A-; systemiske funn
(KB-kryssref, Sist-oppdatert-markoerer) bevisst utsatt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SFW5scLL7oEwWWTv1fPQG6
2026-06-26 21:31:42 +02:00

101 lines
6.9 KiB
Markdown

# OKR Offentlig Sektor v1.6.1
Expert OKR guidance for Norwegian public sector. Google/Doerr methodology adapted for 4-month tertial cycles.
## Commands
| Command | Description |
|---------|-------------|
| `/okr:skriv` | Write new OKR with guided Objective and KR creation |
| `/okr:kvalitet` | Quality check OKR against rubric and antipatterns |
| `/okr:kaskade` | Cascade OKR from org to team, visualize alignment |
| `/okr:sporing` | Track progress, calculate scores, generate check-ins |
| `/okr:møter` | Plan OKR workshops, check-ins, reviews, 1:1s |
| `/okr:innføring` | OKR adoption planning, resistance handling, maturity |
| `/okr:governance` | Tildelingsbrev translation, Riksrevisjon compliance |
| `/okr:gap` | Automatic gap analysis between tildelingsbrev and current OKR |
| `/okr:analyse` | Cross-cycle analytics with Mermaid trend visualizations |
| `/okr:oppsett` | Configure plugin: onboarding interview (full/mvp), cycle archival, profile update. Args: `full\|mvp\|arkiver\|oppdater\|vis` |
| `/okr:export` | Export OKR deliverables (quality review, gap matrix, status report, retrospective) to print-ready PDF via weasyprint |
| `/okr:freshen-references` | KB self-evaluator: score the 16 domain reference files against an anchored rubric + currency-poll public sources |
| `/okr:help` | Full overview of all commands, agents, and recommended cycle workflow |
## Agents
| Agent | Model | Color | Tools | Role |
|-------|-------|-------|-------|------|
| kvalitetssjekker | sonnet | blue | Read, Glob | Score OKR quality against rubric |
| kaskadebygger | sonnet | green | Read, Glob | Build OKR cascades between levels |
| fremdriftssporer | sonnet | yellow | Read, Glob, ToolSearch | Calculate scores and generate reports |
| møtefasilitator | sonnet | magenta | Read, Glob | Generate meeting agendas and materials |
| styringsrådgiver | opus | cyan | Read, Glob | Tildelingsbrev analysis, governance |
| gapanalytiker | sonnet | red | Read, Glob | Tildelingsbrev gap analysis and coverage matrix |
| trendanalytiker | sonnet | purple | Read, Glob | Cross-cycle trend analysis and Mermaid visualization |
## Hooks
| Event | Type | Purpose |
|-------|------|---------|
| SessionStart | command | Proactive coaching based on cycle position and OKR status |
| UserPromptSubmit | command | Inject org profile (expanded YAML), current cycle, `.claude/okr/` summary, and archived cycle count |
| PreCompact | prompt | Preserve OKR draft state during compaction |
## Skills
| Component | Location |
|-----------|----------|
| SKILL.md (okr-offentlig-sektor) | `skills/okr-offentlig-sektor/SKILL.md` |
| References (17) | `skills/okr-offentlig-sektor/references/` |
| SKILL.md (okr-second-brain-search) | `skills/okr-second-brain-search/SKILL.md` |
The second skill (`okr-second-brain-search`) does on-demand retrieval over the user's OKF-compatible wiki (native Glob/Read/Grep, no MCP) — see OKF Knowledge Layout below.
## State Management
User configuration: `.claude/okr.local.md` in the project directory (not in plugin root).
Org profile (reinstall-surviving): `~/.claude/okr/org/profil.md` — the machine-global org identity (`organisasjon:`/`program:`), written atomically (temp + `renameSync`) by `scripts/write-org-profile.mjs` during `/okr:oppsett`. Resolution is most-specific-wins: a project-local `.claude/okr.local.md` overrides the home profile; the home profile is the backwards-compatible fallback when no project config exists (read side: `hooks/scripts/inject-okr-context.mjs`). On any home-write failure the helper circuit-breaks to the gitignored project-local `.claude/okr.local.md`. Only the org *profile* migrates to home — cycle/`historikk` data stays cwd-bound.
Template: `templates/okr.local.md.template`
Context tree: `.claude/okr/``strategisk-kontekst/`, `syklus/[id]/`, `historikk/`, `dokumenter/`
Onboarding state: `onboarding_status` field in okr.local.md (`partial` | `fullfort`)
Cycle archival: `/okr:oppsett arkiver` — moves `syklus/` to `historikk/`, generates `retrospektiv.md`
## OKF Knowledge Layout
Context files carry OKF-compatible frontmatter (Knowledge Catalog "Documents/kb Layout", aka "Metadata as Code" — not a formal "OKF v0.1" standard): a Title-Case `type` (`Organisasjonsprofil`, `Tildelingsbrev`, `Virksomhetsplan`, `Overordnede OKR`, `OKR`, `Retrospektiv`, `Status`) plus recommended `resource`/`title`/`description`/`tags`/`timestamp`. Only `type` is de-facto required. The flat frontmatter parser reads only single-line keys (`type`, profile/config fields); tree files may carry multi-line `tags` lists without breaking it.
**Two bundle roots** with distinct lifecycles: project `.claude/okr/` (cwd-bound cycle/work) and home `~/.claude/okr/org/` (reinstall-surviving org identity). Each root carries its own `index.md` (no frontmatter; `# H1` + `* [title](link) - description`) and an `okf_version` marker. `okf-index`/`okf-check` run per root; retrieval Globs both (project preferred, else home).
- `lib/frontmatter.mjs` — shared frontmatter parser/writer; both hooks route through it (strips trailing ` #…` only from unquoted values).
- `scripts/okf-index.mjs` — regenerate a root's per-level `index.md` (verbatim OKF index format).
- `scripts/okf-check.mjs` — validate each concept file carries `type:` (exit 1 + count otherwise); report `okf_version` per root.
- `scripts/compose-org-profile.mjs` — build the nested org-profile YAML with top-level OKF keys (`type`/`resource`/`timestamp`) before piping to `write-org-profile.mjs`.
Retrieval is on-demand via the `okr-second-brain-search` skill. The UserPromptSubmit hook no longer pre-injects the full context-file enumeration — it emits the core profile plus one resolved pointer to `index.md` (< 512 B, independent of file count).
## Language Policy
- Commands, agents, user-facing text: Norwegian
- Code, config, technical identifiers: English
- SKILL.md: English (for broader LLM comprehension)
## Architecture
```
/okr:skriv ──→ kvalitetssjekker (auto)
/okr:kvalitet ──→ kvalitetssjekker
/okr:kaskade ──→ kaskadebygger
/okr:sporing ──→ fremdriftssporer ──→ Linear MCP (optional)
/okr:møter ──→ møtefasilitator
/okr:governance ──→ styringsrådgiver
/okr:innføring ──→ (inline, no agent)
/okr:gap ──→ gapanalytiker
/okr:analyse ──→ trendanalytiker
/okr:oppsett ──→ (inline wizard: full/mvp/arkiver/oppdater/vis)
/okr:oppsett arkiver ──→ cycle archival + retrospektiv-generering
/okr:export ──→ scripts/export-pdf.py (weasyprint, documented prerequisite)
/okr:freshen-references ──→ (inline KB-evaluator + currency-polling via WebSearch/Task)
/okr:help ──→ (inline command/agent/workflow overview)
SessionStart ──→ coaching-hook.mjs (proactive coaching)
UserPromptSubmit ──→ inject-okr-context.mjs (core profile + resolved index.md pointer)
okr-second-brain-search (skill) ──→ Glob/Read/Grep over .claude/okr/ + ~/.claude/okr/org/ (on-demand retrieval)
```