Repository navigation
Model-check Pickup reservation and Claim across hosts - #1067
Merged
Merged
Conversation
Merged
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
Models Pickup selection, origin reservation, Ready/Claim-history recheck, dispatch, Claim make/ending, reservation release, crashes and Day shift recovery. Stateright 0.31.0 is pinned as a dev dependency and runs in the existing Rust CI job. Product code is unchanged.
What holds: no two Runs or Spec runs complete Claim handling from the same Ready selection generation within the model's bounds. What fails: the literal dispatch promise has a pre-Claim counterexample, retained as an executable assertion and a counterexample regression. A green CI run does not prove the literal promise.
Bounds: three hosts, one issue, one attempt per host, at most three Claim applications; unique tokens; linearizable labels/origin requests; complete history within one page; other Ready gates fixed favorable. The Day shift confirms work stopped before hand-back or stale-reservation deletion. This is bounded exploration, not a proof for arbitrary host counts. Worktree disposal, Self-merge, direct Issue URL commands/other Pass writers, Stop/Sweep policies, pagination/consistency behavior and liveness remain outside it.
Test seams: Stateright's public
Model/Checkerinterface over GitHub label requests and origin reservation requests. Local dispatch/crash markers remain separate so they cannot hide interleavings between requests.Closes #881
Evidence
cargo test --locked --test pickup_model -- --nocapturepasses: 4 tests, 1 intentionally ignored assertion; 70,197 states for claimed-dispatch safety plus reachable crash recovery, failed-winner requeue and Day shift hand-back. Final focused execution: 1.37s.cargo check --tests --lockedandcargo clippy --all-targets --locked -- -D warningspass.Reproduce each red assertion (expected exit 101):
The two mutation commands assert claimed-dispatch safety so the known pre-Claim finding cannot mask safeguard sensitivity. All three commands were run and failed with their documented counterexamples.
Full-suite validation: CI's Rust job passed
cargo test, formatting and Clippy for exact final headb93e63a17f9fa517f0753f4c4e1a918c168cc656(job execution 10m39s, including compilation). All applicable CI and release-smoke checks passed.Local
/usr/bin/time -p scripts/affected-tests mainselected the full Nextest suite. Perdocs/testing.md's instruction to reuse successful CI for the exact head, that redundant local run was stopped after CI passed: 1,032 tests passed before interruption, four running cases received SIGINT, 1,210 were not run and 51 were skipped. Partial local wall time was 1,105.87s including 82s compilation; this is not claimed as a completed local full-suite pass. The final model target and all-target Clippy were separately rerun successfully after review edits.Review coverage
Independent
thirdshift-code-reviewaxes usedmain(25ec54b) as the fixed point. Standards: two findings addressed (user-invoked descriptions and explicit promise enum), no unresolved findings. Spec: no actionable findings. Both axes read all nine changed files, including Cargo.lock and licenses. Generated exclusions: none. Changed files left unread: none.Unaddressed findings
Standards
None; both review findings were addressed in
b93e63a.Spec
The existing literal dispatch counterexample remains unfixed in product code, tracked in #1068 with only
needs-triageand no blocking links. Issue #881's acceptance criterion requires reporting a current-protocol counterexample while preserving the model/property, and its scope explicitly excludes any product-code changes. The explicit assertion above (exit 101 at final headb93e63a) andpass::dispatchcalling Run startup before the Claim provide the evidence; the Day shift must decide the resulting product change or a deliberate change to the promise. This trace demonstrates two dispatches, without demonstrating simultaneous implementation sessions.Security
None.
Security review outcome
No unaddressed introduced findings.
Merge Danger
Door: two-way
Revert the dev dependency, model and repository skills. No product behavior or stored data changes.
Blast Radius: verification
Adds roughly one second of model exploration to the Rust tests. A passing bounded model is evidence only under the recorded assumptions; the known literal-property failure is disclosed above.
Built with codex · gpt-6.1-sol · xhigh