Repository navigation
Keep route readers scoped to individual operations - #2915
Merged
Merged
Conversation
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.
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.
Core watch inherited CliCommand.execute's Comms.client scope around its entire stream, blocking route publication until the watcher exited. The watch now waits unlocked and opens a client scope per inbox read and acknowledgment. Watch setup releases its scope before stream.write; the joined worker completes before its poll scope closes. The old MessageBus.watch implementation is deleted and all five direct test consumers migrate to the Comms owner.
Scope changes landed first in d1229ad. Then d0ea169 removed RouteReadersHold, its ten-second limit and translated message, and uses the existing unbounded contention policy. There were no catches or tests naming that error on these heads.
Paired with OpenHCSDev/toad#1166 at 5a7548f5e51eb2397ffa8dbddb6a27f4279a7a7f. Current Toad main already had #1159's lifetime cleanup transfers removed; the paired change uses direct opening contexts and checks RouteSelection before each ACP prompt.
Step 0 after:
comms_root.py:374-380acp/agent_process.py:73-93cli_commands.py:939-940cli_commands.py:1411-1413cli_commands.py:1449-1450comms.py:100-101comms.py:106-112comms.py:115-116route_selection.py:70-71comms.py:92-93,active_route.py:62-63active_route.py:187-188client_wireis a context factory, not an entered lifetime holder. Historical-root write callers were traced in input_origin, messaging, channel_management, publisher, coordination_tables/refusals and todos; each encloses its one write operation. Route publication waits inactive_route.py:267through the existing UNBOUNDED_CONTENTION, with no deadline or refusal translation.Search
RouteReadersHold|default-route readers holdacross both repositories' src and tests: empty. Changed Python source parses and the paired Core/Toad modules import from the two checkouts. No tests, application launch or install ran, as directed; the review fork owns execution.Assumed: the existing client and write operations finish; historical-root writes retain their current guarded scope; the pair ships in the same runtime update.