4a60f080
Record that a tightening fix needs its regression test verified
a73x 2026-09-06 08:53
Commit message
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 | ||