Fail a volume-move fault case whose move was refused#1753

merged2
main
volume-move/harness-refused-fails
openedOct 13, 2026byNNick
View on GitHubGitHub import enabledPR last imported 21d ago

Fixes #1741

A fault case whose move was refused for a reason other than VolumeBusy could pass. If another run tripped the armed fault before the first trigger poll, the harness credited that fault line to the case, reran the move after disarming, and reported passed: true. Only the rerun had moved the Volume.

Changes

run_case fails any case whose first run is refused and names the reply. Busy refusals already become skips, and Release approvals are answered earlier, so any refusal left is a defect. The failure goes through the existing per-case path, which disarms the fault and runs the heal.

Tests

The new test runs kill-snapshot alone. The model refuses the armed volume move with a non-busy error, and writes a fault line right after the post-accept volume runs read, as a sync that started just after that read would.

Before the fix (69915dc), matching the issue's table:

1FAIL: ...test_a_fault_case_whose_move_is_refused... (fault_line_after_the_read=True)
2AssertionError: True is not false : {'name': 'kill-snapshot', ..., 'passed': True, ..., 'run': 'refused', 'recovery': ['done'], ..., 'failures': []}
3FAIL: ...test_a_fault_case_whose_move_is_refused... (fault_line_after_the_read=False)
4AssertionError: False is not true : ['the trigger never fired before the run ended']
5Ran 45 tests
6FAILED (failures=2)

After the fix, both rows fail with RuntimeError: move was refused: {"error": {"code": "internal", "message": "placement exploded"}}:

1test_a_fault_case_whose_move_is_refused_fails_and_names_the_reply_even_when_another_run_trips_the_fault ... ok
2Ran 45 tests
3OK

Gates run: py_compile and the harness unittest suite. The cluster proof runs at the top of the stack.

Checks

15 successful ¡ 1 skipped
All checks passed
81ba0a1
Synced from GitHub

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

âš™ī¸ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: cb7c2ebc-447e-4941-b838-7646d8cc593b
đŸ“Ĩ Commits

Reviewing files that changed from the base of the PR and between 86f3ae60ba26e730b509874c427cd82a9cdae7bf and 4a3ec1a9052456f6e292ed8101f6e32812d53fda.

📒 Files selected for processing (2)
  • core/scripts/test-verify-volume-move.py
  • core/scripts/verify/test_volume_move.py
ascii
1 ______________________________________________________________________
2< Race conditions: you *caught* one. Unfortunately you released three. >
3 ----------------------------------------------------------------------
4 \
5 \ \
6 \ /\
7 ( )
8 .( o ).
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
đŸ§Ē Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix ¡ Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

Added 2 commits

  • Fail a case whose first run was refused and name the reply81ba0a1
  • Expect a refused fault-case move to fail and name the replya6d3545
Synced from GitHub

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

ReviewStatusCommitReview trigger
📝 Code Review✅ Completed 2026-10-13T16:32:50.076970Z4a3ec1aDraft marked ready
â„šī¸ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.