feat(acr,yaml): v5.6 Foundation — load-pattern enumeration + block-seq parser

Foundation chunk of v5.6 "steering-model II" (internal plumbing for B/C;
no command-output change, so --json/--raw/SC-5/6/7 stay byte-stable, count
stays 13).

active-config-reader.mjs:
- deriveLoadPattern(kind,{scoped}) — pure helper mapping each source kind to
  loadPattern {always,on-demand,external} + survivesCompaction {yes,no,n/a}
  + derivationConfidence {confirmed,inferred}, traced to the published
  loading model (V-rows in docs/v5.5-steering-model-plan.md).
- enumerateRules / enumerateAgents / enumerateOutputStyles — the three
  source kinds previously unenumerated (mirror enumerateSkills). Output-style
  discovery is direct (not a new file-discovery type) to keep the discovery
  surface stable.
- readActiveConfig now exposes rules/agents/outputStyles arrays + totals
  counts/subtotals (folded into grandTotal).

yaml-parser.mjs:
- parseSimpleYaml now reads YAML block sequences (paths:\n  - a), not just
  inline paths:. An empty-valued key with no `- ` items stays null
  (backcompat). Resolves a pre-existing RUL false-positive (a block-seq-scoped
  rule was misread as unscoped) — fix flows through unchanged RUL code.

Tests +35 (961 -> 996): block-seq parser cases, RUL block-seq regression
(no-misflag + durability-fires), deriveLoadPattern table, three enumerators
(positive+negative). Amended two existing ACR asserts (top-level key shape +
grandTotal sum). self-audit A/A, readmeCheck passed, mismatches []. tests
badge 961+->996+; README testing prose de-staled (635/36 -> 996/56);
CLAUDE.md Foundation note.

B (manifest/tokens render + snapshot regen) and C (CA-OST, count->14)
deferred to their own sessions/GO.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ter3E2JSi1Khgmuf2kady8
This commit is contained in:
Kjell Tore Guttormsen 2026-06-20 16:57:52 +02:00
commit 62d910ed6d
8 changed files with 575 additions and 25 deletions

View file

@ -2,29 +2,32 @@
_Current state-of-play for DENNE pluginen. Auto-injisert ved sesjonsstart. Overskrives (ikke append) ved sesjonsslutt. Historikk → git (STATE.md er tracked). Stier relative til plugin-mappa._
## Aktiv kontekst (v5.5.0 RELEASED — tag + catalog pushet)
**v5.5.0 «steering-model I» (A+E) er release-cuttet og ute.** Tag `v5.5.0``dac1db4`, pushet til Forgejo. Catalog-ref bumpet 5.4.1→5.5.0 (`5832c80` i `../catalog`, pushet). Suite **961**, self-audit A/A (config 93, plugin 100), `readmeCheck.passed`/`mismatches:[]`, count 13, `--json`/`--raw` byte-stabil. Neste arbeid = v5.6 (KREVER GO).
## Aktiv kontekst (v5.6 Foundation LANDET på main — B neste)
v5.5.0 released (tag `v5.5.0`, catalog v5.5.0). Siden da: **v5.6 Foundation implementert + committet på main** (TDD). Suite **996** (961→996), self-audit A/A (config 93, plugin 100), count **13** (Foundation legger ingen scanner), SC-5/6/7 byte-stabil UTEN regen. v5.6 er IKKE release-cuttet (krever B + C + eget release-GO).
## Gjort denne økten (2026-06-20, lør — alt pushet)
- **Release-cut (`dac1db4`, `release:`):** plugin.json 5.4.1→5.5.0 + README version-badge + version-history-rad (961 tests) + CHANGELOG `[5.5.0]` (Added + Known-limitations). Badge-gate grønn via `self-audit --json --check-readme`. Tag `v5.5.0` annotert.
- **Catalog (`5832c80`, separat repo, egen GO):** `marketplace.json` ref + README L38 version-tag → v5.5.0. JSON validert. «13 scanners»-prosa uendret (korrekt).
- (Bundlet de allerede-landede A `f3aadb5` + E `f75ed56` fra forrige økt — ingen ny kode denne økten, kun release-mekanikk.)
- **Parser-fiks (`yaml-parser.mjs`):** `parseSimpleYaml` leser nå YAML block-sequences (`paths:\n - a`), ikke bare inline `paths: "a, b"`. Empty-valued key uten `- `-items → fortsatt `null` (backcompat). Løser pre-eksisterende RUL false-positive (block-seq-scoped rule sett som unscoped) — fiks flyter gjennom uendret RUL-kode.
- **Foundation (`active-config-reader.mjs`):** ny `deriveLoadPattern(kind,{scoped})` (loadPattern/survivesCompaction/derivationConfidence, V-row-forankret) + `enumerateRules`/`enumerateAgents`/`enumerateOutputStyles` (mirror `enumerateSkills`). `readActiveConfig` eksponerer `rules`/`agents`/`outputStyles` + totals/subtotals (i grandTotal). Output-style-discovery gjøres direkte (IKKE ny `file-discovery`-type) → discovery-surface stabil.
- **Tester:** +35 (yaml-parser block-seq, RUL block-seq regresjon, deriveLoadPattern table, 3 enumeratorer pos+neg). Amendet 2 eksisterende ACR-asserts (top-level key shape + grandTotal sum).
- **Docs (docs-gate krever non-trivial README+CLAUDE for feat):** README testing-prosa 635/36→996/56 (var v5.0.0-stale), tests-badge 961+→996+, CLAUDE.md test-count 936→996 + ny Foundation-seksjon.
## Åpne tråder / neste steg (prioritert)
1. **v5.6 «steering-model II» (KREVER GO):** Foundation (enumerering rules/agents/output-styles + `loadPattern`/`survivesCompaction` i `active-config-reader`) + B (load-pattern i manifest/tokens — FORMAT-endring, snapshot-regen) + C (ny `CA-OST`, count→**14**). **Fiks parser-begrensningen** (se gotcha) som del av Foundation.
2. **v5.7 (GO):** D (mechanism-fit, heuristisk, precision-gated).
3. **llm-security KRITISK** (annet repo, F-1 RCE, disclosure-hold) + 3 aktive plugins + STATE-sveip — uendret.
## Åpne tråder / neste steg (prioritert, alle KREVER GO)
1. **v5.6 B (load-pattern accounting):** render `loadPattern`-kolonne + «always-loaded subtotal» i `manifest` + `tokens`. FORMAT-endring → **regen SC-5 + SC-6/7 token-hotspots-snapshots**; beslutt `--json` back-compat (add-field-in-place vs schema-versjon). Konsumerer Foundation (deriveLoadPattern + enumerasjoner ligger klare).
2. **v5.6 C (output-style scanner):** ny `CA-OST` (count 13→**14**): `keep-coding-instructions`/`force-for-plugin`/dead `outputStyle`. Badge + lore-oppdatering, humanizer/scoring/discovery-wiring.
3. **v5.6 release-cut:** etter B+C lander på main (eget GO, som v5.5.0).
4. **v5.7:** D (mechanism-fit, heuristisk, precision-gated).
5. **llm-security KRITISK** (annet repo, F-1 RCE, disclosure-hold) + 3 aktive plugins + STATE-sveip — uendret.
## Gotchas (UFRAVIKELIG)
- **Parser-begrensning:** `scanners/lib/yaml-parser.mjs` leser KUN inline `paths: "a, b"` (komma-normalisert), IKKE YAML block-sequence (`paths:\n - a`). Block-scoped rules ses som unscoped → RUL scoped-deteksjon (inkl. A) bommer på dem. Pre-eksisterende, bredere enn A. Fiks i v5.6 Foundation. (Også notert i CHANGELOG [5.5.0] Known limitations.)
- **Parser-begrensning RESOLVED denne økten** — block-sequences leses nå. (Hvis du ser gammel STATE/plan som sier «fiks i v5.6 Foundation»: gjort.)
- **fix-engine + humanizer-data kobler på finding-TITTEL.** Endrer/legger du til tittel: oppdater begge (+ evt. SC-5 snapshot). Hver finding: positiv OG negativ fixture (TDD).
- Versjon KUN i plugin.json + README-badges. self-audit `--check-readme`: badge == suite (EKSAKT før «+»); driver IKKE exit-kode — verifiser via `--json` (`readmeCheck.mismatches`). Catalog = SEPARAT repo (`../catalog`); bump ref ETTER tag (egen commit + GO).
- Scanner-count 13. C ville gi 14 (v5.6).
- `post-session` IKKE settings.json-event (runner-hook). hooks.md = 30 events PascalCase.
- Path-guard blokkerer Write på `.claude-plugin/` + settings/hooks → bruk hermetisk `mkdtemp` i tester (mønster i HKV/PLH/RUL/CML-testene). Push-vindu: hverdag 2023, helg fritt.
- Versjon KUN i plugin.json + README version-badge. **tests-badge synces til EKSAKT suite-tall ved hver chunk-landing** (961→996 nå); driver IKKE exit-kode — verifiser `readmeCheck.passed`/`mismatches:[]` via `--json`. Catalog = SEPARAT repo; bump ref ETTER tag (egen GO).
- **docs-gate (non-marketplace gren) krever non-trivial README OG CLAUDE.md (≥3 ikke-ws-linjer hver) for `feat:`**-commits. Foundation oppfylte ærlig (stale-fiks + arch-note). Alt.: `[skip-docs]` (logges).
- Scanner-count 13. C gir 14 (v5.6).
- Path-guard blokkerer Write på `.claude-plugin/` + settings/hooks → hermetisk `mkdtemp` i tester. Push-vindu: hverdag 2023, helg fritt.
## Scope-gjerde
v5.5.0 (A+E + release-cut + catalog) godkjent (GO) og ute. v5.6/5.7 + andre repos = egne GO. Ikke start v5.6 uten GO.
v5.6 Foundation godkjent (GO) og landet. B + C + v5.6 release-cut + v5.7 + andre repos = egne GO. Ikke start B uten GO. Byte-stabilitet var by-construction (Foundation rendrer ingenting nytt) — B BRYTER den bevisst (snapshot-regen).
## Kontinuitet
Tre lag: STATE.md (tracked) + auto-memory + CLAUDE.md. Oppdater DENNE som siste handling.