okr/CHANGELOG.md
Kjell Tore Guttormsen 8328d5d31e feat(okr): innboks-ingestion 1.7.0, docs + release (SC alle)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 03:21:55 +02:00

13 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.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)