Repository navigation
trading: recovery receipts carry the engine's error message and its context - #809
Conversation
…hained or suppressed context On 2026-10-06 account 2's recovery receipt said only 'TransportError': recovery.py recorded the exception type, and transport.snapshot raised 'snapshot incomplete' with `from None`. The receipt now adds error_details: each failure's code (the unchanged `errors` entry), its type, its message when the engine authored it (transport or safety exceptions), and the type of the chained or suppressed context, with that context's message under the same rule. Foreign (SDK, network, OS) exception text never enters a receipt, as the existing no-secret test requires; home paths and long tokens are redacted and texts stop at 300 characters. transport.snapshot now chains its cause, and the start-readiness failure names its health freeze reasons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the test's home-path fixture at runtime Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2cdd1faafe
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…cellation, suppress the snapshot cause The command center's #809 review (GPT read at 2cdd1fa: one P2, two P3, one verification gap): - P2: the long-token redaction erased the engine's own words, so a readiness failure read "stream <redacted> readiness failed (<redacted>,start_not_ready)". Lowercase words joined by "_" or "/" (reason codes such as quotes_subscription_rejected, fixed phrases such as authentication/subscription/quote) now stay; every other long token is still redacted. - P3: _text redacts the whole text before stopping it at 300 characters, so a token that crosses the cut is redacted whole instead of leaving a short fragment. - P3: a cancelled recovery records {"code": "recovery_cancelled", "type": "CancelledError"}. - Verification gap: transport.snapshot() raises "from None" again, so no caller's traceback or log prints the failing read's foreign text; __context__ still gives a recovery receipt the read's type. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The #809 delta read at 87baa6d (one P3): replacing a home path first could leave a short prefix of an otherwise redactable long token ("A" * 20 + "/home/user" kept 20 A characters). _text now finds long tokens in the original text, then replaces the remaining home paths, also inside a kept engine word. Test: /home/, /Users/ and /root/ in message and context_message; it fails at 87baa6d. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The #809 delta read r3 at 9db21fd (one P3): finding tokens first let a token consume a home path's start and leave its punctuated suffix, and a kept engine word lost only its inner path part. _text now collects every home-path span and every non-engine long-token span in the original text, joins the overlapping or touching ones and replaces each joined span once (<path> when it holds a home path), then applies the 300-character cap. Tests: targeted cases for both orders' leaks in message and context_message, and a seeded 4000-text comparison with a character-mask oracle, which fails at both 87baa6d and 9db21fd. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#812 and #809 both change transport.py, tests/test_adaptive_paper_transport.py and source-hashes.json. transport.py and the test file merged without conflict (#812's quote_stream_data_timeout, stream_health and stop() snapshot; #809's readiness reasons and the snapshot's from None). source-hashes.json takes main's copy with the four changed entries recomputed from the merged bytes (recovery.py, transport.py and both test files), and manifests/evidence.json takes main's registry with this branch's five owned rows re-registered (hot-file protocol). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude session native-agent-stack-5f: landing at head Observed main Required checks at this head: 7 pass . Unresolved review threads: 0. |
|
Claude session native-agent-stack-5f: post-merge observation. Landed as |
### Scope Repair the native install-plan checks that lost prompts, ended before delivering results, inherited incompatible environments, or accepted incomplete output. Fresh Claude checks now use task-first native arguments, the shared foreground instruction file and session lock, bounded execution, and independent completion/artifact gates. The plan also carries the gate-1 environment, messaging, conformance, observability and canonical gateway repairs. - Base: `3d7d4a4b2640c8583d8855670111ef5d023d3e03` (final landing cue after #758; main's registry and stack retained). - Review head: `979291ded5f39ddf8cdcba4ffb29df4656b407d8`; final table commit `c6f7ca4`, registry commit `979291d`, exactly two commits after reviewed `8484ddbc`. - Lane: `lane:foundation`; draft until the command center reads this exact head. - Owned paths: install-plan scripts/configuration/checker/tests; client-config drift fixes; source decisions/receipts and maintained generated outputs. - Local-model finding 2 is a separately preserved source checkpoint for #810. It is deferred from this critical head under START-PATH/FULL-RESOLUTION; #723 does not wait for that PR. - AgentsView's operational plan uses 0.44.0, its verified launcher and known-alias migration. #807 carries the shared repository pin. Frozen 0.43.0 observations remain historical; CODE-MODE attribution remains incomplete. ## SOTA sources - GO-PUSH-723 final microfix follows native-stack@8484ddbcf138cc96c853fb2720fe016daee6b035:tests/test_adoption_docs_consistency.py:815-829 (GFM0.29-gfm §4.10 contiguous-table contract) and scripts/host_receipts.py:register_file. It removes one empty line without changing any row, then updates only that file's sha256 and byte count in the last commit. - J723/J723b/J723c delta: Node's [WHATWG URL hostname](https://nodejs.org/api/url.html#urlhostname) and [port](https://nodejs.org/api/url.html#urlport); systemd@v259 [microsecond show formatting](https://github.com/systemd/systemd/blob/v259/src/systemctl/systemctl-show.c#L1120); uutils/coreutils@0.10.0 [date](https://github.com/uutils/coreutils/blob/0.10.0/src/uu/date/src/date.rs#L596) and [stat](https://github.com/uutils/coreutils/blob/0.10.0/src/uu/stat/src/stat.rs#L1117); CPython3.13 [recursive paths](https://docs.python.org/3.13/library/pathlib.html#pathlib.Path.rglob). The existing handbook receipt guard remains exact; prior output pairs and observed validation history are retained. Both research clone tag SHAs are enforced. SOURCES.md gives the remaining repository-native contract locators. - [Claude native headless CLI](https://code.claude.com/docs/en/headless), [system-prompt flags](https://code.claude.com/docs/en/cli-reference#system-prompt-flags) and [environment controls](https://code.claude.com/docs/en/env-vars), checked against installed 2.1.289. The retained byte proofs and all per-row pins are in `evidence/artifacts/new-wsl-install-plan-20261002/SOURCES.md`. - [openai/codex@a956835d:review.rs:105](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/core/src/tasks/review.rs#L105): bind the actual native reviewer child, model and effort; native exec_command/write_stdin completion is distinct from an MCP transport timeout. - [aannoo/hcom@2c5f343b:tests/support/mod.rs:949](https://github.com/aannoo/hcom/blob/2c5f343b2f9ec4bf2acf49c0431860e7c2ae578b/tests/support/mod.rs#L949): first-marker identity capture. Landed #771 supplies the relaxed operational adapter and native rules check; the duplicate A50 historical-only policy was dropped. - [util-linux@v2.41.3:flock.1.adoc:80](https://github.com/util-linux/util-linux/blob/v2.41.3/sys-utils/flock.1.adoc#L80): lock acquisition bounds; installed timeout is uutils coreutils0.10.0, with native timeout source cited in SOURCES. Queue is at most3600s and Claude execution at most3300s, separately. - [DeerFlow@v2.1.0 config](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/config.example.yaml): native headless/keyless provider and model metadata. Canonical Sol-max suffix precedence follows [the #744 decision](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0fb32ee583589f1a0809b20d18dff40ce2f65a1c/docs/decisions/2026-10-05-omniroute-gateway-composition.md#L37); `supports_reasoning_effort=false` is a derived configuration choice, not a statement in #744 or wire-effort proof. - [MCP conformance@c321dd3 runner](https://github.com/modelcontextprotocol/conformance/tree/c321dd3/examples/servers/typescript): unchanged upstream servers/CLI inside the cited private user/PID/network namespace, with owned group cleanup. External URL acceptance stays needs_owner78 until an in-namespace adapter is supplied. - [Playwright system dependencies](https://playwright.dev/docs/browsers#install-system-dependencies), Inspect AI0.3.273, OpenHands SDK1.50.1 and SRT0.0.78 pinned sources are recorded per row in SOURCES. The worker retains production's Unix-socket block and the upstream subprocess backend; no test-only relaxation. - [AgentsView v0.44.0](https://github.com/kenn-io/agentsview/releases/tag/v0.44.0), commit413a87f7bfbd67b2815b1119ac51abc1efbeeaba, official Linux archive SHA037ea7a46d52e06b20363b4aa7cd7f28e32f31d8215803d6e9a0c96bac5818e3. Native B2 results and failed earlier attempts remain separate from frozen0.43 evidence. - Native repository builders: `assemble_manifest.py:876-896`, `scripts/build_new_wsl_handbook.py`, `host_receipts.register_file`, `component_matrix.py` and `new_host_grand_list.py`; `docs/lanes.md:96-128` governs the last generated/registry commit. Decision corrections are dated addenda; original observed values are preserved. ### Required verdict changes | Item | Resulting source | | --- | --- | | P1 hcom posture | Rebased on #771; dropped15f24fe1 and its generated companion. Relaxed adapter remains operational. Independent naming fix retained. | | P1 canonical route | Exactly cx/codex gpt-6.1-sol-max accepted with all provider, suffix, status, endpoint and join negatives retained. | | P2 timeouts/background | Foreground1560000ms; native background-disable env; flock wait outside execution timeout;48 turns/fixture/schema retained. | | P2 skill config | Native installed default config; concrete triggers and foreground wait; custody proposal outside the operational skill. | | P2 conformance URL | Unsupplied target stays needs_user78; external URL without namespace startup adapter is needs_owner78. No host-network fallback. | | P2 gateway custody | Unknown operative assets still fail closed; regular example files retained. Explicit owner backup/staging/reload/restart/read-back/rollback runbook in the dated addendum. | | P2 citations/evidence | FAST suffix is high; #744 only supplies suffix precedence; removal condition is issue8939/PR8940 and its regression test; cleanup is helper-derived local integration. | | Rebase/hot files | Main's generated inputs/registry taken; maintained outputs regenerated; all shared generated/registry edits last. | ### Evidence-class table | Claim | Class | Evidence | | --- | --- | --- | | Source agreement and artifact integrity | local_integration | Plan/client-map/handbook checks and maintained generators; final validator result below | | Completion, custody, endpoint and alias controls | synthetic / local_integration | Four touched fixture modules,379 tests,3 existing skips | | Earlier native attempts | Their original classes | Existing returned streams/receipts preserved; later success does not replace a failure | | Model routes and metadata | source_review / local_integration replay | Exact aliases and joined records; where spelling changed and delivered wire effort remain unproved | The new sanitized source receipt is `evidence/artifacts/new-wsl-install-plan-20261002/fixwave-20261006-verdict-rebase-receipt.json`. It does not declare a new native-ready slot or upstream-suite pass. ### Local commands run Final GO-PUSH-723 change: exactly one empty line removed at harness-defaults.md:122, plus that file's registry sha256/bytes. Two commits, same base3d7d4a4b; no rebase or other source change. `nice -n 19 ionice -c3 python3 -m unittest tests.test_adoption_docs_consistency` passed39tests/1existing skip in17.985s; final validator69components/10408hashes/4profiles/224receipts0; diff0. A structural comparison proves the registry differs in exactly one file entry. The command center's ACK stands under the explicit range-diff/green-CI condition; neither CI nor landing is claimed by this lane. Final J723d delta: conformance installs native EXIT/INT/TERM cleanup before the path-length assertion and removes only its frozen owned TMPDIR after process teardown. The early-failure control preserves unrelated cache bytes and the evidence directory; existing success/failure/cancellation controls now also require the allocation gone. Nine focused lifecycle cases passed. After the final landing-cue rebase onto #758, all seven full touched modules passed **589 tests / 3 existing skips in 163.180s**. Final plan0 remains84rows/192commands/113acceptance; F9readonly0 with the same two warnings; native builder/check0; diff0; validator0:69components/10408hashes/4profiles/224receipts. Current handbook pair is c8ecbb5d/d7cc2ccb, with all predecessor output bindings/observations retained. Native [Bash trap documentation](https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#index-trap) and the existing identity-checked cleanup seam govern the bounded fix. No other functional delta was added. Completeness critic found no material blocker, source review only. CI/CodeQL and destination apply remain owner gates; the PR stays a draft under the granted landing hold. Earlier published J723/J723b/J723c delta: all seven full touched modules passed **581 tests / 3 existing skips in 166.987s**, under the CI-pinned Python3.13 environment, explicit private-venv PATH and umask022, at nice19/ionice3. The run includes all four J723c failing modules and the earlier client-config/gateway/conformance modules. Earlier delta attempts remain distinct:99tests/2fixture failures, then focused12pass;468tests/1unsettled synthetic login-path failure, whose unchanged isolated retry passed. No assertion or skip was relaxed. Focused CI4 controls17pass. Then-current validator0:69components/10401hashes/4profiles/224receipts. These remain local integration, not destination acceptance. The earlier #809-only rebase had proved unchanged foundation bytes. The final #758 landing-cue rebase adds its time-zone/client-config sources, so the full seven-module suite was rerun, with main's source/registry/stack and regenerated publication bindings retained. Review-thread read found no chatgpt-codex-connector threads; the CodeQL thread remains for its scan result. ```bash nice -n 19 ionice -c3 python3 -B -m unittest -v tests.test_wsl_new_distro_recipe tests.test_agentsview_qualification tests.test_new_wsl_definitive_defaults tests.test_new_wsl_handbook tests.test_new_wsl_client_config tests.test_new_wsl_gateway_composition tests.test_new_wsl_mcp_conformance_lifecycle nice -n 19 ionice -c3 python3 scripts/validate.py ``` The owner-pending Claude route now produces **needs_owner/78 before loading Promptfoo's configuration**, rather than a failed provider evaluation; malformed supplied routes still fail. Parsed URL host and port must match the plan-owned127.0.0.1:21128 exactly. Both gateway health stages require the keyed microsecond UTC active-start timestamp to be strictly later than both rendered unit files, preserving existing identity and completion gates. CI enumerates nested config files, keeps an exact Inspector script set, uses native Git/Python/env without a forced RTK runtime dependency, and classifies old AgentsView aliases as predecessor fixtures. Source completeness critic found no material blocker; its review ran no tests or host calls. J723b's native-messaging smoke observation from the dropped A50 draft is retained privately, byte-identical, mode0600, SHA256 **a14356efc2ba3e6c7d44b2d9818538a824b9429fc5d9eaff929ee56e38efee83**. That dropped draft observation is superseded by #771; no public A50 amendment, retired posture or enforcement test is restored. Earlier source-head validation follows: ```text python3 -B evidence/artifacts/new-wsl-install-plan-20261002/check_plan.py rc0:84 rows,192 commands,113 acceptance entries; earlier kind-label mismatch retained. python3 tools/adoption/new_wsl_client_config.py --check rc0; two pre-existing Inspector ownership warnings, addressed separately by C11; no apply. python3 scripts/build_new_wsl_handbook.py --check rc0. python3 -B -m unittest -v tests.test_new_wsl_client_config tests.test_new_wsl_definitive_defaults tests.test_new_wsl_gateway_composition tests.test_new_wsl_mcp_conformance_lifecycle First attempt rc1:379tests/21errors/3skips; undeclared fixture PyYAML import. Maintained standard-library fixture repair: targeted21cases rc0. Full retry rc0:379tests,3skips,120.182s; no production/helper/dependency or assertion weakening. git diff --check rc0. nice -n19 python3 scripts/validate.py rc0:69 components,10385 hashed files,4 profiles,215 receipts. The earlier historical-inventory non-live limitation failure is retained; payload and manifest were clarified together. ``` ### Decision record Current instructions and the complete gateway custody runbook are in the dated addendum to `docs/decisions/2026-10-06-native-plan-gate1-repairs.md`. Its original decision text remains unchanged. The earlier acceptance decision also receives an appended FAST-effort correction. Original historical observations are never rewritten. ### After landing: co-op apply and read-back The co-op is the sole plan writer. Apply the approved main commit at its booked quiet point; retain the previous gateway prefix and per-asset backup packet. First follow the addendum's gateway custody/reload pre-gates. No lane applies a host change or widens AF_UNIX. ```bash plan=evidence/artifacts/new-wsl-install-plan-20261002 bash "$plan/install.sh" --only agent-messaging bash "$plan/accept.sh" --only agent-messaging --stage post_install </dev/null bash "$plan/install.sh" --only inspect-ai bash "$plan/install.sh" --only trajectory-analysis bash "$plan/accept.sh" --only trajectory-analysis --stage post_install </dev/null # Gateway: execute the owner-custody addendum first; preserve rollback prefix/packet. bash "$plan/install.sh" --only gpt-gateway bash "$plan/accept.sh" --only gpt-gateway --stage post_install </dev/null bash "$plan/accept.sh" --only gpt-gateway --stage service_health </dev/null bash "$plan/accept.sh" --only gpt-gateway --stage after_sign_in </dev/null bash "$plan/install.sh" --only research-harnesses bash "$plan/install.sh" --only skill-vetting bash "$plan/install.sh" --only mcp-protocol-conformance bash "$plan/install.sh" --only session-analytics ``` The hcom apply uses the relaxed mapped adapter and native smoke; it has no custom quiet/deny posture. Gateway owner custody, daemon-reload, unit restart and packet-based rollback are fully specified in the addendum. Existing environment credentials are left by pointer and are never copied into the packet. Archive-version rollback for AgentsView additionally requires its consistent pre-migration archive; preserve the existing backup, whose restoration has not been qualified. For each changed row, retain the install/read-back rc, then one smoke in each client that uses it and subsequent organic counters. Use the canonical shared flock for each exact fresh Claude invocation. Existing repaired-stage commands and returned-artifact gates remain in accept.sh; targetless conformance78 is not a protocol pass. No new measurement campaign or A/B gates this apply. ### Checklist - [x] Sources pinned; failed attempts and unknown usage preserved. - [x] No credential values or private client configuration published. - [x] Peer-owned settlement assertions preserved; no #775 hunks. - [x] Scoped379-test fixture retry passed; no new skip. - [x] Final registered-tree validate passed. - [ ] Exact-head GPT/CC read; the PR remains a draft. - [ ] Co-op host apply/read-backs and native smoke/counters after landing.
Scope
TransportError, which hid a stream-readiness and quote-freshness failure.lane:trading.blueprints/us-equities/adaptive-paper/recovery.py;blueprints/us-equities/adaptive-paper/transport.py;blueprints/us-equities/adaptive-paper/source-hashes.json;tests/test_adaptive_paper_recovery.py;manifests/evidence.json(the last commit).What changes:
recovery.py.errorskeeps its stable codes, so every consumer and test is unchanged. A newerror_detailslist gives each failure's:code(the same as theerrorsentry) andtype;message, only when the engine authored it (atransportorsafetyexception);context_typeof the chained or suppressed context. Raisingfrom Nonestill keeps__context__. The context's message follows the same engine-only rule.test_ambiguous_exit_is_retained_never_retried_or_rejected) enforces this._text): home paths and long tokens are redacted over the whole text, and only then is the text stopped at 300 characters, so a token that crosses the cut never survives as a fragment. The engine's own words stay readable: lowercase words joined by_or/, such asquotes_subscription_rejectedorauthentication/subscription/quote. Any other long token, with digits, capitals,+,=or-, is redacted.{"code": "recovery_cancelled", "type": "CancelledError"}, so everyerrorsentry has a detail.transport.py:quotes_disconnected,quote_stale;snapshot()still raisesfrom None, now with a comment saying why. No caller's traceback or log prints the failing read's foreign text, and__context__still gives the receipt that read's type.source-hashes.json: pins the changed engine files and tests.The frozen trial engine (
dca821cc) is unchanged. This takes effect only for a later engine pin.SOTA sources
blueprints/us-equities/adaptive-paper/README-recovery.md(receipts,needs_attention);README-transport.md(health freeze reasons);tests/test_adaptive_paper_recovery.py.raise ... from,__cause__,__context__,__suppress_context__): https://docs.python.org/3.13/library/exceptions.html#exception-contexttask-native-agent-stack-5f-20261006T212903Z(item 4) andtask-native-agent-stack-5f-20261006T213803Z(item 4). A diagnostic run of the frozen engine with only the error label formatted showed the hidden reasons:stream authentication/subscription/quote readiness failed,quotes_disconnected,quote_stale, andSafetyError: recovery_quote_not_fresh.Evidence-class table
error_detailscarries engine messages and contexts, and redacts foreign texttests/test_adaptive_paper_recovery.py:test_receipt_carries_the_message_and_its_context(chained and suppressed),test_engine_authored_context_is_kept_and_redacted,test_a_clean_recovery_has_no_error_detailstest_readiness_failure_keeps_each_subscription_reason(all three reasons),test_engine_codes_stay_and_other_long_tokens_are_redacted,test_redaction_runs_before_the_length_cap(messageandcontext_message),test_task_cancellation_stops_transport_and_retains_ambiguity,test_cancellation_then_teardown_failure_keeps_both_detailstests/test_adaptive_paper_transport.py:test_snapshot_failure_keeps_the_foreign_read_out_of_tracebacks(__cause__None, context suppressed,traceback.format_exceptionwithout the foreign text)2cdd1faaf: 8 recovery assertions fail (the three reasons, the token rule, both boundary fields, both cancellation details), and the transport test fails on the chainedConnectionErrorcredential_racefailures below; engine venv: the transport module, 117 tests, with 3 errors that are identical on main (noexchange_calendarsin that venv); trading gates and source hashes: 63 OKtest_adaptive_paper_credential_racemutation-driver failures are environmentalorigin/mainworktree in this host's venv; CI is the authorityLocal commands run
Decision record
The command center's items cited above, and its review of this PR at
2cdd1faaf(ACK after one P2 and two P3 fixes, and a check that foreign causes stay out of logs). The stream self-close fix is separate: #812.🤖 Generated with Claude Code