okr/CHANGELOG.md
Kjell Tore Guttormsen 482effbad1 fix(okr): B2 ingestion-kode-hygiene + bump 1.7.1 (patch-lane)
8 hygiene-fikser fra review 2026-07-16 par.4 kode-lista, TDD roed-groenn
(suite 138 -> 149):
- innboks-split: slugify translittererer ae/oe (datatap-fiks)
- innboks-frontmatter: beskrivende feil ved manglende sourceMtime
- okf-index: --okf-version bumper eksisterende rot, flagg-tolerant CLI
  (exit 2 ved manglende verdi), sanitizeEntry strip C1/zero-width/bidi/
  Unicode-tag
- write-org-profile: circuit-breaker MERGER i stedet for aa overskrive
  full config (M4); test beviser at eksisterende config overlever
- compose-org-profile: intern ----linje trunkerer ikke blokken
- coaching-hook: at-risk teller status-markerte tabellrader (M1/m1)
- inject-okr-context: topic-guard treffer boeyningsformer (maalene)
- frontmatter: BOM/CRLF-toleranse (falsk mangler-type-fiks)

Versjonsflater bumpet til 1.7.1 (package/plugin/lock/CLAUDE/README/
SKILL x2/package-shape-test) + CHANGELOG 1.7.1-seksjon (B1+B2).
Release-tag + katalog-ref venter paa [G-B] operatoer-go.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 04:02:10 +02:00

16 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.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/innboks-convert.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)