fix(okr): siterings-aksen naadde produsenten, ikke checkeren

1.8.2 unquotet parseExistingIndex (produsent-siden). okf-check sin
rootMarkers/pick returnerte fortsatt raa streng, saa samme fil ga to
lesninger av samme markoer:

  paa disk:     okf_version: "0.2"        (upstreams eget eksempel, SPEC.md:773)
  produsenten:  0.2                       <- unquotet
  checkeren:    "0.2"                     <- raa

Catalog maalte divergensen direkte mot sin egen checker gjennom
evaluateBundle: begge implementasjonene AKSEPTERER -- avviket ligger paa
verdien, ikke paa dommen. Ingen gate rammes i dag fordi paritetskorpuset
ikke har en sitert fikstur, hvilket ogsaa betyr at paritetsgatens groenne
farge ikke dekket denne aksen: den var "ikke kjoert", ikke "som forventet".

Fiks: unquote() eksporteres fra okf-index.mjs og importeres av
okf-check.mjs -- EN regel delt, ikke to kopier som kan drifte fra
hverandre. Script-til-script-import foelger etablert moenster
(innboks-ingest.mjs:51).

Tester: 192 -> 197. Fire kjoert roede foer fiksen. Den femte
(ubalansert-vakten) var groenn foer fiksen -- raa streng bevarer "0.2
naturlig -- og er derfor mutasjons-verifisert: en graadig unquote roedner
baade produsent- og checker-vakten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XKoS7Eb8YmAfeCf1EKZXt1
This commit is contained in:
Kjell Tore Guttormsen 2026-07-31 18:25:58 +02:00
commit 65c9412cca
4 changed files with 79 additions and 2 deletions

View file

@ -746,6 +746,71 @@ test('okf-index: UBALANSERT anfoerselstegn strippes ikke (konservativ unquote)',
}
});
// --- S40: siterings-aksen naar ogsaa CHECKEREN (lese-siden) ---
// 1.8.2 unquotet PRODUSENTEN (okf-index/parseExistingIndex). Checkerens
// rootMarkers/pick returnerte fortsatt raa streng, saa samme fil ga to lesninger:
// produsenten tolket `okf_version: "0.2"` som 0.2, checkeren ekkoet «"0.2"».
// Catalog maalte divergensen mot sin egen checker (begge AKSEPTERER -- avviket er
// paa VERDIEN) paa en bundle som foelger upstreams eget eksempel (SPEC.md:773).
// Unquote er samme konservative regel som paa produsent-siden: KUN et matchende
// par er YAML-syntaks; en halv sekvens er en ugyldig verdi som bevares uroert.
test('okf-check: SITERT okf_version rapporteres unquoted (siterings-akse, lese-siden)', () => {
const dir = tmpRoot();
try {
writeRootIndex(dir, ['okf_version: "0.2"']);
const r = checkBundle(dir);
assert.equal(r.okfVersion, '0.2', 'anfoerselstegn er YAML-syntaks, ikke del av verdien');
} finally {
rmSync(dir, { recursive: true, force: true });
}
});
test('okf-check: ENKELTSITERT okf_version rapporteres unquoted', () => {
const dir = tmpRoot();
try {
writeRootIndex(dir, ["okf_version: '0.2'"]);
const r = checkBundle(dir);
assert.equal(r.okfVersion, '0.2');
} finally {
rmSync(dir, { recursive: true, force: true });
}
});
test('okf-check: SITERT okf_layout rapporteres unquoted', () => {
const dir = tmpRoot();
try {
writeRootIndex(dir, ['okf_version: 0.2', 'okf_layout: "kb-layout-2099-12"']);
const r = checkBundle(dir);
assert.equal(r.okfLayout, 'kb-layout-2099-12', 'begge markoerene leses likt');
} finally {
rmSync(dir, { recursive: true, force: true });
}
});
test('okf-check: UBALANSERT anfoerselstegn bevares uroert (konservativ unquote)', () => {
const dir = tmpRoot();
try {
writeRootIndex(dir, ['okf_version: "0.2']);
const r = checkBundle(dir);
assert.equal(r.okfVersion, '"0.2', 'halv sekvens er ugyldig verdi, ikke noe aa gjette paa');
} finally {
rmSync(dir, { recursive: true, force: true });
}
});
test('okf-check CLI: sitert markoerverdi ekkoes unquoted i utskriften', () => {
const dir = tmpRoot();
try {
writeRootIndex(dir, ['okf_version: "0.2"', 'okf_layout: "kb-layout-2099-12"']);
const { stdout } = runCheck(dir);
assert.match(stdout, /okf_version: 0\.2$/m, 'menneskelig sammenligning skal se verdien, ikke syntaksen');
assert.match(stdout, /okf_layout: kb-layout-2099-12$/m);
} finally {
rmSync(dir, { recursive: true, force: true });
}
});
test('okf-index CLI: --okf-layout bumper layout og lar okf_version staa', () => {
const dir = tmpRoot();
try {