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.
166 lines
6.6 KiB
Markdown
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
|