okr/CHANGELOG.md
Kjell Tore Guttormsen 44ceec7205 fix(okr): C7b remediering R1-R4 (release-relevante review-funn for 1.8.0)
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
2026-07-25 12:33:55 +02:00

24 KiB
Raw Blame History

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.8.0] - 2026-07-25

Minor-release «Én kanon»: metodekonsolidering av MAJOR-/metode-funnene fra dyp review 2026-07-16 (§3). Ingen nye kommandoer, agenter eller referansefiler — prinsippet er ÉN kanonisk definisjon per metodebegrep, der konsumentflater (kommandoer, agenter, øvrige referansefiler) refererer kanon i stedet for å redefinere den. Konsolideringen er låst av en ny strukturell konsistensvakt, ikke bare av prosa.

Added

  • Kanon-konsistensvakt (tests/canon-consistency.test.mjs, 15 cases: 12 vakt-cases — F-a…F-i, score-grenser, divergerende etikettsett og Glob-dekning — pluss 3 parser-sanity-cases) — deterministisk, offline, zero-dep. Asserter strukturelt at hvert metodebegrep har én kilde: nøyaktig én confidence-tabell (kanonisk i okr-framework.md), ingen team-check-in med månedlig kadens og ingen ledelsesreview med ukentlig, ingen score→modenhet-avledning, ingen parallelle scorebånd utenfor kvalitetsrubrikken, kvalitetssjekker-agenten dekker alle 10 rubrikk-dimensjoner, antipattern-antall utledet av dynamisk telling (aldri hardkodet tall), ingen foreldede kontekst-injeksjons-fraser i commands/. Skrevet RED-først (Step 1); alle 10 vakt-cases flippet grønne underveis i Wave 1-5.
  • Referanse-integritet dekker skills-relative lenker (tests/reference-integrity.test.mjs) — SKILL.mds 17 references/<fil>.md-lenker og krysslenkene mellom referansefilene valideres nå mot disk, slik at de nye krysslenkene konsolideringen innfører ikke kan råtne stille.
  • Testsuite 149 → 167 cases, alle grønne.
  • okr-sources.md § 7 «Alternative rammeverk» — NCT (Narrative, Commitments, Tasks) attribuert til Ravi Mehta / Reforge, med eksplisitt advarsel mot den vanlige feilattribusjonen til Radical Focus 2. utg.; Evidence-Based Management → 2024-guiden, der kun det verifiserte «what's new» er gjengitt.
  • Vaktutvidelser etter post-implementasjons-review (/trekreview, 2026-07-25): kanon-skanningen i case (a)/(b) bruker nå samme sett som case (d) allerede gjorde — references/ + commands/ + agents/ + SKILL.md — slik at etikett-drift i agentene og skillen ikke lenger er usynlig for vakten. Ny case (a2) fanger parallelle confidence-etikettsett skrevet som bullet eller mal-linje (tabell-signaturen alene fanget dem ikke), ny case (k) krever at enhver kommando som instruerer Glob også deklarerer det i allowed-tools, og en ny versjonssync-case i tests/package-shape.test.mjs asserterer at .claude-plugin/plugin.json, README-badgen og begge SKILL.md bærer samme versjon som package.json — tidligere ble kun package.json sjekket, altså den ene flaten som er private: true og aldri shipper.
  • Avveiningsveiledning i kvalitetsrubrikken for KR som treffer BÅDE Outcome- og Uavhengighet-ankeret (samfunnseffekt-klassen) — tidligere manglet en done-condition for den kollisjonen.

