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

@ -19,6 +19,7 @@ import { fileURLToPath } from 'node:url';
import { parseFrontmatter } from '../lib/frontmatter.mjs';
import { TYPE_VOCAB } from '../lib/okf-vocab.mjs';
import { resolveBundleLink } from '../lib/okf-links.mjs';
import { unquote } from './okf-index.mjs';
const RECOMMENDED = ['resource', 'title', 'description', 'timestamp'];
@ -61,13 +62,20 @@ function walkConcepts(root) {
// `okf_version` = upstream OKF-versjon (spec §3), `okf_layout` = emitterens egen
// layout-revisjon (spec §12, valgfri). Fravaerende markoer -> null. Ren ekko:
// verdiene valideres ikke (spec §3 er ikke haandhevende paa form ennaa).
//
// Verdien unquotes med SAMME konservative regel som produsent-siden (okf-index
// unquote(), delt import -- ikke en kopi). Uten den ga samme fil to lesninger:
// produsenten tolket `okf_version: "0.2"` som 0.2, checkeren ekkoet «"0.2"».
// Anfoerselstegn er YAML-strengsyntaks, ikke del av verdien -- og siden
// upstreams eneste kanoniske eksempel med verdi (SPEC.md:773) er sitert, er
// dette den formen en spec-tro bundle faktisk har paa disk.
function rootMarkers(root) {
const idx = join(root, 'index.md');
if (!existsSync(idx)) return { okfVersion: null, okfLayout: null };
const raw = readFileSync(idx, 'utf8');
const pick = (key) => {
const m = raw.match(new RegExp(`^${key}:\\s*(.+)$`, 'm'));
return m ? m[1].trim() : null;
return m ? unquote(m[1].trim()) : null;
};
return { okfVersion: pick('okf_version'), okfLayout: pick('okf_layout') };
}