# 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.