fix(okr): seksjons-bevisst confidence-telling i coaching-hook (patch-lane #1)
Hooken talte alle tabellrader merket At Risk/Off Track under ett. okr-framework.md:605
sier samtidig at de fleste stretch-KR BOER staa At Risk, og at permanent groent er selve
sandbagging-signalet. For en sunn aspirational-portefoelje pekte varselet dermed feil vei:
eneste maate aa dempe det paa var aa merke stretch-KR groenne -- noeyaktig det kanon
advarer mot. Fra 1.10.0 fylles kolonnen deterministisk, saa kollisjonen inntraff alltid.
Tellingen foelger naa seksjonen raden staar under:
committed -> At Risk OG Off Track teller
aspirational -> KUN Off Track ("progresjonen har stoppet opp" er reelt ogsaa for stretch)
uplasserbar -> telles som committed
Fallbacken er en operatoerbeslutning, ikke en default: haandskrevne status.md fra foer
1.10.0 har ingen seksjonsstruktur, og en fil som varsler for lite er farligere enn en som
varsler for mye. Samme verdi som dekningsvakten i statusrapport() haandhever paa skrivesiden.
Rad-predikatene er navngitte konstanter, og de to testfilene som leser dem ut av hookens
kilde henter dem naa ved NAVN i stedet for ved posisjon -- hooken har flere predikater enn
to, saa "det foerste og det andre literalet" ville vaert en vakt som stille plukket feil regex.
Test (7) i syklus-status.test.mjs kunne ikke bare endres fra 3 til 2: den SIMULERTE hookens
aritmetikk med skrapte rad-predikater, og en seksjons-bevisst regel er ikke uttrykkbar per
rad. Splittet i (7) rad-form og (7b) ekte ende-til-ende-telling som kjoerer hooken mot
generatorens fil paa disk.
Suite 343 -> 348. Fire mutasjoner verifisert: seksjons-bevissthet fjernet -> ROED (4),
aspirational teller aldri -> ROED (1), fallback snudd -> ROED (3), navne-forankring brutt
-> ROED (6).
Ingen versjonsbump: bugfix paa releaset kode (presedens 8a7bc08). CHANGELOGs "Kjent avvik"
under 1.10.0 er ikke slettet -- 1.10.0 BLE utgitt med avviket -- men lukket med hva som
gjelder naa.
This commit is contained in:
parent
9033f37b63
commit
43a84d2326
5 changed files with 233 additions and 38 deletions
|
|
@ -9,6 +9,27 @@ import { readFileSync, existsSync, readdirSync } from 'node:fs';
|
|||
import { join } from 'node:path';
|
||||
import { parseFrontmatter } from '../../lib/frontmatter.mjs';
|
||||
|
||||
// Rad-predikatene er NAVNGITTE konstanter fordi to testfiler leser dem ut av
|
||||
// denne kilden i stedet for aa kopiere dem (tests/syklus-rapport.test.mjs,
|
||||
// tests/syklus-status.test.mjs). En kopiert regex ville bare bevist at testen er
|
||||
// enig med seg selv. Navne-forankring, ikke posisjon: predikatene er ikke lenger
|
||||
// to, saa «det foerste og det andre literalet» ville vaert en vakt som stille
|
||||
// plukket feil regex ved neste endring.
|
||||
|
||||
// En KR-rad i statusrapporten er en markdown-tabellrad.
|
||||
const ER_KR_RAD = /^\s*\|.*\|\s*$/;
|
||||
// R1 (1.8.0): den kanoniske skalaen fra okr-framework.md -- On Track / At Risk /
|
||||
// Off Track. De to norske etikettene beholdes som bakover-kompatibilitet for
|
||||
// status-filer skrevet foer 1.8.0. On Track matcher ingen av dem.
|
||||
const FARE_ORD = /at risk|off track|i fare|blokkert/i;
|
||||
// Delmengden som betyr «progresjonen har stoppet opp» (okr-framework.md:610).
|
||||
// Den eneste som ogsaa gjelder aspirational KR -- se seksjons-regelen under.
|
||||
const STOPPET_ORD = /off track|blokkert/i;
|
||||
// Toppnivaa-overskrift. `### Undertittel` matcher IKKE: etter `##` staar `#`,
|
||||
// som ikke er [ \t]. Verdi-grenen er [ \t], aldri \s (laast beslutning 14).
|
||||
const ER_TOPPSEKSJON = /^[ \t]*##[ \t]+(.*)$/;
|
||||
const ER_ASPIRATIONAL = /^aspirational\b/i;
|
||||
|
||||
const cwd = process.cwd();
|
||||
const configPath = join(cwd, '.claude', 'okr.local.md');
|
||||
|
||||
|
|
@ -76,20 +97,34 @@ try {
|
|||
try {
|
||||
// M1/m1 (B2): tell status-MARKERTE tabellrader, ikke raaforekomster --
|
||||
// markoer-ord i forklaringstekst/prosa skal ikke inflatere telleren.
|
||||
// En KR-rad i statusrapporten er en markdown-tabellrad (`| ... |`).
|
||||
//
|
||||
// R1 (1.8.0): status-malen bruker den kanoniske confidence-skalaen fra
|
||||
// okr-framework.md -- On Track / At Risk / Off Track. De to norske
|
||||
// etikettene beholdes som bakover-kompatibilitet for status-filer skrevet
|
||||
// foer 1.8.0. On Track matcher ingen av alternativene og telles ikke.
|
||||
// Patch-lane #1 (S61): tellingen er SEKSJONS-BEVISST. okr-framework.md:605
|
||||
// sier at de fleste stretch-KR BOER staa At Risk, og at permanent groent er
|
||||
// sandbagging-signalet. Talte vi alle ikke-groenne rader under ett, ba vi
|
||||
// operatoeren om tiltak for at aspirational-portefoeljen oppfoerer seg
|
||||
// slik doktrinen krever -- og eneste maate aa dempe nagget paa ville vaert
|
||||
// aa merke stretch-KR groenne, noeyaktig det kanon advarer mot.
|
||||
//
|
||||
// Regelen, som foelger av det:
|
||||
// committed -> At Risk OG Off Track teller (kravet er naadd eller ikke)
|
||||
// aspirational -> KUN Off Track teller; At Risk er forventet tilstand
|
||||
//
|
||||
// Fallback (operatoerbeslutning S61): en rad hooken ikke kan plassere
|
||||
// telles som COMMITTED. Haandskrevne status.md fra foer 1.10.0 har ingen
|
||||
// seksjonsstruktur, og en stille fil er den farlige feilen -- den ser
|
||||
// vurdert ut uten aa vaere det. Samme verdi som dekningsvakten i
|
||||
// statusrapport() haandhever paa skrivesiden.
|
||||
const statusContent = readFileSync(statusPath, 'utf8');
|
||||
atRiskCount = statusContent
|
||||
.split('\n')
|
||||
.filter(
|
||||
(line) => /^\s*\|.*\|\s*$/.test(line)
|
||||
&& /at risk|off track|i fare|blokkert/i.test(line),
|
||||
)
|
||||
.length;
|
||||
let iAspirational = false;
|
||||
for (const line of statusContent.split('\n')) {
|
||||
const overskrift = ER_TOPPSEKSJON.exec(line);
|
||||
if (overskrift) {
|
||||
iAspirational = ER_ASPIRATIONAL.test(overskrift[1].trim());
|
||||
continue;
|
||||
}
|
||||
if (!ER_KR_RAD.test(line)) continue;
|
||||
if ((iAspirational ? STOPPET_ORD : FARE_ORD).test(line)) atRiskCount += 1;
|
||||
}
|
||||
} catch { /* skip */ }
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue