feat(okr): 1.8.1 okf_version/okf_layout-splitt (OKF-spec 12)
Rot-index.md bar en markoer som dekket to urelaterte konsepter: den upstream
OKF-versjonen bundelen sikter mot OG pluginens egen layout-revisjon. Specen
(catalog/docs/okf-second-brain/spec.md 12, log.md 2026-07-23) skiller dem i to
markoerer. Denne releasen migrerer emitteren og sjekkeren over.
- okf-index.mjs: emitterer okf_version: 0.1 (upstream, paakrevd per 3) +
okf_layout: kb-layout-2026-06 (vaar revisjon, valgfri per 12). Ny konstant
OKF_LAYOUT; OKF_VERSION baerer naa upstream-verdien. Begge rot-eksklusive.
- Migrasjonssti: en ikke-upstream verdi i okf_version FLYTTES verbatim til
okf_layout ved neste kjoering. Spec-konform okf_version roeres aldri;
eksisterende okf_layout bevares. Byte-idempotent.
- okf-check.mjs: ekkoer begge markoerene (fravaerende -> MANGLER). Rent ekko,
ingen ny haandheving -- spec 3 er ikke haandhevende paa form ennaa.
- CLI: --okf-layout er kanon. --okf-version beholdt som deprecated alias
(verdien var alltid en layout-revisjon) m/ varsel til stderr, ALDRI stdout.
Samme aliasing for generateIndexes({ okfLayout }) mot { okfVersion }.
- Doc-flater (CLAUDE.md, second-brain SKILL.md, commands/oppsett.md) beskriver
naa to markoerer der de beskrev en.
Suite 167 -> 179, alle groenne. Versjonssync 1.8.1 over alle shippede flater.
Laaser opp catalog + llm-ingestion-okf, som begge ventet paa denne migrasjonen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016pUfkQ1YyH75z9y6RBaBHG
This commit is contained in:
parent
44ceec7205
commit
0059da7bef
16 changed files with 333 additions and 59 deletions
|
|
@ -5,8 +5,10 @@
|
|||
// - >= 1 fil uten type -> exit 1 + teller + navngir filene.
|
||||
// - 0 filer uten type -> exit 0.
|
||||
// Anbefalte felt (resource/title/description/timestamp) rapporteres som ADVARSEL,
|
||||
// ikke feil. Rotens `okf_version` ekkoes for menneskelig sammenligning mot
|
||||
// gjeldende standard (ingen auto-fetch — hooks/scripts er no-network; SC7 myket).
|
||||
// ikke feil. Rotens to markoerer (`okf_version` = upstream OKF-versjon, spec §3;
|
||||
// `okf_layout` = emitterens egen layout-revisjon, spec §12) ekkoes for menneskelig
|
||||
// sammenligning mot gjeldende standard (ingen auto-fetch — hooks/scripts er
|
||||
// no-network; SC7 myket).
|
||||
//
|
||||
// Kjoeres PER ROT (prosjekt `.claude/okr/` + home `~/.claude/okr/org/`).
|
||||
// Zero npm dependencies (node:-builtins).
|
||||
|
|
@ -55,12 +57,19 @@ function walkConcepts(root) {
|
|||
return out;
|
||||
}
|
||||
|
||||
// Les rotens okf_version (markdown-tekst i index.md, ikke frontmatter). null hvis fravaerende.
|
||||
function rootOkfVersion(root) {
|
||||
// Les rotens to markoerer (markdown-tekst i index.md, ikke frontmatter).
|
||||
// `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).
|
||||
function rootMarkers(root) {
|
||||
const idx = join(root, 'index.md');
|
||||
if (!existsSync(idx)) return null;
|
||||
const m = readFileSync(idx, 'utf8').match(/^okf_version:\s*(.+)$/m);
|
||||
return m ? m[1].trim() : null;
|
||||
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 { okfVersion: pick('okf_version'), okfLayout: pick('okf_layout') };
|
||||
}
|
||||
|
||||
// strictIngest (default AV): paa skrivestien handheves det lukkede vokabularet
|
||||
|
|
@ -117,7 +126,7 @@ export function checkBundle(root, { strictIngest = false, files } = {}) {
|
|||
warnings,
|
||||
strictErrors,
|
||||
strictIngest,
|
||||
okfVersion: rootOkfVersion(root),
|
||||
...rootMarkers(root),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -147,6 +156,7 @@ if (isMain) {
|
|||
for (const e of r.strictErrors) out.push(` x ${e}`);
|
||||
}
|
||||
out.push(` okf_version: ${r.okfVersion || 'MANGLER (rot-index uten okf_version)'}`);
|
||||
out.push(` okf_layout: ${r.okfLayout || 'MANGLER (valgfri markoer)'}`);
|
||||
out.push(` Advarsler (anbefalte felt): ${r.warnings.length}`);
|
||||
for (const w of r.warnings) out.push(` ! ${w}`);
|
||||
const failed = r.missingType.length > 0 || (strictIngest && r.strictErrors.length > 0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue