Repository navigation
P717 stalled orders strike and release themselves - #1960
Merged
Merged
Conversation
Stalling owns the 600-second clock and the atomic strike/release transition. Core connector observes activity without running each order Check. Delete commander STALL prompts and automatic fallback assignment. Released rows expose their recorded strikes. Src-Budget: 160
Cache Git movement per observation; GitProgress applies it once to found commits, pushes and open PRs. Missing checkout is a declared progress state, not an exception fallback. Git read and decode faults raise; only timeout becomes UnreadProgress. Src-Budget: 160
…vel Coordination import WheelSpin.assign and both enforce calls come back from main; a unit struck on a problem is never paired with it again. Stalling.stall_reason writes the window from Stalling.seconds once; the three ten-minute literals are gone. coordinator imports no todos-dependent module, so the local import hid no cycle and moves to module level. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed watcher Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…entity StallWatcherIncarnation joins the thread-identity family as a birthless member (wire birth -2.0); deleted and unrecorded members now share BirthlessIncarnation, which owns the mark-to-member decode instead of an if-chain in the record. StallStrikeTodo/StallReleaseTodo take their permission from StallWatcherPermission; commander strikes keep CommanderPermission. advance() records the watcher, not the creator. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…same pass After Core's stall watcher struck and released a stalled order, nothing gave the order to anyone until a commander read its standing rules. The watcher pass now runs UnownedWheelSpin's own pairing on the orders it just released, for each order's commander, so the reassign happens in the same pass with no commander turn. WheelSpin and UnownedWheelSpin move to commander/wheel_spin.py because commander/standing.py imports order.py, which opens the commander's configured bus on import; the connector must not do that. TodoStore loses its watch loop; the rule owns it. StallWatcherIncarnation's name now derives from its class name through the declared-name conversion DeclaredFamily already used, shared as declared_words(); the hand-written "core-stall-watcher" literal is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # src/agent_comms/connector.py
Recorded births pick their member by membership, not by a None lookup. reissued() lives on the ProblemOrder base, so the wheel-spin assign needs no narrowing, and it traces the reissued order's own source line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…passes, assigns as the watcher Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-checkout progress Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s to the assigner Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The watcher's recorded failure state, the Core parked set with its CLI and the watcher's own assignment action are new behavior the review asked for. Src-Budget: 23 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # src/agent_comms/commander/standing.py
# Conflicts: # src/agent_comms/commander/order.py # src/agent_comms/todos.py
trissim
marked this pull request as ready for review
October 19, 2026 23:39
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.
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.
P717 — ready for the gaming merge queue
Head:
2b2fefd4cd4d4838de75c5da3217f6936df7d722. Source +298/-119, net +179 (limit +223). No main merge after the replacement order. Not installed or merged.What changed
Connector.watch_ordersstarts the task without opening the wire. Each worker pass owns its context; it is closed before the minute timer.TodoStore.stalledonly observes active held orders.OpenTodoState.open_names()derives eligible states from their declarations; blocked/frozen state stays visible on the board but is not eligible. No P-number list.assignedhook folds the strike and release into the same Todo result and SQLite upsert. A refused or unavailable replacement leaves the owner and strikes unchanged. The older two-write distance rule now uses this same operation.StallWatcherIncarnationowns Core's permission and assignment consequence. Deleted the permission subclasses, Stall-prefixed operation/action copies, separate watcher module, destructive pre-release loop and silent conflict skips in that loop.Verification
Ten existing files were run on
origin/mainata6799790fand the branch:test_commander_problem_orders,test_tool_replies,test_connector,test_standing_rules,test_todos,test_tools,test_declared_family,test_turn_identity_equality,test_goal_nominal,test_goals.Existing main failures are wording-refusal expectations (three tests), withdrawn-order setup, read-only result decoding, read-tool inventory, open-Todo decoding and an event-consumer fixture with no session owner. They were not patched in this task.
Source evidence
Existing NRA parser/index covered 405 Python files with no parse omissions, before and after. References are lexical evidence, not a claim that dynamic receiver bindings were proved. The existing incarnation, Todo, state-family, transcript and connector owners were read directly. There is one assignment-result hook call, and no competing pre-release writer in the watcher.
Evidence:
/home/ts/.cache/agent-scratch/core-pi-durable/P717/:main-ten.log,final-ten.log,served-final.log,delivered-{src,tools}-ratchet.log,delivered-source.jsonl, andserved-final/test_three_connector_passes_al0/three-pass-result.json. Earlier failed proof setups remain recorded; the final served proof passes.