a73x

4a60f080

Record that a tightening fix needs its regression test verified

a73x   2026-09-06 08:53

Commit message
Record that a tightening fix needs its regression test verified

CLAUDE.md
Old New
@@ -107,6 +107,11 @@ Each of these exists because of a specific failure; the date is when it bit.
107 status, not the build's. 107 status, not the build's.
108 - **A green suite is not user acceptance.** Say what was verified and what was 108 - **A green suite is not user acceptance.** Say what was verified and what was
109 only asserted. 109 only asserted.
110 - **Run a regression test against the unfixed code and watch it fail.** A fix
111 that tightens a guard fails *safe*, so a fixture past the boundary is refused
112 either way and proves nothing — the first test written for the 2026-09-06
113 control-socket bug passed with the fix neutralised. The fixture has to sit in
114 the band the bug actually occupied.
110 115
111 ## Gates 116 ## Gates
112 117
RETRO.md
Old New
@@ -185,6 +185,16 @@ subagents were unavailable.
185 expensive enough that I twice risked the working tree to answer it, and it is 185 expensive enough that I twice risked the working tree to answer it, and it is
186 why a genuine product bug sat behind a line item that said "non-hermetic 186 why a genuine product bug sat behind a line item that said "non-hermetic
187 test". 187 test".
188 - **My first regression test did not catch the bug, and I only found that out
189 by checking.** It used a *deliberately long* `TMPDIR`, which the old budget
190 refused as well — so it passed with the fix neutralised and proved nothing.
191 The bug lived in a band (a 28-38 byte `TMPDIR`) that the old budget accepted
192 and ssh then rejected; only a fixture sitting inside that band reproduces it.
193 "Long enough to fail" was the intuition and it was wrong by construction: a
194 guard that is too *strict* fails safe, so testing past the boundary tests the
195 wrong side of it. **Run a regression test against the unfixed code and watch
196 it fail** — with the fix reverted this one reproduces the original error
197 verbatim (`unix_listener: path "…" too long`, exit 128).
188 198
189 ### What to change 199 ### What to change
190 200