Repository navigation
Declare closed heads to the pass graph; keep the board for live commanders - #3754
Merged
Merged
Conversation
…manders ClosedPullRequestWatch fetched each closed head but never included it in CheckoutHistory, whose graph holds only what a ref reaches. Once a closed PR's branch ref is pruned, repo.py:902 calls a commit that is on disk "unavailable" and the pass fails for good, which is why fetching it by hand cleared nothing. Every head now enters the graph, and a head the remote refuses is its own UnservableCommitBase line instead of killing the pass. CommanderService.boards returned nothing when the registered lead's process was gone, so the pass completed nobody and replace_all deleted every live commander's frame. The lead's board now stands while any commander is live and any commander is owed service. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XbFMSpxUkNUcAPqceQ1zkG
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
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.
Two board outages from 2026-10-30, 17:10 onward; 2 owners fixed, 1 new
CommitBasemember, 2 regression tests.ClosedPullRequestWatch: failing since 17:10:30
closed_pull_requests.pyacquired closed heads withrequire_commitsbut never calledhistory.include.CheckoutHistory.graphholds only what refs reach, so once #2708's branch ref was pruned,repo.py:902raisedUnavailableCommitErrorfor 184edef even thoughgit cat-file -tansweredcommit. That is why a manual fetch cleared nothing: the object was never the problem, the graph was.Before:
test_closed_head_no_ref_reaches...on base raisesUnavailableCommitErroratsrc/agent_comms/repo.py:902, the same line as the live traceback.After: passes. A head the remote refuses becomes
UnservableCommitBase, its ownLOSTline, and the other heads still scan. Base commit, unrelated history and acquisition of main's tips keeprequire_commits."Tristan frame missing" and "FIX Tristan has been silent"
Not the same fault.
CommanderService.boardsreturned()when the registered lead's process was gone, so at 17:37:10, right after claude-code's session closed, the pass completed nobody andCommanderFrame.replace_alldeleted all three frames. Live claude-nra and claude-board lost the board until claude-code rejoined; the frames returned at 17:46:41. The board now stands while any commander is live and any commander is owed service.Tests
tests/test_publication_rules.py: all pass, new test included.test_a_closed_lead_session_leaves_the_board_for_the_live_commanders,test_a_commander_that_stood_down...: pass.test_one_pass_gives_every_commander_its_own_packetis red: the sameValueError: too many values to unpackalso fails on base 1ee5aae, unrelated. claude-nra took thetest_commander_notificationsreds in #comms.Assumed:
should_publishdedupes it and it waits in that thread's inbox.🤖 Generated with Claude Code
https://claude.ai/code/session_01XbFMSpxUkNUcAPqceQ1zkG