feat(ms-ai-architect): R11 §4b implementert — status-synonymtabellen målt, 8 forslag hånd-dømt [skip-docs]

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.
This commit is contained in:
Kjell Tore Guttormsen 2026-08-03 17:12:47 +02:00
commit e4925c6b28
5 changed files with 330 additions and 10 deletions

View file

@ -142,8 +142,34 @@ the file does not itself appear verbatim in the quote:
- The written value is the **corpus-side** equivalent with the file's own markup
preserved (`**Preview**``**GA**`), never the English phrase pasted in.
**Not yet implemented.** The classifier still aborts these as `STATUS_SYNONYM`;
the ratification above is the contract a later session builds against.
**IMPLEMENTED 2026-08-03** in `classifyStatusSynonym()` / `fileStatusLabel()` /
`sourceStatusRows()` (`scripts/kb-eval/lib/fix-op.mjs`), 19 tests. Two
implementation decisions the ratified text left open, both resolved towards
failing closed:
- **The status locator is LINE-scoped**, not block-scoped like the numeric one.
Lifecycle vocabulary repeats down every column of a status table, so a block
window is ambiguous by construction; all 15 pilot flags in this class point at
the row that carries the claim.
- **A quote asserting two different rows aborts** (`SOURCE_STATUS_AMBIGUOUS`), and
a row with two corpus-side labels writes the **first** — the least specific one,
so a source saying only "preview" can never produce "Public Preview".
Aborts keep the `STATUS_SYNONYM` code and name their cause in `detail.reason`, so
the §10 abort taxonomy stays comparable across the implementation.
**Measured: 15 pilot / 54 corpus-wide flags → 5 and 8 proven; 5 of the 8 are
correct** (`docs/r11-pilot-results.md` §8 + appendix B). The three defects are one
family: §4b binds the table, the completeness of the file label and the written
value, and **nothing about whether the source phrasing refers to the row's own
subject** — provenance without referent, the same defect that falsified §4. The
class is therefore **review-grade, not apply-grade**: `status` is absent from
`o1_recommended` and no driver applies it.
**Open operator decision — a referent condition for §4b.** Two candidates are
costed over the eight in `r11-pilot-results.md` §8; both kill wrong proposals and
no correct one, and neither is implemented, because extending a table ratified as
*closed* is an operator decision, exactly as condition 5 was in §4a.
## 5. The O2 policy — RATIFIED 2026-08-03, with a remainder check