Changed

  • «Align, don't cascade» (commands/kaskade.md, agents/kaskadebygger-agent.md) — 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 måler teamets eget bidrag, og manglende påvirkbarhet rapporteres som gap i stedet for et konstruert bidrag. Individ-OKR eksplisitt utelukket på begge flater.
  • committed = forpliktelse OG påvirkbarhet — ny kanonisk regel i okr-framework.md: committed er forbeholdt utfall teamet rår over, stokastiske samfunnsutfall er aspirational. styringsrådgiver-agent.mds regel «Må-krav → Committed OKR, score 1.0» og governance-eksempelet er skrevet om tilsvarende: ukontrollerbart tildelingsbrev-mål → aspirational/delt KR med committed leading-tiltak under, den kontrollerbare leveransen → committed.
  • Uavhengighet-ankeret i okr-quality-rubrics.md: «teamet kontrollerer utfallet direkte» → «kan påvirke vesentlig» (influence, not control) — ankeret straffet ikke lenger legitime samfunnseffekt-KR.
  • Milepæl-/binære KR omtales nå konsistent som dokumentert unntak fulgt av outcome-KR (framework, skriv.md, kvalitet.md) — tidligere unntak i én flate og antipattern i en annen.
  • «Kontekstbevissthet»-blokkene i 9 kommandoer skrevet om til post-1.6.0-mønsteret (oppdag på disk via Glob + invoker okr-second-brain-search for bredere wiki-kontekst + kjerne-profil for organisasjon/syklus). Påstanden om at hooken pre-injiserer en fil-liste er borte — den sluttet å være sann i 1.6.0. Stale enumererings-logikk utenfor headeren (sporing.mds «Automatisk OKR-lasting») fjernet.
  • Markedsclaims kildebelagt (README.md) — adoptorer navngis kun når de har offentlig kilde i okr-sources.md § 4 (Digdir, NAV-team, Oslo Origo, FINN.no), med eksplisitt regel om at usourcede virksomheter ikke navngis.

Fixed

  • F-c — ÉN confidence-tabell: den sannsynlighetsbaserte tabellen i okr-framework.md er merket kanonisk og er nå eneste sannhetskilde. Fjernet konkurrenter: kalkulatorens egen sjekkliste + absolutt-terskel, meeting-guides.mds andel-av-forventet-terskler, sporing.mds egne nivåer pluss et fjerde vokabular («Confidence level: Medium»). Trend er nå ETT innspill til confidence, ikke en definisjon.
  • F-d — ÉN kadens-doktrine: selvmotsigelsen «Månedlig check-in» mot «Ukentlige team-check-ins» er løst med en kanonisk kadens-tabell med publikum-kolonne (ukentlig team-check-in à la Wodtke + månedlig statusgjennomgang for ledergruppen à la Doerr). Konsumentene rettet til publikum-korrekt form: meeting-guides.md, okr-cheatsheet.md, dfo-okr-mapping.md, SKILL.md, sporing.md, møter.md, innføring.md. 1:1-kadensen er CFR-styrt og urørt.
  • F-a — score→modenhet-avledningen fjernet (analyse.md «Modenhetsbane», trendanalytiker-agent.md «Modenhetsvurdering» inkl. instruksen om å oppdatere org-profilen): OKR-score måler måloppnåelse, ikke organisasjonsmodenhet. 7-dimensjons prosess-modenhet i innføring.md er eneste modenhetsmåler. Erstattet med et trendsignal som holder: snitt > 0.85 over 2+ sykluser på aspirational/stretch-KR = mulig sandbagging (committed-KR ekskludert). Selvrapportfeltet modenhetsnivaa er urørt.
  • F-e — kvalitetsvurdering ankret i rubrikken: kvalitet.mds inline-rubrikk og eget 8-10-scorebånd er fjernet til fordel for anker→skala i okr-quality-rubrics.md; kvalitetssjekker-agent.md dekker nå alle 10 dimensjoner (tidligere 6).
  • F-g — ekte antipattern-kategorier: oppdiktede kategorinavn i analyse.md og trendanalytiker-agent.md erstattet med de fem faktiske (Formulering, Prosess, Kultur, Struktur, Ledelse).
  • F-11 — committed-forventning 0.9-1.01.0, konsistent med «Forventer 100 %».
  • Score-grenser dokumentert (okr-calculator.md + fremdriftssporer-agent.md): kapping til [0, 1.0] ved over-/underoppnåelse, og Target == Baseline eller 0 målbare KR → score udefinert, ikke 0.
  • NAV manglet som kildeoppslag i okr-sources.md selv om README påstod bruken — lagt til med first-party-kilde (aksel.nav.no), scopet til team-/produktnivå siden etatsnivå-OKR ikke er dokumentert.
  • /okr:freshen-references-omtalen presisert (README + CLAUDE.md): kommandoen scorer 16 AV 17 domene-referansefiler — kvalitetsrubrikken er ekskludert fordi den selv er scoringsinstrumentet.
  • Feil modulsti i dokumentasjonen: lib/innboks-convert.mjs (CLAUDE.md og 1.7.0-noten under) → lib/convert/index.mjs. Modulen har aldri hatt det navnet; konverterings-adapterne har ligget i lib/convert/ siden 1.7.0.
  • SessionStart-nudgen for KR i fare var død under 1.8.0 (hooks/scripts/coaching-hook.mjs): status-malen ble i denne releasen skrevet om til den kanoniske skalaen (On Track / At Risk / Off Track), mens hooken fortsatt talte kun «i fare» og «blokkert» — en status-rapport generert under 1.8.0 ga derfor 0 treff og nudgen sluttet stille å utløses. Hooken teller nå de kanoniske etikettene; de norske er beholdt som bakover-kompatibilitet for status-filer skrevet før 1.8.0. Nudge-teksten bruker også kanonisk vokabular.
  • F-c-resten i agents/ og SKILL.md: tre parallelle confidence-etikettsett overlevde konsolideringen — «På sporet / I fare / Blokkert» og «Confidence: [Høy/Medium/Lav]» (en helt annen akse: størrelse, ikke sannsynlighet) i fremdriftssporer-agent.md, og «on track / at risk / blocked» i SKILL.md (kanonisk er «off track»). Alle tre erstattet med referanse til den kanoniske tabellen. sporing.md og agenten den delegerer til svarer nå i samme vokabular.
  • Åtte kommandoer instruerte Glob uten å deklarere det: F-i-omskrivingen ga hver kommando en Kontekstbevissthet-blokk som bruker Glob, men allowed-tools ble kun utvidet i kaskade.md. export.md, gap.md, governance.md, innføring.md, kvalitet.md, møter.md, skriv.md og sporing.md har nå Glob i allowed-tools.

