feat(ms-ai-architect): R21 — Status-backfill på 14 advisor-ref-filer (redusert scope etter premiss-korreksjon) [skip-docs]

Manifest-drevet applier (scripts/kb-update/backfill-status.mjs) over den testede
insertMetaField-primitiven + ny ren regel statusForFile (filnavn-token → Reference/
Established Practice, operatør-godkjent vokabular). 7 Reference + 7 Established Practice.
Hard per-fil-invariant (én linje, body byte-identisk), idempotent, isMain-guard. 7 tester.

Premiss-korreksjon (auditHeaders, ground-truth 2026-07-06): ekte not-due-restanse er
21 Status + 26 Last-updated (STATE sa 21/22). «0 har norsk dato» var falskt — 21/26
Last-updated-gap bærer allerede Sist oppdatert/Dato → relabel-residual; 5 datoløse gir
«i dag» ved naiv git → utsatt. 4 dual-header ai-act-*-filer med plain-text «Status: GA»
fanget i diff-inspeksjon → revertert (unngår duplikat/motsigelse) → residual (samme
plain-blokk ga R20 duplikat Category). Korrigert residual logget i roadmap §R21.

Verifisering: test-backfill-status 7/7; git diff +14/-0 (kun Status-linjer, body
byte-identisk); not-due Status-missing 21→3; full suite 771/771 exit 0.
This commit is contained in:
Kjell Tore Guttormsen 2026-07-06 09:41:40 +02:00
commit 5a0e8d774a
17 changed files with 237 additions and 5 deletions

View file

@ -119,15 +119,21 @@ Maskineriet er bygget (krav 1+2+3 + per-kategori-hint); målingen er aldri kjør
**Verifisering:** `grep -rLE '\*\*(Category|Kategori):\*\*' skills/*/references` → 0; git diff +25/0 (én linje/fil, body byte-identisk); idempotent re-run = 0 planned; suite 764/764 exit 0.
## R21 — Base-felt pre-pass del 2: **Status:** + **Last updated:** på not-due-filer (1 økt — ungated, ⊥ R7)
## R21 — Base-felt pre-pass del 2: **Status:** på not-due-filer (1 økt — ungated, ⊥ R7) ✅ 2026-07-06
**Mål:** lukk resten av base-felt-restansen på **not-due**-filene. Due-filenes Status/Last-updated FOLDES inn i R7 (Status er en faktapåstand judge-passet verifiserer mot live kilde; `**Verified:**`-stempelet er freshness-signalet) — backfilles ALDRI her.
**Mål:** lukk den rent-verifiserbare delen av base-felt-restansen på **not-due**-filene. Due-filenes Status/Last-updated FOLDES inn i R7 (Status er en faktapåstand judge-passet verifiserer mot live kilde; `**Verified:**`-stempelet er freshness-signalet) — backfilles ALDRI her.
**Scope (ground-truth 2026-07-06):** ~21 not-due mangler `**Status:**`, ~22 not-due mangler engelsk `Last updated:` (alle 48 datoløse er template/metodikk/rubrikk-filer — 0 har norsk dato å relabele fra). **Verdikilder:** Status = beskrivende klasse for toolkit/metodikk (`Established Practice`/`Reference`), produkt-tilstand for plattform-filer; Last updated = **git-avledet** (siste innholds-commit på fila), ALDRI «i dag». Reuse `insertMetaField` + manifest-drevet applier med samme per-fil-invariant.
**Premiss-korreksjon (ground-truth 2026-07-06, via `auditHeaders` på alle 389 splittet due/not-due):** STATE/roadmap-tallene var stale/feil. Faktisk: **43 mangler bold `**Status:**`** (22 due→R7, **21 not-due**) og **52 mangler engelsk `Last updated:`** (26 due→R7, **26 not-due** — ikke 48/22). To premisser i den opprinnelige planen var brutt: (1) «~22 not-due Last-updated» → faktisk 26; (2) «0 har norsk dato å relabele fra» → **falskt**: 21 av 26 not-due Last-updated-gap bærer allerede en norsk datolabel (`**Sist oppdatert:**`/`**Dato:** <dato>`), og de 5 «datoløse» gir «i dag» ved naiv git-siste-commit pga. R20-churn (bryter «ALDRI i dag»). Decision (a) er **moot**: 0 plattform-filer i not-due (alle sourced → due→R7). Norsk-label-residual (decision b) = **69 filer**, ikke 42.
**Åpne del-beslutninger:** (a) plattform-filenes Status er produkt-fakta — vurder om de heller skal vente på judge-verifisering som due-filene, ikke gjettes her; (b) 42 filer bruker norsk `**Kategori:**`/`Sist oppdatert:` — label-normalisering til engelsk er en egen residual (logg, ikke bland inn i R21).
**Utført (operatør-godkjent redusert scope 2026-07-06):** kun **Status**-backfill, kun de **14** rent engelsk-dialekt advisor/architecture-filene. Ny testet ren regel `statusForFile()` (filnavn-token `template|matrix|benchmarks|register``Reference`, ellers `Established Practice`; operatør-godkjent vokabular) + manifest-drevet driver `scripts/kb-update/backfill-status.mjs` (frosset 14-fil-manifest re-avledet fra regelen, hard per-fil-invariant «nøyaktig én linje», idempotent skip-if-present, `isMain`-guard så test-import ikke kjører driveren, aborterer FØR skriving). Fordeling: **7** `Reference` + **7** `Established Practice`. Diff-inspeksjon FØR commit fanget at **4** governance/responsible-ai `ai-act-*`-filer bar en **plain-text `Status: GA`** i en dual-header-blokk (usynlig for bold-only-regexen) → bold-innsetting duplikerte/motsa den → **revertert**, flyttet til residual. 7 tester.
**Verifisering:** not-due uten Status/Last-updated → 0 (eller eksplisitt utsatt-liste m/begrunnelse); git diff kun header-innsettinger; body byte-identisk; suite exit 0.
**Verifisering:** `test-backfill-status` 7/7; git diff +14/0 (én `**Status:**`-linje/fil, 0 andre linjer, body byte-identisk); idempotent re-run = 0 written; not-due Status-missing 21→**3**; suite **771/771** exit 0.
**Korrigert residual → decision-(b) dialekt/dual-header-normaliseringspass (eget go, ⊥ R21):**
- **26 not-due Last-updated** — 21 relabel (`Sist oppdatert`/`Dato``Last updated`, behold dato), 5 datoløse (git-avledet dato krever «innholds-commit»-heuristikk som ekskluderer R19/R20-metadata-pass).
- **3 norsk-dialekt Status** — engelsk `**Status:**` ville blande dialekt; håndteres i samme dialekt-pass.
- **4 dual-header `ai-act-*`-filer** — plain-blokk (`Last updated:`/`Status: GA`/`Category:` linje 68) vs bold-blokk. **NB:** samme plain-blokk er hvorfor **R20 la til duplikat `**Category:**`** her (bold `Category` linje 3 vs plain `Category` linje 8) — begge duplikatene lukkes i normaliseringspasset. Mønsteret er innkapslet til nøyaktig disse 4 filene korpus-vidt.
- **69 norsk-label-filer** (`Kategori`/`Sist oppdatert`) — engelsk label-normalisering.
## Parkert (krever eget operatør-go)