refactor(ms-ai-architect): R14 — persona ut av plugin-flaten, og de seks stedene som produserte den

Nøytral arkitekt-ramme (ratifisert 15.09) i SKILL.md-ene, 23 kommandoer, 70 redaksjonelle
forekomster i ref-korpuset, README/CLAUDE.md/NOTICE og A11Y-rapportens proveniens-linje.
Hver av de 70 avgjort i kontekst: dialog fikk ny taler, proveniens ny opphavspåstand.

Ordren navnga fem produsent-steder; den live sjette manglet. `PROMPT_TEMPLATE` settes i
generate-skills.sh:27 og leses ALDRI — prompten er en heredoc i samme script. Å rette bare
prompt-template.md ville latt generatoren re-minte personaen ved neste KB-kjøring.

Ny G4-klausul i check-cosmo-gate.mjs: persona i leveranseflaten = 0, derivasjonsregisteret
pinnet per fil PÅ TALL (et filnavn-unntak er blindt for hva fila senere inneholder).
Registeret utvidet med README.md 3 — versjonstabellens rader er historikk, ikke leveranse.
Den ene genitiv-formede produktlinja adjudiseres på cosmos-db-URL-en i samme rad; regelen
er målt lukket (8 tvetydige linjer totalt, 33 URL-linjer, 2 persona-klassifiserte, begge
produkt) og hvitvasker ikke bar `Cosmo`. classifyCosmo urørt — baselinene hviler på den.
R3 godtar nå R14-utført (0) men ingenting imellom: et halvveis sveip felles fortsatt.

Bevis: gate PASSED + NETTET VALIDERT BEGGE VEIER · 1137/1137 · validate-plugin 250/0/0 ·
begge --dry-drivere 0 · Layer B 45/45 OK (kjent-positiv feller, exit 1).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-15 23:15:27 +02:00
commit ced0c5f46d
80 changed files with 400 additions and 152 deletions

View file

@ -95,11 +95,15 @@ test('the editorial sets are the measured dialogue and provenance classes', () =
// ------------------------------------------------------------------ KLAUSUL 2: reach
test('the corpus carries ZERO mechanical sites, and the editorial ones are all still there', () => {
// Asserts the state AFTER the transform. The pre-transform reference point — 62 mechanical
// in 50 files — lives in cosmo-labels-baseline.json and is read from there rather than
// restated here: a number asserted in two places drifts, and the baseline is the artefact
// the gate compares against. The test below pins that the two agree.
test('the corpus carries ZERO mechanical sites, and R14 has emptied the editorial ones', () => {
// Asserts the state AFTER the transform. The pre-transform reference points — 62 mechanical
// in 50 files, 16 editorial labels + 10 cells — live in cosmo-labels-baseline.json and are
// read from there rather than restated here: a number asserted in two places drifts, and the
// baseline is the artefact the gate compares against. The test below pins that the two agree.
//
// R13b held the editorial sites at 16+10 so that R14 could adjudicate each in context. R14
// (2026-09-15) did exactly that, so 0 is now the correct state, not a breach. What must NOT
// happen is a value in between: a half-swept corpus is the failure this still catches.
const t = { mechLabel: 0, mechCell: 0, edLabel: 0, edCell: 0, unmapped: [] };
for (const rel of refFiles()) {
const s = classifyPersonaSites(readFileSync(join(PLUGIN_ROOT, rel), 'utf8'));
@ -111,8 +115,8 @@ test('the corpus carries ZERO mechanical sites, and the editorial ones are all s
}
assert.deepEqual(t.unmapped, [], 'an unmeasured persona site exists — the net has a hole');
assert.equal(t.mechLabel + t.mechCell, 0, 'R13b is executed: no mechanical site remains');
assert.equal(t.edLabel, 16, 'dialogue (14) + the order\u2019s own 2 sentence forms, held for R14');
assert.equal(t.edCell, 10, 'provenance cells held back for R14');
assert.equal(t.edLabel, 0, 'R14 is executed: the 16 dialogue/sentence labels are neutralised');
assert.equal(t.edCell, 0, 'R14 is executed: the 10 provenance cells are neutralised');
});
test('the ratified tables and the gate baseline describe the SAME 62 occurrences', () => {