[1.7.1] - 2026-07-17

Patch-lane-release: restsanering av MINOR/hygiene-funn fra dyp review 2026-07-16 (B1 + B2). Ingen nye features.

Added

  • Referanse-integritetstest (tests/reference-integrity.test.mjs) — globber alle ${CLAUDE_PLUGIN_ROOT}-stier i commands/agents og asserter at målet finnes og er shippbart (aldri .claude/). Fanger død-referanse-klassen permanent (B1).
  • Testsuite 135 → 149 cases — nye cases per B2-fiks (rød-grønn TDD), inkl. bevis for at eksisterende config OVERLEVER circuit-breaker-fallback.

Fixed

  • KB/doc-hygiene (B1): 2 døde referanser lukket, kryssreferanse-seksjoner i de 5 isolerte KB-filene, «Sist oppdatert»-markør på alle 17 referanser, «19 → 20 antipatterns» rettet 4 steder, «15. oktober» → «tidlig oktober» (3 steder), garblet prognoseformel rettet mot kalkulator-kanon, typonits, README badge/hooks-tabell. BACKLOG.md foldet inn i docs/roadmap.md.
  • Slugify translittererer æ → ae / ø → oe (lib/innboks-split.mjs) — «Økonomi» ga tidligere konomi (datatap i filnavn).
  • Beskrivende feil ved manglende sourceMtime (lib/innboks-frontmatter.mjs) — navngir opsjonen i stedet for naken RangeError; faller aldri tilbake til veggklokka (idempotens bevart).
  • okf-index CLI: eksplisitt --okf-version bumper nå eksisterende rot-index (før vant alltid eksisterende verdi); flagget godtas før eller etter rot-argumentet; manglende flagg-verdi gir bruksfeil (exit 2) i stedet for krasj.
  • Ikke-destruktiv circuit-breaker (M4) (scripts/write-org-profile.mjs) — fallback til .claude/okr.local.md MERGER inn i eksisterende fil (ny profil først i samme frontmatter-blokk, first-match vinner) i stedet for å overskrive full prosjekt-config (syklus-id, onboarding, Linear).
  • Intern ----sanering (scripts/compose-org-profile.mjs) — en fence-linje inne i profil-bodyen trunkerer ikke lenger frontmatter-blokken den flate parseren leser.
  • Presis at-risk-telling (M1/m1) (hooks/scripts/coaching-hook.mjs) — teller status-markerte tabellrader («I fare»/«Blokkert»), ikke råforekomster i forklaringstekst og prosa.
  • Topic-guard bøyningsformer (hooks/scripts/inject-okr-context.mjs) — «målene»/«målet»/«måla» treffer nå OKR-mønsteret.
  • BOM/CRLF-toleranse (lib/frontmatter.mjs) — Windows-produserte filer (UTF-8 BOM + CRLF) rapporteres ikke lenger falskt som «mangler type».

