Repository navigation
trading: NativeStack2604 research runtime, EdgarTools 5.60.0 (runtime and catalog), hash-pinned build backend - #703
Conversation
…ne acceptance scripts, uv project and lock, README, decision record, receipts) Packages the CC's job-031 runtime: CPython 3.12.3 in an owned uv project, a 242-entry lock, NautilusTrader 2.0.0rc5 with the in-tree IBKR adapter and alpaca-py 0.44.0 plus the research set. Install PASS and 25/25 offline acceptance PASS on NativeStack2604 (historical host-local native execution, 2026-10-04). Receipts are sanitized; the runtime-target catalog gains one dated evidence-only follow-up; no selection or gate status changes. Open items stay open: Python 3.12.3 vs 3.13 ratification and the EdgarTools overturn test. Packaged by GPT-6.1 Sol through the packaged SDK worker; acceptance in the round's result. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…her (native SEC acceptance passed) - Runtime: pyproject and uv.lock pin edgartools 5.60.0 (relocked with uv 0.12.17 and the bundle vector, --upgrade-package edgartools: only EdgarTools moved; lock 6b4e6a4d); install and accept scripts, README and the decision record follow, with the CI-at-tag assessment (release-day push runs green; the Oct 3 scheduled failure is the clock-dependent #893 TTM cassette pair, fixed test-only upstream in 9ea5def31b and 156c45b327). - Catalog: data-research.json data-edgartools moves to v5.60.0 (1e7a61b3) on the native SEC acceptance receipt native-sec-edgartools-5600-20261004 (one GET 200, 371 rows, same five CIK/accession rows as 2026-09-19 and 2026-09-24); catalyst-provenance requirements.lock equals the accepted environment's 42-package freeze; live plan rows and recipe pins move with their tests; dated historical snapshots keep 5.58.0. The runtime-target EdgarTools open item closes with the receipt id. - Offline fixture evidence at 5.60.0 (local, not SEC acceptance): the 8-K markdown changed in whitespace only. - The recorded 2604 run (5.58.0) stays truthful; the NativeStack2604 re-run at 5.60.0 gets its own receipt. GPT-6.1 Sol rounds trading-2604-edgartools-5.60.0 (a, b2) through the packaged SDK worker; receipt built by the coordinator from the command center's run; the coordinator commits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nsus test and one shared sync vector (unit T PR-1)
- trading-2604-runtime/pyproject.toml: [tool.uv] build-constraint-dependencies pins setuptools==84.0.0 with the
lock's own wheel and sdist sha256 (uv 0.12.17: uv.schema.json:46-50, docs/concepts/projects/build.md:61-79);
the relock records it in uv.lock's [manifest] (lock 4c98672d; no package moved). antlr4-python3-runtime 4.9.3 is
the only lock entry without a wheel, and uv would otherwise build it against an unpinned setuptools>=40.8.0.
- Proof (retained in evidence/artifacts/trading-runtime-2604-20261004/build-constraint-proof.json): positive
cold-cache sync exit 0 with antlr4's WHEEL reading Generator: setuptools (84.0.0); NC-1 (pyproject digest only)
lock --check exit 1; NC-2 (relock with an invalid-only digest) exit 1, hash mismatch; NC-3 (invalid-only digest in
pyproject and manifest) cold sync exit 2, no overlapping hashes.
- tests/test_trading_2604_lock.py (stdlib tomllib): manifest equals the pyproject constraint, the constraint is an
== pin of the lock's setuptools with exactly its hashes, and the wheel-less set is {antlr4-python3-runtime};
planted fixtures fail.
- sync-trading-2604.sh holds the single argument vector (uv lock --check; uv sync --locked --no-dev; uv pip check)
that the installer runs and the future trading-native CI job will run; a test pins the installer to it byte for
byte.
- The earlier 25/25 NativeStack2604 summary is labelled pre-relock evidence; the re-run on the final lock gets its
own receipt.
GPT-6.1 Sol round trading-2604-c through the packaged SDK worker; the coordinator commits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed by it) tests/test_osv_lockfile_coverage requires every tracked lockfile and manifest in .github/osv-scanner-lockfiles.json; the pre-push registry tests caught the new runtime project. 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>
…SS, 25/25 offline acceptance) The command center re-ran this PR's own install-trading-2604.sh and accept-trading-2604.sh on NativeStack2604 at d02c082 against the final lock (sha256 4c98672d14147a1b...), 2026-10-05T01:00:17Z-01:01:07Z: install PASS; 25/25 PASS, 0 FAIL, 0 BLOCKED; the locked sync moved edgartools 5.58.0 -> 5.60.0 and import_edgartools passed. Sanitized receipt by the command center; per-check logs stay private on the host. 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>
…asses, freeze limitation restored - The README, decision record, runtime target, stack row and data research now cite the rerun receipt (install PASS, 25/25 offline acceptance at d02c082, lock 4c98672d14147a1b) in place of the pending status. - The rerun receipt uses kind native_cli_e2e; native_proven covers only the unchanged nautilus_quickstart row, local_integration the other 24 destination-host rows. - The historical host receipt and the original runtime receipt keep their measurements and gain a dated supersession note. - The edgartools freshness row again says the catalyst-provenance requirements.lock is a name==version freeze, not hash-locked. - Coordinator: the SEC 5.60.0 receipt no longer publishes the private original's sha256 and byte count, and committed_copy_sha256 now covers the trailing newline catalyst.py writes. Built by GPT-6.1 Sol through the packaged SDK worker (round trading-2604-d); committed by the coordinator. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tack2604 rerun and link it - evidence/artifacts/trading-runtime-2604-20261004/rows-native-trading-runtime-2604-rerun-d02c0827.json: the operator's sanitized outer status rows (install PASS; 25 acceptance rows, each PASS with exit 0), copied byte for byte by the coordinator. - The rerun receipt cites the artifact by path, sha256 and size. It carries the 25 checks transcribed from the artifact (names, order, statuses and exits match exactly), and closes operator_followup on 2026-10-05. Per-check logs stay private, the evidence-class scoping is unchanged, and independent review is still pending. - The decision record notes the delivery. Built by GPT-6.1 Sol through the packaged SDK worker (round trading-2604-e); committed by the coordinator. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… to the merge base before the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…its on the merge base (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ation, host receipt restored, census and mise wording) - catalogs/us-equities/data-research.json: the edgartools limitation cites the recorded rerun in place of "pending". - The SEC 5.60.0 receipt's private_original_note is dated 2026-10-05 and says the private original's sha256 and byte count were withdrawn after an earlier pushed commit of this PR carried them. committed_copy_note records that the earlier value was taken without the trailing newline. - The rerun receipt and its receipts[] copy add the limitation that no independent post-run observation or discriminating controls were supplied on NativeStack2604. The only same-check controls ran on the packaging worker. - The recorded host receipt evidence/hosts/native-stack-2604-20261004/...--nautilustrader--use-- 20261004.json is restored to its recorded bytes as introduced in 29da752. Recorded host receipts change only through append-only reviews; the forward pointers stay in the runtime receipt, its registry copy and runtime-target.json. - The decision record uses the README's census wording ("packages without any wheel"; no target-compatible wheel coverage check). - edgartools-5600-pin-move-20261004.json and its receipts[] copy gain superseded_note_20261005. - The mise wording now says exactly what ran under `mise exec uv@0.12.17`: the install script's sync, including `uv lock --check`. The relock itself did not run through mise. Built by GPT-6.1 Sol through the packaged SDK worker (round trading-2604-f); committed by the coordinator. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… to the merge base before the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…its on the merge base (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The re-scoped mise sentence named only one relock. The text now names both, with their recorded artifacts: - `uv lock --upgrade-package edgartools` produced lock 6b4e6a4d; - the round-c build-constraint relock then produced the final lock 4c98672d14147a1b. Both ran with the installed native uv 0.12.17 on the packaging worker, where mise was not available, so neither went through mise. The separate claim stays: the destination-host sync ran under mise exec uv@0.12.17. The receipts[] copies stay payload-equal. Built by GPT-6.1 Sol through the packaged SDK worker (round trading-2604-g); committed by the coordinator. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… to the merge base before the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…its on the merge base (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…g runtime branch - catalogs/foundation/new-wsl-architecture-20261001.json: all four EdgarTools blocks keep this branch's 5.60.0 pin, acceptance and upstream_currency text. Every pin_source cites the merged manifests/stack.json version line, :1524. - manifests/stack.json auto-merged: it is main's stack with only the EdgarTools component taken from this branch. - manifests/evidence.json: main's 202 receipts are kept, plus this branch's four. 51 payload files are re-registered last. - The four generated reports were refreshed with their repository builders. Every other file keeps its own side's content. Resolved by GPT-6.1 Sol through the packaged SDK worker (round trading-2604-merge); committed by the coordinator. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… to the merge base before the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…its on the merge base (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Dependency limit exceeded — report not shown. This pull request scan exceeded the 10,000-dependency limit applied to this scan, so the results are incomplete and may be inaccurate. To avoid reporting false positives, Socket has not posted a report. Upgrade your plan to raise the dependency limit and get complete reports, or view the partial scan in the dashboard. Socket is always free for open source. If this is a non-commercial open source project, contact us to request a free Team account. |
…60.0 mirrors synced; pin_source line test
- catalogs/foundation/new-wsl-architecture-20261001.json: 14 pin_source cells that cited `{` or
`},` after this PR's 3-line growth of manifests/stack.json are recomputed to each component's
version (or revision) line. The cells are skills-ref, jcodemunch-mcp, poppler, the Nemotron
embedding revision, tavily-cli, playwright-test, zizmor, fastapi, nextjs, postgresql,
exchange-calendars ×3 and omniroute. Pins, text and the labelled architecture_pin_drift
cells are unchanged.
- New tests/test_architecture_pin_source.py checks that every `pin_source:
manifests/stack.json:N` cell points at a version or revision line of the named component in
the current stack. It is red at the merge head and green after the fix, and it also passes on
origin/main's pair. Whichever of #703 and #713 lands second must now recompute, because CI
enforces it.
- catalogs/landscape/upstream-snapshot.json and
blueprints/token-native-focus/saturation-audit.json now mirror EdgarTools 5.60.0. #703 moved
the stack pin without them, which is what made build_ecosystem.py --check and the landscape
check fail.
- docs/harness-defaults.md logs the anti-pattern: a merge that changes a cited file's line
numbers needs its cross-file line citations recomputed.
The command center found the shifted cells during its foundation ACK check. Built by GPT-6.1 Sol
through the packaged SDK worker (rounds trading-2604-pinsrc and -b); committed by the
coordinator. The coordinator re-ran test_architecture_pin_source, test_trading_2604_lock,
build_ecosystem --check, landscape.py --root . and validate: exit 0 each.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… to the merge base before the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…its on the merge base (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rs in every cited file, with a test that covers them all - manifests/stack.json: the EdgarTools component's evidence_ids now include native-trading-runtime-2604-rerun-d02c0827-20261005, matching the saturation audit's public_receipts, which tests/test_stack_lifecycle.py:34 requires to be equal. The receipt decides this: evidence/receipts/native-trading-runtime-2604-rerun-20261005.json:27 records the locked sync to 5.60.0 with import_edgartools PASS, :45 names EdgarTools, and :116-119 record the import check as local_integration. - catalogs/foundation/new-wsl-architecture-20261001.json: all 128 line-bearing pin_source citations, across 11 cited files, are recomputed. - The three NautilusTrader locators move from runtime-target.json:26, which became '},' after this PR re-serialized that file, to :32. - 14 stack locators shift after the added evidence id. - Eight pre-existing wrong-line locators are corrected: six Alpaca, :99 to :158; the SDK constraints, :19-20 to :22-23; the Ubuntu image, :295 to :105. - tests/test_architecture_pin_source.py now checks every line-bearing pin_source in every cited file, not only stack.json. It takes the expected content from each winner's own component, repository, package or pin key, and reuses scripts/build_ecosystem.py's locator validation. Against the unchanged catalog it rejected exactly 11 locators, and it passes after the fix. The docstring no longer cites a script that does not exist. - The EdgarTools pin-site classification and the pin-move receipt carry dated 2026-10-05 corrections for the five sites that moved to 5.60.0 but were still classed as history (docs/harness-defaults.md:83: correct the record where it was relayed). All 327 original inventory records are kept. New tests/test_edgartools_pin_move.py covers the corrections. - docs/harness-defaults.md: an anti-pattern row for this mistake. Built by GPT-6.1 Sol through the packaged SDK worker (round trading-2604-pinsrc-c); committed by the coordinator. The builder's runs each exited 0: - the tests: test_stack_lifecycle, test_architecture_pin_source, test_trading_2604_lock, test_edgartools_pin_move, test_catalogs, test_validate, test_adoption_docs_consistency, test_ecosystem_manifest and test_host_receipts; - build_ecosystem --check, landscape.py --root . and validate; - evidence_manifest --check and git diff --check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ndbook and unite the receipt and registry entries
- The catalog merged cleanly as text. tests.test_architecture_pin_source and tests.test_stack_lifecycle pass on the result.
- docs/new-wsl-handbook.{md,json} were regenerated with build_new_wsl_handbook.py --write, and --check passes.
- The handbook receipt is #715's version with regenerations united at the entry level: base 7, #715's 5, main's #703 entry, and this refresh's entry. Its outputs, generator and profile digests are refreshed.
- manifests/evidence.json is main's registry plus #715's two receipt rows, with #715's 18 paths re-registered. The hot-file commit follows.
Checks: 96 tests OK (test_new_wsl_handbook, test_architecture_pin_source, test_stack_lifecycle); validate.py exit 0; evidence_manifest --check exit 0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5a1861bd94
ℹ️ 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".
| case "$docker_host" in | ||
| ''|unix:///var/run/docker.sock|unix:///run/docker.sock) | ||
| blocked 'BLOCKED: a non-default rootless Docker endpoint is required.' 69 docker-endpoint-unavailable ;; |
There was a problem hiding this comment.
Verify the selected Docker daemon is actually rootless
When the selected context points to a rootful daemon on any nonstandard Unix socket or TCP/SSH endpoint, this check accepts it merely because its URL is not one of the two default sockets; the later docker image pull commands can therefore mutate an unintended rootful or remote daemon despite the recipe's rootless safety contract. Inspect the daemon's SecurityOptions for name=rootless before proceeding, as the existing check in blueprints/runtime-workers/openhands/host.py:207-211 does.
Useful? React with 👍 / 👎.
| "offline_runtime_followup_20261004": { | ||
| "recorded_at_utc": "2026-10-04T21:23:33Z", | ||
| "host": "NativeStack2604", | ||
| "evidence_class": "native_proven", |
There was a problem hiding this comment.
Classify the aggregate runtime evidence as local integration
The referenced receipt explicitly describes the 25-row harness as local integration and classifies every row except the unchanged Nautilus quickstart that way, so assigning native_proven to the entire follow-up promotes import probes and locally adapted examples beyond their recorded evidence class. Consumers of runtime-target.json can consequently treat the complete runtime as natively proven; use an aggregate local_integration class and retain native_proven only for the individual quickstart row.
AGENTS.md reference: AGENTS.md:L17-L18
Useful? React with 👍 / 👎.
| "schema_version": 1, | ||
| "id": "native-trading-runtime-2604-rerun-d02c0827-20261005", | ||
| "kind": "native_cli_e2e", | ||
| "claim": "On NativeStack2604, PR #703's own install-trading-2604.sh and accept-trading-2604.sh ran at head d02c0827 against its final lock: install PASS; acceptance 25/25 PASS, 0 FAIL, 0 BLOCKED.", |
There was a problem hiding this comment.
Do not record uncontrolled local checks as accepted passes
This new claim records all 25 checks as acceptance passes even though the receipt itself states that the local checks had no discriminating controls or independent post-run observation. Under docs/acceptance-evidence-policy.md:42-53, those newly claimed local checks must be recorded as untested until the same checks fail with their conditions removed; otherwise the receipt and downstream manifest freshness entries overstate what the run establishes.
AGENTS.md reference: AGENTS.md:L17-L18
Useful? React with 👍 / 👎.
| fi | ||
| fi | ||
| mkdir -p "$project" | ||
| rm -f -- "$project/.trading-2604-complete" |
There was a problem hiding this comment.
Preserve a valid completion marker through preflight failures
On any rerun of an already completed installation, this removes the only marker accepted by accept-trading-2604.sh before the daemon, bundled-lock, interpreter, or network preflights have succeeded. A transient Docker outage at lines 147-149, for example, leaves the previously valid environment unchanged but permanently blocks all acceptance checks until a full successful reinstall; defer invalidating the marker until the first operation that can actually mutate the accepted runtime.
AGENTS.md reference: AGENTS.md:L15-L15
Useful? React with 👍 / 👎.
…ER_THREADS at d25ea1f) - **T1:** evidence/receipts/ns2604-requalification-20261005.json restores the `#/bounded_repair_rulings` locator. bfff257 had pointed it at `#/micro_repair_rulings`, which records only superseded32. - **T2:** scripts/build_new_wsl_handbook.py now existence-checks `readiness.official_source` and `independent_review.recorded_source_review`, and hashes both through inputs.read, as it already does for the decision record. Both paths now appear in docs/new-wsl-handbook.json `sources`. A new test covers each missing source and a valid run. - **T3, amendment times:** - review-715-corrections.json keeps its initial recorded_at_utc (12:07:21Z). The later ruling blocks gain amended_at_utc and amendment_source_item: 17:08:27Z (item 20261005T170827Z) and 18:18:52Z (item 20261005T181852Z). - The two receipts whose claims were revised after their recorded_at_utc (ns2604-requalification and ns2604-roadmap-evidence) gain an `amendments` list with times from the git history. - **T4:** dated-readiness-rulings.json:191 cites main commit c148e04, where consensus.json is byte-identical. 1d74a85 was not reachable. Lines :474-476 are kept. - **P3 boundary wording:** catalogs/foundation/new-wsl-architecture-20261001.json :8 and :1208, and the requalification receipt's provisional-count limitation, now carry the qualification_bar.scope sentence: "The official baseline uses the #700 bar. Captured-status counts and model READY leads remain source_review; they are not measured qualification at that bar." - **Optional P3:** the decision record notes the merge of main ecfa112 (#703) at :48 and :463. - **Regeneration:** - docs/new-wsl-handbook.{md,json} were regenerated, and the handbook receipt records the regeneration. - The 11 changed files are re-registered, and the requalification receipt's mirrored limitations are refreshed in the registry. The hot-file commit follows, with the registry last. Checks: - validate.py exit 0; - unittest of test_new_wsl_handbook, test_architecture_pin_source and test_stack_lifecycle: 97 OK, exit 0; - build_new_wsl_handbook.py --check exit 0; - component_matrix.py --check exit 0; - new_host_grand_list.py --check exit 0; - evidence_manifest.py --check exit 0; - git diff --check clean. Built by GPT-6.1 Sol through the packaged SDK worker (round 715-r3); registry and commit by the coordinator, the single writer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ites WSL's time-zone default explicitly On 2026-10-05 the user asked that times shown to them be in their local time, resolved at the root of the harness rather than in a memory note or per-host edits. Records (ledger rows, receipts, evidence, commits) stay UTC. - One sentence, one wording, in both user-level templates: examples/claude-native/CLAUDE.md (Core rule bullet) and adoption/templates/codex.AGENTS.template.md (session-lanes line). The F9 carriers are regenerated and hold it once each; the nativestack2604 render matches them byte for byte. - Pins amended together: a fail-first StandingRuleSurfacesTests check, the Codex TOP_RULE_SHA256 and size comments, the client-configuration projection addendum, and a context-budget addendum (startup scopes 23,796/19,560 bytes under the unchanged 24,458/20,103 constants; new pin value recorded). - The new-distro recipe writes [time] useWindowsTimezone=true, WSL's documented default, so W5 reads it back: cloud-init user-data (path A), W6 (path B), the W5 read-back, the first-boot checklist, the receipt example, the command table and a dated amendment of the recipe record. Source: Microsoft wsl-config "Time settings" (MicrosoftDocs/WSL 7ea1c6f9, WSL/wsl-config.md:152-158). - The WSL image experiment's four edited frozen inputs move to evidence/artifacts/user-facing-local-time-20261005/frozen-inputs/ with unchanged hashes (fix-wave precedent). - Decision: docs/decisions/2026-10-05-user-facing-local-time.md. Rebased onto main ecfa112 (#703). The shared hot files (the new-WSL handbook pair, its receipt and manifests/evidence.json) are regenerated and re-registered in the branch's last commit, under the hot-file protocol of docs/lanes.md. Source review and local integration only: no first boot, import, host re-render or model run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… receipt and the registry
Hot-file protocol (docs/lanes.md):
1. take main's manifests/evidence.json;
2. run python3 scripts/build_new_wsl_handbook.py --write on the rebased
tree;
3. re-register last, through host_receipts.register_file.
Results:
- docs/new-wsl-handbook.{md,json} are regenerated. They carry #703's catalog
digest (8420f58e...) and the edited recipe's digest (ef2ca82a...).
- evidence/artifacts/new-wsl-handbook-20261001/receipt.json:
- outputs are 0fe0d761... and 997b05c0...;
- this change's 2026-10-05 regenerations entry follows #703's, with
previous_outputs b1dd8bdb... and 32da2ef7... (main's).
- manifests/evidence.json is main's copy plus 20 changed and 5 new file
entries. receipts[] and convergence_records[] are unchanged.
- component_matrix.py --write and new_host_grand_list.py --write changed
nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… receipt and the registry
Hot-file protocol (docs/lanes.md):
1. take main's manifests/evidence.json;
2. run python3 scripts/build_new_wsl_handbook.py --write on the final tree;
3. re-register last, through host_receipts.register_file.
Results:
- docs/new-wsl-handbook.{md,json} are regenerated. They carry #703's catalog
digest (8420f58e...) and the edited recipe's digest (3d616445...).
- evidence/artifacts/new-wsl-handbook-20261001/receipt.json:
- outputs are 50585de8... and 70cf495c...;
- this change's one 2026-10-05 regenerations entry follows #703's, with
previous_outputs b1dd8bdb... and 32da2ef7... (main's).
- manifests/evidence.json is main's copy plus 20 changed and 5 new file
entries. receipts[] and convergence_records[] are unchanged.
- component_matrix.py --write and new_host_grand_list.py --write changed
nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ites WSL's time-zone default explicitly On 2026-10-05 the user asked that times shown to them be in their local time, resolved at the root of the harness rather than in a memory note or per-host edits. Records (ledger rows, receipts, evidence, commits) stay UTC. - One sentence, one wording, in both user-level templates: examples/claude-native/CLAUDE.md (Core rule bullet) and adoption/templates/codex.AGENTS.template.md (session-lanes line). The F9 carriers are regenerated and hold it once each; the nativestack2604 render matches them byte for byte. - Pins amended together: a fail-first StandingRuleSurfacesTests check, the Codex TOP_RULE_SHA256 and size comments, the client-configuration projection addendum, and a context-budget addendum (startup scopes 23,796/19,560 bytes under the unchanged 24,458/20,103 constants; new pin value recorded). - The new-distro recipe writes [time] useWindowsTimezone=true, WSL's documented default, so W5 reads it back: cloud-init user-data (path A), W6 (path B), the W5 read-back, the first-boot checklist, the receipt example, the command table and a dated amendment of the recipe record. Source: Microsoft wsl-config "Time settings" (MicrosoftDocs/WSL 7ea1c6f9, WSL/wsl-config.md:152-158). - The WSL image experiment's four edited frozen inputs move to evidence/artifacts/user-facing-local-time-20261005/frozen-inputs/ with unchanged hashes (fix-wave precedent). - Decision: docs/decisions/2026-10-05-user-facing-local-time.md. Rebased onto main ecfa112 (#703). The shared hot files (the new-WSL handbook pair, its receipt and manifests/evidence.json) are regenerated and re-registered in the branch's last commit, under the hot-file protocol of docs/lanes.md. Source review and local integration only: no first boot, import, host re-render or model run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… receipt and the registry
Hot-file protocol (docs/lanes.md):
1. take main's manifests/evidence.json;
2. run python3 scripts/build_new_wsl_handbook.py --write on the final tree;
3. re-register last, through host_receipts.register_file.
Results:
- docs/new-wsl-handbook.{md,json} are regenerated. They carry #703's catalog
digest (8420f58e...) and the edited recipe's digest (3d616445...).
- evidence/artifacts/new-wsl-handbook-20261001/receipt.json:
- outputs are 50585de8... and 70cf495c...;
- this change's one 2026-10-05 regenerations entry follows #703's, with
previous_outputs b1dd8bdb... and 32da2ef7... (main's).
- manifests/evidence.json is main's copy plus 20 changed and 5 new file
entries. receipts[] and convergence_records[] are unchanged.
- component_matrix.py --write and new_host_grand_list.py --write changed
nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…715) ### Scope Publish the retained NativeStack2604 observations and correct the handbook after the command center's three-item micro-review. Official readiness remains the historical **30/80** from #700, whose bar is **upstream acceptance, wiring and fresh-session use, with the harness text present**. The command center's captured-status provisional **30/80 is as of 11:44Z**, excluding custody's 13:02Z BY_DESIGN change. It includes difftastic, structural-search, inspect-ai, harbor and codex-sdk despite **fresh-session use not evidenced**, so it is **not measured qualification on the #700 bar**. Earlier 37/40/44/32 proposals are superseded. Generated current/conditional values remain null. The organic native arm differs in one respect: **no harness text names the tool**. Upstream acceptance, wiring and fresh-session use remain required. Its count comes only from the command center's final verified E2E **S4**, independent review and adjudication. - Base: main `ecfa112764c664d35377dd66b8cfcb67e5a94d60` (after #703), merged into this branch at `44bf09713`. Head: `e50f0f480cabd66aea4f0552c1ebd589d45ebbf1`. - Lane: exactly `lane:foundation`. Pending the command center's micro-check and ACK at the exact head. Its ruling at `d25ea1f7d` was ACK_AFTER_THREADS; the four thread fixes and the boundary P3 are applied in `d4db4726c`. - Owned paths: decision, receipts/artifacts, handbook builder/tests, architecture scope/notes and generated outputs; registry committed last. - Serena and MinerU remain demoted while condition-absent controls are open; ccusage and session-analytics remain open. Retained failures, native attempts, local checks and model verdicts keep separate classes. - All 80 historical slot records and main owner/profile/pin fields are preserved. #713 landed as1796303f; #705 changed command-output's historical owners/29 operation. ## SOTA sources - `native-agent-stack@4c89741:evidence/artifacts/ns2604-e2e-20261004/method.md:60`: the frozen #700 qualification bar. [PR #700](#700). - The same pin's `docs/decisions/2026-10-04-ns2604-verified-e2e.md:114–121`: final-readiness authority. - `native-agent-stack@424b8a7:docs/lanes.md:94–128` and `scripts/host_receipts.py:710`: main-registry restoration, native re-registration and registry last. - The same pin's `docs/acceptance-evidence-policy.md:28–69` and `scripts/build_new_wsl_handbook.py:46`: evidence boundaries and existing generator interface. - Command-center source review `task-ns2604-coop-20261005T181852Z:12–23`, SHA256 `fa512269d639605a344f690166c436a208fffb79403bb0f55b2b48f0c9a7ef63`, retained in `review-715-corrections.json#/micro_repair_rulings`. It corrects its earlier bar wording; it is not upstream acceptance. ### Evidence-class table | Claim | Evidence class | Boundary | | --- | --- | --- | | Official #700 30/80 | Historical qualification | Existing dated baseline; no new host run | | Captured-status provisional30 and missing fresh-use proofs | Source review | Not measured #700 qualification or a derived numerator | | Retained native attempts, wrappers, fixtures and verdicts | Original separately scoped classes | Failures and client-leg limits retained | | Generators, tests and registry | Local integration / structural validation | Publication consistency only | | Organic native-arm readiness | None recorded here | Count pending final S4 | ### Local commands run (at head `e50f0f480`; content commits `d4db4726c`, `52a7680d9` and `a305d2cbf`) - `python3 scripts/validate.py`: exit 0; 69 components, 4 profiles, 214 receipts, 10,284 hashes. - `python3 -m unittest tests.test_new_wsl_handbook tests.test_architecture_pin_source tests.test_stack_lifecycle`: exit 0; 97 tests OK. - `python3 scripts/build_new_wsl_handbook.py --check`: exit 0 (regenerated with `--write`). - `python3 scripts/component_matrix.py --check`: exit 0; 32 rows. - `python3 scripts/new_host_grand_list.py --check`: exit 0; 32 layers, 66 winners. - `python3 scripts/evidence_manifest.py --check`: exit 0. - `git diff --check`: exit 0. - CI runs on this head. ### Refresh onto main and the command center's ruling - **Refresh.** `44bf09713` merges main `ecfa11276`: - The catalog merged cleanly as text, and the pin-source test passes. - The handbook was regenerated. - The handbook receipt's `regenerations` were united at the entry level. - The registry is main's 212 receipts plus this PR's 2, with its paths re-registered. - The hot-file pair keeps the registry last. - A GPT-6.1 Sol same-thread delta read of `82c25177f..d25ea1f` returned ACCEPT. - **Ruling.** The command center ruled ACK_AFTER_THREADS at `d25ea1f7d`: no P0 or P1, four valid P2 threads, one P3. `d4db4726c` applies: - **T1:** restores the `#/bounded_repair_rulings` locator. - **T2:** the handbook builder existence-checks and hashes `readiness.official_source` and `independent_review.recorded_source_review`, with a test. - **T3:** amendment times on the later ruling blocks and the two revised receipts. - **T4:** cites the reachable main commit `c148e049`. - **P3:** the `qualification_bar.scope` boundary sentence in the catalog notes (`:8`, `:1208`) and the receipt limitation. - **Optional:** a dated merge note in the decision record. - **T3 completion (`52a7680d9`).** The command center found T3 partial at `c3f4d8ddf`. The ruling blocks' amended_at_utc now carry their revisions' write times: 19:12:17Z from `73d75df4b` and 19:28:40Z from `bfff257c0`. Both equal the receipts' amendment times, and the item times stay in amendment_source_item. The handbook was regenerated and re-registered. - **Round 3 (`a305d2cbf`).** The command center found that `bfff257c0` also revised `bounded_repair_rulings`, adding `captured_status_boundary`, so the block now carries an `amendments` list that mirrors the receipts: - `73d75df4b` at 19:12:17Z (item 170827Z); - `bfff257c0` at 19:28:40Z (item 181852Z). A per-block check over the file's history finds a matching stamp for every content revision. The handbook was regenerated and re-registered. - **Threads.** All four are answered with the command center's text and resolved. Prior failed attempts remain retained. Reads so far: - a GPT-6.1 Sol delta read of the refresh (`82c25177f..d25ea1f`); - the command center's exact-head reads at `d25ea1f7d` (ruling ACK_AFTER_THREADS), `c3f4d8ddf` (T3 partly fixed) and `3457c9beb` (T3's bounded block still incomplete). The round-3 fix at this head awaits the command center's micro-check. No read yet covers it. These are source and integration review, not S4 qualification. All 212 main receipt entries (main `ecfa11276`) are preserved, with two owned receipts re-registered through the existing native library. ### Decision record `docs/decisions/2026-10-05-ns2604-foundation-requalification.md` records methods, sources, open controls/lifecycle gaps, superseded proposals and overturn conditions. Publication review or ACK does not provide S4 qualification. ### Host evidence No host-receipt or platform-status change. The command center is asked to micro-check round 3 at `e50f0f480` and ACK that exact head. Landing waits for the repo-wide fsspec relock (GHSA-27vj-qcqg-25rc). ### Checklist - [x] Main owner data, all80 historical slots and all 212 main registry receipts preserved. - [x] No credentials, active settings, private paths or raw conversations published. - [x] No host/config/install/service/billing change; #750 untouched. - [x] One lane label; registry-only final commit; exact head `e50f0f480` reported to the command center.
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s follow the Windows time zone (#758) ### Scope - What this PR changes: - **Shared instruction templates.** The Claude template (`examples/claude-native/CLAUDE.md`) and the Codex template (`adoption/templates/codex.AGENTS.template.md`) each gain one rule: when an agent tells the user a time, it gives the host's local time first with UTC beside it, and keeps UTC in ledger rows, receipts, evidence and commits. The rendered carriers are regenerated, and the pinned hashes, size comments, budget addendum and registry are amended together. - **New-distribution recipe.** It now writes `[time] useWindowsTimezone=true` explicitly (WSL's documented default) so that W5 reads it back, and W5 pairs the time zone the distribution reports (`timedatectl show -p Timezone --value`) with the Windows time zone (`tzutil /g`). The cloud-init template, the recipe, the W5 and W6 read-backs, the first-boot checklist, the receipt example, the command table and the tests are updated. - Base commit: `ecfa112764c664d35377dd66b8cfcb67e5a94d60` (main after #703); head `418a3d9e01aa7ce69d786ae0ce53c3e40b800f27`. The branch was rebased under the hot-file protocol of `docs/lanes.md`: the handbook pair, its receipt and `manifests/evidence.json` are regenerated and re-registered in the last commit. - Lane: `lane:foundation`. - Owned paths touched: - `examples/claude-native/CLAUDE.md`, `adoption/templates/codex.AGENTS.template.md` and `adoption/new-wsl/{claude,codex}-user-instructions.md`; - `adoption/templates/wsl/*`, `adoption/platforms/linux-wsl2-new-distro.md`; - `docs/decisions/2026-10-05-user-facing-local-time.md` (new), with addenda to the 2026-10-01, 2026-10-02 and 2026-10-05 budget records; - `docs/new-wsl-handbook.{md,json}` and their receipt; - the tests `test_install_claude_profile`, `test_codex_worker_lane` and `test_wsl_new_distro_recipe`; - `tools/adoption/*` (citations and comments), `manifests/evidence.json`, and `evidence/artifacts/user-facing-local-time-20261005/`; - `blueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json` (its four frozen-input paths only, moved to `evidence/artifacts/user-facing-local-time-20261005/frozen-inputs/` with unchanged hashes). The user asked for this to be resolved at the root of the harness rather than through a memory note or per-host edits. The rule has two halves: a display rule (how an agent tells the user a time) and a records rule (ledger rows, receipts, evidence and commits keep UTC, written as RFC 3339 date-times with `Z`). Only the times an agent reports to the user change; the records stay UTC. This revision answers the command center's review of `8dfc91e4` (changes requested): - it is rebased onto `ecfa1127`; - neither this text nor the record plans any change to the user's own host rule; - Decision 3 states the records rule as the sentence does; - the `useWindowsTimezone` rationale says what W5 detects and what it does not; - the `[time]` check reads by section; - W5 gains the zone pair; - the Learn citations are pinned; - two overturn conditions are raised to the user instead of acted on. Round 3 answers the command center's ruling on `608c5266` (ACK after fixes): - the record states both paths that set the zone: instance start, and the live push of a Windows time-zone change into a running instance, each with its microsoft/WSL source lines; - a W5 zone mismatch is recorded and stops the run for review, without the failed-proof export and unregister, on both paths, and the recipe names the remedy; - the W5 bullet pins CLDR and the tzutil page; - `experiment.json` joins the owned paths. The series is rebuilt so that the hot files stay in the last commit. ### SOTA sources - Microsoft WSL, Advanced settings configuration, "Time settings" (https://learn.microsoft.com/en-us/windows/wsl/wsl-config#time-settings, read 2026-10-05). Source: MicrosoftDocs/WSL@7ea1c6f, `WSL/wsl-config.md:152-158`, still that file's latest commit on 2026-10-05. It documents `[time]` `useWindowsTimezone` as a boolean, default `true`, that makes WSL "use and sync to the timezone set in Windows". The recipe's explicit key restates this default. - microsoft/WSL@91f161f (tag 3.0.1, the release W1 requires): - `src/linux/init/WslDistributionConfig.h:25` and `:58` (`bool AutoUpdateTimezone = true;`); - `src/linux/init/timezone.cpp:22-110`: `UpdateTimezone` returns early when the key is off (`:49-52`), when the mapping is empty (`:54-58`) or when the zone's file is missing (`:66-70`); otherwise it relinks `/etc/localtime` (`:76-106`); - at instance start, `ConfigInitializeCommon` reads `/etc/wsl.conf` once (`src/linux/init/config.cpp:532`), and `config.cpp:882` calls `UpdateTimezone`; - in a running instance whose key was true at start: - the service's window receives the broadcast `WM_TIMECHANGE` (`src/windows/service/exe/LxssUserSession.cpp:607-647` and `:4294-4305`); - it updates every running instance (`:3835-3846`; `src/windows/service/exe/WslCoreInstance.cpp:349-362`); - init's loops call `UpdateTimezone` (`src/linux/init/init.cpp:2559-2561` and `:2745-2747`); - that a Windows time-zone change raises `WM_TIMECHANGE` rests on WSL's own comment (`:619`) and log text (`:3838`); - `src/windows/common/helpers.cpp:358-413`: the Windows zone and region are mapped by `ucal_getTimeZoneIDForWindowsID`, with Windows' own ICU. - ICU and CLDR, cited for the mapping's meaning only (the data version Windows ships is not established): - ICU release-78.3 (21d1eb0f306e1141c10931e914dfc038c06121da), `icu4c/source/i18n/unicode/ucal.h:1644-1674` and `icu4c/source/i18n/timezone.cpp:1698-1719`: the first zone of the region's row, else the `001` row; - CLDR release-48-2 (11299982335beb974c1c63c45265184e759c0f41), `common/supplemental/windowsZones.xml:130` and `:133`: `Eastern Standard Time` maps to `America/New_York`. - Microsoft `tzutil` (https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/tzutil, read 2026-10-05; MicrosoftDocs/windowsserverdocs@48fd053, `tzutil.md:18` and `:25`): `/g` displays the current time zone ID. - RFC 3339 (Date and Time on the Internet: Timestamps, https://www.rfc-editor.org/rfc/rfc3339): - §4.1 gives the reason for UTC; - §4.2 defines local offsets, which records do not use; - §4.3 defines the `Z` designator, which records use; - §5.6 gives the grammar. - Claude Code memory documentation (https://code.claude.com/docs/en/memory): user-level `~/.claude/CLAUDE.md` instructions load in every session, so the rule belongs in the rendered user block, not in auto-memory. - Codex AGENTS.md guide (https://developers.openai.com/codex/guides/agents-md): the global `~/.codex/AGENTS.md` is read first in every session. - ubuntu/wsl-setup@73418e3 (0.6.3), `wsl-setup:55-73` (`set_user_as_default`). - cloud-init `write_files`: the existing recipe's mechanism for `/etc/wsl.conf`, validated with `cloud-init schema -c` (26.1). ### Evidence-class table | Claim | Evidence class | Command / receipt | | --- | --- | --- | | The rule renders exactly once in each client's managed block, byte-identical to the committed carriers | local_integration | `new_wsl_client_config.py --render --host nativestack2604 --out <scratch>` exit 0: the merged blocks are 12,071 and 8,601 bytes, one copy each; `--check` exit 0 | | Startup context stays under the unchanged budgets (Claude 23,796 of 24,458 bytes; Codex 19,560 of 20,103), re-measured at base `ecfa1127` | local_integration | `tests.test_install_claude_profile.PortableTopRuleTests` (`test_rendered_startup_files_fit_each_clients_fixed_byte_budget`); the budget addendum in `docs/decisions/2026-10-05-harness-context-budget.md` | | The user-data appends a `[time]` section holding only `useWindowsTimezone=true`, before `[user]`, and each wsl.conf path leaves every key once | local_integration; synthetic | `cloud-init schema -c` gives "Valid schema"; the section reading in `test_wsl_new_distro_recipe` and its mutants (a key moved under `[user]` fails); two `/etc/wsl.conf` simulations | | W5 reads the zone the distribution reports beside the Windows zone; a mismatch stops for review without the failed-proof export and unregister, with its remedy and pins | local_integration | `TimeZonePairTests`: the command-table rows, the checklist, the receipt example, the failure rule's exception, the remedy and the CLDR and tzutil pins, with fourteen mutants | | On NativeStack2604, `timedatectl show -p Timezone --value` gives `America/New_York` and `tzutil /g` gives `Eastern Standard Time` | native_proven (host read, outputs in the record; not a W5 run) | both exit 0 on 2026-10-05; `/etc/localtime` links to the same zone | | On NativeStack2604, `useWindowsTimezone` was false, with no repository record, until the coordinator set it to true; a private host plan had pinned it because Windows' automatic time zone setting was on | native_proven (host read) | `/etc/wsl.conf` before and after (coordination evidence, outside the repository) | | Agents follow the rule in fresh sessions | NOT MEASURED | no model run; to be observed after the F9 re-render | ### Local commands run All ran at base `ecfa1127`, on NativeStack2604. "Round 3" runs used the final tree, `418a3d9e`. "Round 2" runs used `608c5266`; round 3 changed no template, carrier, user-data or startup file those runs read. ``` # round 3, on 418a3d9 $ python3 scripts/validate.py exit 0 (10,277 hashed files, 212 receipts) $ python3 -m unittest tests.test_install_claude_profile tests.test_codex_worker_lane tests.test_wsl_new_distro_recipe exit 0 (334 tests, 13 skipped) $ python3 -m unittest tests.test_new_wsl_handbook tests.test_new_wsl_client_config tests.test_new_wsl_profile tests.test_host_baseline_probe exit 0 (309 tests: the modules that read the recipe, the handbook receipt or the probe) $ python3 -B tools/adoption/new_wsl_client_config.py --check exit 0 (two warnings, both about slot mcp-inspector, from inputs this change does not touch) $ python3 scripts/build_new_wsl_handbook.py --check exit 0 $ python3 scripts/evidence_manifest.py --check exit 0 $ python3 scripts/validate_convergence.py blueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json exit 0 $ git diff --check exit 0 # round 2, on 608c526 $ python3 -m unittest <the 19 other modules that pin the touched files> exit 1 (2,237 tests, 1 failure: test_token_e2e_grader F27c; its `git clone --local` from this worktree into /tmp fails with "Invalid cross-device link" before any check; it passed in a clean clone at the previous base) $ python3 -B tools/adoption/new_wsl_client_config.py --render --host nativestack2604 --out <scratch> exit 0 (each rendered carrier equals the committed carrier and holds the sentence once) $ cloud-init schema -c <P2's render> # 26.1-0ubuntu3~26.04.1 exit 0 (Valid schema) $ node test-envelope.mjs; node test-contract-mutations.mjs # examples/claude-native/workflows exit 0; exit 0 (254 and 74 passed) $ python3 -m unittest # the full suite exit 1 (10,347 tests, 903 skipped, 11 failures and 18 errors, none in a module this change edits; all 29 are the environmental classes the first round found recurring in a clean clone of the previous base: a missing exchange_calendars module (23), `dirname: command not found` (3), a systemd scope state (1), the installed Claude Code's auth_storage_failure notification type (1) and F27c above (1)) ``` ### Decision record `docs/decisions/2026-10-05-user-facing-local-time.md` records the context, the decision, the alternatives and the overturn conditions. The rejected alternatives are: - a memory note, which the user rejected; - per-host lines outside the managed block as the harness mechanism, which cannot be reproduced on a new host; - the system zone alone, which cannot change how an agent words a time; - local-time records, rejected for DST ambiguity and cross-host consistency. Two overturn conditions are raised to the user rather than acted on: a native client setting, and a host whose zone is not the user's. The records half stays in force whatever display setting is adopted. ### Host evidence Not applicable: no file under `evidence/hosts/` changes. ### Checklist - [x] New/changed GitHub Actions are pinned to a full commit SHA with a version comment (no workflow changes). - [x] New/changed workflows declare top-level `permissions: {}` (no workflow changes). - [x] No secrets are printed, logged or committed. - [x] No new paid hosting, subscription or billing surface. - [x] Peer-owned untracked files and worktrees were preserved. After landing, the next F9 re-render puts the rule in every host's managed block. A re-render replaces only the text between the managed markers (`tools/adoption/managed_block.py:106-113`). On NativeStack2604 the user's own dated rule, after the end markers, therefore stays in place, and the rule loads twice there until the user decides. Whether to remove the user's copy is the user's call. Also open for the user: whether "commits" covers git's author and committer dates, which carry the host's numeric offset. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ve-acceptance protocol with same-day baselines, hardened validation/e2e/build/install/smoke scripts with controls, retained logs, value-free receipt, superseded attempts kept Record (docs/decisions/2026-10-05-omniroute-gateway-composition.md): - RC1/RC2: the patched tree id b7c68690... is pinned; the drain moves out of the "runs on 20128" table into "Candidate, not deployed" with adoption status (canary pending), tarball sha256 and BUILD_SHA; RC11: the first-hop rollback (20128 returns to the cf6748d04 prefix, kept until the acceptance passes; 2604's kept 21128 install named by its tarball sha256) - RC8/RC9: scope of the evidence (Responses and Chat Completions with a stubbed upstream, Anthropic format by code reading only), an outcome-based removal check, upstream prior art (#5491, #10608, #14342), what the patch does not close, what the drain changes for every client, the reviews paragraph and the not-yet-done list Acceptance (RC3/RC8): checks/live-acceptance-protocol.md freezes inputs, commands, repetitions and expected outcomes before the switch; per-request attribution (X-Correlation-Id / response id), two reads (12 s and 60 s), a Chat Completions client, three effort probes with the baseline's four columns; same-day baselines on the unpatched build: raw set, race set (5 of 6 lost), native astra-max (3 of 3 lost), two-request (observed) Validation (RC4/RC5): the unit test is extracted from the patch with git apply --include and its blob id checked against the patch's index line; counts and failing test names are enforced per stage; all stage logs, the 239-file list, runner summaries and the failing test's output are retained; controls: wrong tree, tampered patch, missing patch Handler e2e (P3s): five scenarios incl. Chat Completions, per-scenario rows logged before asserting, the test file sha256 pinned, 4 of 5 must fail unpatched (by name), outcome-only mode for the removal check Scripts (RC6/RC12/RC13): build-drain v2 (own tree, tree ids and clean status checked, every gate decides the exit status), install-drain v2 (pinned sha256, npm integrity, entry count, BUILD_SHA, shim hash, drain marker, checked copy, SHA256SUMS written), smoke v4 (free port, owned process group, loopback and API key required, group-selector control), each with controls and a real run Receipt (RC7): checks/show-log-dropins-receipt.txt (value-free) for the OMNIROUTE_SHOW_LOG drop-ins on both units RC10: superseded and failed attempts kept in superseded/ with an index (first-version results, validation v1-v3, smoke v1-v3, build v1, install v1, the timestamp-only repro scripts, acceptance attempt 1) Rebased over ecfa112 (#703); the patch itself is unchanged (sha256 74c0f449...). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Scope
This PR packages the NativeStack2604 north-star research runtime, moves EdgarTools to 5.60.0 in the runtime and the catalog together, and closes the unit-T PR-1 additions.
native-sec-edgartools-5600-20261004): one GET answered 200, 0 retries, 371 rows, and the same five CIK/accession rows as the 2026-09-19 and 2026-09-24 receipts.data-research.jsondata-edgartools moves to v5.60.0 (1e7a61b3). The catalyst-provenance lock now equals the accepted environment, with 4 versions moved. Live plan rows and recipe pins move with their tests; dated historical snapshots keep 5.58.0.9ea5def31band156c45b327;antlr4-python3-runtime4.9.3 is the lock's only entry without a wheel.[tool.uv] build-constraint-dependenciespins its setuptools build backend to 84.0.0 with the lock's own wheel and sdist hashes, and uv.lock records it. Proof:Generator: setuptools (84.0.0);sync-trading-2604.shholds the one install vector (uv lock --check;uv sync --locked --no-dev;uv pip check), which the installer runs and the trading-native CI job (PR-2) will reuse. A byte-identity test pins the installer to it.Base: the branch is based on
38ac9aca; the landing queue refreshes it onto current main. Lane:lane:trading. Paper and research only; nothing here enables a live mode, endpoint or key, and no broker or provider call was made.SOTA sources
crates/uv-build-frontend/src/lib.rs:53-60for the default legacy backend.1e7a61b3a142dbf5d19bc82444f85239c1786348), PyPI 5.60.0, the Oct 3 scheduled run, and the test-only fix commits9ea5def31band156c45b327.scripts/host_receipts.py,adoption/host-receipt.schema.json,docs/acceptance-evidence-policy.md,docs/contributing-evidence.mdanddocs/lanes.md.Evidence-class table
native_proven, historical host-local, pre-relockevidence/receipts/native-trading-runtime-2604-20261004.jsonnative_proven(one bounded request)blueprints/us-equities/catalyst-provenance/native-network-edgartools-5600-20261004.jsonlocal_integration(offline fixture)evidence/artifacts/edgartools-5600-20261004/local_integration(scratch cold-cache proofs)evidence/artifacts/trading-runtime-2604-20261004/build-constraint-proof.jsonLocal commands run
All runs used a TMPDIR outside /tmp and outside the worktree, and
nice -n 19.ShellCheck is not installed here. The full suite runs in CI.
Decision record
docs/decisions/2026-10-04-trading-2604-preparation.mdcovers the runtime, the EdgarTools 5.60.0 move with its CI assessment, and the build constraint with its proofs. The 5.59.1 overturn test is superseded by the 5.60.0 acceptance. Python 3.12.3 versus 3.13 ratification stays open.Host evidence
python3 scripts/host_receipts.py validatepasses.Checklist
GPT-6.1 Sol rounds (packaging, 5.60.0, round c) through the packaged SDK worker; the coordinator committed. A cross-family Claude read follows before the landing request.
Recorded residuals (bounded review, 2026-10-05)
Claude Opus gate read pinsrc-d at
ac5ca6658125returned ACCEPT with no p1. Under the bounded review rule these p2 items land as recorded residuals, each owed as a follow-up:tests/test_architecture_pin_source.py:119, :125-126; docs/harness-defaults.md:89 ('exact version'); test name at :182 ('rejects_other_versio: The right-hand lookahead (?![\d.]) and the unbounded left side accept PEP 440 suffixes (0.44.0rc1, a1, b2, post1, +local, -1, -rc.1) and left-prefixed package names (foo-alpaca-py 0.44.0).Recorded residuals (bounded review, 2026-10-05; Claude Opus gate read pinsrc-f at af3af3a)
Claude Opus gate read pinsrc-f at
af3af3a4c88dreturned ACCEPT with no p1. Under the bounded review rule these p2 items land as recorded residuals, each owed as a follow-up:evidence/receipts/native-trading-runtime-2604-20261004.json:464; evidence/receipts/edgartools-5600-pin-move-20261004.json:104; manifests/evi: Dated superseded_note fields and the decision paragraph still call lock 4c98672d 'final' and say the rerun is resolved;catalogs/foundation/new-wsl-architecture-20261001.json:1534-1541 (DVC arm; install command :1539): The foundation new-WSL architecture still tells the new distribution to pip install the current DVC, with no pointer to PYSEC-2026-2447 or the data-dvc hold.🤖 Generated with Claude Code