Skip to content

Retain bounded cold-worker failure diagnostics - #270

Merged
rmcdaniel merged 1 commit into
mainfrom
agent/sdk-rust/227-logging-child-diagnostics
Nov 13, 2026
Merged

rmcdaniel merged 1 commit into
mainfrom
agent/sdk-rust/227-logging-child-diagnostics

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Nov 13, 2026 •

Copy link
Copy Markdown
Member

The installed logging parent hides the error when a cold child exits unsuccessfully. Read at most64KiB plus an oversize sentinel from each child stream, refuse oversized output, and include bounded stderr with a failed status. Successful structured observations, held executable identity, workflow scenario and30-second owned-child deadline are unchanged. This is acceptance-test diagnostics only; the library/package bytes do not change. Relates to #269 and durable-workflow/.github#227.

Validation: restoring only the old child-runner body makes the synthetic pre-client diagnostic control fail. Corrected source passes all ordinary controls (3 PASS/2 SDK flows ignored), including oversized-stderr refusal and the existing private-copy executable-identity control, against the same checksum-bound4.17 candidate with Cargo1.86/offline build. The first all-control setup refusal on noexec temp is preserved; the successful fixture uses a dedicated private64MiB exec scratch mount. Exact validation, source review. Exact-head CI/main checks and the separately reviewed diagnostic runtime/cleanup remain required; no product, package or publication result is inferred.

@sonarqubecloud

Copy link
Copy Markdown

@rmcdaniel

Copy link
Copy Markdown
Member Author

Frozen source 8b006e1, test SHA256 c53a9e0419216a2f61df3a260f5c63189390a30a2678c57021ae02f53ce49899.

  • Restored only the previous run_child body while retaining the new synthetic failure branch/test: the new diagnostic control fails exit101 because the child's marker is omitted. Its actual child exits23 before any client/credential access.
  • Restored the exact frozen source: all ordinary controls pass, 3 PASS /2 ignored, including stderr retention, oversized-stderr refusal and existing executable-path replacement discrimination. The ignored real SDK flows did not run.
  • Same checksummed candidate package4.17 SHA6de774,118 members, Cargo1.86, offline network-none build with source/vendor/manifest RO. All installed SDK members still equal the archive, and the lock retains the crates.io source with that checksum. There is no library/package delta.
  • The first all-control fixture attempt had2 PASS and an existing private executable-copy setup refusal on noexec /tmp; it stays runner-blocked/NONPASS. The final repeat changed only that inert control's TMPDIR to a private64MiB exec tmpfs, keeping ordinary /tmp noexec, network none and the same2CPU/3GiB bound. Its exact container is absent.

The actual runtime child101 from #269 is still unclassified until this diagnostic source yields its bounded stderr. No unchanged runtime repeat, tag or upload is selected. Exact-source review and normal current-head CI remain gates; a new compiled parent/build receipt is being returned separately for a bounded diagnostic observation.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security source-only PASS for exact 8b006e1de9745665d52fa7712912e4ccc4794592 / test SHA-256 c53a9e0419216a2f61df3a260f5c63189390a30a2678c57021ae02f53ce49899.

I independently fetched the frozen head, rehashed the sole changed file, and reviewed the complete one-file delta. The correction retains at most 65,536 bytes plus a one-byte refusal sentinel from each captured stream, includes lossy-decoded stderr only when the owned child exits unsuccessfully, keeps the 30-second owned-child deadline and executable-image checks, and leaves successful structured output unchanged. The synthetic exit-23 path runs before client construction or credential reads; the predecessor omission, oversized-reader refusal, and private-executable identity control are appropriately distinct. No library, package, workflow definition, or production runtime bytes change.

This is approval only for producing a new exact build/parent identity and one bounded diagnostic observation under the already reviewed #269 runner safeguards. The prior r4 result remains NONPASS and cannot be relabeled. The new build/parent hashes, complete controller identity, retained private diagnostics, exact-ID cleanup/absence, and remaining current-head checks still gate any attempt. This is not a package, logging behavior, #980, tag, upload, or reusable arbitrary-output supervisor approval.

@rmcdaniel
rmcdaniel marked this pull request as ready for review November 13, 2026 23:38
@rmcdaniel
rmcdaniel merged commit 188db8b into main Nov 13, 2026
19 checks passed
@rmcdaniel
rmcdaniel deleted the agent/sdk-rust/227-logging-child-diagnostics branch November 13, 2026 23:38
@rmcdaniel

Copy link
Copy Markdown
Member Author

Diagnostics source accepted on main 188db8b, tree 884ae0ef358603d9c971dee9661a0507e0a198d1, exactly equal to reviewed8b006e1. All19 PR checks and all four actual-main workflows pass: CI, Public Boundary, CodeQL, SonarQube. Remote topic branch is deleted and independently absent.

The one reviewed exact-package diagnostic observation retained the actual child error HTTP409 worker_not_registered. The harness registered the setup worker but did not register each fresh child ID. This is a fixture setup failure; source fix #271 registers the child before polling, preserving the workflow/log assertions. No logger or package success is inferred. Full candidate outcome, private bounded diagnostics and exact-ID cleanup remain on #269.

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