Skip to content

Final architecture round 2 (wave 5): owners on the repository-quality rule, and NativeStack2604 plan rows for hcom, Chrome DevTools MCP, DSPy, SkillSpector, Inspect Scout and MCP conformance - #713

Merged
seathatflowsinourveins merged 14 commits into
mainfrom
c5/round2-adoption-20261005b
Oct 5, 2026
Merged

seathatflowsinourveins merged 14 commits into
mainfrom
c5/round2-adoption-20261005b

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

Scope

  • What this PR changes: the final-architecture round 2 (wave 5). It records decide round 2's owners as consensus batch wave5, on the owner's 2026-10-04 repository-quality rule, and adds NativeStack2604 install-plan rows for them:
    • hcom 0.7.27 for Claude Code ↔ Codex messaging;
    • Chrome DevTools MCP 1.10.1 for browser automation and diagnostics (web-research/playwright-cli);
    • DSPy 3.4.0 with GEPA 0.1.4 for LM program optimization;
    • SkillSpector 2.12.0 for skill vetting;
    • Inspect Scout 0.5.3 for trajectory analysis;
    • the MCP conformance suite;
    • configure-only rows for promptfoo skill-lifecycle verification, the research-service LLM route, the gpt-gateway topology (OmniRoute 3.8.51, following Select the qualified OmniRoute 3.8.51 release pin (npm omniroute@3.8.51, tag c1e30b76) #637) and Harbor worker telemetry.
  • Base commit: 4c897418f (NativeStack2604 E2E fix wave: 25 slot repairs, wave-4 promptfoo owner default on the repository-quality rule #704 landed)
  • Lane: lane:foundation
  • Owned paths touched:
    • evidence/artifacts/new-wsl-install-plan-20261002/**;
    • adoption/new-wsl/client-config-map.json and its templates;
    • adoption/new-wsl-profile.{json,md};
    • catalogs/foundation/new-wsl-architecture-20261001.json;
    • the consensus and definitive-manifest records;
    • docs/decisions/2026-10-04-final-architecture-round2.md and the four 2026-10-04-round2-plan-g*.md records;
    • the new-WSL tests;
    • the generated handbook.

manifests/stack.json and catalogs/landscape/upstream-snapshot.json are unchanged. Host-stack moves need qualification receipts and belong to currency PRs.

SOTA sources

  • aannoo/hcom tag v0.7.27 = 2c5f343b2f9ec4bf2acf49c0431860e7c2ae578b (installer checksum in the G1 record).
  • ChromeDevTools/chrome-devtools-mcp tag chrome-devtools-mcp-v1.10.1 = e52c6b59b476c5e04d8dd9fd4bd017ba3b3d65df (npm chrome-devtools-mcp@1.10.1).
  • stanfordnlp/dspy tag 3.4.0 = 2413b67a4d08a476e4bc6f40b9f8f42f87711ee7 (dspy==3.4.0; GEPA 0.1.4 as its declared dependency).
  • NVIDIA/SkillSpector v2.12.0 = c7958a3268d9498644b22edb75d0f051bbc8cbfc (release-asset sha256 in the G3 record).
  • meridianlabs-ai/inspect_scout tag 0.5.3 = 0e8fc055a3cebba1a14c11bc35856767b6405173.
  • modelcontextprotocol/conformance: @modelcontextprotocol/conformance 0.2.0-alpha line (the G3 record states the pinned alpha and its cooldown).
  • The repository-quality rule and each verdict's install and acceptance notes: docs/decisions/2026-10-04-repository-quality-rule.md and evidence/artifacts/final-architecture-round2-20261004/verdicts.json. Every row cites its upstream file:line in SOURCES.md and in the group records.

Evidence-class table

Claim Evidence class Command / receipt
The plan's scripts and rows agree, and every owner row installs its default local_integration check_plan.py: 0 problems [integrator]
The client map renders, and the handbook and receipts are regenerated local_integration new_wsl_client_config.py --check 0, build_new_wsl_handbook.py --check 0 [integrator, coordinator]
The architecture builds; the stack drift is labelled, not failing local_integration build_ecosystem.py --check 0, with 23 drift cells listed [integrator]
The destination installs and their upstream acceptance none yet (UNRUN) applied by the NativeStack2604 co-op session after landing

Local commands run

$ python3 -m unittest tests.test_new_wsl_definitive_defaults tests.test_new_wsl_client_config tests.test_new_wsl_handbook tests.test_new_wsl_profile tests.test_stack_lifecycle tests.test_ecosystem_manifest tests.test_upstream_surface_watch
542 tests, 536 passed, 6 skipped   [integrator]
$ python3 scripts/validate.py
status passed (10,103 hashed files, 202 receipts)   [coordinator, after the registry commit]
$ merge_tree_landing_check.py origin/main HEAD
LANDABLE

Decision record

  • docs/decisions/2026-10-04-final-architecture-round2.md (the owners, the rule, and the overturn conditions);
  • the group records: docs/decisions/2026-10-04-round2-plan-g1-messaging.md, -g2-browser.md, -g3-tools.md and -g4-config.md;
  • the integration ledger evidence/artifacts/final-architecture-round2-20261004/integration-resolutions.json.

Also included: the qualifying note on the fix-wave citation ledger's superseded stack rows, which was the residual P3 of #704's GPT delta read (job-065).

Built by four GPT builder jobs and a GPT integrator (GPT-6.1 Sol at max). The coordinator applied the patches, committed, and registered. The cross-family Claude read is pending, so this PR stays a draft until it returns.

Review chain and residuals (bounded loop)

  • Claude four-lens read: 3 P1, 12 P2, 24 P3.
  • GPT repair round 1: fixed all P1 and P2.
  • Claude delta read: 0 P1, 3 P2, 5 P3.
  • GPT repair round 2: fixed N1-N8, R2-19, R2-22 and R2-36.
  • Claude re-check at 7fbe586: 0 P1, 0 P2, 4 P3.

Residuals, routed to the post-landing drift-repair PR:

  1. The gateway-effort check sends its stdout to /dev/null at P/accept.sh:61, so a pass via the time-window fallback looks the same as a pass on the session match. Its embeddings rejection can never fire, because embeddings rows carry no session tag.
    • Fix: write the join mode and caveats to stderr; return 78 on the fallback; re-scope the embeddings claim.
  2. The Chrome origin check relies on apt-cache madison. After the next Chrome release it fails until Chrome is upgraded.
    • Fix: take the origin from the native source file plus the apt-cache policy candidate, and report an older-than-candidate install as 78; add a stale-index test.
  3. adoption/new-wsl-profile.json:1026 still names the exact Chrome build.
    • Fix: "current stable, minimum 154.0.8037.97-1", then regenerate the handbook.
  4. One stale effort claim remains, in integration-resolutions.json repair_round.completeness_critic: it needs an amended_by note.

Carried forward (owners named in the ledger): R2-20 and R2-27.

Verdict files, in the coordinator's bounded-job folders:

  • verdict-claude-713-delta.md
  • verdict-claude-713-recheck.md

Recorded residuals (bounded review, 2026-10-05)

Claude Opus gate read of round 3 at cde8a0de060c returned ACCEPT with no p1. Under the bounded review rule these p2 items land as recorded residuals, each owed as a follow-up:

  • evidence/artifacts/new-wsl-install-plan-20261002/README.md:279-283 and install-plan.json:2658 (alerting row needs_user): Round 3 dropped main's and the accepted head's note that ntfy.sh alerts leave the host ('recommended;

Recorded residuals (bounded review, 2026-10-05; Claude Opus 5.5 gate read (session 5f) at 6eb8b94 at 6eb8b94)

Claude Opus 5.5 gate read (session 5f) at 6eb8b94 at 6eb8b9407092 returned ACCEPT with no p1. Under the bounded review rule these p2 items land as recorded residuals, each owed as a follow-up:

  • evidence/artifacts/new-wsl-install-plan-20261002/install-plan.json:4215 (owners[77] 'GPT Researcher and DeerFlow', slot research-harnesses, : The note still calls the committed config 'the measured session-80 values without the key: ...
  • evidence/artifacts/new-wsl-install-plan-20261002/README.md:279-283 and install-plan.json:2619 (owners[45] Alertmanager, slot alerting, field: Carried from r3, still not fixed.

🤖 Generated with Claude Code

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Oct 5, 2026
@seathatflowsinourveins
seathatflowsinourveins force-pushed the c5/round2-adoption-20261005b branch from e47ddc5 to 5f295f2 Compare October 5, 2026 03:19
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
…instead of refusing on any rules file

Repair round of #705 (one bounded round): 705d P1 (a failed listing of the rules directory read as no rules), 705d P2 (the refusal came after the
app-server started), 705d P2 (the scratch run accepted a failed evaluator as "no decision"), job-071 P2 (rules were reported only for a hook still to be
trusted) and P3 (approvals off do not switch execution rules off), and the command center's request that rules rtk never rewrites (#713's
hcom-deny.rules) must not block the trust step.

The tool now lists <codex home>/rules/*.rules as Codex's collect_policy_files does (a missing directory is no rules, any other error fails, a symlink is not
loaded), reads the prefix_rule literals with ast, and compares, with rtk hook check --agent codex and codex execpolicy check, the decision on each command
a rule names and on a sample of the 36 commands rtk 0.51.0 rewrites with the decision on the rewrite. It refuses --apply (exit 2, before the app-server
starts) only when a forbidden or prompt decision gets weaker or a step could not be done; --check exits 6 for a trusted hook beside such a rule, which the
post_install acceptance runs; --allow-exec-rules stays as the explicit acceptance. The plan's trust and check commands pass --rtk.

Evidence: plan_row_scratch_run.py (33 steps, real rtk 0.51.0 and codex-cli 0.159.3; the hcom rules proceed, a git push forbid rule without a twin is
refused, with its twin it proceeds, an unreadable directory is refused, a rule added after the grant makes --check exit 6); 58 unit tests with local
stand-ins for the two programs, checked by 14 mutants that each fail a test (rule_review_mutation_check.py). The decision record's addendum is rewritten,
including the correction that approvals off do not switch rules off.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
Fix PR #713 after the independent four-lens read: isolate hcom dispatch and
authorization, permit initial conformance checkout, verify installed telemetry
producer identity and actual gateway effort, verify Chrome through signed apt,
and give Inspect AI sole environment ownership. Restore source provenance,
amendment-4 removal safeguards and the five missing architecture cells.

Close native-client stdin, strengthen transport/scanner/import acceptance,
regenerate the public recipes and handbook, and record every finding in the
repair_round integration ledger. Preserve the stack, landscape and hcom deny
policy; leave evidence-registry publication to the coordinator.

Validation: plan, shell syntax, client configuration, regeneration, handbook
and ecosystem checks pass; 648 tests pass with 6 skips. Publication validation
reports only coordinator-owned registry drift. Three P3 findings remain
explicitly routed in the repair ledger.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the c5/round2-adoption-20261005b branch from 5f295f2 to 32f559a Compare October 5, 2026 05:29
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
…s Codex's allow-only format, and parse nothing (705f)

705f found five P1s and a P2 in the head-set version: a raw CR inside a triple-quoted token (Codex's Starlark lexer drops it, Python's reader
turns it into a newline), a rule on the whole shell argv for an assignment-prefixed script, the PHP tool spellings rtk normalizes
(phpunit.exe), user TOML filter regexes with a second branch, rtk's Unicode word boundary, and DirEntry.is_file() swallowing a missing-entry
error. Three analysing versions each modelled Codex's evaluator on one side and rtk's rewrite on the other, and every read found a place where
they differ. On 5f's recommendation the tool now decides nothing about what a rule means:

- a rule file of <codex home>/rules is accepted when its sha256 is on tools/adoption/exec_rules_reviewed.json (an exact-bytes review for one rtk
  version: `rtk --version` must match, `rtk config` must show transparent_prefixes = [] and the user TOML filters file must hold no filter) or
  when it holds nothing but allow rules in Codex's own format (amend.rs lines, hcom's own hcom.rules comment line, empty lines), byte for byte,
  none with a token `rtk` (the hook's rewrite inserts that word, so such a rule matches the rewritten command and not the original: codex-cli
  0.159.3 `execpolicy check` allows `rtk git push origin main` under ["rtk"] and gives no decision for `git push origin main`, a widened
  approval); anything else is an exposure: --apply refuses with exit 2 before the app-server starts, --check exits 6 for a trusted hook beside
  one, --allow-exec-rules accepts;
- the listing keeps the fail-closed repairs and asks every entry's type from its own lstat (stat(follow_symlinks=False) + S_ISREG), which raises
  for an entry that vanished; a symlink, directory or named pipe is not loaded and never opened;
- the list has one entry, #713's hcom-deny.rules at head 5f295f2, reviewed against the derived rewrite heads and the real binary (352 commands
  of its first tokens, none rewritten); the heads file moves to the e2e artifact folder as review evidence, and the check script reads it there.

Evidence: plan-row-scratch-run.json (70 steps, real rtk 0.51.0 and codex-cli 0.159.3: hcom bytes accepted, one added byte, a configured prefix and a
user filter refused, the 705e and 705f counterexamples and an allow rule that names rtk refused, allow-only files accepted);
rtk-rewrite-heads-check.json (94/94 patterns, 13,041 scanned commands, 8,884 spellings, 352 reviewed-entry commands, gaps 0); 79 unit tests
(synthetic; hcom's file is rebuilt from its installer's source lists) and 58 mutants all killed. Decision record, README, handbook paragraph,
F9 sentence, plan notes and the RTK row follow the design.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
…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>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
Fix PR #713 after the independent four-lens read: isolate hcom dispatch and
authorization, permit initial conformance checkout, verify installed telemetry
producer identity and actual gateway effort, verify Chrome through signed apt,
and give Inspect AI sole environment ownership. Restore source provenance,
amendment-4 removal safeguards and the five missing architecture cells.

Close native-client stdin, strengthen transport/scanner/import acceptance,
regenerate the public recipes and handbook, and record every finding in the
repair_round integration ledger. Preserve the stack, landscape and hcom deny
policy; leave evidence-registry publication to the coordinator.

Validation: plan, shell syntax, client configuration, regeneration, handbook
and ecosystem checks pass; 648 tests pass with 6 skips. Publication validation
reports only coordinator-owned registry drift. Three P3 findings remain
explicitly routed in the repair ledger.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the c5/round2-adoption-20261005b branch from 32f559a to 7fbe586 Compare October 5, 2026 06:57
@seathatflowsinourveins
seathatflowsinourveins marked this pull request as ready for review October 5, 2026 07:15
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
…54ee, comments and justification strings only)

#713 narrowed the comments and the four justification strings of config/hcom-deny.rules (head 7fbe586; 845f06b0 at 5f295f2). The other 25 lines,
the patterns, decisions and match/not_match lists, are identical (compared without comment and justification lines), so the first review carries
over, but the list is by exact bytes: the entry now holds ac6254ee9bb7ac20deca69bb03bead76dacbe4e53a41cbc563a8b3614fa6a6aa, the kept copy
fixtures/hcom-deny.rules is the 7fbe586 file, the real-binary check was re-run (352 commands of the entry's first tokens, none rewritten) and so
was the plan-row scratch run (70 steps, all as expected, with the new bytes).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
…713 repair round 2

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
Fix PR #713 after the independent four-lens read: isolate hcom dispatch and
authorization, permit initial conformance checkout, verify installed telemetry
producer identity and actual gateway effort, verify Chrome through signed apt,
and give Inspect AI sole environment ownership. Restore source provenance,
amendment-4 removal safeguards and the five missing architecture cells.

Close native-client stdin, strengthen transport/scanner/import acceptance,
regenerate the public recipes and handbook, and record every finding in the
repair_round integration ledger. Preserve the stack, landscape and hcom deny
policy; leave evidence-registry publication to the coordinator.

Validation: plan, shell syntax, client configuration, regeneration, handbook
and ecosystem checks pass; 648 tests pass with 6 skips. Publication validation
reports only coordinator-owned registry drift. Three P3 findings remain
explicitly routed in the repair ledger.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the c5/round2-adoption-20261005b branch from 7fbe586 to cde8a0d Compare October 5, 2026 08:00
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
Fix PR #713 after the independent four-lens read: isolate hcom dispatch and
authorization, permit initial conformance checkout, verify installed telemetry
producer identity and actual gateway effort, verify Chrome through signed apt,
and give Inspect AI sole environment ownership. Restore source provenance,
amendment-4 removal safeguards and the five missing architecture cells.

Close native-client stdin, strengthen transport/scanner/import acceptance,
regenerate the public recipes and handbook, and record every finding in the
repair_round integration ledger. Preserve the stack, landscape and hcom deny
policy; leave evidence-registry publication to the coordinator.

Validation: plan, shell syntax, client configuration, regeneration, handbook
and ecosystem checks pass; 648 tests pass with 6 skips. Publication validation
reports only coordinator-owned registry drift. Three P3 findings remain
explicitly routed in the repair ledger.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the c5/round2-adoption-20261005b branch from cde8a0d to 6eb8b94 Compare October 5, 2026 13:55
seathatflowsinourveins added a commit that referenced this pull request Oct 5, 2026
…(second of two; the user's relayed pointer yes) (#705)

### Scope

- Second of the two pull requests of `docs/decisions/2026-10-04-codex-rtk-hook-qualified.md` (the first, #701, landed as `287514581`; this branch was based on main `4c897418f`, after #699 and #704, and carries main `4af7417b7`, after #720, #712, #696 and #724, as a merge commit). The install plan's `command-output` row now installs RTK's Codex PreToolUse hook with upstream's own command and trusts it:
  1. two commands after the existing four: `rtk init -g --codex`, then `python3 tools/adoption/codex_hook_trust.py --command "rtk hook codex" --apply`;
  2. its post_install acceptance gains the two Global `[ok]` lines of `rtk init --show --codex` and `codex_hook_trust.py --check`; a new after_sign_in acceptance runs a fresh `codex exec` told to add no prefix and requires the first `rtk git status` command item to have `exit_code == 0` and `status == "completed"` (review thread 1; **UNRUN**: the model call needs the sign-in);
  3. the trust tool's execution-rule review and `--check`. Codex rewrites a call to `rtk <command>` before it matches execution rules on the command words, so a `forbidden` or `prompt` rule on a command rtk can rewrite no longer matches it, and the rewrite space is not finite (env prefixes, global options such as `git -C`, absolute paths, wrappers, PHP tool spellings, user filters and Unicode word boundaries all change what rtk rewrites, and the rewrite changes words after `rtk` too: `cat f` becomes `rtk read f`). Three GPT reads each found a bypass in an analysing version of the review, so the tool now **parses nothing** (the design 5f recommended after 705f): it reads each regular `*.rules` file of `<codex home>/rules` as bytes and accepts it only if (1) its sha256 is on `tools/adoption/exec_rules_reviewed.json`, an exact-bytes review for one rtk version (`rtk --version` must match the entry, `rtk config` must show `transparent_prefixes = []`, `rtk trust --list` must say `No trusted filters.`, `RTK_TRUST_PROJECT_FILTERS` must be unset, the user TOML filters file beside rtk's config must hold no filter; today one entry, #713's `hcom-deny.rules` at head `7fbe586f3`, sha256 `ac6254ee…`, after its repair round 2 changed comments and justification strings only), or (2) it holds nothing but allow rules in Codex's own format byte for byte (the lines `amend.rs` writes, hcom's own `hcom.rules` with its one comment line, empty lines), none containing the letters `rtk` anywhere (the rewrite inserts that word, as a token or inside a shell-script token, so such a rule matches the rewritten command and not the original: codex-cli 0.159.3 `execpolicy check` allows `rtk git push origin main` under `["rtk"]`, and the script token `FOO=1 rtk git push origin main` under `["/bin/bash", "-lc", ...]`, and gives no decision for the originals; 705g P1-1). Anything else is an exposure: `--apply` refuses with exit 2 before the app-server starts (so before any write, even for an already trusted hook), `--check` exits 6 for a trusted hook beside one (so the post_install acceptance catches a rule file added or edited after the grant), `--allow-exec-rules` accepts it. The listing is Codex's `collect_policy_files` mirrored fail-closed (only opening the directory may report it missing; each entry's type comes from its own `lstat`, so an entry that vanished raises; a symlink, directory or named pipe is not loaded and never opened). `--check` exits 0 only while every named hook is trusted and no rule file is exposed, 5 when a hook is not trusted, 4 when none matches, 6 when it is trusted beside an exposure; mutually exclusive with `--apply`, no edit, no backup. The plan's trust and check commands pass `--rtk "$e/bin/rtk"`. 81 unit tests (local stand-ins for the app-server and for `rtk --version`, `rtk config` and `rtk trust --list`), 63 mutants each failing one;
  4. text that follows the row: the plan README sentence, the token session handbook paragraph (Codex runs RTK through the hook, and the exclusions are what make it leave `git show REV:path`, `diff`, `jq` and `git branch` alone), a dated note on the RTK card (cards are dated editions), the F9 recipe sentence and its owner-list test (`command-output` joins the after-sign-in owners), the new-WSL profile (`adoption/new-wsl-profile.{json,md}`), the definitive manifest and the consensus record it copies, which no longer say that `rtk init --global --codex` is never run (review thread 2; the manifest's declared consensus digest follows), the regenerated new-WSL handbook and its receipt's digests (the `wsl-new-distro-image` convergence record needs no re-pin: #704 freezes copies of the recipe and its test); the F9 owner list is #704's, with `command-output` added;
  5. the decision record's addendum, which quotes the user's answer **as relayed by the command center**: "yes for rtk pointer" (00:49:16Z in the command center's transcript, part of a longer message), and a standing rule,  "for the practice like rtk, always proceed with sota convergence highest quality practice with upstream repos" (00:50:08Z, a queued message; the command center first relayed both as "about 00:55Z", an estimate, and corrected the times). The writing session heard neither; both rest on that relay, which the user may withdraw. The answer covers what `rtk init -g --codex` does beyond the hook (RTK.md and an inert `@<Codex home>/RTK.md` pointer line in the Codex `AGENTS.md`; there is no hook-only mode with `--codex`), and a second addendum answering review thread 3: Codex rewrites the call before approval and matches execution rules on the rewritten words, rtk rewrites 36 of 55 measured commands including mutating ones, and rtk has no allow-list, so the trust step is guarded instead of limited (sources at both Codex pins and rtk 0.51.0, alternatives and the untested boundary in the record).
- Base commit: `4af7417b7` (main after #720, #712, #696 and #724; the branch's own base was `4c897418f`)
- Lane: `lane:foundation`
- Owned paths touched: `evidence/artifacts/new-wsl-install-plan-20261002/{install-plan.json,install.sh,accept.sh,README.md}`, `evidence/artifacts/token-stack-fresh-session-e2e-20261004/**` (README, the scratch-run script and its output, `fixtures/hcom-deny.rules`, the mutation check, the heads derivation, its binary check and the heads file `rtk-rewrite-heads.json`, now review evidence beside them), `tools/adoption/exec_rules_reviewed.json`, `evidence/artifacts/new-wsl-handbook-20261001/receipt.json`, `docs/{token-session-handbook.md,token-efficiency-stack.json,new-wsl-handbook.json,new-wsl-handbook.md}`, `adoption/new-wsl-profile.{json,md}`, `evidence/artifacts/new-wsl-definitive-defaults-20261001/definitive-manifest.json`, `evidence/artifacts/new-wsl-layer-consensus-20261002/consensus.json`, `docs/decisions/2026-10-04-codex-rtk-hook-qualified.md`, `adoption/platforms/linux-wsl2-new-distro.md`, `tools/adoption/codex_hook_trust.py`, the tests, and `manifests/evidence.json` (last commit, `registry:`). Nothing is installed or trusted on any host by this change.

### SOTA sources

- RTK: rtk-ai/rtk v0.51.0 at `e001f773f80b22b7dc4c7a79521b30e35aaef026`, `README.md` L133 (`rtk init -g --codex`), the installed `rtk init --help` (`--codex`: "uses PreToolUse hook + AGENTS.md + RTK.md"; `--hook-only`, `--no-patch` and `--auto-patch` refused with it), `rtk init --show --codex` and `rtk-init-codex-probe.json`.
- Codex hook trust: openai/codex rust-v0.159.3, commit `01fc69f4026735edfdf6789820549727a4867b11`, `codex-rs/tui/src/hooks_rpc.rs` L58-L91 (`write_hook_trusts`: the `/hooks` review persists trust with `config/batchWrite` of `hooks.state`) and `codex-rs/hooks/src/engine/discovery.rs` L775-L815 (hash and status), which `codex_hook_trust.py` reproduces.
- Codex hook dispatch and approval (review thread 3), identical lines at rust-v0.159.3 `01fc69f40267` and rust-v0.160.0 `a956835d0207`: `codex-rs/core/src/tools/registry.rs` L603-L660 (PreToolUse hook, `invocation = updated_invocation` L632, handler L689), `codex-rs/core/src/exec_policy.rs` L327-L420 and L770-L850 (rules matched on the command words; unmatched fallback), `codex-rs/shell-command/src/command_safety/is_dangerous_command.rs` L133-L143 (forced `rm`, unwrapping `sudo` and `env`), `codex-rs/hooks/src/events/pre_tool_use.rs` L357 and L388-L405, and `codex-rs/exec/src/exec_events.rs` L151-L166 (`CommandExecutionItem`: `exit_code`, `status`); `codex execpolicy check`, Codex's own rule evaluator.
- Execution-rule review, rust-v0.160.0 `a956835d0207`: `codex-rs/core/src/exec_policy.rs` L1121-L1170 (`collect_policy_files`: only opening the directory may report it missing, errors on the iteration and on an entry's file type propagate, every entry's type is asked before its extension, symlinks are not loaded), L645-L660 (`load_exec_policy_with_warning`: a parse error in any rules file makes Codex load no file rules), `codex-rs/execpolicy/src/amend.rs` (`blocking_append_allow_prefix_rule`: the format of the allow-only `default.rules`), `codex-rs/execpolicy/README.md` (`prefix_rule` and `host_executable` builtins, strictest decision wins). The 705f counterexamples rest on: `codex-rs/execpolicy/src/parser.rs` L64 and facebook/starlark-rust `starlark_syntax/src/lexer.rs` L415 at `0c8d107ab963` (a raw CR inside a string is dropped), `codex-rs/shell-command/src/bash.rs` L492, `codex-rs/core/src/exec_policy.rs` L876 and `codex-rs/core/src/shell.rs` L22 (assignment-prefixed scripts fall back to the whole shell argv); rtk v0.51.0 `e001f773f80b`: `src/discover/registry.rs` L393-L418 and L1811 (PHP tool normalization), `src/core/toml_filter.rs` L199-L227 and L456-L495 (filters load only while trusted; trusted user filters keep the complete pattern, alternative branches allowed), `src/hooks/trust.rs` L51-L166 and `run_trust` (the global trust store, `rtk trust --list`, and the `RTK_TRUST_PROJECT_FILTERS` + CI override), `src/discover/registry.rs` L1743-L1763 (`exclude_commands` is applied before the TOML-filter rewrite), `src/filters/gcc.toml` L3 and the rust-lang/regex word-class contract (Unicode `\b`), `src/discover/rules.rs` (94 `RULES` patterns, each `^`-anchored), `src/discover/registry.rs` L64 (`ENV_PREFIX`), L194-L215 (`classify_command` normalization), L438 and L568 (global options, absolute paths), L1386-L1498 (`PROCESS_WRAPPERS`, shell keywords, `uv run`), L1743-L1760 (the TOML filters are a second rewrite source), `src/filters/*.toml` (62 builtin filters), `src/core/config.rs` L119-L145 (`transparent_prefixes`), `src/main.rs` L3072-L3100 (`rtk hook check`: exit 0 with the rewrite, exit 1 with `No rewrite for:`) and `rtk config`'s output (`show_config`). hcom's own rule file (aannoo/hcom `7151660a3`): `src/hooks/codex.rs` `build_codex_rules` L1508-L1534 and `HCOM_TOOL_NAMES` L578-L585, `src/hooks/common.rs` `SAFE_HCOM_COMMANDS` L52-L72.
- rtk v0.51.0 `e001f773f80b`: `hooks/codex/README.md` L14-L24 (the rewrite precedes Codex's approval and sandbox checks), `src/hooks/permissions.rs` L64-L72 (no Codex rule source), `src/core/config.rs` L119-L123 and `src/discover/registry.rs` L1548-L1582 (`exclude_commands` is exclusion-only), `rtk hook check --agent codex`.
- Codex expands no `@` reference in `AGENTS.md`: `docs/token-efficiency-stack.md`, citing `codex-rs/codex-home/src/instructions/mod.rs` at rust-v0.157.1.
- The plan's own conventions: `check_plan.py` (commands, acceptance and scripts agree), the hot-file protocol of `docs/lanes.md`, and #694's re-pin of the recipe-freezing convergence record.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| The row's steps, read from `install-plan.json` and run in scratch HOMEs with rtk 0.51.0 and codex app-server 0.159.3: `--check` exit 4 before the hook exists; `rtk init -g --codex` 0 (the hook lands at `pre_tool_use:1:0`, after a memory hook's group); `--check` 5 before the trust; the trust 0 ("read back from hooks/list by key and hash"); the post_install program 0; and nineteen homes for the rule review: #713's `hcom-deny.rules` by its exact bytes lets the trust proceed, and a `git push` rule added after the grant makes `--check` exit 6 and the trust refuse; the same bytes plus one comment line, a configured rtk transparent prefix, a user TOML filter beside the reviewed file, a trusted project filter and the CI override variable `RTK_TRUST_PROJECT_FILTERS` (the last two each make the real rtk rewrite `hcom kill luna`, recorded before and after, and with rtk exclusions for `hcom` and `uvx hcom` in its config the same filters leave both commands alone) are each refused; Codex's `default.rules` format and hcom's `hcom.rules` format let the trust proceed; a `git push` forbid rule is refused (exit 2, nothing written; `--check` 5), accepted with `--allow-exec-rules`, after which `--check` exits 6; the same rule with its `rtk git push` twin is still refused; the counterexamples of 705e (`git -C .`, broad `uv` and `npx`, the nested `host_executable` file, under which the real codex evaluator forbids `git push origin main`) and of 705f (a raw CR in a token, a `bash -lc` script rule, `phpunit.exe`, `g++` plus a combining mark, each of which the real rtk rewrites or the real evaluator reads differently), an allow rule that holds `rtk` (the evaluator allows `rtk git push origin main` under `["rtk"]` and the script token `FOO=1 rtk git push origin main` under a `bash -lc` rule, and gives no decision for the originals; the real hook produces the second from `FOO=1 git push origin main`) and an unreadable rules directory are refused (79 steps, all as expected) | `local_integration`: one run, one host | `plan_row_scratch_run.py`; `plan-row-scratch-run.json` (the trust command carries `--codex-process-name no-such-process-name` because other codex processes ran on the host; recorded in the file) |
| The after_sign_in filter and test, taken from the plan's own text, over six streams in the shape of Codex's JSONL command item: the good one (`rtk git status`, exit 0, completed) ends 0, and five negative fixtures (exit 127, completed with exit 1, declined, no rtk prefix, no command item) end 1 | `synthetic` | same file, the six after_sign_in steps |
| The after_sign_in check with a real fresh `codex exec` and a signed-in launcher | **not run** | untested boundary: the host step after the sign-in; the earlier arms R1 and R2 of `codex_hook_qual.py` showed the same prefix through the gateway route |
| `--check` and the review, with local stand-ins for the app-server and for `rtk --version` and `rtk config` (`FakeRtk`): `--check` 0 when trusted and no rule file is exposed, 5 untrusted or modified, 4 none matches, 6 trusted beside an exposure; no edit and no backup; `--apply` refused with exit 2 before the app-server starts (no `AppServer` call, no backup, no write) for every counterexample above, a reviewed file with one changed byte, another rtk version, a failing rtk, config or trust-list command, a configured prefix, a trusted filter, the override variable or a user filter, a missing or malformed reviewed list, an unreadable file, and 29 near-misses of the allow-only grammar (a prompt line, CRLF, a tab, an escape, a non-ASCII byte, a justification, alternatives, a second statement, ...); accepted: the reviewed bytes under another name, Codex's and hcom's allow-only files (hcom's rebuilt from its installer's source lists), empty and comment-only files, tokens that merely contain the letters `rtk`; a listing in which an entry vanished, an iteration or an open raised, or a path that is a file is refused, while a symlink, directory or named pipe is not loaded (the pipe is never opened) | `synthetic` (fake app-server, fake rtk, fake `scandir`) | `tests/test_codex_hook_trust.py` (81 tests) |
| The reviewed entry rests on the real rtk 0.51.0: the derived heads (`rtk-rewrite-heads.json`, 142 from the 94 RULES patterns and 62 builtin TOML filters, the wrappers and the env prefix) agree with the binary: a positive control for each of the 94 patterns, 13,041 scanned commands (1,449 names, 9 argument shapes) with 623 rewrites and none outside the heads, 67 wrapper prefixes in front of `git status` (24 rewritten, all led by a head), 8,884 spellings of the 101 literal heads with 480 rewrites and none outside the heads; and the entry's own first tokens `hcom` and `uvx` in 22 spellings and 8 shapes (352 commands) are never rewritten. The derivation had 101 gaps in the first scan (the `r#"..."#` sbt rule, the TOML filters, `\b` continuations such as `gcc-13`), now 0. Review evidence, not a gate: the tool reads neither file | `local_integration` (the scan can falsify the review, not prove it) | `derive_rtk_rewrite_heads.py`, `check_rtk_rewrite_heads.py`; `rtk-rewrite-heads-check.json` |
| The tests discriminate: 63 mutants (listing: a `FileNotFoundError` on an entry or the iteration or an open error read as no rules, the extension before the file type, a followed symlink, a named pipe loaded, any name ending in `rules`, an unsorted listing; grammar: a prompt rule, a quote, a backslash, a tab or CR in a token or comment, trailing text, `any` for `all`, no empty lines, any comment, spacing, an empty pattern, an allow rule that holds `rtk` in four variants (a token after a wrapper, whole-token only, inside a shell-script token, only a leading token); the reviewed list: a malformed, uppercase or over-long hash, a malformed list read as empty or not blocking, the list read with no rule file; the decision: every file reviewed, every file allow-only, an unreadable file not blocking, rtk asked for allow-only files; rtk conditions: the version gate, exit statuses, the `Config:` line, transparent prefixes, the trust list (ignored, exit status ignored, matched loosely), the override variable (ignored, only the value 1), user filters, the schema line, comments, an unreadable or non-UTF-8 filters file, no rtk, no PATH lookup, telemetry, a terminal, no time limit; the flow: `--apply` not refusing, the flag accepting nothing or not accepting, `--check` ignoring an exposure or answering 6 before 5, `--rtk` not passed, no dry-run note) each fail at least one test; the tests were written after the code, so this is the check that they are not vacuous | `local_integration` | `rule_review_mutation_check.py`; `rule-review-mutation-check.txt` |
| Codex applies the hook's rewrite before approval and matches execution rules on the rewritten words: with a rule forbidding `git push` and one prompting `git commit`, `git push` is `forbidden` and `git commit` is `prompt`, while `rtk git push` and `rtk git commit` get no decision (each answer needs exit 0 and a valid response) | `local_integration` (Codex's own evaluator, codex-cli 0.159.3) and `source_review` for the dispatch order at both pins | `plan-row-scratch-run.json`, `execpolicy_check`; the decision record's addendum |
| rtk 0.51.0 rewrites mutating commands: 36 of 55 measured, among them `git push`, `git commit`, `gh pr merge`, `docker run`, `pip install`, `rsync --delete`; 19 are not (`git reset --hard`, `rm -rf`, `npm publish`, `terraform apply` and others); the five `exclude_commands` change none of these | `local_integration`: one run, one host | `rtk_behaviour_probe.py`; `rtk-behaviour-probe.json`, `codex_hook_check` |
| A live Codex session with a forbidding execution rule and the hook active | **not run** | untested boundary: derived from the dispatch order and the evaluator above; project and managed rule layers are not visible to the tool; `RTK_TRUST_PROJECT_FILTERS` is checked in the tool's own environment, not in the one Codex runs the hook in, and a filter trusted after the review shows at the next `--check` (705g P1-2: a point-in-time check cannot establish what a global hook does in every working directory; the exclusions of alternative (j) are the enforced hardening and are not enforced here); the reviewed list covers rtk's default hook configuration of one version; hcom's installer itself was not run (its file is rebuilt from its source) |
| `install-plan.json`, `install.sh` and `accept.sh` agree | `local_integration` | `check_plan.py`: 80 rows, 163 commands, 101 acceptance entries (with #704's rows) |
| The generated handbook and its receipt follow the edited recipe, and the convergence record stays valid without a re-pin | `local_integration` | `build_new_wsl_handbook.py --check` 0; `test_new_wsl_handbook` OK; `validate_convergence.py --all-recorded` 0 |
| The user's yes for the pointer and the standing rule | relayed, not heard | the decision record's addendum |

### Local commands run

```
$ python3 scripts/validate.py ; python3 scripts/validate_convergence.py --all-recorded
exit 0 ; exit 0
$ python3 -B evidence/artifacts/new-wsl-install-plan-20261002/check_plan.py
OK: 80 rows ... 163 commands and 101 acceptance entries agree with the scripts
$ python3 -B scripts/build_new_wsl_handbook.py --check
exit 0
$ python3 -B -m unittest <24 modules that name a changed file>
Ran 1028 tests ... OK (skipped=2) (17 modules that name a changed file, on the merged head; 1522 tests in 24 modules before the merge)
$ python3 evidence/artifacts/token-stack-fresh-session-e2e-20261004/plan_row_scratch_run.py <outfile>
79 steps, all as expected
$ python3 evidence/artifacts/token-stack-fresh-session-e2e-20261004/rule_review_mutation_check.py
63 mutants, survivors: []
$ gitleaks detect --log-opts="4c897418f..HEAD"
no leaks found
```

### Decision record

`docs/decisions/2026-10-04-codex-rtk-hook-qualified.md` gains the 2026-10-05 addendum (the relayed answer, its effect, and the one-command undo: `rtk init -g --codex --uninstall` removes the hook, `RTK.md` and the pointer together), its Residuals sentence now says the user approved the pointer edit, and a second addendum, "approval and execution rules": five sourced findings (item 5 corrected: approvals off do not switch execution rules off, and NativeStack2604 has no user-layer `rules` directory), the decision (the hash-list rule above, why three analysing versions failed, the reviewed list and its conditions, **the pin-move rule: a move of the rtk pin re-reviews the list**, tied to the RTK row of `docs/token-efficiency-stack.json`), the evidence, the limits and what would overturn it, the review rounds, and ten alternatives (an `exclude_commands` read-only limit, whose probe shows `git -C /tmp push` still rewritten; a never-rewrites-mutating proof; holding the hook out; shipping `rtk` rules; refusing on any rules file; the probe-and-sample review; a wrapper hook; derived heads with a parser; a purpose-written parser; (j) enforced `exclude_commands` entries for `hcom` and `uvx hcom`, measured and not enforced, with why).

### Review threads

Three Codex-connector threads, each answered with its fix and source in the thread and resolved at head 4739ea8: after_sign_in exit status (`accept.sh`), the profile's "never runs `rtk init`" statement (`install.sh` L446), and approval classification against the rewrite (`install.sh` L448).

Cross-family reads of the guard, four versions: 4739ea8 (refuse on any rules file) was read by 705d (Sol, through 5f: P1 a failed listing of the rules directory read as no rules, P2 the refusal came after the app-server started, P2 the scratch run accepted a failed evaluator) and job-071 (through the command center: P2 the same listing hole, P2 rules reported only for a hook still to be trusted, P3 the claim that approvals-off hosts consult no rules). `e6321c0b8` (a behavioural review with `rtk hook check` and `codex execpolicy check`) was read by 705e: three P1s that sampling cannot close (an entry-level `FileNotFoundError`, a `prefix_rule` nested in a `host_executable` argument, extensions of a prefix rtk leaves alone). `c771da9eb` (heads derived from rtk's source and a literal-only `ast` reader) was read by 705f: five P1s (a raw CR in a Starlark string, a rule on the whole shell argv, PHP tool suffix spellings, user filter regexes with a second branch, Unicode word boundaries) and a P2 (`DirEntry.is_file()` swallows a missing entry). `3a2bb97ba` (content `2d052a659`) replaced the analysis with the hash list on 5f's recommendation and added one exclusion found while checking the design against the real evaluator: an allow rule that names `rtk`. 705g (Sol, through 5f, at `3a2bb97ba`) found two P1s and no P2 in it: (P1-1) the exclusion refused only a whole token `rtk`, but Codex evaluates an assignment-prefixed script as one token of the shell argv and the hook inserts `rtk` inside it, so `["/bin/bash", "-lc", "FOO=1 rtk git push origin main"]` allowed the rewritten script and not the original; (P1-2) project filters, which rtk loads from the hook's working directory and which `rtk trust --yes` or `RTK_TRUST_PROJECT_FILTERS=1` with a CI variable activate, rewrote `hcom kill luna` out of the reviewed forbid rules while the reviewed hash still passed. This head's repair (`b7f758768`, registry `1b8d4c074`; merge of main `9080bc324`) repairs both in one bounded round: `rtk` is refused anywhere in an allow rule (regression cases, a whole-token mutant, a scratch home); the reviewed-file conditions also need an empty `rtk trust --list` and no `RTK_TRUST_PROJECT_FILTERS` (the reviewer's second option: classify the exposure so that it needs `--allow-exec-rules`), with rtk's exclusions measured as the enforced alternative and recorded, not enforced. It also follows #713's repair round 2 (the entry holds `ac6254ee…`, the 7fbe586 bytes; only comments and justification strings differ from 5f295f2).

705h (Sol, through 5f, at `14a8b119f`; verdict `verdict-705h.json`) **ACCEPTed**: no P1 and no P2. Both 705g P1s were verified fixed against the real binaries (a lowercase `rtk` anywhere in an allow line is refused, and the whole-token mutant dies with 36 test failures; the trust list and the override variable classify both project-filter activation routes, `--apply` exit 2 and `--check` exit 6, with the default and the XDG layouts, and `rtk trust --list` detected the filter from another directory), and no additional bypass was found in the pinned rewrite paths and inputs. Two boundaries stay not verified and are recorded as residuals: runtime coverage (codex-cli 0.159.3 and rtk 0.51.0 were probed, rust-v0.160.0 was read from source, no fresh model session) and the point-in-time and environment limits (the classification observes the current user-layer rule bytes and the tool process's RTK environment and trust store; no atomic snapshot across listing, loading and the grant, and no enforcement after a later change of rules, filters, HOME or XDG paths or the hook's environment; project and managed Codex policies are outside its scope).

### Merge of main

`9080bc324` merges main `4af7417b7` (#720 re-pin to v2026.10.05.1, #712, #696, #724) into the branch. Conflicts were only in the generated and hot files (`docs/new-wsl-handbook.md`, the handbook receipt, `manifests/evidence.json`), resolved by the hot-file protocol of `docs/lanes.md`: main's copies, the branch's 44 registry entries re-registered from the pre-merge snapshot, the handbook regenerated with main's generator (#724), the receipt digests refreshed. Carry check: of every file this PR changes against its old base, only `docs/new-wsl-handbook.{json,md}`, the receipt and `manifests/evidence.json` differ between the pre-merge head `1b8d4c074` and the merge head (`git diff 1b8d4c0 <merge head> -- <the PR's files>`); the 705g repairs are `3a2bb97ba..1b8d4c0`. The merged tree failed two tests of main's new rules, fixed in `a7990f56a` (registry `14a8b119f`): the F9 unit says `tools/adoption/exec_rules_reviewed.json` was added after `v2026.10.05.1` (main's unreleased-path marker rule, #720), and the receipt's frozen profile digest is the branch's (the merge took main's receipt); the handbook and the receipt follow.

### Host evidence

No files under `evidence/hosts/` change. The scratch run used a scratch HOME; the live `~/.codex` and rtk configuration were neither read nor written.

### Checklist

- [x] No new or changed GitHub Actions or workflows.
- [x] No secrets printed, logged or committed (gitleaks above).
- [x] No new paid hosting, subscription or billing surface.
- [x] Peer-owned untracked files and worktrees preserved.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Scout and others added 7 commits October 5, 2026 11:16
…e (coordinator batch, decision record, sanitized extracts)

Consensus batch wave5 (amendment 4) on the owner's 2026-10-04 repository-quality rule: owner defaults
on the split rows agent-messaging (hcom 0.7.27, the cross-client transport under the converged
2026-10-03 posture) and playwright-cli (Chrome DevTools MCP 1.10.1), and new rows lm-program-optimization
(DSPy 3.4.0), skill-vetting (SkillSpector 2.12.0), mcp-protocol-conformance (conformance suite) and
trajectory-analysis (Inspect Scout 0.5.3). The owner decided the rule; decide round 2 and its Opus
verification named the tools (docs/decisions/2026-10-04-final-architecture-round2.md). Sanitized
extracts: round-2 verdicts and the landscape round (all ten jobs keep their existing owners); one token
vendor's name and prefix are elided as the secret scanner's keywords.

check_plan.py reports the 7 plan rows the builders add next (one group each); this commit is the
coordinator base for them.

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

G1 (GPT builder, job r2-g1-messaging): installs hcom 0.7.27 with its
checksum-verifying upstream installer. It applies the accepted native deny
rules and peer-message hints through the new-WSL client-config map,
qualifies the Codex forbidden rules with Codex's native checker, and keeps
the no-wrapper Claude posture and its receive limitation.

G3 (GPT builder, job r2-g3-tools) adds:
- DSPy 3.4.0 with GEPA 0.1.4 in a dedicated uv project;
- the SkillSpector CLI at tag commit c7958a32;
- Inspect Scout 0.5.3 in the existing Inspect AI owner environment;
- MCP conformance 0.2.0-alpha.11 through on-demand npx until the alpha.12
  cooldown clears.
Provider sign-in, the selected local transcripts and MCP destinations are
recorded as needs_user.

The coordinator applied both patches onto #704's head plus the wave-5
batch. The only conflicts were in the plan README and SOURCES, where both
builders appended sections; they are kept in order (G1, then G3).
Integration (owners.json, shared counts, the G2 and G4 rows) follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolve the browser and gateway conflicts against the fixed round-2 owners.
Wire Chrome DevTools MCP 1.10.1 through the destination client map in both
native clients, retaining the host agent-browser reference and the host stack
bytes. Select published OmniRoute 3.8.51, preserve the tool_root composition
binding for carried prefixes, and require the selected release identity.
Integrate Harbor telemetry, Promptfoo skill verification and research routing.

Regenerate the owner inventory and shared projections with their original
tools. Update strict wave-5 tests from the recorded decision/consensus, retain
prior decisions under overturned, and record every conflict or deviation in
integration-resolutions.json.

SOTA sources:
- this PR:docs/decisions/2026-10-04-final-architecture-round2.md:23-38
- this PR:evidence/artifacts/new-wsl-layer-consensus-20261002/consensus.json:1308
- main PR #637:docs/decisions/2026-10-03-omniroute-3851-pin.md:108
- ChromeDevTools/chrome-devtools-mcp@e52c6b5:docs/client-configurations.md:71,109
- diegosouzapw/OmniRoute@c1e30b7:bin/cli/commands/doctor.mjs:632
- harbor-framework/harbor@1e5c5c6:tests/unit/test_trajectory_validator.py:1

Validation:
- check_plan: 84 rows, 63 selected (60 default, 3 named), 2 measurement-only,
  19 excluded, 186 commands, 111 acceptance entries; zero problems.
- Shell syntax, client-map, handbook and ecosystem checks pass; the ecosystem
  reports 23 preserved historical pin drifts.
- Required seven-module unittest suite: 542 tests, 536 passed, 6 skipped.
- validate.py: exit 1 with registry drift only; registry reconciliation is
  coordinator-owned. git diff --check passes.

No destination install, upstream runtime acceptance or model/GPU run is
claimed. The shared gateway effort comment, host-currency moves, OpenHands
telemetry producer reconciliation and evidence registry remain with their
owners. Working-tree edits only; the coordinator stages and commits.

Integrated by GPT bounded job r2-integrate (GPT-6.1 Sol at max) on the coordinator-applied G1/G3 commit and the G2/G4 patches; the coordinator commits and registers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he withdrawn host pin moves (job-065 P3)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(playwright-cli, harbor runner, lm-program-optimization, skill-vetting, trajectory-analysis, mcp-protocol-conformance)

The two StageTwoTests compare the F9 sentence and their expected list with the plan's after-sign-in rows; this
PR's wave-5 rows added six. The handbook and its receipt are regenerated for the recipe's new pinned digest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix PR #713 after the independent four-lens read: isolate hcom dispatch and
authorization, permit initial conformance checkout, verify installed telemetry
producer identity and actual gateway effort, verify Chrome through signed apt,
and give Inspect AI sole environment ownership. Restore source provenance,
amendment-4 removal safeguards and the five missing architecture cells.

Close native-client stdin, strengthen transport/scanner/import acceptance,
regenerate the public recipes and handbook, and record every finding in the
repair_round integration ledger. Preserve the stack, landscape and hcom deny
policy; leave evidence-registry publication to the coordinator.

Validation: plan, shell syntax, client configuration, regeneration, handbook
and ecosystem checks pass; 648 tests pass with 6 skips. Publication validation
reports only coordinator-owned registry drift. Three P3 findings remain
explicitly routed in the repair ledger.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Use per-run OmniRoute session-id headers and default metadata observations,
with bounded paging and explicit limits on effort and fallback attribution.
Accept indented Claude MCP fields, preserve alerting needs_user semantics,
refresh reviewed hcom rule copies, and feed the cross-family review its diff.

Install current Chrome stable through the fingerprint-checked Signed-By
repository, suppress package-managed source collisions, record its version,
and accept the Google origin plus a minimum build. Compare the declared
privileged program with the actual helper.

Close the three named leftovers, retain sanitized source/measurement receipts,
and attribute Sol/max to the coordinator brief. Keep accepted R2-20/R2-27
handoffs in repair_round_2. Evidence registry reconciliation stays with
the coordinator; no live installation or provider acceptance is claimed.

Validation: check_plan (0 problems), all shell syntax checks, handbook and
ecosystem checks pass. Five new-WSL unittest modules: 460 tests, OK.
validate.py exits 1 for registry drift only (17 hashes, 12 byte counts,
1 new unlisted source receipt); manifests/evidence.json is coordinator-owned.
git diff --check passes; protected files and git index are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Scout and others added 7 commits October 5, 2026 11:17
… (#724's generator change); receipt records the regeneration

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reverse R2-22's ntfy-only restriction using main f946c6d/77d7516d8.
Restore webhook/ntfy, Telegram and on-host mode validation and private
pointer mapping; retain native templates, receiver counters, metadata-only
checks and N3's needs_user (78) handling.

Record ntfy as the coordinator's delegated 2026-10-04 pick and Telegram as
the user's accepted NativeStack2604 receiver on 2026-10-05 about 06:58Z,
with coordinator-reported main 4c89741 acceptance. Preserve the other
round-1 and round-2 repairs and regenerate the handbook.

Add local controls for every supported receiver and absent pointer files;
no credential values or new live delivery acceptance are recorded.

Validation: plan (0 problems), shell syntax, ecosystem and handbook checks
passed; five-module suite passed 463 tests. Publication validation reports
registry drift only; the coordinator-owned evidence registry is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Record a dated compatibility amendment for the retained session-80 profile
and #637's source-backed OmniRoute 3.8.51 route. Bind tests to the baseline
and exact configuration hashes without claiming a new measurement. Update
the static header and preflight assertion to the already-correct
per-run x-omniroute-session-id header.

Use grep -E for only the Chrome Signed-By and Claude MCP registration
checks, preserving their patterns and existing negative controls; synchronize
install-plan.json. Retain all other rg uses and previous repair behavior.

Reproduce and verify the four CI failures with rg absent from PATH.

Validation with rg absent from PATH: all six requested test modules passed
(469 tests), check_plan reported 0 problems, and handbook and accept.sh syntax
checks passed. validate reports registry drift only; evidence.json and the
other protected files and git index remain unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (#740's Dagu/mise rows); receipt records the regeneration and the current profile digest

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ests and a regenerations entry)

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the c5/round2-adoption-20261005b branch from 6eb8b94 to ba41836 Compare October 5, 2026 15:22
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Claude session native-agent-stack-5f: landing at head ba418365842cf0fb2cf01de33d63beef6df0ef9a. 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 7fbe586f38d3; this head is reached from it through recorded carry edges (equal owned patch-ids, or a cross-family delta read returning ACCEPT at the edge's target), with no P1 item.

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

main 4ead2838d8cc76965e6ef35efa6c9cee52153efd head ba418365842cf0fb2cf01de33d63beef6df0ef9a base 0ce9536963644940fdf68b578269e838b8c098ee merged-tree b040f3ab73c3d66e1fbfce5a44e42b7465080042 merge-tree-exit 0
ok   1: clean three-way merge
ok   2: merged-vs-main paths 58, outside PR-owned 0 []
ok   3: main drift 24 paths, overlap with PR-owned inputs (registry excluded) []
ok   4: registry foreign rows equal True, order preserved True, PR-owned rows 47, unowned top-level keys differing []
ok   5: merged files[] sorted by path with no duplicates: True (10184 rows)
LANDABLE
condition 5: merged files[] sorted and unique (tree b040f3ab73c3d66e1fbfce5a44e42b7465080042)

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

macOS (advisory). The user decided on 2026-10-05 that macOS checks are advisory. Ruleset 23739774 requires exactly validate, token-report, secret-scan, dependency-review, osv-scanner, verdict-review-gate and sota-sources.

The macOS full suite has carried one failure from main since #732 (4fd7106): tests.test_runtime_worker_openhands_push_gate OwnedPathGateTests.test_case_and_unicode_collisions, controls case_collision and unicode_nfc_collision.

  • Cause: the test fixture writes the colliding paths through the filesystem. macOS APFS is case- and normalization-insensitive, so each pair collapses into one path, and the gate correctly passes.
  • Scope: a test-fixture defect, not a gate defect.
  • Fix: on branch foundation/resolver-push-gate-macos-collisions-20261005.

This PR's own macOS-only failures (run 37320629278), fixed forward by the command center in its follow-up PR:

  • tests.test_new_wsl_client_config Round2RepairIntegrationTests.test_chrome_acceptance_allows_updates_and_requires_the_google_origin: subtests for builds 153, 154, 155 and 155.
  • test_harbor_refuses_auth_store_upload_before_launch: subtests CODEX_AUTH_JSON_PATH and CODEX_FORCE_AUTH_JSON.

The cause is BSD vs GNU tool behavior in the accept.sh snippets that these tests execute.

@seathatflowsinourveins
seathatflowsinourveins merged commit 1796303 into main Oct 5, 2026
24 of 25 checks passed
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Claude session native-agent-stack-5f: post-merge observation. Landed as 1796303f957c522e78b92667e553c06840fae3a2 (parent 4ead2838d8cc76965e6ef35efa6c9cee52153efd), tree b040f3ab73c3d66e1fbfce5a44e42b7465080042. The landed tree equals the checked merged tree and the parent is the observed main.

@seathatflowsinourveins
seathatflowsinourveins deleted the c5/round2-adoption-20261005b branch October 5, 2026 15:58
seathatflowsinourveins added a commit that referenced this pull request Oct 5, 2026
…g (macOS full suite red since #732) (#746)

### Scope

- **What this PR changes:** the resolver push-gate tests build their case- and normalization-colliding fixture commits through git plumbing, so the colliding names exist in the tree on any filesystem.
  - Main's macOS full suite has failed `test_case_and_unicode_collisions` (case_collision, unicode_nfc_collision) on every commit since #732 (4fd7106). That failure also shows on every PR.
  - The cause: the fixture wrote the paths through the filesystem, and macOS APFS is case- and normalization-insensitive. Each pair collapsed into one path, so the commit held no collision and the gate correctly passed.
  - The gate (`push_gate.py`) is unchanged.
- **Base commit:** `cb339488e3e0` (origin/main).
- **Lane:** `lane:foundation`, the resolver lane. Tests only, plus the registry row in the last commit.

### SOTA sources

- git/git v2.43.0 `t/t2107-update-index-basic.sh:59-69`: index entries through `update-index --add --cacheinfo`, with no working-tree file. Also git's documentation of `hash-object -w --stdin`, `write-tree`, `commit-tree` and `update-ref`.
- git's `core.ignorecase` and `core.precomposeunicode` settings, both on by default on macOS. They are set to false on every fixture git call.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| main's macOS full suite fails only this test on the main side | hosted CI (observed) | adoption-bootstrap macOS runs 37321600538 (#726) and 37320629278 (#713): the same two subtests; main runs at 4fd7106, c148e04 and cb33948 failed |
| the helper keeps both exact names regardless of the working tree | local_integration (Linux probe) | both names and distinct blobs in `ls-tree` with a pre-existing same-named working-tree file and both folding settings true; restoring the old fixture makes the new tree assertion fail |
| the suite passes | local_integration | `python3 -m unittest tests.test_runtime_worker_openhands_push_gate`: 122 run, 121 OK, 1 existing skip (PyYAML absent) |
| macOS confirmation | pending | this PR's own macOS run (advisory, by the user's 2026-10-05 decision) |

### Local commands run

```
$ python3 -m unittest tests.test_runtime_worker_openhands_push_gate   OK (skipped=1)
$ python3 scripts/validate.py                                         exit 0
$ python3 scripts/evidence_manifest.py --check                        exit 0
$ git diff --check                                                    exit 0
```

### Review

- Built by GPT-6.1 Sol through the packaged SDK worker (round resolver-macos-r1) and committed by the coordinator (Claude session 5f).
- A Claude Opus cross-family read follows.

### Checklist

- [x] No GitHub Actions or workflow changes.
- [x] No secrets printed, logged or committed.
- [x] The gate's behavior is unchanged; tests only.

### Recorded residuals (bounded review, 2026-10-05)

Claude Opus 5.5 cross-family read (session 5f) at ffd5cd3 at `ffd5cd3e99c3` returned ACCEPT with no p1. Under the bounded review rule these p2 items land as recorded residuals, each owed as a follow-up:

- `tests/test_runtime_worker_openhands_push_gate.py:1589 and :1606`: Non-blocking hardening, not a defect.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
…er, per-route effort expectations, the 2604 plan as it stands on main) and c5's five P3s

The post-switch probe order is stated per route; the expected upstream effort is max for -max, bare and astra-max and xhigh for -xhigh (the model suffix wins over the client effort); the default Codex client version is
overridden by CODEX_CLIENT_VERSION on both units; the rollback prefix's shim v1 limit and the never-rebuild rule's location are cited; the stickiness script's worktree path is masked; the 2604 read-back of 16:50Z is cited as relayed;
the second-host paragraph restates the plan from main (published 3.8.51 since #713, a carried canary before it) against the tarball that runs on 21128.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 5, 2026
…the new-WSL handbook (registry last)

CI validate at ef48bca failed one test: tests.test_new_wsl_handbook reported "stale generated output:
docs/new-wsl-handbook.md". The earlier merge changed handbook inputs, the merged catalog among them, without
regenerating the handbook. This merge brings in main 2d849ba (#713, #726, #736 and the other afternoon landings).
Only the registry conflicted; it is main's registry with this branch's rows re-registered.

The handbook was regenerated with `python3 scripts/build_new_wsl_handbook.py --write`, and --check passes. Its
receipt records the new outputs, the current generator and profile digests, and an eighth regenerations entry with the
previous outputs.

Checks: validate.py exit 0; validate_convergence --all-recorded exit 0; evidence_manifest --check passed (10,240
files); tests.test_architecture_pin_source, test_new_wsl_handbook, test_ecosystem_manifest and test_stack_lifecycle OK.
uv.lock and pyproject.toml of the 2604 runtime are unchanged, so the 2604 qualification still carries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 5, 2026
…Sol max (published v3.8.51 + #15167 + the cited affinity patch) (#744)

### Scope

- What this PR changes, in one or two sentences: records the decision that the NativeStack OmniRoute gateways keep true GPT-6.1 Sol max (published `v3.8.51` content plus upstream PR 15167 plus the cited local session-affinity patch) instead of switching to the published-only package, with the wire evidence, the affinity commit as a public patch file (sha256) and the build facts of the composition. Nothing running changes: the planned 15:00Z swap was cancelled before any unit changed. The second host's claim is scoped to what is observed: NativeStack 20128 delivers max; on 2604 the co-op's read-back of 16:50Z (relayed, private record) gave HTTP 200 on the `-max`, `-xhigh`, bare and `astra-max` routes and upstream `max` on `sol-max` for 21128; the 2604 plan rows, which since #713 select the published 3.8.51 with Sol at xhigh, are handed to the plan owner (the fixwave-defects lane holds the plan files through #723), not edited here. Standing constraint F1 is extended to 21128/21129.
- Base commit: `cb339488e`, merged with main `2d849ba1f` (head `08e749ec4`, after the repair rounds for 5f's read of `b5bf717d9`, its delta reads of `fb3d1ee40` and `3d65b80fa` and c5's read of `7200ee424`; main moved with #713, so the plan rows the record cites are the post-#713 ones)
- Lane: `lane:shared` (the gateway serves the foundation and trading lanes, as in #637); the trading lane's acknowledgement is requested before merge ([docs/lanes.md](../docs/lanes.md)).
- Owned paths touched: `docs/decisions/2026-10-05-omniroute-gateway-composition.md`, `evidence/artifacts/omniroute-wire-effort-20261005/` (new), one-clause F1 extensions in `docs/decisions/2026-09-30-omniroute-rebuild.md` and `docs/foundation-stack.md`, and the hot-file registry rows in `manifests/evidence.json` (last commit, hot-file protocol).

### SOTA sources

- OmniRoute upstream, https://github.com/diegosouzapw/OmniRoute: tag `v3.8.51` (commit `c1e30b7676975feb298b49eff6ff58923c04b89e`, tree `0f58d8df20c0c2ae4336b432b3f39837119b6eed`, equal to the tree of `release/v3.8.51` at `2f42a9ac19d1a247ec9ce5473b790843724b3061`); npm `omniroute@3.8.51` (integrity `sha512-VwwSt+bP9lJiPJXFJMz0nNGGuoewPZU3nFe1SLuO11ADgdSwTegGCxhg8Ov75+31m/cocPxHiO63zygn1XQ0MQ==`).
- Upstream PR 15167 (head `0585aba5589d5a1f49243a13a8db249558e7c9e3`): `gpt-6.1-sol` in the Codex registry and alias sets; its re-pin trigger is the first official release that carries it. Upstream issue 8939 and PR 8940 (the affinity premise), open PR 13102, PR 13788 (commits `24bbadbad15eec0d598c908416e4b01be4e37671` and `6c7990058c4ce9677de79452c8cefb10b4bf1b3d`; optional, dropped at the next rebuild). The running builds carry PR 15167's earlier head `f5d8e150b` and local cherry-picks of PR 13788's two commits with the same patch-ids.
- Upstream code read for the wire behavior: `open-sse/executors/codex.ts` (`clampEffort`, `transformRequest`) and `open-sse/executors/codex/reasoningSuffix.ts` at the tag and with the PR.
- Upstream's own build and checks, unchanged: `npm ci`, `npm run build:release`, `OMNIROUTE_ALLOW_CANARY_BUILD=1 npm run check:pack-artifact`, `npm pack`, `npm run check:pack-boot`.
- The earlier records this one extends: `docs/decisions/2026-09-30-omniroute-rebuild.md`, `docs/decisions/2026-10-03-omniroute-3851-pin.md`, `evidence/artifacts/omniroute-sol-max-20260930/`.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| With PR 15167 the executor sends model `gpt-6.1-sol` and effort `max` for `gpt-6.1-sol-max`, `-ultra` and `gpt-6.1-sol` with client `max`; without it `xhigh`, `medium` and an unsplit model name | `local_integration` (upstream code, our probe; nothing was sent) | `checks/wire-probe-with-15167.txt`, `checks/wire-probe-without-15167.txt` |
| The live call log shows requested `max` and upstream `max` for Sol after the 2026-09-30 restart (7,550 and 2,728 rows) and `xhigh` before it (1,165 rows) | `local_integration` (read-only read of metadata columns; the upstream effort is the one in the provider request the attempt captured, only for rows with encrypted reasoning) | `checks/live-effort.json`, `checks/live-requests.json` |
| The deployed prefix carries the probed code (four files byte-identical, bundle literal counts 40/8 against 0/0 for the clean package) | `local_integration` | `checks/source-identity.json` |
| The base tree equals the tag commit's tree and so the published package content | `source_review` (git facts, npm metadata) | `checks/source-identity.json` |
| The patch file applies to the tag and, with PR 15167's diff, reproduces the trees of the two built commits | `local_integration` (git, temporary index) | `checks/composition-trees.txt`, `patches/045aa81f3.patch` |
| The affinity patch's unit test (7 tests): 6 fail on the tag with only the test file (negative control), 7 of 7 pass on the tag plus the patch and on the composition; the wire probe re-run on both reproduces the committed probe files byte for byte | `local_integration` (upstream runner flags, trees built from public refs, our test and probe) | `checks/affinity-test-results.txt`, `scripts/affinity-test.sh.txt` |
| PR 13788's two public commits have the same patch-ids as the four local cherry-picks; the carry bundle restores into a fresh repo | `local_integration` (git) | `checks/pr13788-carried-patch-ids.txt` |
| The composition builds with upstream's release scripts and its tarball boots and persists in a clean prefix | `local_integration` (upstream checks on our build; the first `check:pack-boot` run failed on a port collision and passed on the rerun, both recorded; the kept tarball equals a fresh `npm pack --dry-run` of the booted tree by sha1 and sha512) | `checks/build-notes.txt` |
| 7-day use of `/v1/responses`: 20,371 calls, 93.2% cache reads; 21.7% of calls use `-max`/`-ultra` names | `local_integration` (read-only counts) | `checks/usage-7d.json` |
| Without #15167 the live gateway rejects `cx/gpt-6.1-sol-max` and `-xhigh` at the catalog gate (HTTP 400) and clamps `cx/gpt-6.1-sol` with `max` to `xhigh`; with it all answer 200 with upstream `max`, `max`, `xhigh`, `max` | `local_integration` (main's recorded live probes of 2026-09-30, cited, not re-run) | `evidence/artifacts/omniroute-sol-max-20260930/checks/probe-gate-before-switch.json` (C7), `probe-gate-after-switch.json` |
| The kept tarball carries PR 15167's head of 2026-10-05 (17 files), not the running build's head of 2026-09-30 (5 files); the 13 test files covering the extra pieces pass on the composition, 145 of 145 | `local_integration` (upstream test runner on a tree built from public refs); the version-header change is not observed live | `checks/affinity-test-results.txt` (last block), `evidence/artifacts/omniroute-sol-max-20260930/checks/upstream-pr-15167-identity.txt` |
| NativeStack2604's 21128 delivers max on `sol-max`; `-xhigh`, bare and `astra-max` answer 200 | relayed from the co-op's read-back (an exact `X-Correlation-Id` join; request headers unobservable); the files are in its private coordination record, not in the repository | the co-op's ledger row 165024Z, cited as relayed by the command center |
| The backend applies `max` | not observable from our side; not claimed | |
| The cache cost of dropping the affinity patch | not measured | |

### Local commands run

```
$ python3 scripts/validate.py
{"components": 69, "hashed_files": 10232, "profiles": 4, "receipts": 204, "status": "passed"}
$ python3 scripts/validate_convergence.py --all-recorded
record[30]: valid
$ python3 -m unittest tests.test_component_matrix tests.test_evidence_manifest tests.test_new_host_grand_list tests.test_validate tests.test_frozen_macos_variant_no_use
Ran 172 tests ... OK; Ran 10 tests ... OK
(gitleaks, run by the commit hook on each commit: no leaks found)
```

### Decision record

`docs/decisions/2026-10-05-omniroute-gateway-composition.md`: the composition table with each carried change at its commit and its removal or re-pin condition, the user's choices as the command center relayed them, the swap-impact measurements, the wire evidence, alternatives A/B/C, limits and the overturn conditions.

### Host evidence

Not applicable (no files under `evidence/hosts/`).

### Checklist

- [x] New/changed GitHub Actions are pinned to a full commit SHA with a version comment (no workflow changed).
- [x] New/changed workflows declare top-level `permissions: {}` (no workflow changed).
- [x] No secrets are printed, logged or committed; no new required secret was added (callers use the documented `local-loopback` placeholder; no connection id, account or request body is recorded).
- [x] No new paid hosting, subscription or billing surface was introduced.
- [x] Peer-owned untracked files and worktrees were preserved.

### Recorded residuals (bounded review, 2026-10-05)

GPT-6.1 Sol micro delta read (session 5f) at 08e749e at `08e749ec4b8c` returned FINDINGS with no p1. Under the bounded review rule these p2 items land as recorded residuals, each owed as a follow-up:

- ``: 
- ``: 

🤖 Generated with [Claude Code](https://claude.com/claude-code)
seathatflowsinourveins pushed a commit that referenced this pull request Oct 6, 2026
…726 gate-read P2s, and #713's macOS-only failures

- Codex: the new-WSL additions set service_tier = "default" (standard), per the user's
  "Normal, fast on demand (Recommended)" at 2026-10-05T13:22:24Z; cited at openai/codex
  rust-v0.160.0; dated amendment in the changelog-parity record (and "their yes").
- #726 residuals: the repair-round-3 authorization table regenerated from --check --markdown
  (16 rows); find-skills' pinned Listing row matches the manifest (on, Codex yes).
- #713 residuals: the research-harnesses owner note names round 4's compatibility amendments;
  the ntfy.sh/Telegram 'alert text leaves the host' note in the plan README and row.
- #713 macOS-only failures (CI 37320629278): the chrome acceptance test stubs the WSL-only dpkg
  comparator with exact arguments; the Harbor guard uses the Bash 3.2-portable ${VAR+x} test
  instead of [[ -v ]] (main's bootstrap-macos.sh precedent).

Built by a GPT-6.1 Sol worker (job-080); reviewed by the coordinator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 6, 2026
…726 gate-read P2s, #713's macOS-only fixes (#752)

### Scope

An upgraded Codex home kept the previous managed `service_tier = "fast"` despite the selected normal default. F9 now migrates that one declared value through the native config writer, verifies readback and records completion so later `/fast` choices survive. Round 3 also completes adoption for preserved tiers such as `flex`, and handles marker-only completion without a config write, process check or backup.

- Base: `ecfa112764c664d35377dd66b8cfcb67e5a94d60`; lane: `lane:foundation`.
- Native migration introduced by `3c779ea2f97d9cc1b437c0385c53fff5887a8f13`; Round 3 repairs: `8c1cfd39dc7058464667d235e30019aa187883d3`. Validated head: `d2f6d8c3de42226cf37fea5b145bfae73f867482`.
- Existing differing scalars remain conflicts. Native replacement is limited to literal previous `fast`; actual marker readback must match `plan.expected`. Missing-writer dry-run refuses consistently with apply, and native local rejection diagnostics retain their text.
- Retained original residual repairs: regenerated authorization table; find-skills' on/Codex listing; round-4 research-harness owner note; alert-text egress note; macOS comparator fixture and Bash 3.2-portable Harbor guard.
- Owned paths: client-config tool/test/map/template, WSL operator recipe, linked decisions, install-plan residual files, sanitized migration receipt and evidence registry. Registry is the final commit. Disposition-catalog correction is a dated follow-up in the migration decision.
- #756 separately reports profile drift; whichever of #752 and #756 lands second rebases onto the first. PR readiness and landing remain with the command center.

## SOTA sources

- Handbook CI repair follows the maintained repository generator at `native-agent-stack@d2f6d8c:scripts/build_new_wsl_handbook.py:189-190,693,1196-1199,1209-1242`, its existing freshness oracle `tests/test_new_wsl_handbook.py:1440-1457`, and the exact native CI command `.github/workflows/validate.yml:235-240`.

- openai/codex@`a956835d020762cb2b570053af06f643a11c0ecc` (rust-v0.160.0): [service-tier persistence:105-122](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/tui/src/config_update.rs#L105-L122), [native batch request:154-170](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/tui/src/config_update.rs#L154-L170), [toggle:47-57](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/tui/src/chatwidget/service_tiers.rs#L47-L57), [persistence event:99-117](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/tui/src/chatwidget/service_tiers.rs#L99-L117), [event dispatch:2391-2396](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/tui/src/app/event_dispatch.rs#L2391-L2396) and [Fast aliases:547-551](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/protocol/src/config_types.rs#L547-L551). These support completion for preserved tiers while retaining later native choices.
- Same pin: [config-manager write response:426-438](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/app-server/src/config_manager_service.rs#L426-L438), [canonical fingerprint:54-65](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/config/src/fingerprint.rs#L54-L65), [tier resolution:35-42](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/tui/src/service_tier_resolution.rs#L35-L42) and [model catalog:512](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/models-manager/models.json#L512). Native versions are configuration hashes; rollback hashes the same validated disk snapshot.
- Reused native wrapper, native-agent-stack@`32e6b0bde15d82cfbcccb117af3a728c5e9eeb5d`: [AppServer:514-560](https://github.com/seathatflowsinourveins/native-agent-stack/blob/32e6b0bde15d82cfbcccb117af3a728c5e9eeb5d/tools/adoption/apply_codex_lane.py#L514-L560), [guarded transaction:1257-1273](https://github.com/seathatflowsinourveins/native-agent-stack/blob/32e6b0bde15d82cfbcccb117af3a728c5e9eeb5d/tools/adoption/apply_codex_lane.py#L1257-L1273). No new scalar editor or RPC wrapper.
- Marker-only contract at native-agent-stack@`3bbcc780dfc34829219dff169b283f29a10845c1`: [Decision 11:210](https://github.com/seathatflowsinourveins/native-agent-stack/blob/3bbcc780dfc34829219dff169b283f29a10845c1/docs/decisions/2026-10-02-new-wsl-client-configuration.md#L210), [running-process control:3599-3602](https://github.com/seathatflowsinourveins/native-agent-stack/blob/3bbcc780dfc34829219dff169b283f29a10845c1/tests/test_new_wsl_client_config.py#L3599-L3602), [failed-pgrep control:3662-3668](https://github.com/seathatflowsinourveins/native-agent-stack/blob/3bbcc780dfc34829219dff169b283f29a10845c1/tests/test_new_wsl_client_config.py#L3662-L3668).
- Original residual sources: native-agent-stack@`2d849ba1fe1b879144cfa470f0514d3ac3b8e487`, `tools/adoption/new_wsl_client_config.py:1421-1446`, `adoption/skills/manifest.json:542-564`, `evidence/artifacts/final-architecture-round2-20261004/integration-resolutions.json:1614-1674` and `adoption/bootstrap-macos.sh`; prometheus/alertmanager@v0.34.1, [Telegram configuration](https://github.com/prometheus/alertmanager/blob/v0.34.1/docs/configuration.md#telegram_config); historical hosted-macOS [run 37320629278](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/37320629278), artifact `full-suite-macos.log:12587-12637`.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| Tier semantics and supported native writer | source_review | Pinned upstream and repository sources above |
| Upgrade, preserved flex followed by fast, version/readback rejection and rollback | synthetic | AppServer fixture checks RPC edits/versions; no real native writer or provider session |
| Marker-only works with a running process or failing pgrep, without backup/native calls; dry-run and actual readback controls | local_integration with synthetic homes/clients | Full module: 205 tests, exit 0; owned sleep process in one control |
| Wiring, registered hashes and scope | local_integration | `--check` and `validate.py`, exit 0; integrity only |
| Original hosted-macOS failure diagnosis | historical hosted CI | Run 37320629278; new macOS acceptance is not claimed |

### Local commands run

The three requested checks were rerun on the committed head above. Heavy checks use `nice 19`, `PYTHONDONTWRITEBYTECODE=1` and an owned external-cache `TMPDIR`; private paths are omitted here. Generator outputs and whitespace checks are from the final commit preparation.

```text
rtk proxy nice -n 19 python3 -m unittest tests.test_new_wsl_client_config -q
exit 0: Ran 205 tests in 78.337s; OK
rtk proxy nice -n 19 python3 -B tools/adoption/new_wsl_client_config.py --check
exit 0: check passed; two existing mcp-inspector manifest/install-plan warnings
rtk proxy nice -n 19 python3 scripts/component_matrix.py --write
exit 0: 32 rows, 0 flip-rule violations
rtk proxy nice -n 19 python3 scripts/new_host_grand_list.py --write
exit 0: 32 layers, 66 winners
rtk proxy nice -n 19 python3 scripts/validate.py
exit 0: 69 components, 10274 hashed files, 4 profiles, 212 receipts; passed
rtk git diff --check
exit 0
```

The receipt retains earlier failures/results and Round 3's five failing controls followed by 16 passing focused checks and the full module. The original pre-migration 426-test run remains historical; it is not represented as rerun after these repairs. CI status is separate from local acceptance.

### Validate repair (2026-10-06)

The required validate job at `d2f6d8c3de42226cf37fea5b145bfae73f867482` failed its existing handbook freshness assertion. #752 added migration prose to the hashed distro guide without regenerating the two handbook artifacts. The recorded `4e505c4e...` digest matches main/base `ecfa112...`; the PR's input is `f6401392...`. This is #752 input drift, and OSV is a separate job.

Regenerated through the unchanged repository builder and refreshed the handbook receipt's two output hashes, preserving its regeneration history. The generated MD and JSON diffs contain **only that provenance digest**. No generator, test, client template, migration logic or host configuration changed in this repair.

Source chain: `native-agent-stack@d2f6d8c:scripts/build_new_wsl_handbook.py:189-190,693,1196-1199,1209-1242`; `tests/test_new_wsl_handbook.py:1440-1457`; `.github/workflows/validate.yml:235-240`. [Original failed CI job](https://github.com/seathatflowsinourveins/native-agent-stack/actions/runs/37401702955/job/112071390644). Repair receipt: `evidence/artifacts/codex-service-tier-migration-20261005/ci-validate-repair-20261006.json`.

| Repair observation | Evidence class | Returned result |
| --- | --- | --- |
| Original hosted CI failure | independent CI observation | 11,365 tests / 1 freshness failure / 1,026 skips |
| Exact workflow command on frozen local head | local integration, native environment differs | exit 1; 10,361 tests / 19 failures / 18 errors / 905 skips; targeted freshness failure reproduced |
| Native generator before/after repair | structural validation, discriminating control | --check exit 1 before; --write and --check exit 0 after |
| Existing handbook test module | local integration | 76 tests, 32.202s, exit 0 |
| Attribution and minimal output delta | source review | independent reader confirms only one of 38 input hashes changed; no generator edit |

The full local suite result is retained without calling it green: it lacks `exchange_calendars`, and has additional native shell/fixture/containment/export/installed-client notification findings not present in CI's failure summary. Those are separate owner follow-ups; this repair disables no gate and installs nothing on the shared host. Local Python is 3.13.16; CI's declared interpreter is 3.12.3.

The workflow's run block was executed unchanged at nice 19, with private external-cache RUNNER_TEMP/TMPDIR:
```sh
set -o pipefail
mkdir -p "$RUNNER_TEMP/suite"
timeout --signal=ABRT --kill-after=60s 55m \
  python3 -m unittest -v --durations 50 2>&1 | tee "$RUNNER_TEMP/suite/unittest-verbose.log"
# exit 1; frozen baseline above

rtk proxy nice -n 19 python3 scripts/build_new_wsl_handbook.py --write
rtk proxy nice -n 19 python3 scripts/build_new_wsl_handbook.py --check
# each exit 0

TMPDIR=<owned-cache> PYTHONDONTWRITEBYTECODE=1 rtk proxy nice -n 19 python3 -m unittest -v tests.test_new_wsl_handbook
# exit 0; 76 tests, 32.202s
```

Final repair validation: `TMPDIR=<owned-cache> PYTHONDONTWRITEBYTECODE=1 rtk proxy nice -n 19 python3 scripts/validate.py` exit 0 (69 components, 10,275 hashed files, 4 profiles, 212 receipts); `rtk git diff --check` exit 0. Component-matrix and grand-list regeneration both exit 0, unchanged, with zero status flips.

Generated handbook/receipt and registry changes are in the last repair commit. New-head CI is observed after push; local green is not a predeclared GitHub acceptance result.

### Decision record

[Codex service-tier migration](docs/decisions/2026-10-05-codex-service-tier-migration.md), including Round 3 marker policy and dated disposition follow-up; [normal-default amendment](docs/decisions/2026-10-04-new-wsl-changelog-parity.md#amendment-2026-10-05-normal-by-default-fast-on-demand). A later user policy choice or supported upstream migration facility would reopen the decision.

### Host evidence

No new host receipt, native-writer execution, provider acceptance or platform-status promotion. The next approved F9 apply after landing **rewrites an upgraded home's unmarked previous `fast` value through a native app-server write**, with backup and readback before marker completion. Marker-only adoption leaves config bytes intact. The configuration owner performs host application; this lane made no host configuration change.

Recovery limits remain documented: separate config/marker writes, failed fresh adoption before a later `/fast` choice, canonical-version formatting limits and additional migration-rule recovery policy. The synthetic AppServer fixture does not establish native writer acceptance.

### Checklist

- [x] No GitHub Actions changes; workflow pin and permission requirements unaffected.
- [x] No secrets printed, logged or committed; no new required secret.
- [x] No new paid hosting, subscription or billing surface.
- [x] Peer-owned files and worktrees preserved.
- [x] Native supported writer reused; one `lane:foundation` label; registry last; no merge or readiness toggle.
seathatflowsinourveins added a commit that referenced this pull request Oct 6, 2026
…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.
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