graphite: 🐛 Hold a push when the merge-queue check times out - #279
Merged
Merged
Conversation
Claude-Session-Id: 900424b6-7393-480c-a26a-f1bd21da6e57
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.
Why
no_push_to_a_queued_prfaulted twice in the release-v3 drive on 2026-10-02 around 9:01 PM Pacific:A faulted handler is caught and recorded, so the push it was checking went through unverified. That is the outcome this hook exists to prevent.
The slow part is
ccx vcs pr status, and it is slow by design. Every ccx process on the machine shares one GitHub poll, spaced at least 30 seconds apart. A reader whose PR is stale sleeps until the next poll slot, then polls every leased PR. Measured on this Mac under a busy drive:The sync hook runs inside a 30-second client request deadline, and dispatch abandons a hook still running 5 seconds before that deadline. An abandoned hook also lets the push through. No budget inside that window covers ccx's worst case, so the fix is to make the timeout an explicit verdict instead of a fault.
What
ccx vcs pr statusread blocks the push with one line naming the PRs or branches it could not verify, and tells the agent to rerun onceccx vcs pr statusanswers. A queued PR still gets the existing stacked-PR denial.Other failures stay fail-open as before. A PR Graphite has not recorded yet still pushes freely.
Testing
mainand pass here.pytest tests/test_pack_graphite.pypasses, 192 tests.