okr/commands/sporing.md
Kjell Tore Guttormsen 9033f37b63 docs(okr): kjent avvik i coaching-hooks confidence-telling
Hooken teller alle rader merket At Risk/Off Track under ett og sier «vurder
tiltak». okr-framework.md:605 sier samtidig at de fleste stretch-KR BOER staa
At Risk, og at permanent groent er sandbagging-signalet -- saa for en sunn
aspirational-portefoelje peker varselet feil vei: eneste maate aa dempe det paa
er aa merke stretch-KR groenne.

Kollisjonen er ikke ny i art (en haandskrevet status.md ble talt likt), men fra
1.10.0 fylles kolonnen deterministisk, saa den inntreffer alltid. Fikset hoerer
hjemme i hooken, ikke i skriveleddet, og foeres som patch-lane-post.
Operatoerbeslutning: dokumenter naa, fiks i egen oekt med egen TDD-syklus.

Ogsaa: sporing.md stavet samme KR-navn paa to maater i to eksempler (fixturens
ASCII-form lakk inn i det ene). Oppslaget er eksakt match paa kr*_navn, saa to
stavemaater i samme fil er en felle.
2026-08-10 20:59:48 +02:00

166 lines
6.6 KiB
Markdown

---
name: okr:sporing
description: Spor OKR-fremgang, beregn score og generer check-in rapporter
allowed-tools: Read, Bash, AskUserQuestion, Task, ToolSearch, Glob
argument-hint: "[OKR eller tall for oppdatering]"
---
# OKR Sporing - Fremgang og scoring
Hjelp brukeren med å spore OKR-fremgang, beregne score og strukturere check-ins.
## Kontekstbevissthet
Hooken for-injiserer ikke lenger en fil-liste — den emitterer kun kjerne-profil
+ en peker til wikien. Oppdag OKR-konteksten direkte fra disk FØR du spør brukeren:
- Glob `.claude/okr/syklus/*/` for de OKR-filene som skal spores — les dem direkte
i stedet for å be brukeren lime inn OKR-tekst.
- Glob `.claude/okr/syklus/*/status.md` for forrige statusrapport i samme syklus, så
fremgang måles mot sist rapporterte verdi og ikke mot baseline alene.
- Trenger du bredere kontekst fra brukerens wiki, invoker `okr-second-brain-search`.
- Kjenner du allerede organisasjon og syklus fra kjerne-profilen: hopp over de spørsmålene.
## Scoring-system
**Skala**: 0.0 - 1.0
| Score | Betydning | Typisk for |
|-------|-----------|------------|
| 1.0 | 100% oppnådd | Committed mål |
| ≈0.7 | Sweet spot — 0.7 = forventet for aspirational; 0.6-0.7 = sweet spot (Google/Doerr) | Aspirational mål |
| 0.5-0.7 | Delvis suksess | Trenger analyse |
| < 0.5 | Ikke oppnådd | Trenger intervensjon |
### Beregningsformel
```
Score = (Nåværende - Baseline) / (Target - Baseline)
```
## Arbeidsflyt
### Ved statusoppdatering
1. **Samle inn tall** — les OKR-filer fra `.claude/okr/syklus/[id]/` (hvis tilgjengelig
fra system-kontekst) eller be brukeren oppgi OKR. Spør med AskUserQuestion:
- Nåværende verdi for hver KR
- Baseline og target (hvis ikke kjent)
- Dato for måling
Er `/okr:rapport tertial` kjørt for syklusen, finnes tallene allerede i
`rapport-tertial.md` — les den i stedet for å spørre om dem på nytt.
Confidence-kolonnen der står tom med vilje: generatoren eier aritmetikken,
denne kommandoen eier vurderingen. Det er den kolonnen du fyller i steg 3.
2. **Beregn score** per KR, og oppsummer **per type** — aldri som ett felles tall.
Committed og aspirational måles mot hver sin målestokk, og et aggregat på tvers
av dem er tvetydig (`okr-framework.md`, committed/aspirational-skillet):
- **Committed:** hvor mange KR som har nådd kravet. Et committed KR er nådd
eller ikke; et snitt av binære krav er ikke en størrelse.
- **Aspirational:** snittet på tvers av aspirational-KR. Rundt 0.7 er forventet
måloppnåelse, ikke svikt.
3. **Vurder confidence** — sett nivået fra den **kanoniske confidence-tabellen i
`okr-framework.md`** (On Track 🟢 / At Risk 🟡 / Off Track 🔴, sannsynlighet for å
nå target). Innfør ingen egne nivåer eller terskler her. Trend er ett *innspill*
til vurderingen: peker den mot target, flater den ut, eller har fremgangen stoppet?
4. **Skriv `status.md` med scriptet — aldri for hånd.** Du eier vurderingen;
generatoren eier tallene. Lever confidence som JSON på stdin, ett oppslag fra
KR-navn (nøyaktig som i `kr*_navn`) til etikett:
```bash
node ${CLAUDE_PLUGIN_ROOT}/scripts/syklus-status.mjs .claude/okr/syklus/[id] <<'JSON'
{
"Andel digitale søknader (prosent)": "At Risk",
"Gjennomsnittlig saksbehandlingstid (dager)": "On Track"
}
JSON
```
Etikettene er det lukkede vokabularet fra `okr-framework.md`: `On Track`,
`At Risk`, `Off Track`. Alle KR i syklusen må ha en etikett — scriptet nekter
å skrive en fil med tomme celler, fordi en slik fil ser vurdert ut uten å være
det, og konsumentene ville lest den som grønn.
**Skriv aldri av tallene selv.** Scriptet bygger radene med samme kode som
`/okr:rapport`, så score og avvik i `status.md` er de samme bytene der.
Exit-koder: `0` skrevet · `1` domenefeil (ugyldig eller manglende etikett,
eller en håndholdt `status.md` i veien — den overskrives aldri) · `2` bruksfeil
(feil argument, katalogen finnes ikke, ugyldig JSON).
5. **Presenter resultatet** med anbefalte tiltak, og pek på fila som ble skrevet.
### Ved ukentlig check-in
Generer en strukturert check-in:
1. Status på hver KR (traffic light)
2. Blokkere og støttebehov
3. Beslutninger som trengs
4. Fokus neste periode
## Fila scriptet skriver
`.claude/okr/syklus/[id]/status.md` er et OKF-konsept i second-brain-treet, ikke løs
markdown. Scriptet setter frontmatteren selv — `type: Status` (uten den feller
`okf-check` hele roten) og `kilde: sporing`, provenans-nøkkelen som gjør at en senere
kjøring vet at fila er generert og trygt kan erstatte den. Etikettene er ASCII, uten
emoji, som resten av den maskingenererte flaten; `coaching-hook` matcher på ordene.
Forkortet utdrag av resultatet:
```markdown
---
type: Status
title: Statusrapport T1-2026
timestamp: "2026-05-01T10:00:00.000Z"
kilde: sporing
---
# Statusrapport T1-2026
## Committed Key Results
Committed KR maales binaert mot kravet: kravet er naadd eller ikke. En score
under 1.0 er et avvik som skal forklares, ikke et godt resultat.
### Trafikksikkerhet og tunnelsikkerhet
| KR | Baseline | Target | Naa | Score | Avvik | Confidence |
|----|----------|--------|-----|-------|-------|------------|
| Tunneler med oppgradert sikkerhetsutrustning (antall) | 12 | 20 | 17 | 0.63 | Ja | At Risk |
## Avvik som skal forklares
## Aspirational Key Results
| KR | Baseline | Target | Naa | Score | Avvik | Confidence |
|----|----------|--------|-----|-------|-------|------------|
| Andel digitale søknader (prosent) | 60 | 85 | 63 | 0.12 | - | At Risk |
**Snitt aspirational: 0.23** over 2 KR.
```
Rammeteksten om committed, avvik og aspirational kommer fra generatoren — du skal ikke
skrive den om. Det du eier, og som ikke finnes i fila, er **tiltakene**: presenter dem i
svaret ditt.
**Eksempel på anbefalte tiltak:**
1. Prioriter oppgraderingen av de tre gjenstående tunnelene — kravet er et avvik,
ikke et delresultat.
2. Kjør brukerundersøkelse på selvbetjeningsløsningen før neste måling.
## Linear-integrasjon
Hvis Linear er konfigurert (sjekk med ToolSearch):
1. Hent aktive OKR-issues
2. Oppdater status-felt
3. Legg til kommentar med score
## Referanser
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-calculator.md` — beregningsformler
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-framework.md` — scoring-metodikk
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/metrics-library.md` — metrikkbibliotek for offentlige KR
- `${CLAUDE_PLUGIN_ROOT}/skills/okr-offentlig-sektor/references/okr-integrations.md` — Linear-/verktøyintegrasjon for statussporing