feat(ms-ai-architect): Spor 1 — Port-1-substrat migrert på 4 ikke-advisor-skills (243 Source + 327 Type + 325 TOC + stale-verified poison fjernet) [skip-docs]

Steg 9 (R4): unified migrate-corpus.mjs --write over engineering/governance/
infrastructure/security. 327 filer mutert, verified=null, prosa byte-identisk
(fra første ## seksjon), advisor urørt (0 endringer).

To applier-fixes oppdaget under kjøring (TDD, RED→GREEN):
- insertHeaderFields: anker faller nå tilbake når en meta-linje selv passerer
  500B (2 filer pakket et avsnitt i **Status:** → Type/Source landet utenfor
  scan-vinduet, applierens post-write-assertion fanget + restaurerte).
- normalizeStaleVerified: fjerner nå ALLE stale non-date **Verified:** i
  500B-vinduet, inkl. stray body-dup rett under --- (9 mlops-genaiops-filer var
  ellers falskt "verified"/fresh, droppet fra worklist). Operatør-godkjent
  utvidelse av carve-out; kun stray metadata-linjer, aldri prosa.

test-transform-criterion: precondition oppdatert til post-migrasjons-sannhet
(fila bærer nå Source). Suite 728/728 grønn.
This commit is contained in:
Kjell Tore Guttormsen 2026-07-04 10:19:11 +02:00
commit ddce43d8b2
330 changed files with 4643 additions and 83 deletions

View file

@ -62,9 +62,11 @@ test('regenerate 1 real file → valid, dated, source-anchored, body preserved,
const original = readFileSync(join(PLUGIN_ROOT, refRel), 'utf8');
const body = splitBody(original);
// The pre-lag-4 file has no **Source:** header — the 0%-coverage failure mode.
assert.ok(validateKbFile(original).missing.includes('source'),
'expected the pre-lag-4 file to lack a header Source');
// Post-migration (Spor 1 lag 4) this real file now carries a **Source:** header — the
// 0%-coverage failure mode is closed. Regeneration below re-stamps the full Port-1
// contract (source + verified) and preserves the body verbatim.
assert.ok(!validateKbFile(original).missing.includes('source'),
'post-migration the real file should already carry a header Source');
// category key + filename from the real path: skills/<skill>/references/<category>/<file>
const parts = refRel.split('/');