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.
This commit is contained in:
parent
285d18ebfa
commit
3a0cbcfbf9
13 changed files with 618 additions and 50 deletions
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
name: okr:sporing
|
||||
description: Spor OKR-fremgang, beregn score og generer check-in rapporter
|
||||
allowed-tools: Read, AskUserQuestion, Task, ToolSearch, Glob
|
||||
allowed-tools: Read, Bash, AskUserQuestion, Task, ToolSearch, Glob
|
||||
argument-hint: "[OKR eller tall for oppdatering]"
|
||||
---
|
||||
|
||||
|
|
@ -65,7 +65,32 @@ Score = (Nåværende - Baseline) / (Target - Baseline)
|
|||
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. **Generer rapport** med anbefalte tiltak
|
||||
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
|
||||
|
||||
|
|
@ -75,52 +100,57 @@ Generer en strukturert check-in:
|
|||
3. Beslutninger som trengs
|
||||
4. Fokus neste periode
|
||||
|
||||
## Eksempel på output
|
||||
## Fila scriptet skriver
|
||||
|
||||
Når statusrapporten lagres som `.claude/okr/syklus/[id]/status.md` i second-brain-treet,
|
||||
bær filen **OKF-frontmatter** (påkrevd `type: Status` + anbefalt `title`/`description`/
|
||||
`timestamp`); rapportinnholdet under følger frontmatteren:
|
||||
`.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
|
||||
syklus: T1-2026
|
||||
title: "Status T1-2026"
|
||||
description: "Fremdrift og scoring uke 8 av 16"
|
||||
timestamp: "[ISO-8601]"
|
||||
title: Statusrapport T1-2026
|
||||
timestamp: "2026-05-01T10:00:00.000Z"
|
||||
kilde: sporing
|
||||
---
|
||||
|
||||
## OKR Status - Uke 8 av 16
|
||||
# Statusrapport T1-2026
|
||||
|
||||
### Objective: Forbedre trafikksikkerhet i skolesoner
|
||||
## Committed Key Results
|
||||
|
||||
#### 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.
|
||||
|
||||
| KR | Baseline | Target | Nå | Score | Avvik | Confidence |
|
||||
### Trafikksikkerhet og tunnelsikkerhet
|
||||
|
||||
| KR | Baseline | Target | Naa | Score | Avvik | Confidence |
|
||||
|----|----------|--------|-----|-------|-------|------------|
|
||||
| KR1: Redusere ulykker | 40 | 30 | 35 | 0.50 | Ja | At Risk 🟡 |
|
||||
| KR2: Fartshumper installert | 0 | 100 | 60 | 0.60 | Ja | On Track 🟢 |
|
||||
| Tunneler med oppgradert sikkerhetsutrustning (antall) | 12 | 20 | 17 | 0.63 | Ja | At Risk |
|
||||
|
||||
**Committed: 0 av 2 KR har nådd kravet.** Et committed KR er nådd eller ikke;
|
||||
avvikene over skal forklares, ikke rundes av til et snitt.
|
||||
## Avvik som skal forklares
|
||||
|
||||
#### Aspirational Key Results
|
||||
## Aspirational Key Results
|
||||
|
||||
| KR | Baseline | Target | Nå | Score | Avvik | Confidence |
|
||||
| KR | Baseline | Target | Naa | Score | Avvik | Confidence |
|
||||
|----|----------|--------|-----|-------|-------|------------|
|
||||
| KR3: Foreldre-tilfredshet | 60 | 90 | 75 | 0.50 | - | At Risk 🟡 |
|
||||
| Andel digitale soeknader (prosent) | 60 | 85 | 63 | 0.12 | - | At Risk |
|
||||
|
||||
**Snitt aspirational: 0.50** over 1 KR. Rundt 0.7 er forventet måloppnåelse for
|
||||
aspirational — en lav score her er ikke et avvik og skal ikke rapporteres som ett.
|
||||
|
||||
**Confidence, committed:** At Risk 🟡 — KR1 trenger fokus, KR2 ligger foran plan.
|
||||
**Confidence, aspirational:** At Risk 🟡 — KR3 flater ut.
|
||||
|
||||
**Anbefalte tiltak:**
|
||||
1. Prioriter tiltak for KR1 (sikkerhet er kritisk)
|
||||
2. Kjør brukerundersøkelse for KR3 før neste måned
|
||||
**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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue