mirror of
https://github.com/PerpetualSoftware/pad.git
synced 2026-09-24 03:16:43 +00:00
db7a9317ed
Codex round 20, asked to check the accumulated fixes in COMBINATION rather than one at a time. Both findings are interactions, which is what that angle is for. A STRAGGLER ERASED THE COUNTER-BACKWARDS FLOOR. The straggler drop reused the same argument an epoch change uses, which CLEARS the floor — but a lower generation inside the window is not proof of a new space; that is precisely the question the window exists to defer. The sequence: a counter-backwards reset raises the floor to 100, a straggler clears it, bare traffic repopulates from 51, and a client resuming from 99 is served later ids as though coverage were continuous, silently skipping 51..99. The boolean is now three named intents — clear, raise, keep — because the third had no way to spell itself and so took the wrong branch silently. Each call site now says which it means. A WRONG-TYPED EPOCH KEY DEFEATED THE RECOVERY WRITTEN FOR A CORRUPTED ONE. Round 11 rotated an epoch key holding a bad VALUE; a bare GET on a key holding a list raises WRONGTYPE and aborts the script before that branch can run, so every phase-2 publish failed until someone deleted the key by hand. The script checks TYPE first. THE MUTATION MATRIX EARNED ITS PLACE TWICE HERE. The first version of the wrong-type test passed with the TYPE check deleted: the script's id == 1 branch SETs the epoch unconditionally, and SET replaces a key of any type, so on a fresh counter the wrong-typed key was overwritten before the GET was reached and the branch under test was never entered. The test now publishes once first, and the mutation fails it. The same matrix then found a DEL in the recovery branch that no test could distinguish — redundant for the same reason SET replaces any type — so it is gone rather than left as a line nothing can justify. Claude-Session: https://claude.ai/code/session_01JVDBKbgn3Xt7ndW1YoYd8X