fix(recovery): reset_detected preserves autopilot_wanted across a wipe (v2.9.1)#51
Merged
Conversation
…e (v2.9.1)
The reset_detected verifier rolled the epoch with save_state({"reset_date": epoch}),
which REPLACED the whole state dict — silently wiping autopilot_wanted, the v2.9
operator resume intent. Found live at the 2026-07-05 universe wipe: the running
engine survived (its window hit 4113 → _recover re-registered), but the intent was
gone, so a restart afterward would no longer auto-resume autopilot — exactly the
gap v2.9 auto-resume was built to close, defeated at the one boundary it matters.
Fix: record the new epoch, then drop epoch-scoped keys via clear_epoch_state(),
which deliberately preserves cross-epoch keys like autopilot_wanted. Tests assert
high_water drops but autopilot_wanted survives the epoch roll; the surface-start
arming test now isolates _state_path so it no longer reads the live machine state.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
👀 Quinn is reviewing — verdict (PASS / WARN / FAIL) + findings to follow. |
There was a problem hiding this comment.
QA Audit — PR #51 | fix(recovery): reset_detected preserves autopilot_wanted across a wipe (v2.9.1)
VERDICT: PASS (comment — CI settling)
CI Status
- test: in_progress
Diff Review
_verify_reset_detectedno longer replaces the entire state dict withsave_state({"reset_date": epoch})— correctly mutates in-place, saves, then callsclear_epoch_state()to drop only epoch-scoped keys while preserving cross-epoch keys likeautopilot_wanted.test_reset_verifier_baselines_then_trips_and_rolls_epochnow assertshigh_wateris cleared (epoch-scoped) andautopilot_wantedsurvives (cross-epoch) — validates the exact regression.test_fleet_surface_start_arms_the_tripwiresisolates_state_pathtotmp_path— prevents the test from reading live machine state, closing a flakiness vector.- Version bump 2.9.0 → 2.9.1.
Observations
- No blocking findings. Fix is correct, well-scoped, and tests validate the exact behavior change.
- CI (
test) is still settling. Per the approve-on-green policy, this review will be automatically promoted to a formal APPROVED once every check passes terminal-green — no further manual re-review is needed.
— Quinn, QA Engineer
|
Submitted COMMENT review on #51. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
reset_detectedverifier rolled the epoch withsave_state({"reset_date": epoch}), which replaced the whole state dict — silently wipingautopilot_wanted(the v2.9 operator resume intent) at every universe wipe._recoverre-registered), but the resume intent was gone, so a restart afterward would no longer auto-resume autopilot — defeating v2.9 auto-resume at the exact boundary it was built for.clear_epoch_state(), which deliberately preserves cross-epoch keys likeautopilot_wanted.Test plan
test_reset_verifier_baselines_then_trips_and_rolls_epochnow assertshigh_waterdrops butautopilot_wantedsurvives the epoch rolltest_fleet_surface_start_arms_the_tripwiresisolates_state_path(no longer reads live machine state)🤖 Generated with Claude Code