docs(changelog): the third review remediation, decision 41's door line and the findings decision 42 defers

Review findings of S153; operator decisions 37 to 43.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-10-14 18:32:04 +02:00
commit ca9cb53e79
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q
2 changed files with 93 additions and 6 deletions

View file

@ -373,7 +373,7 @@ test('CHANGELOG: Known issues name the verdict gate, the engine payloads and ope
assert.match(known, /\boperator\s+decision\s+25\b/, `Known issues name operator decision 25: ${JSON.stringify(known)}`);
});
test('CHANGELOG: the intro names the second remediation\'s Step 8 commit, and no longer acd0e3d, 5b94952 or the Step 13 commit', () => {
test('CHANGELOG: the intro names the third remediation\'s Step 2 commit with its measured suite, and no longer acd0e3d, 5b94952 or the Step 13 commit', () => {
const body = unreleasedBody();
const firstSub = body.search(/^### /m);
const intro = firstSub < 0 ? body : body.slice(0, firstSub);
@ -381,8 +381,14 @@ test('CHANGELOG: the intro names the second remediation\'s Step 8 commit, and no
assert.ok(!intro.includes('5b94952'), `the intro no longer names 5b94952: ${JSON.stringify(intro)}`);
assert.doesNotMatch(intro, /the\s+remediation's\s+Step\s+13\s+commit/,
`the intro no longer names "the remediation's Step 13 commit": ${JSON.stringify(intro)}`);
assert.match(intro, /the\s+second\s+remediation's\s+Step\s+8\s+commit/,
`the intro names "the second remediation's Step 8 commit": ${JSON.stringify(intro)}`);
assert.match(intro, /the\s+third\s+remediation's\s+Step\s+2\s+commit/,
`the intro names "the third remediation's Step 2 commit": ${JSON.stringify(intro)}`);
assert.doesNotMatch(intro, /the\s+second\s+remediation's\s+Step\s+8\s+commit/,
`the intro no longer names "the second remediation's Step 8 commit": ${JSON.stringify(intro)}`);
// Measured by `npm test` at 829da48, the third remediation's Step 2 commit.
assert.match(intro, /Suite\s+2517\s+\(2515\s+pass,\s+0\s+fail,\s+2\s+skipped\)/,
`the intro names the measured suite "Suite 2517 (2515 pass, 0 fail, 2 skipped)": ${JSON.stringify(intro)}`);
assert.ok(intro.includes('(`829da48`)'), `the intro names the backticked short sha 829da48: ${JSON.stringify(intro)}`);
});
// Second remediation, Step 9: the CHANGELOG records round 2. Door lines name
@ -470,3 +476,48 @@ test('CHANGELOG: the old rerun wording is gone from the Unreleased section', ()
assert.ok(!flat.includes(phrase), `the Unreleased section no longer says "${phrase}"`);
}
});
// Third remediation, Step 3: the CHANGELOG records round 3. A door line names
// operator decision 41 (below 1.8 the helper's own files go to red proof); the
// Fixed bullets name `703d87e1` and `7b3b59ed`; Known issues name each finding
// operator decision 42 defers, and the accepted deviation of operator decision
// 38. The Known-issues bullets are read from that slice only (knownIssues
// above), so the round-1 Fixed bullet that names `4b6460e5` never counts.
// The Unreleased section's `### Fixed` body, up to the next heading.
const fixedSlice = (body) => {
const lines = body.split('\n');
const start = lines.findIndex((l) => /^### Fixed\s*$/.test(l));
assert.ok(start >= 0, 'the Unreleased section has a "### Fixed" heading');
let end = lines.length;
for (let i = start + 1; i < lines.length; i++) {
if (/^###? /.test(lines[i])) { end = i; break; }
}
return lines.slice(start + 1, end).join('\n');
};
test('CHANGELOG: round 3 — the decision-41 door line, two Fixed bullets and the findings deferred by decision 42', () => {
const body = unreleasedBody();
const d = releaseCheck.parseDoors(body);
assert.deepEqual(d.bad, [], 'every top-level door line reads "- one-way: ..." or "- two-way: ..."');
const texts = d.entries.map((e) => e.text);
assert.ok(texts.some((t) => /\boperator decision 41\b/.test(t)),
`a door line names operator decision 41: ${JSON.stringify(texts)}`);
const fixed = fixedSlice(body);
const f703 = bullet(fixed, /703d87e1/, 'Fixed bullet 703d87e1');
assert.ok(f703.includes('tests/helpers/timing.mjs'), `the 703d87e1 bullet names tests/helpers/timing.mjs: ${JSON.stringify(f703)}`);
const f7b3 = bullet(fixed, /7b3b59ed/, 'Fixed bullet 7b3b59ed');
assert.match(f7b3, /\boperator\s+decision\s+41\b/, `the 7b3b59ed bullet names operator decision 41: ${JSON.stringify(f7b3)}`);
const known = knownIssues(body);
for (const id of ['2d624b54', 'c06d5385', '6ff82e75', '4b6460e5', '4e1607cb', '4f22b101']) {
const b = bullet(known, new RegExp(id), `Known-issues bullet ${id}`);
assert.match(b, /\boperator\s+decision\s+42\b/, `the ${id} Known-issues bullet names operator decision 42: ${JSON.stringify(b)}`);
}
const dev = bullet(known, /4dce7c74/, 'Known-issues bullet 4dce7c74');
assert.match(dev, /\boperator\s+decision\s+38\b/, `the 4dce7c74 Known-issues bullet names operator decision 38: ${JSON.stringify(dev)}`);
const c06 = bullet(known, /c06d5385/, 'Known-issues bullet c06d5385');
assert.ok(c06.includes('e031a480'), `the c06d5385 bullet names e031a480: ${JSON.stringify(c06)}`);
assert.ok(c06.includes('original_severity'), `the c06d5385 bullet names original_severity: ${JSON.stringify(c06)}`);
});