fix(okr): separer committed og aspirational i sporings-malene
This commit is contained in:
parent
47e7ac9e2a
commit
785385baa3
3 changed files with 97 additions and 18 deletions
|
|
@ -163,6 +163,46 @@ test('(a2) F-c: ingen parallelle confidence-etikettsett utenfor kanon', () => {
|
|||
);
|
||||
});
|
||||
|
||||
// --- (k) Separasjonsregelen i malene (D6 steg 14) ---
|
||||
//
|
||||
// okr-framework.md:557: committed og aspirational boer ikke blandes til ett
|
||||
// aggregat -- de to typene rapporteres hver for seg. Generatoren
|
||||
// (lib/syklus-rapport.mjs) haandhever det; malene gjorde det ikke. En regel med to
|
||||
// lesninger er nettopp defektklassen S38-S40 kostet tre oekter.
|
||||
//
|
||||
// Skanne-settet er commands/ + agents/ -- MALENE pluginen emitterer. references/
|
||||
// staar utenfor med vilje: der foeres en annen diskusjon (per-Objective-aggregering
|
||||
// i kalkulatoren), og aa dra den inn her ville blandet to spoersmaal i en vakt.
|
||||
//
|
||||
// To former, fordi bruddet har to skrivemaater:
|
||||
// ETIKETT -- "Samlet score: <verdi>" i en malblokk. De andre aksene gaar klar:
|
||||
// rubrikkens 0-10-skala har ingen verdi paa linjen, og det arkiverte
|
||||
// datafeltet `samlet_score` er snake_case, ikke "samlet score".
|
||||
// INSTRUKS -- "samlet (vektet gjennomsnitt)", som ber leseren lage aggregatet.
|
||||
// En linje som navngir typen er per definisjon differensiert og gaar klar.
|
||||
const AGGREGAT_ETIKETT = /samlet\s+score[:*\s]*[[\]0-9X_]/i;
|
||||
const AGGREGAT_INSTRUKS = /\bsamlet\b[^\n]{0,25}vektet\s+gjennomsnitt/i;
|
||||
|
||||
test('(k) separasjonsregelen: ingen mal emitterer et udifferensiert samlet-aggregat', () => {
|
||||
const maler = [...mdFiles('commands'), ...mdFiles('agents')];
|
||||
assert.ok(maler.length >= 10, `parser-sanity: forventet >= 10 maler, fant ${maler.length}`);
|
||||
|
||||
const violations = [];
|
||||
for (const f of maler) {
|
||||
readDoc(f).split('\n').forEach((line, i) => {
|
||||
if (/committed|aspirational/i.test(line)) return;
|
||||
if (AGGREGAT_ETIKETT.test(line) || AGGREGAT_INSTRUKS.test(line)) {
|
||||
violations.push(`${f}:${i + 1}: ${line.trim()}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
assert.deepEqual(
|
||||
violations,
|
||||
[],
|
||||
`udifferensiert aggregat i mal (okr-framework.md:557 -- rapporter typene hver for seg):\n${violations.join('\n')}`,
|
||||
);
|
||||
});
|
||||
|
||||
// --- F-d kadens x publikum (D1 / review.md 607313e3) ---
|
||||
// Den forrige vakten bandt kadens-adjektivet DIREKTE til check-in (\s+), og kunne derfor
|
||||
// ikke feile paa den KANONISKE tabellen: etter "Maanedlig" kommer "**" og en cellevegg,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue