okr/commands/sporing.md
Kjell Tore Guttormsen 3a0cbcfbf9 feat(okr): deterministisk skriveledd for status.md (1.10.0)
Kjeden /okr:rapport -> /okr:sporing -> status.md var beskrevet i prosa, men
manglet et mekanisk ledd: ingenting foerte en generert rad inn i status.md --
fila coaching-hook teller at-risk-KR i, /okr:moeter bygger agenda fra, og
/okr:oppsett arkiver leser sluttscorer fra. Rot-aarsaken var at HELE
sporings-stien var lesende (ingen Write/Edit/Bash i allowed-tools).

scripts/syklus-status.mjs tar confidence som JSON paa stdin og bygger radene
gjennom statusrapport() i lib/syklus-rapport.mjs -- samme kode som
tertialrapporten. Aritmetikken kan derfor ikke drifte fra /okr:rapport, fordi
det ikke finnes en andre implementasjon av den. En LLM skriver ikke av et tall
paa veien, og en maskin utleder ikke et trafikklys: beslutning 9 staar, presist
formulert som at generatoren PLASSERER en etikett den faar inn som data og
UTLEDER aldri en.

Haandhevet i kode, ikke i prosa: lukket vokabular (On Track/At Risk/Off Track),
full dekning (en tom confidence-celle ville lest som groenn hos hver konsument),
typo-fangst paa ukjente KR-navn, og kuratert-fil-vern -- en status.md uten
provenans-noekkelen `kilde: sporing` er haandholdt og overskrives aldri (samme
mekanikk som innboks-write bruker med `kilde: innboks`).

Suite 329 -> 343. Fem vakter mutasjons-verifisert: rad-drift mot
tertialrapporten, vokab, dekning (baade alene og sammen med vokab-vakten som
overlapper den), og kuratert-vernet.
2026-08-10 20:56:26 +02:00

6.6 KiB

name description allowed-tools argument-hint
okr:sporing Spor OKR-fremgang, beregn score og generer check-in rapporter Read, Bash, AskUserQuestion, Task, ToolSearch, Glob [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:

    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:

---
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 soeknader (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