Operatoerbeslutning: naar linje-cappen (25) sprekker, skal fri kontekst
overleve i stedet for aa vaere det foerste feltet som forsvinner.
Fri kontekst legges SIST fordi den skal LESES sist. Under et rent head-slice
gjorde nettopp det den til den foerste som falt ut - og det er den ene sloten
brukeren skriver fritt i, som onboarding-agent.md:125 selv kaller den
enkeltkategorien som gjoer raadene mest treffsikre. Posisjon i sammendraget er
en lese-rekkefoelge, ikke en prioritetsrekkefoelge; kuttet blandet de to.
Ved overflow beholdes naa (cap-2) strukturerte felt + fri kontekst + markoer,
altsaa fortsatt noeyaktig cap linjer. Uten fri kontekst er kuttet uendret.
Dette ble den bindende grensen foerst etter a7098e0: med readdir aapnet kan
brukeren legge til filer fritt, saa terskelen paa 26 felt naas naa av
brukerhandling og ikke bare av design.
Verifisert paa den ekte hooken: 40 felt + fri kontekst gir 25 linjer, med
"Fri kontekst" som siste felt og markoeren "(+22 flere felt)" til slutt.
TDD: 2 nye tester, skjermingstesten roed foerst mot forrige commit. Den andre
pinner at overflow UTEN fri kontekst er uendret (back-compat). Suite 1064/1064.
[skip-docs]: ren intern mekanikk - ingen endring i utoverrettet flate.
To maalte defekter i lastesiden for brukerkontekst (underlag: designnotatets
paragraf 3.1-3.3, maalt ved aa kjoere den ekte mekanismen):
1. DEFAULT_MAX_VALUE_LEN = 160 kappet hvert felt uavhengig av hvor mye av
budsjettet som sto ubrukt. Maalt: et 300-tegns svar tapte 47 prosent, et
2000-tegns svar 92 prosent - ogsaa free-context.md, gjennom sin egen
kodevei. Erstattet av DEFAULT_MAX_TOTAL_LEN = 4000: et totalbudsjett fordelt
max-min-rettferdig over feltene som overlever linje-cappen.
Hvorfor 4000: det er noeyaktig hva den gamle formen alt tillot i verste fall
(cap 25 linjer x 160 tegn), saa endringen er kostnadsnoeytral mot dagens tak
og strengt bedre under det. Fordi budsjettet deles kun over de hoeyst 25
feltene som faktisk skrives ut, faar intet felt mindre enn 4000/25 = 160:
den gamle cappen er blitt gulvet. Begrunnelsen staar der konstanten
defineres.
Per-felt-cap var feil FORM, ikke bare feil tall: den kan ikke uttrykke at ett
langt, viktig svar overlever fordi fem korte ikke trengte sin andel.
2. readOrgFiles itererte den frosne ORG_FILES-lista uten readdir, saa en fil
brukeren la til i org/ naadde aldri modellen. Begge sider er endret - hooken
leser katalogen, og buildOrgSummary ignorerer ikke lenger filnavn utenfor
ORG_FILES - ellers ville endringen vaert en no-op som ser ut som en fiks.
Bare de fem kanoniske teller fortsatt mot onboarding-fullfoerthet.
Ny ren, delt hjelper orderOrgFiles(names) gir begge sider samme deterministiske
rekkefoelge: ORG_FILES foerst, saa oevrige .md sortert, free-context sist.
Verifisert paa den ekte hooken mot en fixture-org-katalog, med kontrollmaaling
mot HEAD: den syvende fila var usynlig foer og gir 43 tegn naa; en 1198-tegns
fri kontekst ble kappet til 160 foer og overlever hel naa.
TDD: 10 nye tester i tests/kb-update/test-user-data.test.mjs, alle roede foerst
(7 assertion-feil mot gammel kode, 3 paa manglende eksport). Suite 1062/1062.
[skip-docs]: ren intern mekanikk - ingen ny kommando, agent, skill eller hook,
og ingen endring i utoverrettet flate.
Operator ratifiserte utvidelsen 2026-08-11. Beslutning #17 (én klasse-entry)
og grunnen bak #14 (ingen lokator usynlig for gaten) var begge ekte og
kolliderte i skjemaet. De kolliderer ikke lenger.
SKJEMAET: et anker er enten en ordrett STRENG, sjekket mot entry.file som foer,
eller et { file, text }-PAR sjekket mot SIN EGEN fil. Bakoverkompatibelt — alle
47 eksisterende entries er uroert. Et misformet par er en schema-feil, ikke et
anker som stille matcher ingenting.
TDD, og testene maatte skjerpes foer de var ekte: fem tester skrevet og kjoert
FOERST. To av dem PASSERTE mot gammel kode — av feil grunn: den gamle koden
stringify-er ankerobjektet inn i drift-meldingen, saa /other\.md/ traff
tilfeldig. En test som ikke kan feile beviser ingenting. Begge fikk en
diskriminator (meldingen skal IKKE navne entry.file) og feilet deretter.
5 feilende -> implementasjon -> 20/20 i fila, 1052/1052 i suiten.
idx-26an: 42 { file, text }-ankere, ett per medlem, hvert re-verifisert ordrett
OG unikt i sin egen fil med split-telling foer skriving.
MEKANISMEN ER BEVIST, IKKE ANTATT: kjoert mot den ekte validatoren med ett
medlems anker fjernet i en lesestubb — ok=false, ett anchor_drift, riktig
entry-id, og meldingen navner agent-evaluation-testing-frameworks.md. Det er
nettopp garantien #14 fantes for, naa baaret av én entry i stedet for 42.
MAALT HASARD BOKFOERT I ENTRYEN: to av de 42 ankertekstene er strenge
prefikser av andre medlemmers ankere («**Total MCP calls:** 6» i
ai-services-cost-optimization.md, «**MCP Calls:** 3» i
reserved-capacity-planning.md). Hver er unik i SIN fil, saa koen er trygg — en
kryss-fil search-and-replace er det ikke. Slett per fil, og rest-soek etter
hver edit.
Koen: 47 -> 48 entries (28 open, 20 resolved). Bokfoeringen av #17 er dermed
komplett: 1 klasse-entry + 16 individuelle = 17. Ingen korpusfil roert.
Operatør-ratifisert 2026-08-03. G7 var gapet for korreksjoner som er RIKTIGE
men større enn O2-konvolutten (én lokator + kun-sletting). Uten eier falt de
stille ut: O2-triagen avviser dem, O3 dekker dem ikke, og review-sporet hadde
ingen inngangskø.
Formvalget ble tatt på §9.6-målingen, ikke på preferanse:
- 2 av 4 anvendte subtraksjoner etterlot en rest -> rester er delete-only-
konvoluttens NORMALE biprodukt, ikke et unntak.
- 2 av 5 medlemmer (idx 17, 33) er ERSTATNINGER, ikke fler-lokator. En
delete-orientert O4-klasse med egen retur-kontrakt ville ikke fikset dem —
altså feil dimensjonert mot evidensen. Køen absorberer begge klasser.
Artefakter (TDD, test-først):
- data/g7-review-queue.json — 6 entries, tracked
- lib/g7-queue.mjs — validateQueue, lukkede vokabular
- check-g7-queue.mjs — exit 1 ved drift eller skjemafeil
- tests/kb-eval/test-g7-queue.test.mjs — 15 tester
Kontrakten: ankere er ORDRETTE strenger, aldri linjenummer (line != real_line
i 9 av 17 R11-records). En åpen entry hvis anker slutter å matche gir
anchor_drift og exit 1 — den kan ikke falle stille ut, som er hele hensikten.
En resolved entry MÅ føre resolution, ellers er "resolved" ikke til å skille
fra "stille droppet". Ingenting i køen er maskin-anvendbart per definisjon.
Innhold: 5 åpne (26, 27, 33, 36, 18), 1 lukket (17). idx 27 kom hit ved å
falle ut av O2 på cond 3; idx 26 ved operatørens avvisning av delvis fiks.
Suite 1047/1047. [skip-docs]
Operatør-ratifisert 2026-08-03. Sletter udokumenterte påstander fra tre
KB-filer: score-threshold-båndene og 'Automatic indexing av vectors'
(rag-caching-optimization), to ikke-støttede AISPM-attribusjoner
(ai-threat-modeling-stride), og SharePoint som feedback-lagring
(feedback-loops). idx 14 er den REDUSERTE subtraksjonen — 'Automatically'
beholdes, siden linje 566 hevder automatikk.
Ikke ratifisert og ikke anvendt: idx 26, 27, 36, 18.
Driver ankrer på file_text_verbatim, aldri linjenummer, og avbryter uten
å skrive ved tvetydig anker, ikke-sletting eller ny ordform. 11 tester.
Suite 1032/1032. [skip-docs]
Måleresultatets sentrale påstand — at forslagene er tekstlig ærlige — hvilte på
et sesjons-lokalt skript ingen kunne etterprøve. Flyttet inn som bibliotek + CLI
med tester, så tallet kan reproduseres fra fersk klon:
node scripts/kb-eval/check-o2-returns.mjs
Sjekkene avgjør IKKE O2 — betingelse 2 og 3 er fortsatt menneskelige. De
avgrenser de to feilmodusene et menneske ikke fanger billig over 46 forslag:
- V1: sitert filtekst må finnes ordrett i fila (fanger oppdiktet tekst og stille
æøå-transliterering). Gjelder HVER rad, også O3 — en O3 basert på oppdiktet
tekst er like feil, bare feil i trygg retning.
- V2: forslaget må kunne oppnås ved kun å slette tegn.
- V2b: V2 alene er for svak — 'Automatically add' -> 'Add' passerer fordi den
store A-en fantes inne i det slettede ordet. Ordnivå-sjekk, case-sensitiv.
- V3: skjema- og verdikt-koherens.
Suite 996 -> 1021.
Implementerer den ratifiserte §4b-tabellen i lib/fix-op.mjs (19 nye tester,
suite 996/996). Alle tre skrankene har egne tester: tabellen er LUKKET, fil-
tokenet må være en KOMPLETT livssyklus-etikett, og verdien som skrives er den
korpus-side ekvivalenten med filas egen markup bevart.
To implementasjonsvalg den ratifiserte teksten lot stå åpne, begge løst mot
fail-closed: status-lokatoren er LINJE-scopet (livssyklus-vokabular gjentas
nedover hver kolonne i en statustabell, så et blokkvindu er tvetydig ved
konstruksjon), og et sitat som hevder to rader aborterer.
MÅLT: 15 pilot / 54 korpus-brede flagg -> 5 og 8 provbare. Alle 8 hånd-dømt
mot kilden (r11-pilot-results.md appendiks B): 5 korrekte, 1 ubevist, 2 GALE.
De tre defektene er én familie: §4b binder tabellen, etikettens fullstendighet
og verdien som skrives — og INGENTING om hvorvidt kilde-frasen refererer til
radens eget subjekt. Samme proveniens-uten-referent-defekt som falsifiserte §4.
Klassen er derfor REVIEW-grade, ikke apply-grade: `status` står bevisst utenfor
o1_recommended, ingen driver applikerer den.
To kandidatvilkår er kostnadsberegnet over de åtte (begge dreper gale forslag
og null korrekte) men IKKE implementert — å utvide en tabell operatøren
ratifiserte som lukket er en operatørbeslutning, slik vilkår 5 var i §4a.
Rettet samtidig 2 NUL-bytes i testfila (pre-eksisterende, fra en tidligere
økt) som gjorde at git behandlet hele fila som binær og blokkerte diff-
gjennomgang før commit.
§10-målingen er gjennomført mot live ledger (243 records). Ingen KB-fil er
redigert og ingen ledger-record er skrevet — §8s single-writer-state er urørt.
Instrumentet ER O1-driveren med writes av (scripts/kb-eval/lib/fix-op.mjs, 30
tester). Måling #1 og #3 kommer dermed ut av mekanismen som senere skal ta på
korpuset, ikke ut av en proxy-heuristikk.
HOVEDFUNN — §4 som skrevet er utilstrekkelig, målt:
Kjørt eksakt som spesifisert slapp den gjennom 6 swaps på piloten, hvorav 4 er
GALE editer (presisjon 2/6):
- 30-dagers → 24-dagers (enhets-kryssing: kilden sier 24 HOURS)
- 3000 req/sek → 50 (metrikk-kryssing: query-throttle vs indexing-rate)
- Microsoft Agent 365 → 7 (identifikator lemlestet, «7» høstet fra «E7»)
- text-embedding-ada-002 → ada-2 (identifikator lemlestet)
§4 binder proveniensen til verdien og formen på editen — ingenting om at de to
tokenene betegner SAMME STØRRELSE. Påstanden om at invarianten er «deliberately
stronger than human review at scale» holder ikke.
TILLEGG: contextCorresponds() krever samme label eller samme enhet på begge
sider. Bevisst leksikalsk, UTEN oversettelsestabell — «dokumenter» læres ikke å
være «documents», fordi en synonymtabell innfører en ny faktakilde og er en
operatørbeslutning. Konsekvensen er målt: swap er provbar praktisk talt bare der
konteksten er språknøytral (URL, kodeeksempel, parameternøkkel).
TALLENE:
- Pilot (≥7): 24 filer / 202 flagg → O1 = 2 (1,0 %), O3 = 200 (99,0 %)
- Hele korpuset: 218 filer / 776 flagg → 15 sluppet gjennom, 9 korrekte
- Kun iso_date (api-version-bump) overlever hånd-verifisering: 9/9.
number/version lemlester identifikatorer (AI-900 → AI-901, gpt-4o → gpt-5.1o
×2, Java-agent 3.7.5 → 3.4.0 = nedgradering) og skal IKKE påføres.
- Kun 7 av 200 aborter (3,5 %) er en fiksbar engineering-gap. Mer locator-
arbeid kan ikke flytte O1-tallet vesentlig.
Måling #2 (R8 → O2) er IKKE besvart og kan ikke besvares maskinelt: R8 gir null
O1, og hvilke av de 46 enumerasjonene som subtraherer rent avhenger av dommerens
PROSA-reason. Måling #4 (review-throughput) er ikke målt — det krever
menneskelige review-økter som ikke har skjedd. Begge står som ikke-målt, ikke
som antatt.
VIDERE FUNN: subtraksjon kan etterlate en misvisende rest (§5 sier den «cannot
introduce a new error» — sant om setningen, usant om leserens slutning), og kan
ødelegge sann informasjon (prebuilt-check → finnes, heter prebuilt-check.us).
`disposition` er `outdated` på 202/202 og bærer null informasjon, i strid med
flagg-formatspesifikasjonen. `claim` matcher fillinjen ordrett i 0 av 202.
Full oppskrift og åpne operatørbeslutninger: docs/r11-pilot-results.md
Premiss-verifisering mot ground truth (simulert R7-stempler insertVerifiedFields
over 327 non-advisor-filer): RX-HDR-populasjonen kollapser fra påstått 10 til 2.
De 9 'base-felt forbi 500B'-filene er falske positiver — stempleren setter Verified
øverst, uavhengig av hvor Status/Category ligger. Kun 2 filer er ekte ustempelbare
(gpt5-gpt41-pricing-models, entra-agent-id-zero-trust): headere med fete **Status:**-
prosahaler (175B/199B) der begge stempler (Verified + Verified by, judge-v3.1) ikke
får plass i 500B. Feltomstokking løser dem ikke — verdi-slanking kreves (utenfor
RX-HDRs scope), så de folder inn i R7s eksisterende 'header-slanking kreves'-flagg-sti.
audit-corpus-headers.mjs: ny ren isStampable() kjører R7s ekte stempler med fast
representativ probe (dato + judge-v3.1); per-fil 'stampable' + aggregat 'unstampable'
+ FLAG-liste. Gjør populasjonen permanent så den ikke stille kan vokse (gap-disiplin).
+2 tester (dense→ustempelbar, clean→stampable). Suite 924→926 exit 0.
Løser dual-header der filer bærer BÅDE **Dato:** (opprettelse) OG **Last updated:**
(endring). Ground truth 2026-07-16 + git first-commit-map (2026-04-08 for alle 5):
- 4 distinkte (**Dato:** 2026-02-04, FØR git first-commit → ekte opprettelsesdato):
relabel **Dato:** → **Created:**, verdi byte-bevart (norsk→engelsk label-rename).
- 1 identisk (mlops-security-access-control: **Dato:**=**Last updated:**=2026-06-19,
ETTER git first-commit → metadata-artefakt, ikke ekte opprettelsesdato): drop redundant
**Dato:**. Relabel ville påstått falsk opprettelsesdato — drop er sannferdig.
Ny ren primitiv dropRedundantBoldField (kaster uten identisk-verdi bevis-felt),
gjenbrukt relabelHeaderDialect m/ CREATED_MAP. Manifest-drevet dedup-dato.mjs med
hard per-fil-invariant FØR skriv (relabel: 1 linje, kun label-token; drop: net -1,
Last updated bevart), atomicWriteSync, idempotent. Ingen validator håndhever lukket
feltliste → **Created:** er additiv/konform.
+15 tester (dropRedundantBoldField, CREATED_MAP-relabel, applyOp, manifest, 2 corpus-
guards) + oppdatert stale Enhet-2 carve-out-guard til post-3b-sannhet. Suite 910/910
exit 0. validate-plugin 250 PASS/0 FAIL. Datoløse dual-**Dato:**-filer 5→0.
De 87 referansefilene bar en plain-text `| Verified: <dato>`-hale på **Last updated:**-linjen
i 500B-header-vinduet — usynlig for den bold-only kontrakt-stacken (kb-headers.mjs / audit
RE_VERIFIED), og claimet en verifisering judgen aldri gjorde (samme poison-klasse som de 14
bold **Verified:** MCP Spor 1 fjernet). Uhåndtert springer den også dual-Verified-fellen: R7s
insertVerifiedFields ville stemplet en bold-verdi ved siden av den plain → to motstridende
provenance-claims per fil.
- ny driver strip-stale-verified-pipe.mjs: frosset 87-manifest (18 advisor + 45 eng + 8 gov +
16 sec), pure verdi-bevarende strip (kun ` | Verified: …`-halen; **Last updated:**-dato
byte-eksakt), hard per-fil-invariant (linjeantall uendret, body byte-identisk, dato bevart),
idempotent, atomicWriteSync (RX-OPS2 recovery-kontrakt).
- audit-corpus-headers.mjs: ny plain-Verified-deteksjon (RE_PLAIN_VERIFIED + plainVerifiedPipe)
— gjør M4-blindheten synlig så en stale plain-hale ikke kan gjenoppstå stille (non-advisor scope).
- 87 filer strippet; plain Verified i vinduet 0/389; live-audit plainVerifiedPipe 0.
Mekanisme: +15 tester (12 strip + 3 audit). Suite 875→890 exit 0. validate-plugin.sh 250/0.
Utsatt → RX-KB1b: footer-dato-avvik + label-whitelist (annen dialekt, flag-to-human).
Digital Omnibus legger til nytt Art. 5-forbud mot AI som genererer/manipulerer
NCII eller CSAM (nudifier-apper), anvendelse 2026-12-02. Substans + dato verifisert
mot EU-rådet 2026-06-29 + Gibson Dunn/Freshfields-analyser. Eksakt underpunkt +
boetenivaa kan ikke pinnes foer OJ — caveatet «avventer OJ», ingen fabrikkert (i)/figur.
- classification-methodology: caveat-notis under Art. 5-forbudstabellen
- ai-act-assessor: «8 forbudte praksiser» → «8 i kraft + nudifiers/CSAM avventer OJ»
- reg-lint seksjon #11 (2 tester): preventiv mekanisme (gap-disiplin)
M14-klynge (verifisert mot regjeringen.no 2026-07-15):
- provider-obligations L354: nasjonal koordinering = Digitaliserings- og
forvaltningsdepartementet (DFD), ikke Nærings- og fiskeridepartementet
(DFD sendte KI-loven på høring).
- conformity L331-343 + Q&A #5: «Norge har ikke ... utpekt» var stale +
lista omitterte Nkom og ga Digdir koordineringsrollen. Nkom er utpekt som
koordinerende nasjonal markedstilsynsmyndighet (regjeringen besluttet).
- «AI Norge» → «KI Norge» (Digdirs offisielle navn) i norge-ai-strategy (5×)
+ compliance-guide (1×); søsterfil digdir-ai-governance-structure brukte
allerede KI Norge.
- norge-ai-strategy L23: 2020-strategiens departement er nå Digitaliserings- og
forvaltningsdepartementet (aldri «Digitaliseringsdepartementet»); Last updated-bump.
Lint-seksjon 9 (4 regresjonsvern). Suite 833→837, exit 0.
Kilder:
- https://www.regjeringen.no/no/aktuelt/lov-om-kunstig-intelligens-i-norge-sendes-na-pa-horing/id3113732/
- https://www.regjeringen.no/no/aktuelt/gjor-norge-klar-for-trygg-og-innovativ-ki-bruk/id3093081/
- https://www.digdir.no/kunstig-intelligens/digdir-etablerer-ki-norge/7412
5 hard «2. august 2026»-frister i registrerings-/CE-/record-keeping-kontekst motsa allerede-korrigerte linjer i samme filer + kanonisk ai-act-deadlines.json (Annex III høyrisiko utsatt til 2027-12-02 via Digital Omnibus, avventer OJ):
- conformity L177: Art. 49-registrering «obligatorisk fra 2. august 2026» → pre-market + utsatt til 2. des 2027 (motsa L346)
- tools-mapping L227/237/262: Fase 3-header, CE-mål og «kritiske datoen» → 2. des 2027 provisorisk (motsa L215)
- data-residency L333: Art. 12 record-keeping «enforcement 2026-08-02» → utsatt til 2. des 2027; Last updated header/footer 2026-06/2026-05 → 2026-07-15 (løser M15)
Lint-seksjon 8 (3 regresjonsvern) + suite 830→833 grønn exit 0. Kilder: consilium.europa.eu 2026-06-29 final green light; EUR-Lex CELEX:32024R1689; europarl legislative-train Digital-Omnibus.
Verifisert 2026-07-15. OJ ikke publisert (Omnibus vedtatt, avventer OJ).
Rotårsak-mekanisme: scripts/kb-update/data/ai-act-deadlines.json er nå eneste
kilde for AI Act-frister; CLAUDE.md-tabellen, assessor-malen og begge hooks
synk-testes mot den (tests/kb-update/test-ai-act-deadlines-sync.test.mjs, 9
tester, TDD rød→grønn). Suite 815/815.
- B2: «Kommisjonen kan fremskynde»/«ytre grense» fjernet (trigger droppet i
endelig Omnibus-tekst)
- B3: status oppdatert i alle 3 lag — formelt vedtatt (EP 2026-06-16, Rådet
2026-06-29), trer i kraft ved OJ-publisering (ikke publisert per 2026-07-15,
verifisert mot EUR-Lex 32024R1689)
- B4: Art. 50-raden «Gjeldende» → «Fra 2026-08-02»
- B5: stop-hooken feilmerket 2026-08-02 som «GPAI-frist» — begge hooks leser
nå kilden, 0 hardkodede frist-literals
- R3-5: 2026-12-02-raden (Art. 50(2)) inn i assessor-malen
- M10: Nkom navngitt som koordinerende markedstilsynsmyndighet + nasjonalt
kontaktpunkt (kilde: nkom.no/ki/regulering/hvem-handhever)
- pending_oj-markører i kilden for RX-REG² (nudifiserings-forbud, Art. 111)
- .gitignore: whitelist for den kuraterte frist-kilden
To operasjoner, én økt (⊥ R7), begge ren metadata-normalisering (verdi aldri fabrikkert).
Premiss-korreksjon (ground truth 2026-07-07): roadmap sa «27 none + 4 ai-act».
Målt: 29 mangler bold **Status:** = 25 rene none + 4 ai-act (plain Status: GA).
De «27» inkluderte 2 for mye — 2 filer (custom-dashboards-ai-operations,
zero-trust-ai-services) har bold **Status:** KUN forbi byte 500 (present for
full-fil-audit, usynlig for 500B header-parser) → egen header-slanking-residual
(§8-register), utenfor Enhet 3.
Op A — Status-backfill 25 rene none: utvidet backfill-status.mjs MANIFEST 14→39
(samme statusForFile + insertMetaField + hard per-fil-invariant, idempotent skip
på de 14 R21-gjorte). Alle 25 → **Status:** Established Practice (ingen matcher
template|matrix|benchmarks|register). Diff +25/-0.
Op B — ai-act dual-header-dedup (4 filer): ny driver dedup-plain-header.mjs + 2
rene primitiver i transform.mjs — boldifyPlainField (plain→bold, verdi bevart
byte-eksakt, header-scoped, idempotent) + dropRedundantPlainField (sletter plain
KUN når bold m/ identisk verdi beviser redundans; kaster ved avvik/manglende bold).
Per fil: plain Last updated: + Status: GA → bold (2026-06-18/2026-02, GA bevart),
redundant plain Category: fjernet. Hard per-fil-invariant (net -1 linje, begge
felt bold m/ bevart verdi, ingen plain-header igjen, body byte-identisk). Diff -12/+8.
Verifisering: test-backfill-status 8/8 + test-dedup-plain-header 13/13; audit
Missing Status 29→0, Missing English Last updated 4→0; skills-diff 29 filer
+33/-12 (kun **Status:** + 8 bold-swaps), diff-kontekst inspisert per fil; begge
drivere idempotent (re-run 0 writes); suite 806/806 exit 0; none=8 uendret (Enhet 4).
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.
§4 Port 3 verifiseringskrav: «CT5 (sourcedness) ERSTATTER K8s rolle». K8 var
LLM-judge (sample 5 ref-filer, ikke-deterministisk); CT5 er samme signal gjort
deterministisk + hel-korpus fra Port 1-kontrakten. Per ref-kb-direction-note §45
MÅ de ikke leve parallelt (dobbelttelling + divergerende dashbord) — så K8 er
fjernet, ikke duplisert.
eval.mjs: checkCT5(refFiles) — blant filer som deklarerer type:reference, andel
med **Source:** (template/methodology/regulatory ekskludert fra nevneren).
Wiret som deterministic.CT5_sourcedness. parseTypeHeader/parseSourceHeader
importert fra kb-update/lib/kb-headers (tillatt retning).
skill-score.mjs: K8-kriteriet (source:judge) → CT5 (source:det, vekt 1).
available:false når referenceFiles=0 → droppet fra vektet snitt → tanker IKKE
scoren på umigrert korpus (alarm-tretthet unngått, direction-note §45).
judge-prompt.md: K8 fjernet fra rubrikk/instruksjon/JSON (judgen gjør nå
K1/K4/K7/K9).
Ekte kjøring: alle 5 skills CT5 dormant (referenceFiles:0, umigrert), scorer
uendret (91-96, 0 under mål). CT5 aktiveres deterministisk når Spor 1 migrerer.
TDD (Iron Law): 5 checkCT5 + 3 CT5-integrasjon; død K8-fixture-data ryddet.
Suite 620/620. Plugin-validering 239/0/0.