Skip to content

Require Serena before the Codex worker's first turn (port #436) - #674

Merged
seathatflowsinourveins merged 15 commits into
mainfrom
foundation/codex-serena-startup-port-20261003
Oct 4, 2026
Merged

seathatflowsinourveins merged 15 commits into
mainfrom
foundation/codex-serena-startup-port-20261003

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 3, 2026 •

Copy link
Copy Markdown
Collaborator

Scope

A stack-worker session now waits for Serena before its first turn and fails session start if Serena cannot initialize. The installer retains a bounded multiline startup error, best-effort server names, and a canonical rollback command. This ports PR #436's intent onto current main, with codebase-memory left optional.

B2: refresh onto main with #626 (2026-10-04)

B1: owner-approved expectation updates (Option 2, coordinator ACK 2026-10-04)

The owner approved updating the two expectations, not the code.

  • Reproduced on the first merged tree (main 6af8e55bd) before editing: python3 -m unittest tests.test_new_wsl_client_config exited 1 (Ran 159, FAILED, failures=2). The failures were the record's counts, (385, 293, 200, 93, 80, 41, 39, 12) != (386, 294, 200, 94, 80, 41, 39, 12), and the rendered stack-worker Serena table, which now includes 'required': True.
  • Counts, for the coordinator's re-ACK. The approved tuple is (386, 294, 200, 94, 80, 41, 39, 12), measured on the first merged tree. The tuple measured on the final merged tree (with New-WSL: Codex 0.160.0 profile pins, main-checkout Codex trust grant, Opus 5.5 model (follow-up to #626) #683) is (386, 294, 200, 94, 79, 41, 38, 13); main b629b5b41 alone gives (385, 293, 200, 93, 79, 41, 38, 13). New-WSL: Codex 0.160.0 profile pins, main-checkout Codex trust grant, Opus 5.5 model (follow-up to #626) #683 moved one piece, the main checkout's Codex trust grant, from not wired by its own entry to authorization. This PR's delta is unchanged: the checker's one new row is codex/stack-worker/mcp_servers.serena.required, wired through slot:serena, and no other row differs from main's. --check prints pieces: 386; wired: 294; not wired: 79; authorization: 13.
  • docs/decisions/2026-10-02-new-wsl-client-configuration.md: Decision 2's counts sentence (L51-53) carries the measured values with main's wording, and one dated sentence follows: "On 2026-10-04 the counts moved from 385 pieces, 293 wired and 93 through a slot because Require Serena before the Codex worker's first turn (port #436) #674 adds Serena's required = true key to the stack-worker profile, a piece the serena slot wires." That sentence holds on both bases. The phrase near Decision 14 quotes authorization: 13 and 79 not wired (main's text since New-WSL: Codex 0.160.0 profile pins, main-checkout Codex trust grant, Opus 5.5 model (follow-up to #626) #683), which this PR does not move, so it is unchanged. No other dated text changed.
  • tests/test_new_wsl_client_config.py L716: the expected table is "serena": {"startup_timeout_sec": 60, "required": True}.
  • After: the module exits 0 on the final tree (Ran 161, OK), and new_wsl_client_config.py --check exits 0.

0.160.0 acceptance (2026-10-04)

Binary. The pinned codex-cli 0.160.0 row is in adoption/pins-linux-x86_64.json, with the same version in manifests/stack.json. It was installed into a scratch prefix with the bootstrap's own npm steps; the host's default Codex stays 0.159.3 and was not changed.

Artifact Pinned Measured
@openai/codex 0.160.0 wrapper tgz (4,902 bytes) sha256 373517768e912eeb5054024ae9215e2c90a1420957b66fe134ef745a00948d4a, sha512 kEtVGzjR…7lpjg== both match
@openai/codex 0.160.0-linux-x64 tgz (163,273,896 bytes) sha256 37a41d61c3399182b8c727b77090cc7a1566bd849d0f09070a0bbc6fec4c58dc, sha512 KI/73OqG…kY99g== both match
vendor/x86_64-unknown-linux-musl/bin/codex sha256 12eb3e81114588aca3b7998f4f19e8997b056aca08e57a7ca7c8a3ec8c652aad matches (npm's own resolved copy had the same hash)
codex --version 0.160.0 codex-cli 0.160.0

The PR's native checks with 0.160.0 first on PATH. These ran under nice -n 19 with a scratch TMPDIR. The recorded runs used the f33ad795f tree; the worker-lane code, templates and tests are byte-identical at the final head, and the class was re-run there.

$ NAS_CODEX_INTEGRATION=1 python3 -m unittest -v tests.test_codex_worker_lane.CodexIntegrationTests
exit 0; Ran 12 tests in 122.232s, OK (skipped=1: the opt-in trial)   [recorded; f33ad795f tree]
exit 0; Ran 12 tests in 126.220s, OK (skipped=1)                    [re-run at 8519b0fa5]
$ NAS_CODEX_INTEGRATION=1 NAS_CODEX_STARTUP_TRIAL=1 python3 -m unittest -v tests.test_codex_worker_lane.CodexIntegrationTests.test_serena_startup_trial
exit 0; Ran 1 test in 128.086s, OK                                  [recorded; f33ad795f tree]

The preregistered trial at 0.160.0 (18 runs), with the driver, fixture and arm profiles unchanged in TOML:

Arm Serena tool present in delayed starts First-request times (s) Failed-start exits Failed start sends a request
Control 0/3 1.452866, 1.505992, 1.597376 0, 0, 0 yes
A: required Serena 3/3 3.057482, 3.069528, 3.141734 1, 1, 1 no
B: zero shared grace 3/3 2.916433, 2.912427, 2.940639 0, 0, 0 yes

Selection A holds. The first-turn regression gave: profile exit 0, Serena's tool present, first request at 3.036 s; control exit 0, no Serena tool, 1.495 s; cannot start exit 1, no request, required MCP servers failed to initialize: serena: …. The longest run took 8.28 s.

Scratch checks (a)-(c). These ran in scratch CODEX_HOME/HOME directories under bwrap --unshare-net, with a loopback fake Responses provider unless noted. They read no sign-in or credential file. Each check ran once per binary.

Check 0.160.0 exit 0.159.3 exit Distinguishing result
a1 codex -p stack-worker mcp get serena --json (the shipped profile with required = true) 0 0 parses; enabled: true
a2 --strict-config exec with a whole config whose Serena table sets required = true 0 0 strict parse accepts the key; the turn completes
a3 control: a2 with requird = true 1 1 unknown configuration field `mcp_servers.serena.requird`
b1 required = true, Serena command a nonexistent path 1 1 Error: thread/start: … Failed to initialize session: required MCP servers failed to initialize: serena: No such file or directory (os error 2) (code -32603); 0 requests
b2 control: b1 with -c mcp_servers.serena.required=false 0 0 2 requests, turn completes
b3 negative control: b1's home and command, the profile without required = true 0 0 gets past MCP startup: 2 requests, the turn completes, no error line
b4 required = true, default provider, no credentials, no network 1 1 the same required-server error; no connection attempt logged
b5 negative control: b4 without required = true none in 100 s none in 100 s gets past MCP startup and fails at the model call: failed to connect to websocket: … failed to lookup address information … url: wss://api.openai.com/v1/responses, then Falling back from WebSockets to HTTPS transport and Reconnecting... waiting for network
b6 required = true, loopback provider with requires_openai_auth = true, no credentials 1 1 the same required-server error; 0 requests
b7 negative control: b6 without required = true 0 0 gets past MCP startup: 2 requests, the turn completes
c1 real Serena transport the config template renders (serena start-mcp-server --transport stdio --project-from-cwd --context codex …) 0 0 24 Serena tools in the first turn; first request at 1.17 s
c2 control: c1 with required=false 0 0 24 Serena tools; the real server answered within the optional window, so c1/c2 show the MCP stage, and the fixture's 2.5 s delay shows the wait

So the non-zero exit in (b) comes from the required gate, not from missing auth. Without required, the same nonexistent command never stops the session; with it, the run stops at MCP startup on every provider shape tried. 0.159.3 and 0.160.0 returned the same exit codes, request counts, error text and first-turn tool counts on all 13 checks; only the timings differ.

Evidence class: local_integration (the real codex binary, scratch homes, a loopback fake provider; c1/c2 start the real Serena). There was no provider execution, model run, host apply, token measurement or other-host acceptance, and the 0.159.3 rows keep their label. Everything is in evidence/receipts/codex-serena-startup-port-20261003.json under rerun_0160_20261004, plus two appended residual notes. The driver is unchanged (83a33467…), so restoring its process-group kill (residual 8) and a real --dry-run (residual 9) remain open.

SOTA sources

The lane pin on this head is 0.160.0 (#626, merged into main at f77a35eb2), and the native acceptance above ran with that pinned CLI. The 0.159.3 runs recorded earlier keep their label, and no 0.159.3 execution is relabelled as a 0.160.0 run. The relevant MCP implementations and selected tests are byte-identical at the two tags, as recorded by source digests in the receipt.

Evidence-class table

Claim Evidence class Command / receipt
Serena appears in the first turn when delayed initialize succeeds; failed required startup stops before any request (0.159.3 trial, and the 2026-10-04 rerun at 0.160.0) local_integration on synthetic inputs Native Codex, stdio fixture, loopback fake Responses and bwrap --unshare-net; evidence/receipts/codex-serena-startup-port-20261003.json (runs, rerun_0160_20261004.trial)
A config with required = true parses under 0.160.0; a nonexistent required Serena fails closed at MCP startup, and the same command without required gets past it local_integration (scratch homes) rerun_0160_20261004.scratch_checks a1-a4, b1-b7
The real Serena transport the config template renders passes the MCP stage under 0.160.0 local_integration (scratch home, loopback fake provider) rerun_0160_20261004.scratch_checks c1, c2
Multiline diagnostic retention, 2,000-character bound, best-effort names and rollback behavior synthetic RequiredStartTests against the fake-codex/app-server seam
Per-step timeout, grace start and fresh-process cache scope source_review Tagged upstream files above; unchanged Rust tests not run because the required toolchain is unavailable
Serena key propagates into the destination's rendered worker profile on its next client-config apply source_review and synthetic Existing owner-map route and the rendered-table test, now expecting required: True
Host apply, live gateway/provider/model execution, token savings or other-host acceptance unmeasured No such acceptance is claimed by this port

The trial was preregistered before execution: control is unchanged main, A requires only Serena, B disables shared optional grace, and C is excluded by the process-scoped cache. Three successful delayed starts and three unable-to-start runs were retained for every included arm. The first answer requests code-mode exec to list ALL_TOOLS; the second Responses request supplies those names.

The 0.159.3 trial (2026-10-03):

Arm Serena tool present in successful starts Initial first-request times (seconds) Failed-start exit codes Failed start sends a request
Control 0/3 1.560680, 1.497042, 1.568459 0, 0, 0 yes
A: required Serena 3/3 3.038018, 3.051511, 3.164788 1, 1, 1 no
B: zero shared grace 3/3 2.926075, 2.992365, 2.987239 0, 0, 0 yes
C: cached readiness excluded not run not run not run

A wins the preregistered first preference: its key uses the existing owner map, while B introduces an unmapped root piece. A also gives explicit startup failure. All per-run tools, timings, messages and failures are in the receipt, including the initial attempts and capture refinement. The refinement repeats all 18 runs with UTC start/end timestamps and instrument hashes; A and B again pass delayed startup 3/3, and only A stops failed startup before any request. All 36 trial runs at 0.159.3 are retained, and the 18 runs at 0.160.0 are added.

A re-run of the trial test at head fd252afcac09 (codex-cli 0.159.3, exit 0) reproduced the pattern. Control: Serena 0/3, first requests at 1.438747, 1.700856 and 1.463349 s, failed-start exits 0, 0, 0 with requests sent. A: 3/3 at 2.951608, 3.094197 and 2.974387 s, failed-start exits 1, 1, 1 with no request. B: 3/3 at 2.825709, 2.904622 and 3.045550 s, failed-start exits 0, 0, 0 with requests sent. That capture is retained privately.

The new Serena key lands under codex/*/mcp_servers.serena.* (slot:serena), so the destination's rendered stack-worker.config.toml gains it on its next client-config apply. The two owner-controlled assertions were updated here under the owner-approved Option 2 (B1); this refresh did not re-check #608. Gate A must review the final head: the installed stack-worker profile is a frozen SHA256/presence item, though the repository template itself is not listed as a frozen item. The omniroute profile is not a listed frozen item.

Local commands run

Final-head results at 8519b0fa516788a373bae5ad4894f9ae5d199ec8 on main b629b5b413d75deb4c98dd26d62b129173b87d44, each under nice -n 19 with a scratch TMPDIR outside every repository:

$ python3 -m unittest tests.test_new_wsl_client_config tests.test_codex_worker_lane tests.test_render_config tests.test_codex_agents
exit 0; Ran 336 tests in 99.582s, OK (skipped=12)
$ python3 -m unittest tests.test_codex_worker_lane tests.test_landscape_sweep_harness tests.test_codex_lane
exit 0; Ran 425 tests in 108.336s, OK (skipped=15)
$ python3 scripts/validate.py
exit 0; {"components": 69, "hashed_files": 9882, "profiles": 4, "receipts": 195, "status": "passed"}
$ python3 scripts/evidence_manifest.py --check
exit 0; {"files": 9882, "status": "passed"}
$ python3 scripts/validate_convergence.py --all-recorded
exit 0; 30 records valid
$ git diff --check origin/main...HEAD
exit 0
$ python3 tools/adoption/new_wsl_client_config.py --check
exit 0; pieces: 386; wired: 294; not wired: 79; authorization: 13; check passed
$ python3 scripts/component_matrix.py --check; python3 scripts/new_host_grand_list.py --check
exit 0; {"rows": 32, "status": "checked"}; exit 0; {"status": "passed", "layers": 32, "winners": 66}
landing check, origin/main b629b5b4 against this head: LANDABLE (clean three-way merge; 11 merged-vs-main paths, none outside PR-owned; no main drift; foreign registry rows equal and in order, 8 PR-owned rows; files[] sorted, 9,882 rows)

The pre-commit gitleaks gate returned no leaks found for each new commit, and the pre-push registry tests returned Ran 3 tests, OK on both pushes. At the previous head f2adbf07f (main 6af8e55bd), the same local set passed and all eight required CI checks passed, validate-macos included; that head is superseded by the #683 merge.

Repair-round results at 811bc2dd36b2ff4442c747bf9355f549b4386b7b (merge base 6112d14d), each under nice -n 19 with a scratch TMPDIR outside every repository; the native checks used codex-cli 0.159.3, the lane pin at that base, with bubblewrap on PATH.

$ python3 -m unittest tests.test_codex_worker_lane tests.test_landscape_sweep_harness tests.test_codex_lane
exit 0; Ran 411 tests in 96.165s, OK (skipped=15)
$ env NAS_CODEX_INTEGRATION=1 python3 -m unittest -v tests.test_codex_worker_lane.CodexIntegrationTests
exit 0; Ran 12 tests in 120.307s, OK (skipped=1: the opt-in startup trial, not re-run because the driver did not change)
$ python3 tools/adoption/new_wsl_client_config.py --check
exit 0; check passed
$ python3 -m unittest tests.test_new_wsl_client_config
exit 1; Ran 146 tests in 32.702s, FAILED (failures=2): the two owner expectations, updated since by B1
$ python3 scripts/component_matrix.py --check
exit 0; {"rows": 32, "status": "checked"}
$ python3 scripts/new_host_grand_list.py --check
exit 0; {"status": "passed", "layers": 32, "winners": 66}
$ python3 scripts/evidence_manifest.py --check
exit 0; {"files": 9564, "status": "passed"}
$ python3 scripts/validate.py
exit 0; {"components": 69, "hashed_files": 9564, "profiles": 4, "receipts": 193, "status": "passed"}
$ git diff --check origin/main...HEAD
exit 0
landing check, origin/main 3bf53936 against this head: LANDABLE

Committed-head results at fd252afcac09fbe49fcc31dfed789e314f47d9d6 on main 6112d14d40f741855f0b961124d98939daaad00e. Every command ran under nice -n 19 with a scratch TMPDIR outside every repository; the native checks used codex-cli 0.159.3, the lane pin at that base, with bubblewrap on PATH.

$ python3 -m unittest tests.test_codex_worker_lane tests.test_landscape_sweep_harness tests.test_codex_lane
exit 0; Ran 411 tests in 98.562s, OK (skipped=15)

$ NAS_CODEX_INTEGRATION=1 python3 -m unittest -v tests.test_codex_worker_lane.CodexIntegrationTests
exit 0; Ran 12 tests in 120.459s, OK (skipped=1); the trial-only test skips in the class run

$ NAS_CODEX_INTEGRATION=1 NAS_CODEX_STARTUP_TRIAL=1 python3 -m unittest -v tests.test_codex_worker_lane.CodexIntegrationTests.test_serena_startup_trial
exit 0; Ran 1 test in 127.251s, OK

$ python3 tools/adoption/new_wsl_client_config.py --check
exit 0; check passed

$ python3 -m unittest tests.test_new_wsl_client_config
exit 1; Ran 146 tests in 34.027s, FAILED (failures=2); the two owner expectations, updated since by B1

$ python3 tools/token-e2e/freeze_snapshot.py list-frozen --repo . --json
exit 0; neither repository template is a listed item; the installed stack-worker profile is frozen via codex.stack_worker_profile.sha256 and .present; no omniroute profile item

$ python3 scripts/component_matrix.py --write
exit 0; {"flip_rule_violations": 0, "rows": 32, "status": "written"}; no report change

$ python3 scripts/new_host_grand_list.py --write
exit 0; {"status": "written", "layers": 32, "winners": 66}; no report change

$ python3 scripts/evidence_manifest.py --check
exit 0; {"files": 9564, "status": "passed"}

$ python3 scripts/validate.py
exit 0; {"components": 69, "hashed_files": 9564, "profiles": 4, "receipts": 193, "status": "passed"}

$ python3 scripts/validate.py --scan-file evidence/receipts/codex-serena-startup-port-20261003.json
exit 0; {"scanned_files": 1, "status": "passed"}

$ python3 scripts/validate_convergence.py blueprints/convergence-practice/wsl-retrieval/experiment.json
exit 0; record[0]: valid

$ git diff --check origin/main...HEAD
exit 0; no output

Builder evidence at cac8700ba, not re-run here because it tests main's unchanged template and installer: the structural/parser check failed (exit 1; four tests, two failures and two errors) and the native first-turn regression failed (exit 1; three failing subcases). After the required key, three older native tests failed because they registered missing or /bin/false Serena stubs; they pass with the pinned working fixture. The builder's receipt sanitization removed generated session metadata and the synthetic transcript from the public capture. No scratch-HOME Serena failure justifies rehearsal relaxation. Unchanged upstream Rust tests were not run: no Rust 1.95 toolchain is installed.

Before B1, the destination suite's failures were limited to the owner expectations: the recorded count tuple was (366, 246, 192, 54, 112, 65, 47, 8) versus actual (367, 247, 192, 55, 112, 65, 47, 8) at the original base, and the rendered Serena table included 'required': True. B1 updates both on current main, where the tuple is (386, 294, 200, 94, 79, 41, 38, 13), and the suite exits 0.

Decision record

docs/decisions/2026-09-26-codex-worker-lane.md, “Addendum 2026-10-03: serena at the first turn (port of #436)”, retains the preregistration, every trial arm, selection, alternatives, historical 0.157.1 observations, owner propagation, codebase-memory retirement and overturn conditions. Its appended “Resolution 2026-10-04” paragraph records the 0.160.0 rerun and leaves the driver's process-group kill and the real --dry-run open. docs/decisions/2026-10-02-new-wsl-client-configuration.md gains one dated 2026-10-04 sentence for the counts (B1).

Reconsider on a maintained fresh-process catalog or per-server readiness improvement, or if a retained real startup/gateway check disproves the first-turn guarantee. Live route confirmation was skipped outside its authorized runtime window. Capability-gate rerun and host apply follow merge in the coordinator's quiet window.

Host evidence

Not applicable: no evidence/hosts change and no host apply. The receipt records local native integration on synthetic inputs, plus scratch checks that start the real Serena. The 0.160.0 CLI ran from a scratch prefix; the host's default Codex install and client configuration were not changed.

Checklist

  • No GitHub Actions changed; existing action pins and permissions are preserved.
  • No secrets printed, logged or committed; no new required secret introduced.
  • No new paid hosting, subscription or billing surface.
  • Peer-owned paths and source branch preserved; the two new-WSL expectation files changed only under the owner-approved Option 2.
  • Main with Codex 0.159.3 -> 0.160.0 with the Python SDK pair: pins, qualification receipt, tests and checkpoint #626 merged (e3ce7466a), and native acceptance rerun with the pinned codex-cli 0.160.0, including the fail-closed negative controls (2026-10-04).
  • Both stale expectations updated under the owner-approved Option 2 (coordinator ACK 2026-10-04); tests.test_new_wsl_client_config exits 0.
  • Coordinator re-ACK of the counts re-measured after New-WSL: Codex 0.160.0 profile pins, main-checkout Codex trust grant, Opus 5.5 model (follow-up to #626) #683: (386, 294, 200, 94, 79, 41, 38, 13) on the final tree, against the approved (386, 294, 200, 94, 80, 41, 39, 12).
  • Gate A owner reviews the exact final head; ask the user once if no answer arrives within two hours.
  • Independent Opus read of fd252afcac09 (verdict repair) and one repair round (811bc2dd36b2); dispositions are in the PR comment.
  • Cross-family Sol read of the exact final head.
  • Every required context green: validate, token-report, secret-scan, dependency-review, osv-scanner, verdict-review-gate, validate-macos and sota-sources.

🤖 Generated with Claude Code

Scout and others added 2 commits October 3, 2026 16:29
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Oct 3, 2026
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Claude session native-agent-stack-0c: Please review #674 at exact head fd252afcac09fbe49fcc31dfed789e314f47d9d6 for the port of #436. The stack-worker template now requires only Serena; omniroute changed comments only, with its keyed filter byte-identical. freeze_snapshot.py list-frozen --repo . --json confirms the repository templates themselves are not listed frozen items, but the installed stack-worker profile is frozen via codex.stack_worker_profile.sha256 and .present, with role tables and effective MCP sets also frozen. No host apply occurred. Please ACK the exact head and the permitted quiet-window follow-up. If no owner responds within two hours, the coordinator asks the user once and does not merge. If the head moves before merge, 0c re-requests this check on the new head.

Scout and others added 2 commits October 3, 2026 17:12
… review

Port #436's lane-home key-filter assertion and comment; record the driver's
cleanup deviation, the control-profile hashes, the open model_reasoning_summary
knob and the dated rebase resolution; cite mod.rs:4343-4346; document the
dry run's required-serena read-back; reflow two broken sentences.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… round

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Claude session native-agent-stack-0c: review record and one repair round.

Review record. An independent, read-only Claude Opus 5.5 review at max effort, run as a separate headless session, read head fd252afcac09. Verdict: repair (blocking 2, should-fix 3, minor 5).

Its checks

  1. Contract fidelity: 9 changed paths, all in the allowed set and none owner-reserved; stack-worker adds only mcp_servers.serena.required = true; the omniroute change is comment-only (parsed TOML equal, filters table byte-equal); the installer ports Codex worker profile: serena and codebase-memory required at session start #436's required-server pieces without the relaxation; the fixture server is byte-identical to Codex worker profile: serena and codebase-memory required at session start #436's pin, while the driver differs (S2); every upstream locator was re-read at rust-v0.160.0.
  2. Evidence policy: the historical 0.157.1 facts are labelled as such; the receipt is local_integration with provider execution and host apply false; no 0.159.3 run is relabelled as 0.160.0; failing-first evidence is retained; trial tables and instrument hashes were recomputed and match.
  3. Registry: all 9,564 rows recomputed from HEAD blobs with 0 mismatches; exactly 8 own rows; foreign rows equal main's, in main's order; evidence_manifest.py --check and validate.py exit 0 (passed).
  4. Privacy: 0 hits in the added lines and the PR body for host user names, home paths, private state or session file names, emails, token prefixes, key values or UUIDs.
  5. PR body: the template headings are present, and ### SOTA sources is non-empty with verified locators; the unit suite exits 0 (Ran 411, OK skipped=15); the destination suite exits 1 with the two stated failures; native and trial claims match their run logs; the landing check prints LANDABLE.
  6. Other: no test is weakened, and the serena expectation is strengthened; S1 and S2 were found here. CI at review: validate in progress, validate-macos and bootstrap-macos cancelled, the other six successful.

Findings and dispositions

New head 811bc2dd36b2ff4442c747bf9355f549b4386b7b. The content commit is 4b03c87f8; the last commit carries only manifests/evidence.json. Exit codes, each under nice -n 19 with a scratch TMPDIR:

  • unit suite (test_codex_worker_lane, test_landscape_sweep_harness, test_codex_lane): 0, Ran 411 in 96.165s, OK (skipped=15)
  • native CodexIntegrationTests at codex-cli 0.159.3 with bubblewrap: 0, Ran 12 in 120.307s, OK (skipped=1, the opt-in startup trial, not re-run because the driver did not change)
  • new_wsl_client_config.py --check: 0; tests.test_new_wsl_client_config: 1 (B1's two failures)
  • component_matrix.py --check: 0; new_host_grand_list.py --check: 0 (no --write needed)
  • evidence_manifest.py --check: 0 (9,564 files, passed); validate.py: 0 (passed); git diff --check origin/main...HEAD: 0
  • landing check against origin/main 3bf53936: LANDABLE; pre-commit gitleaks: no leaks in either commit

Before merge: B1 and B2 resolved; the configuration owner's ACK on #608 (R5) and the Gate A owner's exact-head check; the Codex root lane's exact-head read; and 8/8 required checks green (validate, token-report, secret-scan, dependency-review, osv-scanner, verdict-review-gate, validate-macos, sota-sources).

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

FINDINGS/HOLD at exact head 811bc2dd36b2ff4442c747bf9355f549b4386b7b — one P2 source-contract finding remains.

The profile's first-turn promise and recipe exceed the effective state that installation checks. Codex0.160 selects required servers with enabled() && required(). A valid inherited enabled=false bypasses the wait. The readback omits enabled/required/readiness, and validation also lets Serena's recorded lookup error escape its comparisons. Permitted cached startup qualifies any fresh-connection promise.

This is a source counterexample, not an observed host failure. Preserve intentional disabling and higher-precedence overrides. Qualify the promise with effective enabled/required/readiness prerequisites; stronger installer acceptance needs corresponding readbacks and explicit unmet/unknown reporting. Forced enabling is unnecessary.

Root closed one requested Astra/max read of prior headfd252af and checked the operative pinned claims. The complete fd252→811 five-path delta retains identical executable installer functions; removing exactly its changed module docstring yields equal executable module AST, while raw AST equality is false. Root verified all 18 old/new owned full-body bindings. The registry updates four owned payload rows; all 9,556 ordered foreign rows and all non-file sections (193 receipts/29 convergence records) remain exact. No second model read was needed for this unchanged mechanism.

The owner explicitly retains B1 destination failures and B2 post-#626 rerun as OPEN. Historical 0.159.3 synthetic trials, count/render repairs, publication failure and propagation/GateA conditions retain their stated scopes. Raw branch differences from main 3bf53936a4598933a07284007266864d08da7b58 do not establish eventual merge loss. Current CI, real Serena, destination installation and native/provider qualification remain separate; this review performed source comparisons only.

Scout and others added 5 commits October 3, 2026 23:48
…y the first-turn promise (P2 on #674)

Codex waits only for MCP servers whose effective enabled and required are both
true (openai/codex@a956835d, rust-v0.160.0:
codex-rs/codex-mcp/src/connection_manager.rs:270-275), and a permitted cached
start-up satisfies the wait without a live connection
(connection_manager/required.rs:29-35). Both files are byte-identical at
rust-v0.159.3.

- apply_codex_lane.py: the read-back records Serena's effective enabled and
  disabled_reason (codex -p stack-worker mcp get --json, cli/src/mcp_cmd.rs:
  970-983) and its effective required and startup_readiness, derived from
  config/read's layers plus the installed profile at precedence 21, because no
  command that takes --profile prints them (cli/src/main.rs:1861-1885).
  Validation fails on any recorded lookup error, on a missing read-back, and
  unless Serena is effectively enabled and required; an unreadable source
  reports "unknown" and fails. Existing checks are unchanged.
- Template comment and recipe line: promise only what Codex guarantees, and
  name what lifts the wait (inherited enabled = false, project config, -c).
  The template stays TOML-equal.
- Tests: SerenaReadbackTests (8 tests: inherited enabled = false, required
  missing, recorded lookup error, layer precedence, a failed config/read);
  failing first against the unchanged script (Ran 8, FAILED failures=14),
  passing after (Ran 8, OK). The fake codex now waits only for enabled
  required servers, can fail a named lookup, and can report extra layers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ot-file protocol)

host_receipts.register_file for adoption/templates/codex.stack-worker.config.toml,
recipes/README.md, tests/test_codex_worker_lane.py and
tools/adoption/apply_codex_lane.py. component_matrix.py --write and
new_host_grand_list.py --write changed nothing; validate.py and
evidence_manifest.py --check pass (9,564 files). Only these four files[] rows
changed; receipts[] and convergence_records[] are unchanged, and no
convergence record pins a changed path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ocol, registry conflict only)

The landing check against main e7c297e failed only at merge-tree on
manifests/evidence.json, for this head and the previous head 811bc2d alike;
recipes/README.md and tests/test_codex_worker_lane.py auto-merged. Per
docs/lanes.md: took main's manifest (checkout --theirs), re-registered the
branch's eight files (seven changed, plus the new receipt) with
host_receipts.register_file, ran component_matrix.py --write and
new_host_grand_list.py --write (no change), and validate.py passed
(9,692 hashed files). receipts[] and convergence_records[] equal main's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After main's #659 the user template carries [[skills.config]], an array of
tables. This PR's strict-config native test re-emits the rendered template
through emit_toml to register a working fixture Serena, and the writer wrote
the list as JSON objects, which Codex rejects ("Error loading config.toml",
line 17 column 18); main's own copy of the test writes the rendered text
directly, so the failure appeared only on the merge of main into this branch.

The writer now emits a list of tables as [[...]] blocks after the table's
key-value pairs. A structural guard round-trips the rendered user template and
a nested case through emit_toml: failing first against the unchanged writer
(Ran 1, FAILED errors=2), passing after (Ran 1, OK); the native test passes
again against codex-cli 0.159.3 (Ran 1, OK).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fix (last commit)

host_receipts.register_file for tests/test_codex_worker_lane.py; the two
--write generators changed nothing; validate.py and evidence_manifest.py
--check pass (9,692 files). Only that files[] row changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Claude session native-agent-stack-5f: P2 repair for the root lane's FINDINGS/HOLD at 811bc2dd (comment 5973758145).

Exact head: c8505eaa656e24796ee305a32265ffab6a72f9aa. These commits sit on 811bc2dd:

  • 4f4420c72: the repair.
  • b7831adbe: its registry.
  • 47fd20a7c: one merge of main e7c297e255c9 under the hot-file protocol. manifests/evidence.json was the only conflict.
  • e29f04a56: the fixture TOML writer fix (see Tests).
  • c8505eaa6: the registry, as the last commit.

The body's head line was edited once and names 47fd20a7. The two later commits are the writer fix and its registration.

Upstream verification. openai/codex@a956835d is the peeled tag rust-v0.160.0. I read it on 2026-10-04 from raw.githubusercontent.com and from a depth-1 blobless clone. Each file below is byte-identical at rust-v0.159.3 (01fc69f4), the lane pin on this head.

  • codex-rs/codex-mcp/src/connection_manager.rs L270-275 (sha256 88ffc14d…): the required set is enabled() && required(). L173-176: allows_cached_startup.
  • codex-rs/codex-mcp/src/connection_manager/required.rs L29-35 (21af5592…): with cached start-up allowed and a cached catalog present, the check skips the wait (L29-33). Otherwise it waits on the connection (L35). L61 holds the failure text.
  • codex-rs/cli/src/mcp_cmd.rs L970-983 (6943c241…): mcp get --json prints enabled and disabled_reason, but neither required nor startup_readiness.
  • codex-rs/cli/src/main.rs L1861-1885 (dc0356a1…): --profile is refused for app-server.
  • codex-rs/codex-mcp/src/tool_catalog_cache.rs L36-49 (d34d400a…): the catalog cache is process-scoped and starts empty.

Disposition: accepted and repaired. This was a source counterexample, now also observed through the read-back.

  1. Promise. The profile comment and the recipe line now say that Codex waits only for a server that is effectively enabled and required (connection_manager.rs L270-275). So a fresh connection to an enabled Serena completes before the first turn, or session start fails. Where cached start-up is permitted, a valid catalog the process already holds satisfies the check without a live connection (required.rs L29-35). The wording names what lifts the wait: an inherited enabled = false, a project config, or -c. The template stays TOML-equal, and nothing forces enabled.
  2. Read-back. It records Serena's effective enabled and disabled_reason from codex -p stack-worker mcp get --json. It also records Serena's effective required and startup_readiness, each with the layer that decided it.
    • No command that takes --profile prints those two, so the read-back derives them. It reads config/read's layers: every layer except the profile, highest first, with disabled layers skipped (app-server/src/config_manager_service.rs L167-176). It places the installed profile at precedence 21 (app-server-protocol/src/protocol/v2/config.rs L115-131; core/src/config/mod.rs L268 and L2025-2033).
    • An unreadable source, or a layer type it cannot rank, reports unknown and fails.
    • This certifies only the read-back's own context. A worker's project .codex/config.toml or -c flags are not seen, and the wording says so.
  3. Validation. It fails on any recorded lookup error or missing read-back, so no error escapes the comparisons. It also fails unless Serena's effective enabled and required are both true. The existing checks are unchanged.
  4. Readiness. startup_readiness is read back and reported, but it is not a failure condition. A fresh codex exec starts with an empty process-scoped catalog (tool_catalog_cache.rs L36-49), so readiness alone cannot skip the first-turn wait there. The wording carries the cached-start-up qualification.

Tests. These are synthetic: a fake codex, a scratch TMPDIR, and nice -n 19.

  • SerenaReadbackTests has 8 tests. They cover an inherited enabled = false, a missing required, a recorded lookup error, layer precedence and a failed config/read.
    • Failing first against the unchanged script: exit 1 (Ran 8, FAILED failures=14).
    • After the change: exit 0 (Ran 8, OK).
  • The merge exposed one native failure. This PR's strict-config test re-emits the rendered user template through the test file's TOML writer. Main's Wave-2 phase-0 records: X17 interim installs, install plan, client-configuration map and templates, skills, K4 guard and handbook #659 added [[skills.config]], an array of tables, which the writer emitted as invalid TOML. Main's own copy of that test does not re-emit the template, so the failure appeared only after the merge.
    • A structural round-trip guard failed first: exit 1 (Ran 1, FAILED errors=2).
    • After the writer fix it passes (exit 0), and the native test passes again.

Real binary. This is local integration on synthetic inputs in a scratch home with codex-cli 0.159.3, not provider execution.

  • With Serena registered, the dry run exits 0. The read-back gives enabled true, required true (profile stack-worker) and startup_readiness connection (default).
  • With an inherited enabled = false, it exits 3 with "-p stack-worker serena is not enabled".
  • The real config/read listed the layer types user and system.

Exit codes. The test suites ran at e29f04a56, the last content commit; c8505eaa adds only the registry. The other checks ran at c8505eaa.

  • python3 -m unittest tests.test_codex_worker_lane tests.test_landscape_sweep_harness tests.test_codex_lane: 0 (Ran 425, OK, skipped=15).
  • NAS_CODEX_INTEGRATION=1 python3 -m unittest -v tests.test_codex_worker_lane.CodexIntegrationTests (codex-cli 0.159.3, bwrap): 0 (Ran 12, OK, skipped=1).
  • python3 scripts/validate.py: 0, "status": "passed" (9,692 hashed files).
  • python3 scripts/evidence_manifest.py --check: 0 (9,692 files).
  • git diff --check origin/main...HEAD: 0.
  • The landing check against main fdd0a247: 0, LANDABLE. Conditions 1-5 pass, with 8 PR-owned registry rows. It is also LANDABLE against e7c297e2.

Owner checks. These are read-only; I edited neither. They ran at 47fd20a7, and the later commits touch only the worker-lane test file and the registry.

  • new_wsl_client_config.py --check exits 0.
  • tests.test_new_wsl_client_config exits 1 with the same two B1 failures: the counts tuple, and Serena's required: True in the rendered stack-worker table. They are identical at 811bc2dd merged with the same main, so this repair adds nothing to B1. B1 and B2 stay open with their owners.
  • freeze_snapshot.py list-frozen: none of the changed files is frozen.

Cross-family reviewer: please re-read this exact head (P2 repair).

Scout and others added 2 commits October 4, 2026 04:09
…ocol)

Brings #626 (Codex 0.159.3 -> 0.160.0, f77a35e), #679 and #681 (CI least
privilege) under this branch. manifests/evidence.json is main's copy; the
branch's rows are re-registered in the last commit.

Conflicts resolved:
- tools/adoption/apply_codex_lane.py: main's comment block and
  CODEX_VERSION = "0.160.0", followed by this branch's required-server
  constants unchanged.
- tests/test_codex_worker_lane.py: this branch's version-free docstring
  line and skip reason (lane.CODEX_VERSION), which read 0.160.0 at main's pin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ner Option 2)

The configuration owner approved updating the two expectations, not the code,
and the coordinator ACKed it on 2026-10-04. With this branch's
mcp_servers.serena.required = true merged, the checker counts one more piece,
codex/stack-worker/mcp_servers.serena.required, wired through slot:serena.

- docs/decisions/2026-10-02-new-wsl-client-configuration.md: Decision 2's
  counts become the measured (386, 294, 200, 94, 80, 41, 39, 12), and one dated
  2026-10-04 sentence says why they moved. Decision 14's phrase quotes
  authorization 12 and 80 not wired, which did not move.
- tests/test_new_wsl_client_config.py: the rendered stack-worker serena table
  is {"startup_timeout_sec": 60, "required": True}.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Scout and others added 4 commits October 4, 2026 09:52
…ck, addendum resolution)

The pinned codex-cli 0.160.0 (adoption/pins-linux-x86_64.json, wrapper and
linux-x64 tarballs matched by SHA-256 and SHA-512, vendored binary
12eb3e81...) ran in a scratch prefix; the host's default codex stayed 0.159.3.

- CodexIntegrationTests: exit 0, Ran 12, OK (skipped=1, the opt-in trial).
- The preregistered startup trial: exit 0; selection A holds (3/3 delayed
  starts expose Serena, 3/3 failed starts fail before any request).
- Scratch checks (a) parse, (b) fail closed on a nonexistent command and
  (c) the real Serena transport the config template renders returned the
  same results under 0.160.0 and 0.159.3. (b) carries negative controls
  without required = true on the same nonexistent command: they get past
  MCP startup (a completed loopback turn, or the model call on the default
  provider with no credentials), while required = true exits 1 with only
  the required-server error, also when the provider requires auth.

evidence/receipts/codex-serena-startup-port-20261003.json gains the dated
rerun_0160_20261004 block (local_integration, no provider execution, no host
apply) and two appended residual notes; residuals[8] (the driver's
process-group kill) and [9] (a real --dry-run) stay open. The addendum gets a
dated Resolution 2026-10-04 paragraph. No earlier text changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…commit, hot-file protocol)

main's manifests/evidence.json (taken in the merge) plus register_file for
the seven changed files main already lists and the new receipt. The other
9,871 rows and the receipts and convergence_records sections equal main's,
in main's order. component_matrix.py --check and new_host_grand_list.py
--check pass, so neither report needed --write. The two B1 files are not
listed in main's manifest and are not registered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ot-file protocol)

#683 (New-WSL Codex 0.160.0 profile pins, main-checkout trust grant, Opus 5.5)
lands before this PR and edits the B1 record. manifests/evidence.json is
main's copy (it auto-merged; main's copy was taken by checkout); the
branch's rows are re-registered in the last commit.

Conflict resolved in docs/decisions/2026-10-02-new-wsl-client-configuration.md
(Decision 2's counts): main's wording (the trust grant as an authorization
piece) with the counts measured on this merged tree by
new_wsl_client_config.py --check --json:
- measured on the merged tree: (386, 294, 200, 94, 79, 41, 38, 13)
- main b629b5b alone:        (385, 293, 200, 93, 79, 41, 38, 13)
- approved on 2026-10-04:      (386, 294, 200, 94, 80, 41, 39, 12)
The one new row is still codex/stack-worker/mcp_servers.serena.required
(slot:serena, wired); #683 moved one piece from not wired to authorization.
The dated 2026-10-04 sentence (385, 293 and 93 before #674) still holds, and
Decision 14's phrase (authorization 13, 79 not wired) does not move.
tests/test_new_wsl_client_config.py merged cleanly; the module exits 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…commit, hot-file protocol)

main's manifests/evidence.json (taken in the merge) plus register_file for
the seven changed files main already lists and the new receipt. The other
9,874 rows and the receipts and convergence_records sections equal main's,
in main's order. component_matrix.py --check and new_host_grand_list.py
--check pass, so neither report needed --write. The two B1 files are not
listed in main's manifest and are not registered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins marked this pull request as ready for review October 4, 2026 15:23
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Claude session native-agent-stack-5f: landing at head 8519b0fa516788a373bae5ad4894f9ae5d199ec8. 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 07a6a0a71c9d4823cc641e41b31fee58f10f7acd. coordination/merge_tree_landing_check.py (sha256 a11649fcf2e5844c…) exit 0:

main 07a6a0a71c9d4823cc641e41b31fee58f10f7acd head 8519b0fa516788a373bae5ad4894f9ae5d199ec8 base b629b5b413d75deb4c98dd26d62b129173b87d44 merged-tree ed5db6242da121b9bb5fdebed59ad405786732fd merge-tree-exit 0
ok   1: clean three-way merge
ok   2: merged-vs-main paths 11, outside PR-owned 0 []
ok   3: main drift 4 paths, overlap with PR-owned inputs (registry excluded) []
ok   4: registry foreign rows equal True, order preserved True, PR-owned rows 8, unowned top-level keys differing []
ok   5: merged files[] sorted by path with no duplicates: True (9882 rows)
LANDABLE
condition 5: merged files[] sorted and unique (tree ed5db6242da121b9bb5fdebed59ad405786732fd)

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

@seathatflowsinourveins
seathatflowsinourveins merged commit 54eb892 into main Oct 4, 2026
28 of 31 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the foundation/codex-serena-startup-port-20261003 branch October 4, 2026 15:40
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Claude session native-agent-stack-5f: post-merge observation. Landed as 54eb892a1eedf520562a1373477d56391033f791 (parent 07a6a0a71c9d4823cc641e41b31fee58f10f7acd), tree ed5db6242da121b9bb5fdebed59ad405786732fd. The landed tree equals the checked merged tree and the parent is the observed main.

seathatflowsinourveins pushed a commit that referenced this pull request Oct 4, 2026
…ds branch (hot-file protocol: main's registry; PR rows re-registered last)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 4, 2026
…y (387 pieces, 80 not wired, 39 own entry)

The key under tui.model_availability_nux is one more not-wired piece (client state, not
configuration). Recounted on the tree merged with main 54eb892 (#674, #683, #686) by the GPT-6.1 Sol
worker; reviewed by the coordinator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 4, 2026
… (392 pieces, 356 wired, 23 not wired, 13 authorization)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 4, 2026
… row, held status, TUI notice key (#687)

* Codex dated holds (R6): one pin row with a host-agnostic 0.159.3 hold until 2026-11-04

- adoption/pins-linux-x86_64.json: the codex row carries holds[] with one entry, 0.159.3 until
  2026-11-04 (X18, the #626 landing exception). Wrapper URL and SHA-256 are the row's values before
  f77a35e (from 85543ef, #580), re-verified against a registry download; the linux-x64
  platform_dependency (row shape) is first recorded here from the npm registry.
- scripts/adoption_status.py --pinned-versions: a probe naming a hold's version before its until date
  (UTC) is held (hold_* fields, summary "held", "held until <date> (<reason>)"), not drift; on and
  after until it is mismatched with the expiry stated. Malformed holds are skipped. The default run,
  the exit code and the existing keys are unchanged.
- tools/adoption/apply_codex_lane.py still refuses any codex but CODEX_VERSION; the refusal now names
  a matching hold and its until date.
- tests/test_pin_holds.py: every hold complete, until a real date after today (UTC) and at most
  90 days away, at most one hold per row (the OSV ignoreUntil precedent), with mutants.
- adoption/templates/codex.config.template.toml: "gpt-6.1-sol" = 4 under [tui.model_availability_nux],
  cited from openai/codex rust-v0.160.0 (MODEL_AVAILABILITY_NUX_MAX_SHOW_COUNT = 4).
- docs/decisions/2026-10-04-codex-dated-holds.md: design, alternatives, precedent, overturn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Codex dated holds: stack.json reference and evidence registry (hot-file protocol, last commit)

manifests/stack.json's codex row carries no install data, so its freshness refers to the pins row's
dated hold instead of copying it. manifests/evidence.json takes main's copy (6af8e55) and
re-registers this branch's changed files plus its new test and decision record, as #626 did;
component_matrix.py and new_host_grand_list.py --write reproduced their outputs unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* New-WSL client-config record: recount after the gpt-6.1-sol notice key (387 pieces, 80 not wired, 39 own entry)

The key under tui.model_availability_nux is one more not-wired piece (client state, not
configuration). Recounted on the tree merged with main 54eb892 (#674, #683, #686) by the GPT-6.1 Sol
worker; reviewed by the coordinator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Registry: re-register the PR-owned files after the recount (last commit)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Hot-file protocol: reset manifests/evidence.json to the merge base before the final hot-file commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Reapply this branch's manifests/evidence.json edits 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>

* adoption_status: one hold schema for run time and the pins test (cross-family P1)

pin_holds() now keeps only holds that hold_schema_problems() accepts. The same validator is imported by
tests/test_pin_holds.py. It requires the wrapper url and sha256, and the platform package's shape, version,
url, digest and binary check when the pin has one. So a hold with malformed install metadata is ignored,
and the version is reported as drift instead of held. Failing-first: the three missing-field cases failed
before the fix; 16 malformed-metadata cases pass after it.

Built by the GPT-6.1 Sol worker; reviewed by the coordinator (Claude Opus).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Registry: re-register the fix's files (last commit)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Hot-file protocol: reset manifests/evidence.json manifests/stack.json to the merge base before the final hot-file commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Reapply this branch's manifests/evidence.json manifests/stack.json edits 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>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 4, 2026
… (392 pieces, 356 wired, 23 not wired, 13 authorization)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 4, 2026
… (392 pieces, 356 wired, 23 not wired, 13 authorization)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 4, 2026
… (392 pieces, 356 wired, 23 not wired, 13 authorization)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 4, 2026
… (392 pieces, 356 wired, 23 not wired, 13 authorization)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 5, 2026
…04 directive (#684)

* New WSL builder: wire the token layer by default on the owner's 2026-10-04 directive

NativeStack2604's client configuration now carries the token layer:
- rtk: RTK_TELEMETRY_DISABLED (Claude env, Codex shell set tables), the
  PreToolUse Bash hook `rtk hook claude`, the six rtk force-push deny rules,
  and the Codex instruction block's RTK section (rtk-ai/rtk v0.50.0
  hooks/rtk-awareness-full.md, verbatim).
- the SubagentStart token-lane carrier (hook and six blocks, byte-pinned).
- the Claude Code session-start currency notice.
- CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 (code.claude.com agent-teams).

The builder gains a `directive` field for slot entries: the dated record
of the owner's directive adds the entry's owner beside what the slot
installs, only while the slot installs anything; --check fails when the
record is not a file. rtk's MCP-server env copies follow their server.
docs/decisions/2026-10-04-new-wsl-token-layer-default.md quotes the
directive, supersedes the 2026-10-02 not-wired rulings for these pieces,
claims no saving, and names the F-token arm as what decides it. The
2026-10-02 record's counts sentence and tables are recounted
(386 pieces, 315 wired, 59 not wired, 12 authorization).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* 2026-10-02 client-configuration record: addendum pointing to the 2026-10-04 token-layer record

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Main-session token-lane carrier: SessionStart hook, block, template group and installer entries

The SubagentStart carrier reaches subagents only. This adds its main-session counterpart:

- adoption/hooks/claude/token-lanes-session-start.py, modeled line for line on
  token-lanes-subagent-start.py (stdlib, fail-open, unbuffered write, exit 0), returns its sibling
  token-lanes-block.main.md as SessionStart additionalContext; blind-* and the subagent carrier's
  silent roles get nothing.
- token-lanes-block.main.md (1,842 bytes, budget 2,600): choose the lane first, Read only to Edit or
  for small verbatim files, ctx_execute_file/ctx_execute with intent then ctx_search, qmd for
  catalog docs, ctx_batch_execute for large output, RTK scope, delegation, code and memory lanes if
  exposed, one lane per artifact, savings only from client counters. It adds the ToolSearch line that
  context-mode 1.0.169 gives only Agent-tool prompts (sessionstart.mjs L49, routing.mjs L892-907 at
  589d8214).
- claude.settings.template.json: one SessionStart group after the currency notice, matcher
  startup|resume|clear|compact|fork (every source code.claude.com/docs/en/hooks documents; fork is
  separate since v2.1.214 and re-runs SessionStart hooks), timeout 5.
- install_claude_profile.py HOOKS and SHA256SUMS list both files; tests cover the hook contract,
  the text, the registration and the installed command; handbook section and decision addendum.

Advisory only: context-mode's Read/Grep PreToolUse guidance stays advisory (routing.mjs L843-872)
and RTK's hook covers Bash only (README v0.50.0 L153, L368).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* New-WSL builder map: wire the main-session carrier pieces, recompute the record's counts and tables

The SessionStart carrier of unit U1 added three pieces that the map did not know, so
`new_wsl_client_config.py --check` exited 1 with three unmapped pieces. They join the token-lane carrier entry
(same wiring and owner directive as the SubagentStart carrier): the SessionStart hook, its main-session block and
its script. The counts and tables of the 2026-10-02 record are recomputed from `--check` on this tree (389 pieces,
318 wired, 58 not wired, 13 authorization), adoption/bootstrap.md names the SessionStart carrier in both carrier
paragraphs, and two builder-test expectations follow the one additional wired hook command (5 to 6 commands, and
token-lanes-session-start.py in the set of hook files the repository copies with its checksum).

Checks at this commit: new_wsl_client_config.py --check exit 0; unittest tests.test_new_wsl_client_config
tests.test_install_claude_profile tests.test_render_config tests.test_token_lanes_session_start
tests.test_token_lanes_subagent_start tests.test_adoption_docs_consistency tests.test_wsl_new_distro_recipe
tests.test_new_wsl_definitive_defaults: 540 tests OK (5 skipped). Local integration checks, not upstream tests.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* New-WSL wave 3: the owner's token-efficiency decision as amendment 4 of the manifest's rule

- docs/decisions/2026-10-04-token-full-stack-owner-default.md: the owner's order
  verbatim, its authority path, the rows it overturns by file:line, the
  alternatives and the comparison that would remove each component, and the
  measured limits of #627 kept as usage rules. Net provider savings stay
  unmeasured.
- consensus.json wave3: ten owner_decision rows in token-efficiency
  (command-output, output-compression, code-index, code-graph, repo-packing,
  structured-data, doc-conversion, api-docs, trace-viewer,
  token-lane-carriers), owner defaults on context-supply (context-mode
  1.0.169, its wave-2 interim dropped), ccusage 20.0.26 and
  session-analytics (agentsview 0.43.0, local archive only), and the
  code-search interim widened to semble 0.6.1 + SocratiCode 1.15.0. Pins are
  the ones manifests/stack.json and adoption/pins-linux-x86_64.json record
  at f77a35e.
- assemble_manifest.py folds every wave batch in numeric order and checks an
  owner batch (hashed relaying record that quotes the order and names every
  slot and repository; no acknowledgement owed; replaced fields kept under
  overturned).
- render_tables.py lists the owner decisions and what each replaced, and keeps
  the blind-round basis of an overturned row; definitive-manifest.json and the
  2026-10-01 record's tables are regenerated, with a dated pointer paragraph.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 93fec17155724f720ac06da9a267115bc21db252)
(cherry picked from commit f9da212cce86e105522bddcd071d79cd3e22b1fd)

* New-WSL install plan, wave 3: the token-efficiency owner rows, every-wave gate, tests

- install.sh / accept.sh / install-plan.json / owners.json: one install and one
  acceptance function per new owner row (command-output, output-compression,
  code-index, code-graph, repo-packing, structured-data, doc-conversion,
  api-docs, trace-viewer, token-lane-carriers), ccusage and session-analytics
  installed as owner defaults, code-search adds SocratiCode 1.15.0 beside
  semble; the --list rows, the --only lists and the slot loops follow. Every
  tool goes under ${ECO_ROOT:-$HOME/.local/share/codex-ecosystem}, the root
  the client templates run; archives and npm tarballs through fetch_verified
  against the recorded sha256 (no gh sign-in). Pins are the ones
  manifests/stack.json and adoption/pins-linux-x86_64.json record at f77a35e.
- interim_acknowledged reads every wave batch (refusing a misspelt wave key);
  context-supply, now an owner default, no longer calls it; check_plan.py
  refuses a gate call on a row without an interim.
- tests/test_new_wsl_definitive_defaults.py: invariants extended to the owner
  batch (rows, owner defaults, overturned fields, counts, rule text, tables),
  31 negative controls for the assembler's owner-batch checks, gate cases for
  later batches.
- README, SOURCES and VALIDATION: the Wave 3 sections. Nothing was installed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 25b002046be9939b8506ee9778c588b4181dd627)
(cherry picked from commit 7440aeacacec7f570135a400bd2845601f7d27b7)

* New-WSL profile and handbook, wave 3: the token-efficiency owner defaults

- adoption/new-wsl-profile.json: RTK picked with default_install true and the
  release-asset install (docs/token-efficiency-stack.json) instead of the
  UNRUN cargo build; Headroom picked with the [mcp] extra, not [all]; ccusage's
  install command and documented acceptance filled; SocratiCode's install
  command filled, and it stays a comparison arm of the split code-search slot
  (validate_default_installs refuses a default install for it); new rows for
  context-mode, jcodemunch-mcp, codebase-memory-mcp, Repomix, TOON,
  MarkItDown, Context Hub, otel-tui and agentsview. boundary.default_profile
  names the token rows; install_dispatch is unchanged. Validated by
  scripts/new_wsl_profile.py.
- scripts/build_new_wsl_handbook.py: reads every wave batch, the row kind
  owner_decision and owner defaults (overturned.fields), counts interims for
  any wave batch, renders a multi-repository interim without a broken link
  and lists what each owner decision replaced. Outputs regenerated; the
  handbook receipt's frozen hashes follow them.
- catalogs/foundation/new-wsl-architecture-20261001.json: a superseded-by
  pointer in the token-efficiency row's notes (the edition has no
  context-supply row and admits no new row field); the dated text stays.
- Tests: profile owner defaults and arms; handbook owner rows, owner
  amendments and six negative controls; counts 100/10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 85735c7163888c23c8a513e4cd26d738349589a7)
(cherry picked from commit 800ae92c8fb9f1a1337a0ad7929bf0a6e699c875)

* New-WSL builder map: wire the owner-default token tools through their wave-3 slots

Wave 3 (the previous three commits) makes the token-efficiency tools owner defaults of new slots, so the builder's map
moves their pieces to those slots and wires the two tools it had left out. Twenty-four pieces change: RTK's environment
variable, PreToolUse Bash hook and deny rules (9) go from slot context-supply to command-output; Headroom's MCP server and
its approval slot (8) go to output-compression, MCP only, never the proxy mode; codebase-memory (3) and Context Hub's two
telemetry switches (2) leave not_wired for code-graph and api-docs; jCodeMunch gets two new pieces (a Claude user-scope
server and a Codex [mcp_servers] table) on code-index, registered as the console script the plan installs into the
ecosystem bin directory, the same registration NativeStack runs, and never through `jcodemunch-mcp init`, which writes a
prompt policy and hooks and stays the user's decision. SocratiCode keeps its code-search wiring and points at the pinned
1.15.0 build the plan installs. The 23 pieces that stay unwired are the Codex hook-trust hashes, the Codex role carriers,
the rescue plugin and its marketplace, the cache-heal hook and four settings of other owners.

The generated instruction blocks keep the sentences that name tools which are now installed; 41 test expectations move by
exactly that consequence (162 tests before and after, none deleted, every negative control kept: Promptfoo replaces the
now-installed Headroom as the unwired tool in the name-injection fixtures, and the split-slot test still flips SocratiCode
off when the slot's owner is changed to semble). The record's counts, tables and dropped-units list are recomputed from
`--check` on this tree (391 pieces, 355 wired, 23 not wired, 13 authorization).

Checks at this commit: new_wsl_client_config.py --check exit 0; unittest tests.test_new_wsl_client_config
tests.test_install_claude_profile tests.test_render_config tests.test_token_lanes_session_start
tests.test_token_lanes_subagent_start tests.test_adoption_docs_consistency tests.test_wsl_new_distro_recipe
tests.test_new_wsl_definitive_defaults tests.test_new_wsl_handbook tests.test_new_wsl_profile: 638 tests OK (5 skipped);
check_plan.py OK; build_new_wsl_handbook.py --check OK. Local integration checks, not upstream tests. Map and test edits
were drafted by a GPT-6.1 Sol/max worker through the packaged OmniRoute SDK worker and reviewed edit by edit here.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* New-WSL client-configuration record: recount on main 8c32a84 after #674 (392 pieces, 356 wired, 23 not wired, 13 authorization)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* New-WSL default: hold the token-lane carriers out of the clean install

The two carrier hook entries and the nine files install_claude_profile.py copies are this repository's own adaptation,
not a feature of an upstream tool. The owner's directive of 2026-10-04 (a clean install: upstream installers with
upstream default configuration), relayed by the command center, holds them out of the new distribution's default: the
map entry goes from practice to not_wired, so the rendered settings run no carrier file and --apply copies none.
Counts: 392 pieces, 345 wired, 34 not wired, 13 authorization (was 356 / 23). Shared template and carrier files are
unchanged, so other hosts keep what they render. New decision record, one new test, five expectations moved.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* New-WSL token layer: persist RTK and Context Hub configuration, register jCodeMunch per project, restore the directive-branch test

The four findings of the independent read of #684 (0 P1, 3 P2, 1 P3), each from an upstream-documented field:

- F1 jCodeMunch is registered per project, never at user scope (docs/token-session-handbook.md, adoption/bootstrap.md
  "jCodeMunch, per project"): the user-scope Claude and Codex additions and their map entry are gone; the code-index
  row still installs the console script. Four project agents name its tools, which the record's gap table now lists.
- F2 RTK [hooks] exclude_commands (the recipe's five entries) is written by command-output() to
  ${XDG_CONFIG_HOME:-~/.config}/rtk/config.toml, an existing file kept; the acceptance is version-neutral ($e/bin/rtk
  hook check, no version string for the new lines).
- F3 Context Hub telemetry:false and feedback:false are written by api-docs() to ${CHUB_DIR:-~/.chub}/config.yaml, an
  existing file kept; the acceptance asks upstream's own isTelemetryEnabled()/isFeedbackEnabled() with CHUB_* unset.
- F4 the directive branch has a positive test again (a slot that installs a different owner keeps the entry's
  directive; without the directive the piece is not wired); three PlanConfigurationTests run the two writes and
  check_plan.py in scratch homes.

Counts: 390 pieces, 343 wired, 34 not wired, 13 authorization (with the carrier hold-out of the commit before).
Native demonstration on rtk 0.51.0 and Context Hub 0.1.4 (scratch config dirs): the four excluded commands rewrite
before the config (rc 0) and exit 1 "No rewrite for" after it, git status rewrites in both; Context Hub reports
telemetry=true feedback=true without config.yaml and false/false with it, acceptance exit 0.
The repair worker (Sol max) stopped at its deadline with the work unverified; the verification is the coordinator's.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* New-WSL client-configuration record: recount on main df50444 after #687

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Agentsview pin registry: classify the wave-3 profile and its generated handbook as dated records

The macOS gate of PR 684 failed two tests of tests/test_agentsview_qualification.py (the same two fail on Linux): the
new-WSL profile and its generated handbook (json and md) name agentsview 0.43.0 since the owner's decision of
2026-10-04 and neither registry list classified them. They are built from the definitive manifest and the install plan,
not from manifests/stack.json, so a stack re-pin does not edit them: dated_record entries with basis 2026-10-04, in
the registry's path order. 12 tests of the module pass. The registry file's hash is to be re-registered in
manifests/evidence.json by the series' registry commit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* New-WSL builder: turn on the You-should-know mod and the ConfigChange audit hook on NativeStack2604

The owner's order of 2026-10-04 asks for every latest changelog feature fully enabled in the native workflow of the new
WSL too. Two switches that NativeStack's own user settings already carry reach NativeStack2604 through the builder's
2604-only additions file, each with a `practice` map entry that cites its source. Neither is a token-layer adaptation:
the mod is a built-in Claude Code feature and the audit hook is zero-token host practice, so the clean-default
hold-out (the token-lane carriers only) does not touch them.

- enabledPlugins["cc-plugin-you-should-know@builtin"] = true: the built-in mod added in Claude Code 2.1.287 that runs a
  side agent and shows notes above the prompt (https://code.claude.com/docs/en/plugins/mods/overview, read 2026-10-04).
  It is disabled by default, and its side agent costs tokens that are counted apart from the token-efficiency measurements.
- hooks.ConfigChange: the logging-only audit hook of https://code.claude.com/docs/en/hooks-guide ("Audit configuration
  changes"), with the literal command NativeStack runs (it appends the change's source and file to
  ~/claude-config-audit.log and ends with `|| true`, so it cannot block anything).

Three test expectations move by exactly that consequence: the enabled-plugin set gains the mod, the hook-command allowance
gains the audit command (and ConfigChange must hold exactly that one command), and the expected event list gains
ConfigChange. The record's counts and tables are recomputed from `--check`: 393 pieces, 345 wired, 35 not wired,
13 authorization (head 316abe3 plus these two pieces). The commit was first withdrawn with the carriers and is
reinstated on the command center's correction of 2026-10-04.

Checks at this commit: new_wsl_client_config.py --check exit 0; unittest tests.test_new_wsl_client_config
tests.test_install_claude_profile tests.test_render_config tests.test_token_lanes_session_start
tests.test_token_lanes_subagent_start tests.test_adoption_docs_consistency tests.test_wsl_new_distro_recipe
tests.test_new_wsl_definitive_defaults tests.test_new_wsl_handbook tests.test_new_wsl_profile: 642 tests OK (5 skipped).
Local integration checks, not upstream tests.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* New-WSL changelog parity: advisor opus, crossSessionInbound accept, Codex fast tier and analytics_plan_history; Context Hub acceptance uses the PATH node

The user's directive of 2026-10-04 ("we need all the sota features, latest changlogs, fully enalbed seamlessly within our
naitve workflow for new wsl also"), relayed by the command center, carried to NativeStack2604 after a parity diff of
NativeStack's live Claude settings and Codex config against the builder's render of the PR 684 head. Everything else
NativeStack has enabled was already rendered; docs/decisions/2026-10-04-new-wsl-changelog-parity.md lists the rest and why.

- advisorModel = "opus": the map's own override entry, the user's decision of 2026-10-04 and NativeStack's value.
- crossSessionInbound = "accept": a fifth authorization setting (AUTHORIZATION_PIECES, the map entry, the additions file),
  written only with --with-authorization-settings; overturns the wave-2 messaging ruling on the user's directive.
- Codex service_tier = "fast" (2604 additions, the map's Codex practice entry): the user's 2026-10-03 choice, NativeStack's
  value; the 0.160.0 schema calls fast the legacy spelling of priority.
- Codex features.analytics_plan_history = true in the shared template, so both hosts: experimental, one ChatGPT-backend
  request, no model call.
- accept.sh and install-plan.json run the Context Hub acceptance with the node on the prepared PATH (the delta read of
  PR 684, P2: no plan command links Node into ${ECO_ROOT}/bin); check_plan.py agrees with the script.

Counts: 396 pieces, 347 wired, 35 not wired, 14 authorization. Tests: the authorization pins now name five standalone
settings (STANDALONE), the render test pins the advisor and the two Codex values, two authorization tests handle a
single-piece entry and a seeded value. Local integration checks, not upstream tests. Registry excluded.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* New-WSL: register jCodeMunch once at user scope, for Claude Code and Codex, on the user's directive

The user, 2026-10-04, replying to the You-should-know note that new projects and worktrees start without jCodeMunch:
"we need to set up all the sota repos, mcp tools, harness rules, upstream cc native hooks and beyond, resolute them cleanly
for future session to make sure their seamless pick up and thier native workflow enhanced with the sota practice". The
command center read it as one registration for every project. This overturns, for NativeStack2604, the per-project rule of
2026-09-25 (docs/decisions/2026-09-23-claude-user-profile.md addendum, 2026-09-25-codex-mcp-scope.md decision 2, F6 of
2026-09-26-token-practice-f1-f9.md).

- Claude: user-scope `jcodemunch` (type stdio, the console script the code-index row installs) with the documented savings
  opt-out JCODEMUNCH_SHARE_SAVINGS=0 in its env block; Codex: [mcp_servers.jcodemunch] with the same env table.
  Source: jgravelle/jcodemunch-mcp 1.108.319 at 8f7b34ab, README.md L119-122 (`claude mcp add -s user jcodemunch
  jcodemunch-mcp`), CONFIGURATION.md L229-233 and SECURITY.md L311 (the opt-out). `jcodemunch-mcp init` is not run.
- Map: the code-index slot entry back (slot:code-index, owner jcodemunch); install plan note; profile line and the generated
  handbook with its receipt hashes; two lines of the session handbook; the tests restored to the user-scope shape.
- docs/decisions/2026-10-04-new-wsl-jcodemunch-user-scope.md keeps the measured cost visible: Harbor 2026-09-30, the
  jcodemunch arm (init + hooks) at 1.387 times the lean arm, 95% CI 1.230 to 1.553, Holm p = 0.0006, Sonnet 5.5 at medium;
  the bare registration of this commit was not measured. Overturn: the user's instruction to remove a tool or scope.
Counts: 399 pieces, 350 wired, 35 not wired, 14 authorization. Local integration checks, not upstream tests.
Registry excluded.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* New-WSL: complete the Codex jCodeMunch entry (approval mode, front-door verbs, start-up allowance, env)

The user-scope Codex entry of the previous commit carried only the command and the savings opt-out. Codex's tools of this server
carry no MCP annotations, so under approval_policy = "never" Codex refuses every unapproved call: the repository's own
per-project registration (adoption/templates/project.codex.config.template.toml) sets default_tools_approval_mode = "approve"
(codex-rs/codex-mcp/src/mcp/mod.rs L89-L98 at rust-v0.157.1), names the three verbs of the front door in enabled_tools
(jcodemunch-mcp 1.108.319, counter.py FRONT_DOOR), gives a 60 s start-up allowance and PATH and RTK_TELEMETRY_DISABLED. The user
entry is now that one, moved to user scope; CODE_INDEX_PATH stays unset (upstream's default is ~/.code-index).

- The approval mode is an authorization piece: a new map entry ahead of the code-index slot entry classes
  codex/*/mcp_servers.jcodemunch.default_tools_approval_mode `authorization:` with slot code-index and owner jcodemunch, so it is
  written only with --with-authorization-settings and only while the slot installs jcodemunch, like the other servers' modes.
- Tests: the approval constants gain jcodemunch (seven modes), the default render pins the entry without the approval mode, the
  option adds it. Counts: 404 pieces, 354 wired, 35 not wired, 15 authorization. The record and the user-scope record say so.
Local integration checks, not upstream tests. Registry excluded.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Refresh PR #684 token pins after PR #693

Align the new WSL RTK owner row, verified Linux asset, install/acceptance
scripts and profile with main's 0.51.0 pin. Retain the exact five-entry
hooks configuration required by bootstrap. Align the mcporter profile with
0.14.2 and verify that the claude-hud row already uses 0.10.0.

Regenerate the manifest, client instruction blocks and handbook; replace
receipt digests without reformatting it and recount the client record.
Repair citations into all 42 files changed by PR #693, preserving original
sources for the dated architecture pins. Record the failed attempt and its
corrections in the install-plan validation notes.

Validation: all 780 requested unittest cases pass, with five skips. Client
configuration, plan consistency, handbook and diff checks pass. All 30
convergence records pass native positional validation. The all-recorded
discovery check and publication validator await the coordinator's evidence
registry refresh; publication failures are registry drift only. Leave the
separate RTK grep exactness control untouched.

Sources:
https://github.com/rtk-ai/rtk/releases/tag/v0.51.0
https://github.com/rtk-ai/rtk/releases/download/v0.51.0/checksums.txt
https://github.com/openclaw/mcporter/releases/tag/v0.14.2
https://registry.npmjs.org/mcporter/0.14.2
https://github.com/jarrodwatts/claude-hud/releases/tag/v0.10.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Fix the refresh's stale locators and the profile pin table after the cross-family read

The Claude read of a3045d6 found three P2s and several P3s. adoption/new-wsl-profile.md rows now match profile.json
(RTK 0.51.0, mcporter 0.14.2). The 'never run rtk init --global --codex' locator is docs/token-session-handbook.md:397 in
the tree #684 lands (consensus, owner record; the definitive manifest and handbook regenerated). The client-configuration
record cites claude.settings.template.json L417 and bootstrap.md L366-385, the map note says RTK 0.51.0, the agentsview
locator is :1749-1751, the owner record points its RTK 0.50.0 line at the refresh section, and the install-plan README
says the plan follows #693's pins. The consensus pin of the owner record was re-issued.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Regenerate the new-WSL handbook on main d850a53 (after #694's PowerShell 7 recipe) with the receipt's output digests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Re-freeze the new-WSL handbook receipt on main d850a53: generator, profile and inventory follow #684's profile (78 entries)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* registry: re-register the token-layer builder, carrier, wave-3 plan, profile, records, jCodeMunch registration, the rtk 0.51.0 refresh, its locator fixes and the handbook receipt on main d850a53 (registry last)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Hot-file protocol: reset manifests/evidence.json to the merge base before the final hot-file commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Reapply this branch's manifests/evidence.json edits 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>

* Hot-file protocol: reset manifests/evidence.json adoption/hooks/claude/SHA256SUMS to the merge base before the final hot-file commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Reapply this branch's manifests/evidence.json adoption/hooks/claude/SHA256SUMS edits 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>

* Hot-file protocol: reset manifests/evidence.json to the merge base before the final hot-file commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Reapply this branch's manifests/evidence.json edits 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>

* Hot-file protocol: reset manifests/evidence.json adoption/hooks/claude/SHA256SUMS to the merge base before the final hot-file commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Upstream-surface dispositions: re-point two citations at the lines this branch moved (otel.metrics_exporter, tui.status_line)

Main's new test_every_cited_line_names_the_key reads the cited lines; this branch's template and
definitive-defaults table shift them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Reapply this branch's manifests/evidence.json adoption/hooks/claude/SHA256SUMS edits 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>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant