diff --git a/docs/spor1-migration-outcome.md b/docs/spor1-migration-outcome.md new file mode 100644 index 0000000..4177488 --- /dev/null +++ b/docs/spor1-migration-outcome.md @@ -0,0 +1,91 @@ +# Spor 1 — Corpus-migrasjon: utfall og policy-delta (R4, Steg 9–11) + +_Datert 2026-07-04. Kilde: `migrate-corpus.mjs --write` over de 4 ikke-advisor-skills + +`build-registry --merge` → `score-skill --write` → `report-full-pass-worklist`._ + +Denne noten registrerer det målte utfallet av Port-1-substrat-migrasjonen (Type/Source/TOC ++ stale-verified-fjerning) og skiller **verifisert** fra **antatt**, per verifiseringsplikten. + +## Hva migrasjonen gjorde (verifisert mot ground truth) + +| Felt | Antall | Kilde | +|------|--------|-------| +| Filer mutert (ikke-advisor) | 327 / 327 | applier-output + `git diff --name-only` | +| `**Type:**` stemplet | 327 | manifest (alle typer) | +| `**Source:**` backfilt | 243 | manifest (sourced reference; deferred = ingen source) | +| `## Innhold` TOC innsatt | 325 | store filer (≥100 linjer) | +| stale `**Verified:** MCP` fjernet | 14 header + 9 body-dup (i 500B-vinduet) | normalizer + parser | +| advisor-filer rørt | 0 | `git diff --stat -- skills/ms-ai-advisor/` | +| prosa-kropper endret (fra første `##`) | 0 | per-fil `git show HEAD:` diff | +| `verified` satt | null (uendret) | migrasjonen stempler ALDRI verified | + +Slettelinjer i diffen: 25 totalt, **alle `**Verified:**`-relaterte** (21 Verified-linjer + 4 +tilhørende tomlinjer) — ingen prosa slettet. + +## To applier-fixes oppdaget under kjøring (TDD, RED→GREEN) + +Migrasjonen avdekket to reelle feil i de testede primitivene. Begge fikset med failing +test først; suiten 728/728 grønn. + +1. **`insertHeaderFields` anker-overshoot (2 filer).** `agentic-rag-patterns.md` og + `gpt5-gpt41-pricing-models.md` pakker et helt avsnitt inn i én `**Status:**`-linje + (>500 B). Ankeret satte innsettingspunktet ETTER den linja → Type/Source landet forbi + 500-byte-scan-vinduet. Applierens post-write-assertion fanget det og restaurerte hele + korpuset fra backup (sikkerhetsmekanismen virket). Fix: ankeret faller tilbake til + siste meta-linje som fortsatt ligger innenfor vinduet. + +2. **`normalizeStaleVerified` body-dup poison (9 filer, alle `mlops-genaiops/`).** Etter at + header-`**Verified:** MCP` ble fjernet, leste `parseVerifiedHeader` fortsatt en stray + duplikat-`**Verified:** MCP`-linje rett under `---` men innenfor 500 B → filene ble + falskt lest som "verified" → droppet til `fresh`, utenfor worklisten. Fix (operatør- + godkjent utvidelse av carve-out): normalizer fjerner nå ALLE stale non-date + `**Verified:**` i 500B-vinduet, uansett `---`-posisjon; kun stray metadata-linjer, + aldri prosa. Alt forbi 500 B er ekte kropp og røres ikke. + +## Skill-score-delta (pre → post) + +| Skill | Score | CT5 available | N4 (sub / pass) | +|-------|-------|---------------|-----------------| +| ms-ai-engineering | 95 → **99** | false → **true** | 0 → **1.000 / pass** | +| ms-ai-governance | 96 → **100** | false → **true** | 0.013 → **1.000 / pass** | +| ms-ai-infrastructure | 95 → **98** | false → **true** | 0 → **1.000 / pass** | +| ms-ai-security | 95 → **100** | false → **true** | 0 → **1.000 / pass** | +| ms-ai-advisor | 91 → 91 | (uendret) | (uendret) | + +CT5 `pass=false` på engineering + infrastructure er forventet: full CT5-pass krever +`verified`-stempler, som settes først i corpus-judge-pass (fremtidig). CT5 er nå +**available** (evaluert) på alle 4 fordi reference-filene bærer Type+Source. + +## Policy-artefakt: forventet dip inntraff IKKE + +Planen (Risks) forhåndsdeklarerte en **transient sub-90 dip** (CT5/N4-aktivering kunne +dra de 4 skills under 90 midlertidig) som et **policy-artefakt** å ikke reagere på. +**Målt utfall: dip inntraff ikke** — scorene STEG (95→98–100). N4 gikk 0→1.000 (TOC lagt +til), CT5 ble available. Advarselen var altså konservativ; ingen skill falt under target. +Registrert her for å hindre at en senere sesjon leter etter en dip som ikke finnes. + +## Worklist-transisjon (verifisert) + +Post-migrasjon + poison-fix (`report-full-pass-worklist.mjs`): + +| Bøtte | Antall | Merknad | +|-------|--------|---------| +| `due` | 243 | aktivert (var 0 pre-migrasjon); +9 etter poison-fix | +| `fresh` | 0 | var 9 (body-dup poison) → 0 etter fix | +| `unsourced` | 59 | deferred no-citation reference (dokumentert follow-up) | +| `unmigrated` | 62 | advisor (bevisst utenfor scope) | +| `outOfScope` | 25 | — | +| **sum** | **389** | 243 + 59 + 62 + 25 = 389 ✅ | + +## Base-felt-restanse (dokumentert follow-up — utenfor dette substratet) + +Substrat-migrasjonen normaliserer IKKE base-feltene (worklist/CT5/N4 leser dem ikke): + +- `**Status:**` mangler: **29 filer** (planen anslo 31). +- `**Last updated:**` (engelsk RE) mangler: **0** (planen fryktet 45 norske — ikke reelt). +- `**Source:**` mangler: 59 (deferred no-ms-citation — trenger kilde før stempling). +- `verified`/`verified_by` mangler: 302 (= `verified` null; settes i corpus-judge-pass). +- TOC mangler: 0. + +Base-felt-normalisering (Status på de 29) er en egen, senere oppgave — ikke nødvendig for +Port-1-substratet.