Tre maler i references/ lovet EN udifferensiert samlet score, i strid med
separasjonsregelen i okr-framework.md: committed og aspirational maales mot
ulike standarder og skal rapporteres hver for seg.
Rot-aarsak: vektings-listen i okr-framework.md oppga "noen KR-er committed og
andre aspirational" som en GRUNN TIL AA VEKTE -- seks linjer over seksjonen som
forbyr aa aggregere de to i det hele tatt. Malene lovet et samlet tall fordi
kanon sanksjonerte det. Bulleten er fjernet og erstattet av prosa som avgrenser
vekting til innenfor EN type.
Malene foelger naa generatorens form (lib/syklus-rapport.mjs): committed binaert
mot kravet, aspirational som snitt over N KR. ASCII-boksenes bredde er bevart.
(k)-vaktens skanne-sett utvidet fra commands/+agents/ til ogsaa references/.
Eksklusjonen var KATALOG-BRED for aa skaane per-Objective-aggregeringen i
kalkulatoren, og tok team-aggregatene med seg -- samme lekse som R4. Per-Objective
gaar fortsatt klar, men paa MOENSTERET i stedet for paa katalogen.
Ny vakt (k2) mot at kanon gjenoppretter sanksjonen. Strukturell, ikke semantisk:
et kulepunkt i vektings-listen som navngir begge typene er en sanksjon i kraft av
posisjon. Mutasjons-verifisert -- identisk ordlyd flyttet INN i listen feller
vakten, som beviser at den maaler posisjon og ikke ordlyd.
Suite 328 -> 329.
`get()`-regexens verdi-gren brukte `\s*`, som inkluderer linjeskift. Enhver
key med tom rest-av-linje slukte dermed den neste ikke-tomme linja. Utslaget
var bredere enn list-keys: en tom `title:` returnerte neste keys hele linje
("type: OKR"), og et tomt `description:` dempet okf-checks anbefalt-felt-
advarsel med data som tilhorte en annen key.
Verdi-grenen strammet til `[ \t]*`. Innrykk-ankeret (`^\s*`) er urort -- det
er load-bearing for inject-okr-context.mjs:69s nestede organisasjon:-lesing.
Kontrakt-kommentaren i :13-16 lovet allerede null for list-keys; den er naa
sann i stedet for aa bli rettet ned.
Sju RED-verifiserte tester: (L1) list-key gir null - (L2) tom skalar sluker
ikke neste rot-key - (L3) tom key foran list-blokk - (L4) innrykk-toleransen
bevart, forelder gir null - (L5) tab-separert verdi - (L6) tomt anbefalt felt
demper ikke okf-check-advarselen (rootLevelGet arvet defekten) - (L7)
broedtekst-fallbacken plukker ikke list-verdi fra frontmatter.
(L7) gjor S57s latente begrunnelse maalbar: uttrekket i okf-check.mjs:125 ble
beholdt mot nettopp denne defekten, og naar fm-laget endelig taper for
list-keys er `body = raw` foerste gang en roednende mutasjon.
Mutasjons-verifisert (M1 revert, M3 anker-fjerning, M4 uttrekk-fjerning). M2
viste at (L5) ikke vokter tegnklassen -- .trim() gjor `[ \t]*` og `[ ]*`
ekvivalente -- saa testen er omskrevet til aa paastaa det den faktisk viser.
Suite 321 -> 328.
parseFrontmatter.get() er bevisst innrykk-tolerant (`^\s*key:`) fordi nestet
oppslag er load-bearing for inject-okr-context.mjs. Gaten arvet toleransen og
leste en `type:` under `metadata:` som filas type -- en utypet fil passerte
(exit 0). Rot-nivaa-kravet ligger derfor i kalleren; lib/frontmatter.mjs er
uroert.
Ny rootLevelGet() filtrerer bort innrykkede linjer og re-parser visningen med
SAMME lib, saa sitering/kommentar-stripping har fortsatt en implementasjon.
Brukt paa alle OKF-felt i checkBundle (type/title/anbefalte) + paa rootMarkers'
frontmatter-gren, som ellers ga et annet svar enn den rot-ankrede
broedtekst-fallbacken i samme funksjon.
Fire utslag av samme defekt lukket: falsk negativ paa nestet type, nestet type
FOER rot-noekkelen skygget rot-verdien (first-match), falsk positiv naar en
NESTET title bar en lenke, og et nestet anbefalt felt dempet en advarsel.
Tester (N1)-(N5) verifisert roede FOER fiksen; mutasjons-verifisert etterpaa.
Suite 316 -> 321.
H1 til # okr (fjerner README-H1 WARN), full oversettelse til nb (fjerner
README-LANGUAGE WARN, 710->51 markorord), og D12-disclosure-linjen
(org-ops, vedtatt 2026-08-01) gjort selvbaerende med generator + prosess
+ eierskapsgrunnlag (Anthropic Consumer Terms S4), etter malen i
voyage/README.md:11. Solo-maintained-blurben og forge-description-linjen
er bevisst holdt engelsk verbatim (RDS-DOC-004 delt tekst pa 13 repo;
README-DESC-gaten sjekker mot live forge-beskrivelse).
Riksrevisjon-sitatene verifisert token-for-token mot forrige versjon
(fn./s./SS uendret). repo-standard: 2 WARN -> 0 relevante (11 -> 13 OK).
Suite 315/315 gron.
Ni flater: package.json, package-lock.json (2), .claude-plugin/plugin.json,
CLAUDE.md-tittel, README-badge + versjonstabell, begge SKILL.md og
tests/package-shape.test.mjs. Versjonsvakten ble kjoert roed mot en delvis
bumpet baum foer resten fulgte, saa den er bevist aa felle drift.
CHANGELOG: [Uutgitt] konvertert til [1.9.0] og utvidet med D4-D8. Egen
"Kjent avvik"-seksjon baerer trekreview-funnet om at arkivklars lesegrense
haandheves i path-confinement-modulen, ikke i tool-lista alene - briefen
krevde et Bash-fritt sett, planen skrev det om, og briefen ble aldri oppdatert.
check-versions staar med 1 WARN (katalog-ref v1.8.2 != 1.9.0, ingen tag ennaa).
Det er den forventede tilstanden mellom bump og release; release-plugin.mjs
lukker den.
python-markdown uten "meta" parser ikke YAML-frontmatter, saa OKF-noeklene
(type/resource/timestamp/...) ble rendret som <hr/><p>type: ...</p><hr/> oeverst
i eksporten. Hver fil i OKR-treet baerer frontmatter, saa maskinlaget lakk inn i
dokumenter som skal til virksomhetens sak-arkiv.
Vakten (p1) laaser extensionen paa den faktiske kallsiden i stedet for paa prosa
om den, og er RED-verifisert mot uendret kode foer fiksen.
Gaten (repo-standard 0.1.1, klasse `plugin`) fant 6 ERROR. Alle rettet:
- README-DESC: aapningslinjen var en markedsfoeringsblurb som ikke matchet
noen annen flate. Erstattet med den kanoniske beskrivelsen, som na er
identisk i forge, katalog, plugin.json og README - det eneste stedet en
maskin kan sjekke at de fire er enige.
- INSTALL-NO-MARKETPLACE + INSTALL-NO-CLI: install-blokka var kun et
`enabledPlugins`-JSON. En agent som far "installer denne" griper etter
CLI-en og fant ingenting. Lagt til `marketplace add` + `plugin install`
(https-formen; `marketplace add` avviser ssh:// med "Invalid git URL"),
med JSON-formen beholdt som andre vei.
- HEADING-LEVEL: `### Install` under Getting Started -> `## Install` paa
foersteskjermen. Fast toppnivaa-overskrift er det lesere og agenter
skanner etter.
- HEADING-MISSING: nye `## Non-goals` (fem punkter, avledet av det koden
faktisk gjoer: ikke sporingssystem, gjoer ikke virksomhetens
vurderinger, avgjoer ikke arkivering, ikke flerbruker) og `## Changelog`
(`## Version History` omdoept, med CHANGELOG-lenka loeftet foerst).
Utenom gate-funnene, samme flate:
- Doed lenke `../../README.md#ai-generated-code-disclosure` fjernet.
Stien peker utenfor polyrepoet (`~/repos/README.md` finnes ikke) og
ankeret finnes ingen steder. Foelger repo-standard/repo-mailbox: behold
opplysningen, dropp lenka. Ryddet ogsaa gatens eneste SKIP.
- Badge-tellinger rettet mot disken: commands 14 -> 16, references
17 -> 19 (agents 7 og hooks 3 stemte).
Staaende WARN, begge med vilje:
- LINK-INTERNAL-MISSING i tests/fixtures/okf-realistic/historikk/index.md
er selve testdataen; dangling-lenka verifiseres av
tests/syklus-rapport.test.mjs:239.
- README-H1 (`# OKR for Public Sector` vs `# okr`) er en navnebeslutning
som tilhoerer operatoeren; skillen sier eksplisitt at gaten ikke avgjoer
den.
Gaten: 6 ERROR -> 0 ERROR, 0 SKIP, 11 checks passed. Suite 314/314.
1.8.2 unquotet parseExistingIndex (produsent-siden). okf-check sin
rootMarkers/pick returnerte fortsatt raa streng, saa samme fil ga to
lesninger av samme markoer:
paa disk: okf_version: "0.2" (upstreams eget eksempel, SPEC.md:773)
produsenten: 0.2 <- unquotet
checkeren: "0.2" <- raa
Catalog maalte divergensen direkte mot sin egen checker gjennom
evaluateBundle: begge implementasjonene AKSEPTERER -- avviket ligger paa
verdien, ikke paa dommen. Ingen gate rammes i dag fordi paritetskorpuset
ikke har en sitert fikstur, hvilket ogsaa betyr at paritetsgatens groenne
farge ikke dekket denne aksen: den var "ikke kjoert", ikke "som forventet".
Fiks: unquote() eksporteres fra okf-index.mjs og importeres av
okf-check.mjs -- EN regel delt, ikke to kopier som kan drifte fra
hverandre. Script-til-script-import foelger etablert moenster
(innboks-ingest.mjs:51).
Tester: 192 -> 197. Fire kjoert roede foer fiksen. Den femte
(ubalansert-vakten) var groenn foer fiksen -- raa streng bevarer "0.2
naturlig -- og er derfor mutasjons-verifisert: en graadig unquote roedner
baade produsent- og checker-vakten.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XKoS7Eb8YmAfeCf1EKZXt1
Lukker det siste av de ti F-funnene fra review-2026-07-16.md §3. F-j ble
utsatt fra 1.8.0 via Non-Goal i C-fasens brief, mens SC-85 samtidig pastod
at alle ti var lukket. review.md abc1b4f6 fant at utsettelsen kun var
registrert i gitignorede STATE.md, saa diskrepansen stod uimotsagt i repoet.
Loest ved aa faktisk lukke funnet, og registrert i CHANGELOG.
Maalt foer arbeidet (ground truth, ikke gjenbrukt fra review):
etatsstyringsmoete 0 treff
kommunelov 1 treff (metrics-library.md:245)
gevinstrealiser 1 treff (metrics-library.md:296)
ut-siden 14 linjer, en 4-raders ASCII-tabell
NY FIL skills/okr-offentlig-sektor/references/okr-kommunal-styring.md
Kommunal styring er en PARALLELL linje, ikke en variant av statlig -- egen
fil speiler det. Selvstyre uten tildelingsbrev (koml §§2-1/2-2), oekonomiplan
og kommuneplanens handlingsdel (§§14-1..14-4, jf. pbl §11-1 fjerde ledd),
kommunedirektoerens utrednings- og iverksettingsansvar (§13-1), og koblingen
4-aarig plan <-> 4-maaneders OKR. Fylkeskommunen dekket eksplisitt.
UTVIDET okr-offentlig-governance.md
Ut-siden: styringsdialogen, etatsstyringsmoetet som sentralt moetepunkt,
aarsrapportens seks faste deler med del III som anker for maaloppnaaelse og
del IV som stedet OKR-prosessen selv dokumenteres, + tre regler for aa
rapportere aspirational oppover uten at 0.7 leses som svikt.
Gevinstrealisering: eget kapittel, DFOe-metodikk mappet mot OKR, med
gevinstansvarlig som LINJErolle (= KR-eier som faktisk raar over utfallet).
Guiden merket eksplisitt som statlig, med peker til den kommunale fila.
VERIFISERING (verifiseringsplikten -- ingen maskin validerer fagprosa)
Hver domenepaastand sjekket mot offisiell kilde foer den ble skrevet:
kommuneloven kap. 14 (Lovdata), pbl §11-1 (Lovdata), aarsrapportens seks
deler (DFOes veiledningsnotat), 15. mars-fristen (Bestemmelser om
oekonomistyring i staten), etatsstyringsmoetet (DFOe hovedinstruks del D),
gevinstrealisering (DFOes veileder + Digdirs Prosjektveiviseren). Alle
lenket i fillenes kildeseksjoner.
En paastand ble FJERNET som uverifiserbar: «typisk 2-4 etatsstyringsmoeter
i aaret». DFOes hovedinstruks sier bare at antallet KAN fastsettes i
departementets hovedinstruks -- erstattet med det.
Tellinger bumpet paa alle flater som baerer dem: 17 -> 18 referansefiler
(CLAUDE.md, README.md) og 16 -> 17 scorede filer (freshen-references.md,
inkl. den nummererte lista). Verifisert mot disk: ls | wc -l = 18.
Suite 192/192 groenn. canon-consistency + reference-integrity gjoer at den
nye fila ikke redefinerer kanon (kadens/confidence/scoreband) og at alle
krysslenker resolverer paa disk.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016BDwL2pweAjLaHYZFjgYUa
Slipper `85143be` (siterte markoerverdier korrumperte begge rot-markoerene)
som egen patch. Fiksen retter en datakorrumpering i released 1.8.1 og har
ligget ETTER tag v1.8.1 -- brukere paa katalog-ref har ikke faatt den.
Bumpede flater: package.json, package-lock.json (2), .claude-plugin/plugin.json,
README badge + versjonstabell, begge SKILL.md, CLAUDE.md-tittel,
tests/package-shape.test.mjs (2). CHANGELOG-seksjon lagt til.
Suite 192/192 groenn -- ingen kodeendring i denne commiten, kun versjonsflater.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016BDwL2pweAjLaHYZFjgYUa
Upstreams eneste kanoniske eksempel med verdi (okf/SPEC.md:773) skriver
`okf_version: "0.2"` -- sitert. parseExistingIndex fanget anfoerselstegnene
raatt, UPSTREAM_VERSION_RE avviste `"0.2"` som ikke-upstream-form, og
resolveMarkers behandlet den som en layout-verdi fra foer 1.8.1-splitten:
inn: okf_version: "0.2"
ut: okf_version: 0.1 <- nedgradert til vaar konstant
okf_layout: "0.2" <- ekte upstream-versjon i feil markoer
Begge markoerene oedelagt, og dataene ikke gjenopprettelige uten aa kjenne
originalen. Bugen er i released 1.8.1-kode og traff enhver bundle som hadde
skrevet markoeren slik upstream selv viser den.
Fiks: anfoerselstegnene er YAML-strengsyntaks, ikke del av verdien, saa de
strippes ved parse -- foer verdien tolkes og foer den emitteres. Verdien
emitteres normalisert (unquoted), slik at vaar egen utskrift bestaar en
form-sjekk som kjoeres paa raa streng. Unquote er konservativ: kun et
matchende par strippes, en halv sekvens bevares uroert.
Tester: 187 -> 192. Fire nye kjoert roede foer fiksen; den femte
(ubalansert-vakten) mutasjons-verifisert roed mot en graadig unquote.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NmXFhc6v9cs4YZ5AWFnQs8
`rankOf` returnerte Infinity for urangerte navn, så to urangerte ga
Infinity - Infinity = NaN i sammenligneren. Det ga riktig resultat, men kun
fordi NaN er falsy og faller gjennom til den alfabetiske sammenligneren --
en korrekt-ved-uhell-konstruksjon som neste leser lett ville "fikset" i feil
retning. Erstattet med en endelig sentinel (MAX_SAFE_INTEGER) + begrunnelse.
Ren lesbarhet; ingen oppførselsendring. Suite 187/187 uendret.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EaQkAtvpNCLxWkjdEJ11vx
Vår alfabetiske `.sort()` i okf-index.mjs lå på akse B (ingest-spec.md:178-181),
som krever manifestets ekstraksjonsrekkefølge fra kalleren og eksplisitt forbyr
«filesystem enumeration order». Ruling-dokumentet (portfolio-optimiser-commons
docs/plan/2026-07-25-ordering-axes-ruling.md §4 @ a67a243) navngir alfabetisk
sortering som deterministisk FEIL på denne aksen: B ber ikke om *en*
deterministisk rekkefølge, den ber om *kallerens*.
Kontrakt (operatør-valgt), implementert i orderEntries():
1. navn som alt står i indeksen -> beholder linjerekkefølgen (§6 «preserved
byte for byte»)
2. nye navn med kaller-rang -> kallerens ekstraksjonsrekkefølge
3. nye navn uten kaller-rang -> alfabetisk
(3) er en dokumentert genesis-fallback, ikke en B-etterlevelse: CLI-en tar kun
en katalog og har ingen kaller-liste å tre gjennom, og alternativet — rå
readdirSync-rekkefølge — er nettopp det B forbyr. Fallbacken gjelder bare ved
genesis; så snart en indeks finnes vinner (1), så et alfabetisk valg overstyrer
aldri en rekkefølge en kaller har etablert.
§5 i rulingen: den som arver B arver §6-idempotensen med den. `order` er derfor
KUN rangering — medlemskapet leses fortsatt fra disk (akse A, :175-177), så en
sti i lista kan aldri opprette eller gjenopplive en fil, og et gate-discardet
dokument kan ikke snike seg inn i indeksen. parseExistingIndex bærer nå
linkOrder eksplisitt framfor å hvile på JS-objekters innsettingsrekkefølge.
innboks-ingest.mjs trer sin faktiske ekstraksjonsrekkefølge gjennom; uten det
ville fiksen vært et ubrukt API.
Tester: 182 -> 187. Alle fem nye verifisert røde mot mutant (orderEntries ->
`[...names].sort()`), de 39 øvrige grønne under samme mutasjon. Ende-til-ende-
testen diskriminerer ved at dokumentrekkefølgen (Zulu før Alfa) er den motsatte
av den alfabetiske.
Ingen versjonsbump; release avventer operatør-go.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EaQkAtvpNCLxWkjdEJ11vx
Tre C7-review-funn der vakten var groenn fordi den ikke KUNNE se defekten sin.
Alle tre TDD: vakten skrevet om foerst, mutasjons-verifisert roed mot ekte
filer, deretter kilden rettet. Suite 179 -> 182.
D1 (607313e3) tests/canon-consistency.test.mjs case (b) -- F-d-kadensvakten
kunne ikke feile paa den KANONISKE kadens-tabellen. teamMonthly bandt kadens-
adjektivet direkte til check-in med \s+, men etter "Maanedlig" kommer "**" og
en cellevegg, aldri whitespace; ledWeekly krevde /review/, mens den kanoniske
raden sier "statusgjennomgang". Vakten var altsaa blind paa nettopp det
artefaktet F-d produserer. Erstattet av to former med ulik struktur: prosa
(kadens + binding i SAMME klausul -- setning/komma/celle/" og ") og kadens-rad
(kadens-adjektivet alene i foerste celle, binding paa tvers av celleveggene).
Klausul-splittingen er det som skiller korrekt dobbeltrytme ("Ukentlig 15-min
check-in + maanedlig 30-min review", okr-implementation.md:181) fra motsigelse.
To nye fixture-caser holder hverandre i sjakk: (b2) de fire muterte kanoniske
linjene MAA flagges, (b3) ti legitime former MAA ikke.
D2 (7579d59c) case (g) -- agent.includes(d) er substring-containment, saa
rubrikk-dimensjonen "Outcome" var subsumert av "Outcome-fokus" og kunne
slettes uten at vakten falt. Ni av ti dims var ekte dekket; den tiende var
utestbar. Matcher naa token-grenser (uthevede listeledd + overskrifter).
Ny fixture (g2) pinner skillet.
D3 (029ef814) case (i) + commands/freshen-references.md:24 -- vakten
ekskluderte to filer permanent under en kommentar som kalte dem
"allerede-fiksede". freshen-references.md var aldri fikset; den falt utenfor
review-lista paa ni, og bar fortsatt "OKR-kontekst injiseres automatisk via
hook" -- en eksakt match for vaktens egen frase. Begge ekskluderinger fjernet
(analyse.md-ekskluderingen var dead code: fila matcher ingenting), kontekst-
blokken skrevet om til analyse.md-moensteret (oppdag fra disk via Glob).
Mutasjons-verifisering (alle fem forble groenne FOER, roede ETTER):
okr-framework.md:54 -> team maanedlig check-in -> (b) RED
okr-framework.md:55 -> ledelse ukentlig -> (b) RED
okr-framework.md:58 -> prosa "holdes maanedlig" -> (b) RED
okr-framework.md:59 -> prosa "holdes ukentlig" -> (b) RED
kvalitetssjekker-agent.md:48 slettet (Outcome) -> (g) RED
Artefakt: .claude/projects/2026-07-23-en-kanon-metodekonsolidering/review.md
CLAUDE.md:67 komprimerte retrieval-aksen til "(project preferred, else
home)", som leses som et oppslags-kortslutt. Det er feil: retrieval er en
UNION over begge røtter (SKILL.md:35,95 "always search both" / "Glob both
roots"), og prosjekt-presedensen gjelder kun ved konflikt (SKILL.md:46).
Kun org-PROFILEN kortslutter (inject-okr-context.mjs:54-56).
SKILL.md er den autoritative prosedyren og var allerede korrekt; kun den
komprimerte oppsummeringen i CLAUDE.md var usann. Funnet rapportert av
catalog, som siterer SKILL.md:94 i spec §8 og trengte å vite hvilken av
våre to filer som gjelder.
Suite: 179/179.
Rot-index.md bar en markoer som dekket to urelaterte konsepter: den upstream
OKF-versjonen bundelen sikter mot OG pluginens egen layout-revisjon. Specen
(catalog/docs/okf-second-brain/spec.md 12, log.md 2026-07-23) skiller dem i to
markoerer. Denne releasen migrerer emitteren og sjekkeren over.
- okf-index.mjs: emitterer okf_version: 0.1 (upstream, paakrevd per 3) +
okf_layout: kb-layout-2026-06 (vaar revisjon, valgfri per 12). Ny konstant
OKF_LAYOUT; OKF_VERSION baerer naa upstream-verdien. Begge rot-eksklusive.
- Migrasjonssti: en ikke-upstream verdi i okf_version FLYTTES verbatim til
okf_layout ved neste kjoering. Spec-konform okf_version roeres aldri;
eksisterende okf_layout bevares. Byte-idempotent.
- okf-check.mjs: ekkoer begge markoerene (fravaerende -> MANGLER). Rent ekko,
ingen ny haandheving -- spec 3 er ikke haandhevende paa form ennaa.
- CLI: --okf-layout er kanon. --okf-version beholdt som deprecated alias
(verdien var alltid en layout-revisjon) m/ varsel til stderr, ALDRI stdout.
Samme aliasing for generateIndexes({ okfLayout }) mot { okfVersion }.
- Doc-flater (CLAUDE.md, second-brain SKILL.md, commands/oppsett.md) beskriver
naa to markoerer der de beskrev en.
Suite 167 -> 179, alle groenne. Versjonssync 1.8.1 over alle shippede flater.
Laaser opp catalog + llm-ingestion-okf, som begge ventet paa denne migrasjonen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016pUfkQ1YyH75z9y6RBaBHG
Lukker de fire release-relevante MAJOR-funnene fra /trekreview (S33). Alle TDD
roed -> groenn, ingen fiks landet uten en test som feilet foerst. Suite 163 -> 167.
R1 (af16d5e4) hooks/scripts/coaching-hook.mjs:83 -- LEVENDE REGRESJON innfoert av
1.8.0. Denne releasen skrev status-malen (commands/sporing.md:86-88) om til den
kanoniske skalaen On Track/At Risk/Off Track, mens hooken fortsatt talte kun
/i fare|blokkert/i over tabellrader. En status generert under 1.8.0 ga derfor
atRiskCount = 0 og SessionStart-nudgen sluttet stille aa utloese seg. Hooken
teller naa de kanoniske etikettene; de to norske er BEHOLDT som bakover-
kompatibilitet for status-filer skrevet foer 1.8.0. Nudge-teksten bruker samme
kanoniske vokabular. Ny testcase mates av malen slik den faktisk genereres i dag;
den eksisterende casen beholder gammelt vokabular og daekker legacy-stien.
R2 (7ec575be) F-i-omskrivingen ga hver kommando en Kontekstbevissthet-blokk som
INSTRUERER Glob, men allowed-tools ble kun utvidet i kaskade.md. Glob lagt til i
export, gap, governance, innfoering, kvalitet, moeter, skriv, sporing. Ny vakt-
case (k): nevner BODY verktoeyet, maa frontmatter deklarere det (13 kommandoer
instruerer Glob; alle 13 dekket). Case (i) grepper kun etter fjernede fraser og
kunne ikke fange dette.
R3 (5e61ae0d) tests/package-shape.test.mjs asserterte KUN package.json -- som er
private:true og dermed den ene flaten som aldri shipper. En delvis bump ville
shippet groenn. Ny versjonssync-case dekker .claude-plugin/plugin.json, README-
badgen og begge SKILL.md, med forventet verdi UTLEDET fra package.json (ett sted
aa endre ved neste bump). Mutasjonsbevist: hver av de fire flatene tilbakestilt
til 1.7.1 en om gangen -> casen roed i alle fire tilfeller.
R4 (ccff16e1 + 231c53fc) Tre parallelle confidence-etikettsett overlevde F-c:
fremdriftssporer-agent.md:68 ("Paa sporet / I fare / Blokkert"), :98
("Confidence: [Hoey/Medium/Lav]" -- en annen akse: stoerrelse, ikke sannsynlighet)
og SKILL.md:48 ("blocked"; kanonisk er "off track"). Alle tre erstattet med
referanse til kanon (okr-framework.md:389-392). sporing.md og agenten den
delegerer til svarer naa i samme vokabular. Vakt-case (a)/(b) skanner naa samme
sett som (d) allerede brukte (+ agents/ + SKILL.md), samlet i canonScan(). Ny
case (a2) fanger etikettsett skrevet som bullet eller mal-linje -- tabell-
signaturen alene fanget dem ikke, og det var nettopp formen driften overlevde i.
Divergens gjenkjennes STRUKTURELT (skraastrek-enumerasjon av >= 2 etiketter, med
>= 1 ikke-kanonisk), saa loepende prosa som "For KR i fare" og "Blokkert av
eksterne faktorer" ikke gir falske positive. Verifisert: roed-listen var noeyaktig
de 3 kjente linjene, ingen andre.
CHANGELOG/README: vakt-antall 13 -> 15 cases, suite 149 -> 167, og de fire
fiksene lagt inn under [1.8.0] (Added + Fixed). Ingen versjonsbump.
GJENSTAAR fra reviewet (3 MAJOR, IKKE i denne bolgen): 607313e3 F-d-kadens-
moensteret kan ikke feile paa den kanoniske kadens-tabellen; 029ef814
freshen-references.md:24 baerer fortsatt en foreldet kontekstblokk og vaktens
exclude-kommentar kaller fila feilaktig "allerede-fikset" (den er utenfor
1.8.0-scope by design, jf. ba91fc2 -- kommentaren er usann, ikke ekskluderingen);
7579d59c "Outcome" er utestbar i 10-dims-casen pga. substring-containment.
Verify: node --test --test-reporter=tap tests/*.test.mjs -> 167 pass / 0 fail.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016pUfkQ1YyH75z9y6RBaBHG
Step 14 (Wave 6), siste steg i fase C3. Alle versjonsflater 1.7.1 -> 1.8.0:
plugin.json:3, package.json:3, package-lock.json:3+9, CLAUDE.md:1, README.md
badge, SKILL.md x2. Ny Keep-a-Changelog-seksjon [1.8.0] + README-historikkrad
som oppsummerer F-a..F-i, score-grenser, konsistensvakten og C6-markeds-
oppdateringen fra Steps 1-13.
TDD: package.json bumpet foerst -> package-shape.test.mjs case 1 gikk ROED
(expected 1.7.1, actual 1.8.0) -> assertion + header-kommentar oppdatert til
1.8.0 (minor-lane C: En kanon) -> GROENN. Historiske "B1/B2 (1.7.1)"-
provenanskommentarer i tester og historikkrader for 1.7.1 er urort.
To presisjonsfikser tatt inn fra S31-funn (begge i filer Step 14 allerede rorer):
- CLAUDE.md:21 sa "score the 16 domain reference files". Fasit: 16 AV 17 scores;
okr-quality-rubrics.md er ekskludert (sirkulaer - den er selv scorings-
instrumentet). Skrevet i samme presise form som README:150.
- CLAUDE.md:73 pekte paa lib/innboks-convert.mjs. Modulen har ALDRI eksistert
(git log --all paa stien: tom; adapterne har ligget i lib/convert/ siden
a807ee2). Rettet til lib/convert/index.mjs. Samme feilsti stod i CHANGELOG
1.7.0-noten (linje 34) og er rettet der ogsaa: en dokumentert modul som aldri
fantes er en usann paastand, ikke historisk provenans.
CHANGELOG-datoen er satt til 2026-07-25 (i dag). Faller C7-releasen paa en
senere dato, maa datoen justeres da.
Verify: node --test --test-reporter=tap tests/*.test.mjs -> 163 pass / 0 fail.
grep -rc "1.7.1" plugin.json package.json CLAUDE.md -> 0/0/0.
9 filer endret = Manifest expected_paths 1:1.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016pUfkQ1YyH75z9y6RBaBHG
C6 markedsclaim -> verifisert-bruker-disiplin (README):
Paastanden "increasingly by Norwegian public sector organizations like NAV and
FINN.no" hadde ingen kilde i kunnskapsbasen. Erstattet med fire adoptorer som
ALLE har en offentlig kilde i okr-sources.md par. 4 (Digdir, NAV-team, Oslo
Origo, FINN.no) + eksplisitt setning om at usourcede virksomheter ikke navngis.
Skatteetaten/Entur/Politiet er fortsatt IKKE verifisert og navngis derfor ikke.
okr-sources.md par. 4: NAV manglet helt som oppslag selv om README paastod
bruken. Lagt til med first-party-kilde (aksel.nav.no produktbloggen), scopet
til team-/produktnivaa - etatsnivaa-OKR er ikke dokumentert.
okr-sources.md par. 7 (ny): alternative rammeverk med verifisert attribusjon.
- NCT (Narrative, Commitments, Tasks) tilskrives Ravi Mehta / Reforge, med
eksplisitt advarsel om den vanlige feilattribusjonen til Radical Focus 2. utg.
- Evidence-Based Management -> 2024-guiden. Kun det verifiserte "what's new"
er gjengitt (KVA-til-maaletype-kobling, Input/Impact som egne maaletyper,
klargjorte KVA-beskrivelser). Mission/Vision-innrammingen fra raarapporten
er UTELATT - ikke bekreftet av Scrum.orgs egen What's-New.
Sist oppdatert-markoer bumpet Januar -> Juli 2026.
align, don't cascade (kaskade.md + kaskadebygger-agent.md):
Begge flater laerte mekanisk kaskadering ("et overordnet KR blir teamets
Objective"). Rammet om til alignment via lineage: org-KR er INPUT til teamets
Objective, teamet omformulerer og eier formuleringen, team-KR maaler teamets
eget bidrag, og manglende paavirkbarhet rapporteres som gap i stedet for et
konstruert bidrag. Individ-OKR eksplisitt utelukket paa begge flater.
NAV-praksisen er brukt som norsk anker for doktrinen.
F-i (kaskade.md): siste gjenstaaende foreldede kontekstblokk skrevet om til
post-1.6.0-moensteret (analyse.md:13-20). Glob lagt til i allowed-tools siden
blokken naa instruerer Glob.
Planavvik (premiss-verifisering): Step 13 sa README "16" -> "17 domenefiler".
Ground truth motsier premisset - freshen-references.md scorer 16 AV 17 filer
(okr-quality-rubrics.md er eksplisitt ekskludert som sirkulaer). "17" ville
gjort README feil. Skrevet presist i stedet: "16 of the 17 ... the quality
rubric itself is excluded". Planens Verify (grep -c "16 domain" -> 0) passerer.
Vakt-case (i) GROENN. Alle 13 konsistens-cases groenne; suite 163/163/0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016pUfkQ1YyH75z9y6RBaBHG
F-i: seks kommandoer paastod fortsatt at hooken for-injiserer en fil-liste.
Skrevet om til post-1.6.0-moensteret (analyse.md:13-20 / governance / kvalitet):
disk-oppdagelse via Glob + peker til okr-second-brain-search for bredere wiki-
kontekst + kjerne-profil for organisasjon/syklus.
- sporing.md: blokk + den stale "Automatisk OKR-lasting"-underseksjonen UTENFOR
headeren fjernet (enumererings-logikk, ikke bare header-paastand)
- skriv.md, moter.md, gap.md, export.md, innforing.md: blokk
F-c (sporing): egne confidence-nivaaer ("Paa sporet / I fare / Blokkert" med
trend-kriterier) + et fjerde vokab ("Confidence level: Medium") -> refererer den
kanoniske confidence-tabellen i okr-framework.md; trend er naa ETT innspill, ikke
en definisjon. Eksempel-output bruker samme kanoniske merkelapper.
F-d (moter): check-in-motet stod "Ukentlig eller annenhver uke, 15-30 min,
Team + leder" -> kanonisk "Ukentlig, 15 min, Team", med eksplisitt note om at den
maanedlige statusgjennomgangen for ledergruppen er et EGET mote (annet publikum).
Verifisert konsistent uten endring: innforing.md:117-118 (ukentlige check-ins +
maanedlig review med sponsor) foelger allerede kanon. 1:1-kadensen i moter.md
er CFR-styrt (cfr-framework.md), ikke dekket av kadens-tabellen - urort.
Vakt-case (i): 8/9 kommandoer lukket. Gjenstaaende treff er KUN kaskade.md
(Step 13, Wave 5); freshen-references.md er utenfor 1.8.0-scope by design.
Suite 163/162/1.
Kadens-drift rettet mot den kanoniske kadens-tabellen i okr-framework.md
(ukentlig team-check-in / maanedlig statusgjennomgang til ledergruppen):
- meeting-guides.md: moete 2 var "Maanedlig OKR Check-in" med publikum Team
-> "Ukentlig OKR Check-in (team)", 15 min, agenda-timing komprimert
- okr-cheatsheet.md: syklus-diagram + Quick Tips baerer naa begge rytmer
- dfo-okr-mapping.md: kadens-raden viste kun maanedlig check-in
- SKILL.md: "monthly check-ins" -> begge rytmer + peker til kanon
F-c: meeting-guides definerte egne confidence-terskler som andel av
forventet (over 70 / 50-69 / under 50 prosent) -> refererer naa den
kanoniske confidence-tabellen i okr-framework.md (sannsynlighet for
aa naa target), ingen egne terskler.
okr-arshjul.md verifisert konsistent uten endring (ukentlig-leir:
linje 57-58, 171, 174). SKILL.md versjonslinje uroert (Step 14).
Vakt-case (b) FLIPPET GROENN. Suite 163/162/1 - gjenstaaende roed
er (i), som lukkes i Wave 5 / Step 13.