fix(okr): B2 ingestion-kode-hygiene + bump 1.7.1 (patch-lane)
8 hygiene-fikser fra review 2026-07-16 par.4 kode-lista, TDD roed-groenn (suite 138 -> 149): - innboks-split: slugify translittererer ae/oe (datatap-fiks) - innboks-frontmatter: beskrivende feil ved manglende sourceMtime - okf-index: --okf-version bumper eksisterende rot, flagg-tolerant CLI (exit 2 ved manglende verdi), sanitizeEntry strip C1/zero-width/bidi/ Unicode-tag - write-org-profile: circuit-breaker MERGER i stedet for aa overskrive full config (M4); test beviser at eksisterende config overlever - compose-org-profile: intern ----linje trunkerer ikke blokken - coaching-hook: at-risk teller status-markerte tabellrader (M1/m1) - inject-okr-context: topic-guard treffer boeyningsformer (maalene) - frontmatter: BOM/CRLF-toleranse (falsk mangler-type-fiks) Versjonsflater bumpet til 1.7.1 (package/plugin/lock/CLAUDE/README/ SKILL x2/package-shape-test) + CHANGELOG 1.7.1-seksjon (B1+B2). Release-tag + katalog-ref venter paa [G-B] operatoer-go. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
6028ac2f90
commit
482effbad1
25 changed files with 289 additions and 29 deletions
|
|
@ -312,6 +312,74 @@ test('okf-index: innboks/ + dot-katalog -> ingen egen index.md OG ikke listet i
|
|||
}
|
||||
});
|
||||
|
||||
// --- B2 (1.7.1): okf-index CLI-versjonering + sanitizeEntry-herding ---
|
||||
|
||||
const INDEX_CLI = join(ROOT, 'scripts', 'okf-index.mjs');
|
||||
|
||||
test('okf-index CLI: eksplisitt --okf-version bumper eksisterende rot-index (flagg foer rot)', () => {
|
||||
const dir = tmpRoot();
|
||||
try {
|
||||
buildCleanIngest(dir); // rot-index har allerede okf_version: kb-layout-2026-06
|
||||
execFileSync('node', [INDEX_CLI, '--okf-version', 'kb-layout-2027-01', dir], { encoding: 'utf8' });
|
||||
const root = readFileSync(join(dir, 'index.md'), 'utf8');
|
||||
assert.match(root, /^okf_version: kb-layout-2027-01$/m, 'eksplisitt versjon skal vinne over eksisterende');
|
||||
// Uten flagg bevares den bumpede versjonen (idempotent vedlikehold, som foer).
|
||||
execFileSync('node', [INDEX_CLI, dir], { encoding: 'utf8' });
|
||||
const root2 = readFileSync(join(dir, 'index.md'), 'utf8');
|
||||
assert.match(root2, /^okf_version: kb-layout-2027-01$/m, 'implisitt kjoering bevarer eksisterende versjon');
|
||||
} finally {
|
||||
rmSync(dir, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
test('okf-index CLI: --okf-version uten verdi -> bruksfeil exit 2, ingen skriving', () => {
|
||||
const dir = tmpRoot();
|
||||
try {
|
||||
buildCleanIngest(dir);
|
||||
const before = readFileSync(join(dir, 'index.md'), 'utf8');
|
||||
let status = 0;
|
||||
try {
|
||||
execFileSync('node', [INDEX_CLI, dir, '--okf-version'], { encoding: 'utf8', stdio: 'pipe' });
|
||||
} catch (e) {
|
||||
status = e.status;
|
||||
}
|
||||
assert.equal(status, 2, 'manglende flagg-verdi skal gi bruksfeil exit 2');
|
||||
assert.equal(readFileSync(join(dir, 'index.md'), 'utf8'), before, 'rot-index skal vaere uendret');
|
||||
} finally {
|
||||
rmSync(dir, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
test('okf-index: RTL/ZWSP/C1/Unicode-tag i title/description strippes fra index-entry', () => {
|
||||
const dir = tmpRoot();
|
||||
try {
|
||||
mkdirSync(join(dir, 'dokumenter'), { recursive: true });
|
||||
writeFileSync(join(dir, 'index.md'), '# Bundle\n\nokf_version: kb-layout-2026-06\n');
|
||||
// RLO (u202E), ZWSP (u200B), C1 NEL (u0085), Unicode tag (U+E0041), ZWJ (u200D)
|
||||
// -- alle som eksplisitte escapes (ASCII-ren testkilde, ingen usynlige bytes).
|
||||
writeFileSync(
|
||||
join(dir, 'dokumenter', 'usynlig.md'),
|
||||
'---\ntype: Notat\ntitle: "Rap\u202Eport\u200B nr\u0085 1\u{E0041}"\n'
|
||||
+ 'description: "Se\u200D vedlegg"\n---\n# U\n',
|
||||
);
|
||||
generateIndexes(dir);
|
||||
const idx = readFileSync(join(dir, 'dokumenter', 'index.md'), 'utf8');
|
||||
const entry = idx.split('\n').find((l) => l.startsWith('* '));
|
||||
assert.ok(entry, 'usynlig.md skal ha en entry');
|
||||
assert.doesNotMatch(
|
||||
entry,
|
||||
/[\u200B-\u200F\u202A-\u202E\u2066-\u2069\u0080-\u009F\uFEFF]|[\u{E0000}-\u{E007F}]/u,
|
||||
'ingen bidi-/zero-width-/C1-/tag-tegn i entry',
|
||||
);
|
||||
assert.match(entry, /Rapport nr 1/, 'synlig tekst bevart etter stripping');
|
||||
assert.match(entry, /Se vedlegg/, 'description-tekst bevart');
|
||||
generateIndexes(dir);
|
||||
assert.equal(readFileSync(join(dir, 'dokumenter', 'index.md'), 'utf8'), idx, 'sanering er idempotent');
|
||||
} finally {
|
||||
rmSync(dir, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
// --- B3 (A1): strict-gaten fanger ALLE standard lenkeformer, ikke bare inline ---
|
||||
|
||||
test('okf-check --strict-ingest: referanse-def/autolink/HTML-anker fanges (B3)', () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue