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:
Kjell Tore Guttormsen 2026-07-17 04:02:10 +02:00
commit 482effbad1
25 changed files with 289 additions and 29 deletions

View file

@ -146,6 +146,25 @@ test('projectFrontmatter: kompound-ord i title matcher ikke vokab-term (Statusno
);
});
// --- B2 (1.7.1): manglende sourceMtime skal feile beskrivende, ikke RangeError ---
test('projectFrontmatter: manglende sourceMtime -> beskrivende feil som navngir opsjonen', () => {
const concept = { sourceSlug: 'x', title: 'Notat', slug: 'notat', level: 1, body: 'x' };
assert.throws(
() => projectFrontmatter(concept, { sourcePath: 'innboks/x.txt' }),
/sourceMtime/,
'feilen skal navngi sourceMtime (ikke en naken RangeError fra toISOString)',
);
});
test('projectFrontmatter: ugyldig sourceMtime (Invalid Date) -> samme beskrivende feil', () => {
const concept = { sourceSlug: 'x', title: 'Notat', slug: 'notat', level: 1, body: 'x' };
assert.throws(
() => projectFrontmatter(concept, { sourcePath: 'innboks/x.txt', sourceMtime: new Date('ugyldig') }),
/sourceMtime/,
);
});
test('projectFrontmatter: helt ord i title matcher fortsatt (Status for KR -> Status)', () => {
const concept = { sourceSlug: 's', title: 'Status for KR', slug: 'status-for-kr', level: 1, body: 'x' };
const e = projectFrontmatter(concept, { sourcePath: 'innboks/s.txt', sourceMtime: MTIME });