Repository navigation
Let turn origins and child processes own absence behavior - #2647
Merged
Merged
Conversation
trissim
marked this pull request as ready for review
October 23, 2026 07:45
trissim
enabled auto-merge
October 23, 2026 07:45
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.
|
debt-tools at 9ac80ac, every finding: |
|
debt-src at 9ac80ac, every finding: |
trissim
disabled auto-merge
October 23, 2026 07:56
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.
Scheduled turns encoded autonomous input as None, while backend code repeated the child-input liveness rule and mirrored its stdin. This change gives absence to TurnOrigin/NoTurnOrigin and command transport to the existing PiChild/AttachedChild owners.
Message.batch_target derives exact_reply_target; existing Message.reply_target keeps its automatic-reply meaning. Message's existing messages() method supplies actual originals; NoTurnOrigin supplies none. Scheduling and delivery scope call those origin operations. No Message dataclass field or persisted wire shape changes. typed_table.py remains outside this PR as ordered.
AttachedChild.send owns the one ordinary-input liveness check; drain owns backpressure and write combines them. PiChild.send registers once, writes the encoded command and returns its future. pending_response and StatsRequest consume that future instead of registering again. PiRpcChannel.encode and backend.stdin are deleted. Attestation, abort, prompt/steering callbacks, retained/borrowed RPC queries and catalog queries use the child. The catalog keeps its existing BoundedRun lifetime.
The independent fenced prompt writer still uses raw unbuffered writes while its original locks are held. PiChild.send_fenced registers that command once and invokes that existing writer through AttachedChild. Calling ordinary send here would emit bytes before the fence and send twice. This separate registration path is explicitly raised with the commander for a source decision; it is not presented as satisfying the literal single-method registration requirement.
Validation before Tristan stopped parallel testing:
-325dd9557: the17-file routing/backend/native/catalog/child test command in absence-child-owned-tests.log exercised pending_response and failed. It was still running when that head was reported; it was not reported passing. Stopped on the known duplicate-registration bug before final counts.
-595cb6ac3: no local tests, debt scans or census scripts run under the new centralized-integration order. Added actual pipe exchanges for RequestId and anonymous commands for the integrator to run.
Assumed: every production PiSessionChild launch uses streaming input (PiSessionChild.start -> PiChild.start_command -> AttachedChild.start default); synchronous sends remain inside existing send boundaries before awaiting drain; catalog BoundedRun still owns process/timeout retirement; UI reply registration remains exactly one as main's reader.encode did; fenced prompt writes must remain unbuffered under their independent locks. No installed-build claim.
The PR is ready for the single integrator. Auto-merge was disabled to follow the latest rule that only that integrator merges ready heads into integration. No further local test runs.