Conversation
Contributor
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This adds an always-on server-side notification and scheduling path between delegated child and parent threads, including new cancellation barriers for Stop and task disposal. The change affects production orchestration behavior and can trigger additional parent processing, beyond a small isolated fix. No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
4 tasks
juliusmarminge
force-pushed
the
t3code/codex-turn-mapping
branch
from
September 24, 2026 04:06
1bd44f2 to
3b9c885
Compare
saphid
force-pushed
the
fix/v2-subagent-blocked-reports
branch
from
September 24, 2026 12:18
edfa63e to
8b259bc
Compare
juliusmarminge
force-pushed
the
t3code/codex-turn-mapping
branch
3 times, most recently
from
September 25, 2026 05:55
fe4f6ad to
87c67bd
Compare
saphid
force-pushed
the
fix/v2-subagent-blocked-reports
branch
from
September 25, 2026 07:34
8b259bc to
151c43a
Compare
4 tasks
A delegated child that asked a question or needed an approval simply waited. Its run stayed running, so the parent was never woken, and once the parent's own turn ended nobody would answer. The parent could only find out by polling task_status. When an app-owned child records a pending runtime request, queue a notice on the parent: which task is blocked, on what, and how to act (questions can be answered with t3_pending_request_respond; approvals and sign-in need the user). The child keeps running and its result is still delivered when it finishes. The command id is per request, so a repeated update for the same request does not queue a second notice. The notice is server-owned like a completion delivery, so the same barriers apply: eligibility is checked under the parent lock, Stop cancels queued notices, and task_cancel, acknowledgement, and cohort disposal cancel the notices for their tasks. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
saphid
force-pushed
the
fix/v2-subagent-blocked-reports
branch
from
September 27, 2026 23:32
151c43a to
742dcc0
Compare
This branch has not been deployed
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.
What Changed
When a delegated child asks a question or needs an approval, its parent now hears about it.
The server watches for new pending runtime requests. When one lands on an app-owned delegated child (one created by
delegate_task), it queues a notice on the parent thread with three pieces of information:t3_pending_request_readandt3_pending_request_respond, using the child thread ID and request ID given in the notice. Approvals and sign-in need the user.The child is not marked finished and no result is published. Its final result still arrives through the normal completion delivery when it ends.
The notice is server-owned, like a completion delivery, so it follows the same rules:
task_cancel, reading the task's final result, and the existing cohort disposal (Queue Remove, archive, delete) cancel the queued notices for those tasks.Web and mobile already render notification items from their summary, so there is no client change.
Why
A delegated child that asked a question just waited. Its run stayed
running, so the parent was never woken, and once the parent's own turn ended nobody would answer. The parent could only find out by pollingtask_status. We saw a child waiting on a question after its parent's turn had already finished, with nothing that would ever answer it.This is one of a few focused fixes to make sure a parent learns when a child stops. #13938 fixed results that were never delivered, and #13345 covers children stopped by restart recovery.
Known limits:
Tests
DelegatedCompletionDelivery.test.ts: new test "tells the parent once when its child blocks on a request". It waits on persisted parent events and checks:task_cancelcancels that task's queued noticesOn
t3code/codex-turn-mappingthe test times out waiting for the notice. Removing the dedup, thetask_cancelcancellation, or the Stop cancellation each makes it fail.47 tests pass in
DelegatedCompletionDelivery,OrchestratorMcpToolkit.integration,SteeringCompletion.integration,RuntimeRequestService,ProviderEventIngestor,ThreadDeletion,OrchestratorMcpService, andProviderTurnControlService. Server typecheck is clean.Checklist
This change was made by Claude Opus 5.5 with Claude Code and reviewed by GPT-6 Astra with Codex.
🤖 Generated with Claude Code