Rotårsak: en datoløs ref-fil fikk effectiveDate=0000-01-01 (alltid «stale») OG en path-basert prioritet (kunne bli critical) → flommet critical-bøtta og druknet genuint kritiske filer. Fix: ny unverified-tier deklarert i domain-taxonomy.json (lag 0, eneste sannhetskilde for prioritet). makePriorityFn(tax) tar nå valgfri hasDate (default true → bakoverkompatibelt for eksisterende én-args-kallere); report-changes sender Boolean(fileDate). unverified rangerer sist i sorteringen — manglende dato er metadata-hygiene, ikke currency-hast. Ekte registry: 1 fil skilt ut som Unverified. TDD: 4 tester FØR kode (test-priority-unverified.test.mjs). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REiKFhP4w6xGXXqWKpPCJJ
43 lines
2.2 KiB
JavaScript
43 lines
2.2 KiB
JavaScript
// tests/kb-update/test-priority-unverified.test.mjs
|
|
// TDD for carry-forward B (Sesjon 5): a reference file WITHOUT a "Last updated:"
|
|
// header must land in the 'unverified' priority bucket — not masquerade as
|
|
// critical-priority noise (the bug: dateless files got effectiveDate 0000-01-01
|
|
// AND a path-based priority, so they flooded the critical tier and drowned the
|
|
// genuinely-stale critical files).
|
|
//
|
|
// The decision lives in lag 0 (taxonomy.mjs makePriorityFn, the single source of
|
|
// truth for priority); report-changes only supplies whether the file carried a
|
|
// date header. The 'unverified' tier is declared in domain-taxonomy.json.
|
|
|
|
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { loadTaxonomy, makePriorityFn } from '../../scripts/kb-update/lib/taxonomy.mjs';
|
|
|
|
const tax = loadTaxonomy();
|
|
|
|
test('dateless file → unverified, NOT its path-based critical priority', () => {
|
|
const prio = makePriorityFn(tax);
|
|
const path = 'skills/ms-ai-security/references/cost-optimization/budget.md';
|
|
// Same path: dated → critical (path rule), dateless → unverified.
|
|
assert.equal(prio(path, true), 'critical');
|
|
assert.equal(prio(path, false), 'unverified');
|
|
// The regression this fixes: dateless must never reach critical.
|
|
assert.notEqual(prio(path, false), 'critical');
|
|
});
|
|
|
|
test('backward-compat: single-arg call behaves as before (hasDate defaults true)', () => {
|
|
const prio = makePriorityFn(tax);
|
|
assert.equal(prio('skills/ms-ai-security/references/cost-optimization/budget.md'), 'critical');
|
|
assert.equal(prio('skills/ms-ai-engineering/references/data-engineering/cosmos.md'), 'low');
|
|
});
|
|
|
|
test('dateless overrides every path tier (high/medium/low → unverified)', () => {
|
|
const prio = makePriorityFn(tax);
|
|
assert.equal(prio('skills/ms-ai-governance/references/responsible-ai/fairness.md', false), 'unverified');
|
|
assert.equal(prio('skills/ms-ai-advisor/references/platforms/copilot-studio.md', false), 'unverified');
|
|
assert.equal(prio('skills/ms-ai-engineering/references/data-engineering/cosmos.md', false), 'unverified');
|
|
});
|
|
|
|
test('taxonomy declares the dateless tier in lag 0 (source of truth)', () => {
|
|
assert.equal(tax.priority.dateless, 'unverified');
|
|
});
|