Skip to content

trading: recovery receipts carry the engine's error message and its context - #809

Merged
seathatflowsinourveins merged 24 commits into
mainfrom
trading/recovery-error-detail-20261006
Oct 7, 2026
Merged

seathatflowsinourveins merged 24 commits into
mainfrom
trading/recovery-error-detail-20261006

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Scope

  • What this PR changes: a recovery receipt now records why recovery failed, not only the exception type.
  • Why: account 2's 2026-10-06 recovery receipts said only TransportError, which hid a stream-readiness and quote-freshness failure.
  • Base commit: origin/main at branch time.
  • Lane: lane:trading.
  • Owned paths touched:
    • 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. errors keeps its stable codes, so every consumer and test is unchanged. A new error_details list gives each failure's:
    • code (the same as the errors entry) and type;
    • message, only when the engine authored it (a transport or safety exception);
    • context_type of the chained or suppressed context. Raising from None still keeps __context__. The context's message follows the same engine-only rule.
  • What never enters a receipt: foreign exception text (SDK, network, OS). It can quote a request or a credential; the existing no-secret test (test_ambiguous_exit_is_retained_never_retried_or_rejected) enforces this.
  • Redaction (_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 as quotes_subscription_rejected or authentication/subscription/quote. Any other long token, with digits, capitals, +, = or -, is redacted.
  • Cancellation records {"code": "recovery_cancelled", "type": "CancelledError"}, so every errors entry has a detail.
  • transport.py:
    • the start-readiness failure names its health freeze reasons, for example quotes_disconnected,quote_stale;
    • snapshot() still raises from 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

  • The engine's own recovery and transport contracts:
    • blueprints/us-equities/adaptive-paper/README-recovery.md (receipts, needs_attention);
    • README-transport.md (health freeze reasons);
    • the existing receipt tests in tests/test_adaptive_paper_recovery.py.
  • Python's exception-chaining semantics (raise ... from, __cause__, __context__, __suppress_context__): https://docs.python.org/3.13/library/exceptions.html#exception-context
  • The incident: the command center's items task-native-agent-stack-5f-20261006T212903Z (item 4) and task-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, and SafetyError: recovery_quote_not_fresh.

Evidence-class table

Claim Evidence class Command / receipt
error_details carries engine messages and contexts, and redacts foreign text local_integration tests/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_details
The review fixes: each subscription reason survives in the receipt; unknown long tokens are still redacted; redaction runs before the cap; cancellation has a detail, also with a teardown failure local_integration test_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 (message and context_message), test_task_cancellation_stops_transport_and_retains_ambiguity, test_cancellation_then_teardown_failure_keeps_both_details
A snapshot failure keeps the foreign read out of tracebacks local_integration (engine venv with alpaca-py; CI skips it) tests/test_adaptive_paper_transport.py: test_snapshot_failure_keeps_the_foreign_read_out_of_tracebacks (__cause__ None, context suppressed, traceback.format_exception without the foreign text)
The new tests detect the reviewed defects negative control the new test files against the previous head 2cdd1faaf: 8 recovery assertions fail (the three reasons, the token rule, both boundary fields, both cancellation details), and the transport test fails on the chained ConnectionError
No existing behavior changes local_integration CI-equivalent venv: all adaptive-paper modules, 1248 tests, with the 5 credential_race failures below; engine venv: the transport module, 117 tests, with 3 errors that are identical on main (no exchange_calendars in that venv); trading gates and source hashes: 63 OK
5 test_adaptive_paper_credential_race mutation-driver failures are environmental local_integration the same 5 fail on a fresh origin/main worktree in this host's venv; CI is the authority

Local commands run

$ <CI-equivalent venv>/bin/python -m unittest discover -s tests -t . -p "test_adaptive_paper_*.py"
Ran 1248 tests ... FAILED (failures=5, skipped=358)   # the 5 credential_race mutation-driver failures, also on main
$ python3 scripts/validate.py
{"components": 69, "hashed_files": 10355, "profiles": 4, "receipts": 214, "status": "passed"}
$ python3 scripts/evidence_manifest.py --check
{"files": 10355, "status": "passed"}

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

Scout and others added 5 commits October 6, 2026 17:39
…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>
@seathatflowsinourveins seathatflowsinourveins added the lane:trading Trading lane: sim, paper and live north star label Oct 6, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-06T21:51:04.397933Z 2cdd1fa PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread blueprints/us-equities/adaptive-paper/recovery.py Outdated
Comment thread blueprints/us-equities/adaptive-paper/recovery.py
Scout and others added 19 commits October 6, 2026 18:19
…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>
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Claude session native-agent-stack-5f: landing at head 2df943bd2f1113b997bfc74d372bc23958aa4fdf. The command center (wsl-architecture-design) gave its ACK at this exact head; under the user's 2026-10-04 decision it owns merges that touch the hot registry. The read-only cross-family review (GPT-6.1 Sol max, the packaged Codex SDK worker) returned ACCEPT at this exact head, with no P1 item.

Observed main d9eb68750311d5f888adec140723da174f9fe10c. coordination/merge_tree_landing_check.py (sha256 a11649fcf2e5844c…) exit 0:

main d9eb68750311d5f888adec140723da174f9fe10c head 2df943bd2f1113b997bfc74d372bc23958aa4fdf base b4e1fa6df6048436e3f756965de38d9507dd5722 merged-tree c9ac92fc44d4349998a995b05b5284a39bd61acc merge-tree-exit 0
ok   1: clean three-way merge
ok   2: merged-vs-main paths 6, outside PR-owned 0 []
ok   3: main drift 72 paths, overlap with PR-owned inputs (registry excluded) []
ok   4: registry foreign rows equal True, order preserved True, PR-owned rows 5, unowned top-level keys differing []
ok   5: merged files[] sorted by path with no duplicates: True (10381 rows)
LANDABLE
condition 5: merged files[] sorted and unique (tree c9ac92fc44d4349998a995b05b5284a39bd61acc)

Required checks at this head: 7 pass . Unresolved review threads: 0.

@seathatflowsinourveins
seathatflowsinourveins merged commit 0c4d328 into main Oct 7, 2026
25 checks passed
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Claude session native-agent-stack-5f: post-merge observation. Landed as 0c4d32868f2b7b1d294d73cbbd0d5d3e41664c3d (parent d9eb68750311d5f888adec140723da174f9fe10c), tree c9ac92fc44d4349998a995b05b5284a39bd61acc. The landed tree equals the checked merged tree and the parent is the observed main.

@seathatflowsinourveins
seathatflowsinourveins deleted the trading/recovery-error-detail-20261006 branch October 7, 2026 00:05
seathatflowsinourveins added a commit that referenced this pull request Oct 7, 2026
### 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:trading Trading lane: sim, paper and live north star

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant