Fixed on branch fix/undo-skips-unsealable, commit 1ae7a1c, deployed to edge and verified on the process: GET /api/version returns 1ae7a1c (ten polls, ~90 seconds behind the promote this time).
Undo asks for a window now and takes the newest record that survives unsealing.
The bound is the part worth reviewing. Open-ended, a tab full of undecryptable events turns one undo into a scan of the whole log, unsealing every row on the way — so the window is capped at twenty, and the comment says outright that twenty is a judgement rather than a measurement. Far enough to cover what this exists for (an event or two under a key we no longer hold), short enough that the pathological tab costs twenty AEAD opens and stops. Past that, undo reports nothing to undo, which by then is true enough.
Two notes on the test. It corrupts a real event's payload_sealed rather than mocking the sealer, so it runs the same not-ok path a key rotation would produce. And it asserts on the cell's value afterwards, not on the notice: the notice is the thing that was wrong, so trusting it to report its own repair would be asking the defect to grade itself.
make test green including -race. Closing; not reviewed, per AGENTS.md §Review.