Security

  • sanitizeEntry-herding (scripts/okf-index.mjs) — stripper nå også C1-kontrolltegn, zero-width (ZWSP/ZWNJ/ZWJ/LRM/RLM), bidi-embedding/-override/-isolater og Unicode tag-blokken (usynlig smugle-kanal for instruksjonstekst) fra index-entries.

[1.7.0] - 2026-07-17

Added

  • /okr:innboks — innboks-ingestion — dropp dokumenter i .claude/okr/innboks/ og ingest dem til kunnskapstreet i ett sveip via scripts/innboks-ingest.mjs. Pipelinen er deterministisk (ingen LLM i kjernen): konvertering (txt/md/docx/eml/pdf) → heading-splitting → OKF-frontmatter med provenans-markør kilde: innboks → type-basert ruting (Tildelingsbrevstrategisk-kontekst/ osv.) → per-dokument sikkerhetsgate (okf-check --strict-ingest). Et dokument som feiler gaten discardes ALENE (staging + per-dokument rollback) med ryddig rapport; relasjoner bygges etter gaten, blant overlevende. Ikke-destruktivt (originaler blir i innboksen, sha256-verifisert) og idempotent by construction (timestamp = kildens mtime → re-kjøring på uendret input er byte-identisk no-op).
  • Nye moduler: lib/convert/index.mjs (pure-JS-adaptere; ukjente filtyper skippes med beskjed), lib/innboks-split.mjs, lib/innboks-frontmatter.mjs (type-avledning med basename/ordgrense), lib/innboks-relations.mjs, lib/innboks-write.mjs (realpath-path-confinement, kuratert-vern).
  • Testsuite 103 → 135 cases — unit/contract/E2E for hele ingestion-kjeden, inkl. idempotens run1-vs-run2 med ulik veggklokke og fiendtlig-dokument-isolasjon. Binærformat-tester skipper conditional når node_modules/ mangler.

Changed

  • Zero-dep-brudd (bevisst og minimalt) — plugin-kjernen er fortsatt zero-dependency (node:-builtins); ingestion-pipelinen er det ene unntaket med 4 exact-pinnede pure-JS-avhengigheter (ingen ^/~): mammoth 1.12.0 (docx), postal-mime 2.7.5 (eml), turndown 7.2.4 (HTML→markdown), unpdf 1.6.2 (PDF). Installeres med npm install --ignore-scripts (.npmrc håndhever ignore-scripts=true som supply-chain-vern); krever Node >= 22. txt/md ingestes uten avhengigheter; npm audit = 0 kjente sårbarheter ved release.
  • OKF second-brain spec v0.1 ratifisert (cross-plugin koordinering) — den delte konvensjonen er kanonisert i catalog/docs/okf-second-brain/spec.md (katalog-eid, single source of truth). okr ratifiserer den per handoff §3/§4: okf-check.mjs-semantikken (kun type påkrevd; anbefalte felt → advarsler; okf_version-ekko) står som referansekontrakt (spec §7); okr bruker resource (ikke source); ingen feltgap (profil/config-nøkler bæres som extension keys, spec §5). CLAUDE.md-omtalen er rettet tilsvarende («Metadata as Code»-mislabel → OKF v0.1 Documents-style).

