Repository navigation
Flag stalls and ceremony on the board; sequence only branches that conflict - #3623
Merged
Merged
Conversation
…t conflict SharedFileBranches emitted one SEQUENCE row per shared file between two held orders and no answer could clear it: 12 such rows on tonight's board asked who goes first about pairs that merge cleanly. ConflictingBranches emits one row per order pair, only when git merge-tree of the two heads conflicts, naming the conflicting paths; merging one into the other clears it. Repo.merge_conflicts owns the merge-tree exit contract. BlockedTalk (rules/no-blocking.md) names a unit whose message announces a stop (waiting on, awaiting, frozen for, until root...) with neither an owner nor a file:line. Ceremony names a unit holding pending work that published more than 6000 characters per commit in the last hour. Both read the heartbeat's existing unit observations: the bus sent index and the held orders' progress sources. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnH6dR85kyFKcc2tQAJLhK
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.
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.
trissim
enabled auto-merge
October 29, 2026 22:44
|
debt-src at 2951e35, every finding: |
The scan must consume only what prepare captured: running merge-tree in derive opened Git after the cut and broke the complete-cut guarantee. HeldBranchRule.prepare now hands each member the prepared branches; ConflictingBranches reads merge-tree there into ProgressRead's cut (keyed by the unordered commit pair) and derive requires the captured answer. HolderBranch owns the parallel-pair test for both the prepared and the held branch. UnitTalk reads the sent index on comms.bus.bus, where Bus owns it, and unpacks each record's deliveries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnH6dR85kyFKcc2tQAJLhK
HolderBranch.parallel_to decided a pair by a hand-written chain over holder, repository, branch and files. The only fact that selects a candidate is a common (repository, file); HolderBranch.touching indexes branches by it and yields each pair once. merge-tree answers the rest: a pair on one branch merges cleanly, and two orders of one holder that do conflict are still a conflict to resolve. unit_talk.py formatted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnH6dR85kyFKcc2tQAJLhK
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 29, 2026
trissim
added a commit
that referenced
this pull request
Oct 29, 2026
…t died decoding them #3623 replaced SharedFileBranches with ConflictingBranches, but 785 stored commander packets still hold rule pings naming 'shared_file_branches'. Every CommanderHeartbeat pass since the 068c963 install died in CommanderUpdate.latest with 'Unknown StandingRule name', so the HUD refused for everyone. The cutover drops those pings once, exactly as RetiredStorageRulePings did for the quota rule; the heartbeat raises real conflicts again under ConflictingBranches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnH6dR85kyFKcc2tQAJLhK
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.
Waste flags itself on the board now instead of waiting for someone to read #comms. 2 commits, 7 files, +310/−25.
SEQUENCE → CONFLICT, only when Git says so
Before:
SharedFileBranchesemitted oneSEQUENCE … who goes first?row per shared file between two held orders. No answer could clear it, because sharing a file is ordinary parallel work. Tonight's board carried 12 of these across 8 order pairs, and units learned to skim the board.After:
ConflictingBranchesemits oneCONFLICTrow per order pair, and only whengit merge-tree --write-treeof the two branch heads conflicts. The row names both orders, both branches and the conflicting paths, and says "merge one into the other and resolve". The merge clears it.HolderBranch.parallel_toowns the pair filter (different holders, same repository, different branches, shared files), and bothPreparedBranchandHeldBranchinherit it. merge-tree runs only on candidates.HeldBranchRule.preparehands each member the prepared branches viaprepare_captured(a no-op except onConflictingBranches). The answer is captured inProgressReadunder the unordered commit pair, andderivereads it withrequire_branch_conflicts. The scan opens no Git, astest_held_branch_rules_consume_the_complete_cut_after_worktree_mutationrequires.Repo.merge_conflictsowns merge-tree's exit contract: 0 merges cleanly, 1 lists the conflicting paths, anything else is aFailedGitCommand.DriftOverlapRulesPhaseevidence now namesConflictingBranches, and the fleet-replay seed is renamed to match.Replay on tonight's actual heads (read-only):
12 rows → 3. All three are P918, which is already decided to land last.
BlockedTalk (rules/no-blocking.md)
A commanded unit's published message that announces a stop gets a named row citing its message id. The phrases are declared once in
BlockedTalk.words("waiting on", "awaiting", "blocked on", "frozen for", "until root", …). A message is skipped when it names an owner (an@threador a recorded mention), carries afile:line, or negates the phrase ("not waiting on").Replay of the last 6 hours: 14 rows, for example:
One false positive: board-commander quoting the phrase "'waiting on the run' labels". Bare "freeze"/"preserving"/"pending" were dropped after the first replay, which hit "the author freeze is superseded" and "preserving your … behaviour".
Ceremony
A unit holding pending work that published more than
Ceremony.per_commit= 6000 characters per commit over the last hour gets a row naming both numbers. The rule reads the bus sent index and the held orders' existing progress sources; no new store.Replay over 6 hours: 0 rows for units holding work. The busiest was claude-nra, 19,166 characters over 7 commits. board-commander, which holds no order and is forbidden to code, is excluded by the pending-work condition.
Shape
UnitTalkis one window over a unit's observation, andUnitTalkRuleis a FamilyScan over the heartbeat's existingUnitStateobservations. Its membersBlockedTalk(dated by the message) andCeremony(undated) are discovered via theagent_comms.commanderpackage. No kind strings, and no new reads beyond the bus sent index.Proof
tests/test_unit_talk.py: 10 passed. It covers unowned waits flagging; owned, located, negated and ordinary messages not flagging; and the ceremony threshold, including the no-pending case.ConflictingBranchesuses an add/add conflict onshared.py.Assumed:
merge-tree --write-treeleaves unreachable tree and blob objects in the order's repository during prepare, whichgit gcprunes; no ref moves. The replay above read the bus withsqlite3 -readonlyand computed commits withgit login each unit's worktrees, mirroring what the rules read through Core. Row counts on the live board appear only after install.🤖 Generated with Claude Code