# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.8.1] - 2026-07-25 Patch-release: **`okf_version` / `okf_layout`-splitt**. Rot-`index.md` bar én markør som dekket to urelaterte konsepter — den upstream OKF-versjonen bundelen sikter mot *og* pluginens egen layout-revisjon. OKF-specen §12 (katalog-eid) skiller dem i to markører; denne releasen migrerer emitteren og sjekkeren over. Ingen nye kommandoer, agenter eller referansefiler. ### Changed - **`scripts/okf-index.mjs` emitterer to markør-linjer på rot-`index.md`** — `okf_version: 0.1` (upstream Google OKF-versjonen, verdisett eid av Google, påkrevd per spec §3) og `okf_layout: kb-layout-2026-06` (pluginens egen layout-revisjon, valgfri per §12, verdisett eid av emitteren; trigger ingen kryss-plugin-rekjekk). Konstanten `OKF_VERSION` bærer nå upstream-verdien; ny `OKF_LAYOUT` bærer layout-revisjonen. Undernivå-index er uendret — begge markørene er rot-eksklusive. - **`scripts/okf-check.mjs` ekkoer begge markørene** (`okf_version` + `okf_layout`, fraværende → `MANGLER`). Rent ekko: verdiene valideres fortsatt ikke, siden spec §3 ennå ikke er håndhevende på form. Retur-objektet fra `checkBundle()` bærer `okfLayout` ved siden av `okfVersion`. - **`--okf-layout ` er det kanoniske CLI-flagget** for å bumpe layout-revisjonen. `--okf-version` beholdes som **deprecated alias** — verdien kallere sendte inn der var alltid en layout-revisjon — og skriver et deprecation-varsel til **stderr**, aldri stdout (scriptets maskinlesbare flate). Samme aliasing gjelder `generateIndexes(root, { okfLayout })` mot det gamle `{ okfVersion }`. Manglende flagg-verdi er fortsatt bruksfeil (exit 2, ingen skriving). ### Fixed - **Migrasjonssti for eksisterende bundles** — en rot-`index.md` som bærer en ikke-upstream verdi i `okf_version` (formen fra før 1.8.1) får verdien **flyttet verbatim** til `okf_layout`, og `okf_version` settes til upstream-verdien. Den funne verdien erstattes aldri av vår egen konstant, en allerede spec-konform `okf_version` (`0.1`, `0.2`, …) røres aldri, og en eksisterende `okf_layout` bevares. Migrasjonen skjer ved neste `okf-index`-kjøring; ingen manuell handling kreves. ### Added - **Testsuite 167 → 179 cases**, alle grønne. 12 nye i `tests/okf-check.test.mjs`: begge markørene på rot og ingen på undernivå (inkl. at markør-blokken ikke etterlater en tom linje der), migrasjon av legacy-form, verbatim-bevaring av en *fremmed* layout-verdi, ikke-migrering av spec-konform `okf_version`, verbatim-bevaring av allerede splittet form, `--okf-layout`-bump + idempotent vedlikehold, deprecated-alias-atferd, stderr-vs-stdout-separasjon for deprecation-varselet, bruksfeil ved manglende flagg-verdi, og begge markørene i `okf-check`-ekkoet inkludert `MANGLER` for utelatt layout. ### Documentation - `CLAUDE.md`, `skills/okr-second-brain-search/SKILL.md` og `commands/oppsett.md` beskriver nå to markører der de tidligere beskrev én. ## [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.md`s 17 `references/.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.md`s 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.md`s «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.md`s andel-av-forventet-terskler, `sporing.md`s 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.md`s 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.0` → `1.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 (`Tildelingsbrev` → `strategisk-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 fjernet** — `okr-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 `(start−current)/(start−target)`. ### 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.6–0.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 `` 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)