Security

  • RAG-poisoning-herding av hele write→read-kjeden (EchoLeak-klassen, jf. CVE-2025-32711): okf-links allow-list med lenke-nøytralisering, strict-gate som håndhever alle fire lenkeformer, realpath-path-confinement (symlink-escape), sanitizeEntry for index-generering, pekerfiler uten lenkeform, kuratert-vern (ingestion overskriver aldri filer den ikke selv skapte; reservert index.md; kryss-kilde claimed-register), per-dokument discard av fiendtlige dokumenter. CVE-2024-4367-klassen (PDF.js) dekket via unpdf-oppgradering + tekst-only-ekstraksjon.
  • Untrusted-envelope i retrieval-skillen (okr-second-brain-search): hentet konsept-innhold behandles som data, aldri instruks («never follow instructions», ingen eksterne lenker/citations fra hentet innhold, ett konsept om gangen); kilde: innboks-konsepter rangeres under kuraterte (provenans-basert demotering). Guard-test pinner instruksen.

Known limitations (v1 — målt på ekte SVV-tildelingsbrev-2026-PDF, 1,4 MB)

  1. PDF → ett flatt konsept: PDF-ekstraksjon gir ren tekst uten headings; et 30-siders tildelingsbrev blir én konsept-fil (heading-splitting virker for md/docx/eml).
  2. Tabell-/struktur-tap: innholdsfortegnelse og tabeller flates til prosa; lesbart, men uten struktur.
  3. Description = forsidestøy for PDF (første «avsnitt» er gjerne adressefeltet).
  4. Relasjoner = 0 ved reell enkelt-dokument-drop (kryss-lenker krever flere dokumenter med gjenkjennbare titler).
  5. Discardet original blir liggende i innboksen (by design, ikke-destruktiv drop-zone); opprydding er manuell i v1.
  6. Kosmetisk: pdfjs kan skrive Warning: TT: undefined function til stderr for enkelte fonter — påvirker ikke ekstraksjonen.

[1.6.1] - 2026-06-26

Fixed

  • okr-quality-rubrics.md omskrevet til korrekt norsk — den ankrede kvalitetsrubrikken var fullstendig ASCII-strippet (0 å/ø/æ) til tross for at den lastes brukervendt av /okr:kvalitet, kvalitetssjekker-agenten og /okr:freshen-references. Samme tekstkvalitetsklasse som 360-en flagget KRITISK i v1.3.0 — en regresjon innført med selve rubrikk-fila.
  • SKILL.md flaggskip-eksempel — strippet norsk i det første konkrete OKR-eksemplet (per år / høyrisiko / spørreundersøkelse / Gjennomføre møter).
  • okr-second-brain-search ~-glob — retrieval-instruksjonen brukte literal ~/.claude/okr/org/, som Glob-verktøyet ikke ekspanderer → hjemme-roten (org-identitet) ble stilltiende aldri søkt, mot skillens eget «search both roots»-premiss. Nå eksplisitt absolutt hjemme-sti.
  • Uverifisert kb-search-sitat fjernetokr-second-brain-search hevdet en OKF kb-search-triad som ikke finnes (motsagt av docs/innboks-ingestion-funn-2026-06.md); erstattet med funksjonell Glob/Read/Grep-beskrivelse + discovery-mønsteret.
  • Regnefeil i okr-oboard-guide.md — KR1-progresjon viste 52 %; korrekt er 65 % per filens egen formel (startcurrent)/(starttarget).

Notes

  • Patch utløst av docs/evaluering-360-2026-06-26.md (360-re-evaluering på v1.6.0): C+ → A. Systemiske funn (KB-kryssreferanser, «Sist oppdatert»-markører) er bevisst utsatt.

[1.6.0] - 2026-06-26

Added

  • okr-second-brain-search-skill — on-demand retrieval over en OKF-kompatibel markdown-wiki (.claude/okr/ prosjekt + ~/.claude/okr/org/ home) via native Glob/Read/Grep, i fri chat OG under /okr:*-kommandoer. Semantisk dekomponering med opptil 3 query-variasjoner; ingen for-injeksjon av alt innhold.
  • OKF-frontmatter på alle kontekstfiler — org-profil (type: Organisasjonsprofil) og tre-skrivere (type: Tildelingsbrev/Virksomhetsplan/Overordnede OKR/OKR/Retrospektiv/Status) emitterer ekte OKF-schema (Title-Case type + resource/title/description/tags/timestamp).
  • scripts/okf-index.mjs — genererer index.md per nivå (verbatim OKF-format * [title](link) - description) per bundle-rot.
  • scripts/okf-check.mjs — validerer at hver konsept-fil bærer type:; rapporterer okf_version per rot.
  • scripts/compose-org-profile.mjs — bygger nestet org-profil-YAML med top-level OKF-nøkler før pipe til write-org-profile.mjs.
  • lib/frontmatter.mjs — delt frontmatter-parser/skriver; konsoliderer duplisert parse-logikk i begge hooks og fikser comment-leak på usiterte verdier.

Changed

  • inject-okr-context.mjs splittet — for-injiserer ikke lenger hele kontekstfil-enumerasjonen; emitterer kjerne-profil + én resolvert peker til index.md (< 512 B, uavhengig av filantall). Retrieval skjer on-demand via skill.
  • /okr:analyse leser historikk/ direkte (Glob/Read) etter hook-splitten.
  • Begge hooks ruter frontmatter-parsing gjennom delt lib/frontmatter.mjs.

[1.5.0] - 2026-06-26

Added

  • /okr:help — full oversikt over alle kommandoer (13), agenter (7) og anbefalt syklusarbeidsflyt.
  • /okr:export — eksporter OKR-leveranser (kvalitetsvurdering, gap-matrise, statusrapport, retrospektiv) til print-klar PDF via scripts/export-pdf.py (weasyprint).
  • /okr:freshen-references — KB-selvevaluator: scorer de 16 referansefilene mot en ankret dekning-/kvalitet-rubrikk og currency-poller offentlige kilder.
  • Ankret kvalitetsrubrikk (references/okr-quality-rubrics.md, 10 dimensjoner × 5 forankrede nivåer) wiret inn i /okr:kvalitet, kvalitetssjekker-agenten og SKILL.md.
  • Atomisk org-profil-skriving: scripts/write-org-profile.mjs skriver maskin-global org-identitet til ~/.claude/okr/org/profil.md (temp + renameSync), med circuit-breaker til prosjekt-lokal .claude/okr.local.md ved hjem-skrivefeil. Fullfører hybrid org-kontekst (skrive-sti) startet i 1.4.0.
  • Node-test-dekning: nye fixturer for org-profil-skriving, coaching-hookens fase-deteksjon og UserPromptSubmit emne-guard (17 tester totalt, grønn).

Changed

  • Metrics-library utvidet med verifiserte kryss-sektor offentlig-metrikker (EGDI m.fl., kildebelagt; udokumentert eForvaltningsindeks fjernet).
  • Coaching-hook fikk en klokke-seam for testbar fase-deteksjon (early/mid/late).
  • UserPromptSubmit emne-guard: injiserer kun OKR-kontekst på relevante prompts (tvil → injiser).

[1.4.0] - 2026-06-24

Added

  • Fase 1 — Domenedybde og kildeintegritet: tertial-korreksjon (DFØ interim-/årsrapport-regime), OKR posisjonert som lag oppå mål- og resultatstyring (økonomireglementet §4), tillitsreform-seksjon, «målforskyvning» som norsk antipattern, reelle norske offentlig-sektor-referanser (Digdir/Oslo/Ruter/Knowit) med proveniens.
  • Fase 2 — UX-koherens og kommando-/agent-modning: Kontekstbevissthet-blokk i /okr:møter (9/10 kommandoer; oppsett bevisst unntatt), /okr:gap vs /okr:governance disambiguert, negative triggere + direkte org-lesing i alle 7 agenter, 6 referansefiler wiret inn ved bruksstedet, template↔onboarding skjema-paritet.
  • Hybrid org-kontekst-lesing (lese-sti): inject-okr-context.mjs resolverer prosjekt-lokal .claude/okr.local.md → maskin-global ~/.claude/okr/org/profil.md (mest-spesifikk-vinner; forward-compat, migrasjon kommer i Fase 3). node:test-fixtur for hooken.

Changed

  • Metodikk-presisjoner (Intel/Locke-fakta, committed+aspirational ikke snittet sammen), «Kvartalsreview» → «Syklusreview».

[1.3.2] - 2026-06-24

Fixed

  • Fjernet loopende Stop-hook (type prompt → enhver output blokkerte stop → re-invoke-loop).

[1.3.1] - 2026-06-23

Fixed

  • Fakta- og troverdighetssanering: scoringsterskel harmonisert (0.60.7, Google/Doerr), fiktiv eksempeletat merket, find-replace-artefakter rettet, UTF-8/ASCII-korreksjoner, døde lenker fjernet.

[1.3.0] - 2026-04-08

Added

  • Command /okr:gap: Automatic gap analysis between tildelingsbrev requirements and current OKR with coverage matrix
  • Command /okr:analyse: Cross-cycle analytics with Mermaid trend visualizations (score trends, antipattern frequency, alignment)
  • Agent gapanalytiker: Sonnet agent for tildelingsbrev coverage analysis
  • Agent trendanalytiker: Sonnet agent for cross-cycle pattern analysis with Mermaid output
  • Hook SessionStart: Proactive coaching based on cycle timeline position, at-risk KR detection, and previous cycle learnings
  • Hook extension: inject-okr-context.mjs now reports archived cycle count from historikk/

Changed

  • Version bumped from 1.1.0 to 1.3.0

[1.0.0] - 2026-04-08

Changed

  • Architecture: Commands rewritten as self-contained handlers with embedded domain logic (previously routed to external prompt files)
  • Agent models: 4 agents downgraded from opus to sonnet (kvalitetssjekker, kaskadebygger, fremdriftssporer, møtefasilitator); styringsrådgiver remains opus
  • State management: Configuration moved from okr.local.md in plugin root to .claude/okr.local.md in project directory
  • References consolidated: All reference material now in single references/ directory (15 files)
  • Plugin.json: Added license, repository, keywords for marketplace readiness

Added

  • Hooks: UserPromptSubmit (context injection), PreCompact (state preservation), Stop (session reminder)
  • Agent examples: All 5 agents have <example> blocks in description for better triggering
  • Plugin.json metadata: license, repository, keywords fields

Removed

  • Prompt pack: 19 standalone prompt files (absorbed into commands and agents)
  • Assets directory: Content moved to references/ or deleted
  • assets/okr-template-powerpoint.md (described non-existent PPTX)
  • assets/start-her.md (prompt pack getting started guide)

Fixed

  • CLAUDE.md: Corrected agent model tiers, removed stale file references
  • SKILL.md: Removed prompt pack section, updated resource paths
  • SECURITY.md: Fixed version table, corrected config file path
  • Agent path references: assets/ to references/

[0.5.0] - 2026-02-07

Note

First formal version. Previously unversioned. This plugin has never been used in a real OKR cycle.

What exists today

  • 5 intelligent agents
  • Linear integration for OKR tracking
  • Norwegian public sector context (4-month tertial cycles)
  • Based on Google OKR / John Doerr methodology
  • CFR (Conversations, Feedback, Recognition) framework
  • Examples from transport, roads, and digital services domains
  • Cascading support (organization -> division -> team)