Skip to content

Admit a child's report relayed from another runtime as child evidence - #185

Merged
QuillDev merged 2 commits into
feat/brokered-provider-credentialsfrom
feat/external-child-reports
Sep 26, 2026
Merged

QuillDev merged 2 commits into
feat/brokered-provider-credentialsfrom
feat/external-child-reports

Conversation

@QuillDev

@QuillDev QuillDev commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

A Chat on a physical machine and the ticket agent it starts inside a stack VM run in two Nakode runtimes. No session_child_links row joins them, so the child's completion report is never published to the parent (admit_child_events only joins local links), and RelayAgentFollowup requires the source call to be pending in the same runtime.

This PR adds AdmitExternalChildReport, advertised as the ExternalChildReports capability. The authenticated integration that recorded the cross-runtime relationship (FStack's hosted server) uses it to relay a child's report into the parent's durable inbox:

  • It is admitted exactly like a linked child's report: origin durable_child_evidence, which the batch preamble defines as inert evidence and never owner instruction, consent or approval. The payload is serialized as data.
  • It is deduplicated by message identity. A retry under the same or a new idempotency key admits nothing new, and a reused identity with different content is refused.
  • The same bounds apply as for linked reports: states completed/failed/blocker/question, a 16 KiB body, stable identities, and a parent that exists and is open.
  • The existing dispatch loop activates an idle (or unloaded) parent to process it.

Tests: src/followups/tests/external_child_reports.rs and an_external_child_report_activates_its_idle_parent. Existing followups, child, SDK, server and protocol suites pass.

🤖 Generated with Claude Code

Also in this PR: last_turn.completion exposes a terminal owner turn's bounded final response (the same Completion a linked parent's report carries) through the protocol view and gRPC (Turn.completion). A parent in another runtime needs it to receive the child's report.

The slow_git_inspection_does_not_block_control_or_session_reads failure also happens on this branch's base (4311434), independent of these changes.

QuillDev and others added 2 commits September 26, 2026 10:57
A Chat on a machine and the agent it started inside a stack VM run in two
runtimes, so no session_child_links row joins them and the child's final
report never reaches the parent. AdmitExternalChildReport lets the
authenticated integration that recorded the relationship relay the report:
it enters the parent's durable inbox exactly as a linked child's report
does (durable_child_evidence, inert, never owner instruction), deduplicated
by message identity, and the idle parent is activated to process it. The
runtime advertises ExternalChildReports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A parent in another runtime needs the same report a linked parent receives.
The runtime already captures each terminal turn's bounded completion and
persists it with the session; keep it on LastTurn and project it as
last_turn.completion through the protocol view and gRPC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@QuillDev
QuillDev merged commit ec6db35 into feat/brokered-provider-credentials Sep 26, 2026
2 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant