fix(okr): skjerp separasjonsvakten og lukk tre defekter i D6-leveransen
This commit is contained in:
parent
785385baa3
commit
d2ac153a68
5 changed files with 100 additions and 14 deletions
|
|
@ -175,12 +175,21 @@ test('(a2) F-c: ingen parallelle confidence-etikettsett utenfor kanon', () => {
|
|||
// 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".
|
||||
// ETIKETT -- "Samlet score" sammen med en VERDI paa linjen (tall, X-plassholder
|
||||
// eller utfyllingsfelt). Verdien og etiketten bindes bevisst IKKE
|
||||
// til hverandre posisjonelt: "Samlet score (committed +
|
||||
// aspirational): 0.53" har noeyaktig det aggregatet vakten finnes
|
||||
// for, og et moenster som krevde verdien rett etter etiketten slapp
|
||||
// den gjennom (mutasjons-verifisert -- den gjorde det).
|
||||
// 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;
|
||||
//
|
||||
// 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".
|
||||
// Mermaids akselabel rendrer det samme datafeltet i Title Case og unntas
|
||||
// eksplisitt -- arkiv-kontrakten er en annen sak enn maleneS rapportform.
|
||||
const AGGREGAT_ORD = /samlet\s+score/i;
|
||||
const VERDISLOT = /\d[.,]\d|\d\.XX|_{3,}|\bX{1,2}\b/;
|
||||
const MERMAID_AKSE = /^\s*[xy]-axis\b/;
|
||||
const AGGREGAT_INSTRUKS = /\bsamlet\b[^\n]{0,25}vektet\s+gjennomsnitt/i;
|
||||
|
||||
test('(k) separasjonsregelen: ingen mal emitterer et udifferensiert samlet-aggregat', () => {
|
||||
|
|
@ -190,8 +199,14 @@ test('(k) separasjonsregelen: ingen mal emitterer et udifferensiert samlet-aggre
|
|||
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)) {
|
||||
// Differensiert = linjen navngir NOEYAKTIG EN type. En linje som nevner
|
||||
// begge ("Samlet score (committed + aspirational)") er nettopp det
|
||||
// udifferensierte aggregatet vakten finnes for -- den skal ikke slippe
|
||||
// gjennom paa aa ha uttalt ordene.
|
||||
if (/committed/i.test(line) !== /aspirational/i.test(line)) return;
|
||||
if (MERMAID_AKSE.test(line)) return;
|
||||
const etikett = AGGREGAT_ORD.test(line) && VERDISLOT.test(line);
|
||||
if (etikett || AGGREGAT_INSTRUKS.test(line)) {
|
||||
violations.push(`${f}:${i + 1}: ${line.trim()}`);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue