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
|
|
@ -7,7 +7,9 @@
|
|||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { execFileSync } from 'node:child_process';
|
||||
import { mkdtempSync, writeFileSync, readFileSync, existsSync, realpathSync, rmSync } from 'node:fs';
|
||||
import {
|
||||
mkdtempSync, mkdirSync, writeFileSync, readFileSync, existsSync, realpathSync, rmSync,
|
||||
} from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join, dirname } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
|
@ -72,6 +74,31 @@ test('circuit-breaker: uskrivbart hjem -> fallback til prosjektlokal uten error'
|
|||
});
|
||||
});
|
||||
|
||||
test('circuit-breaker M4: eksisterende okr.local.md OVERLEVER fallback (merge, ikke overskriv)', () => {
|
||||
withDirs((home, work) => {
|
||||
writeFileSync(join(home, '.claude'), 'not a directory\n');
|
||||
// Pre-eksisterende FULL config (syklus + onboarding + body) i prosjektlokal fil
|
||||
// -- foer B2 ble denne overskrevet i sin helhet av profil-fallbacken (M4).
|
||||
mkdirSync(join(work, '.claude'), { recursive: true });
|
||||
writeFileSync(
|
||||
join(work, '.claude', 'okr.local.md'),
|
||||
'---\nnavn: "GammelOrg"\nid: "T2-2026"\nonboarding_status: fullfort\n---\nNotater under frontmatter.\n',
|
||||
);
|
||||
const profil = '---\nnavn: "NyOrg"\n---\n';
|
||||
const out = runHelper(work, home, profil);
|
||||
const fallback = join(work, '.claude', 'okr.local.md');
|
||||
assert.equal(realpathSync(out.trim()), realpathSync(fallback), 'stdout rapporterer fallback-sti');
|
||||
const merged = readFileSync(fallback, 'utf8');
|
||||
assert.match(merged, /id: "T2-2026"/, 'syklus-id overlever fallback');
|
||||
assert.match(merged, /onboarding_status: fullfort/, 'onboarding-state overlever fallback');
|
||||
assert.match(merged, /Notater under frontmatter\./, 'body under frontmatter overlever');
|
||||
// Round-trip: hooken resolver NY org (first-match) OG GAMMEL syklus fra samme fil.
|
||||
const injected = runHook(work, home);
|
||||
assert.match(injected, /NyOrg/, 'ny profil er effektiv (first-match foran gammel blokk)');
|
||||
assert.match(injected, /T2-2026/, 'gammel syklus-config resolver fortsatt');
|
||||
});
|
||||
});
|
||||
|
||||
test('round-trip: hjem-skrevet org reflekteres av inject-okr-context', () => {
|
||||
withDirs((home, work) => {
|
||||
const profil = '---\nnavn: "RoundTripOrg"\n---\n';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue