Skip to content

Bound discovery and synchronize maintained-decision directives - #568

Merged
seathatflowsinourveins merged 2 commits into
mainfrom
codex/bounded-native-decision-routing-20260930
Oct 1, 2026
Merged

seathatflowsinourveins merged 2 commits into
mainfrom
codex/bounded-native-decision-routing-20260930

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Scope

Mac discovery was truncated, default top-two recall missed a maintained decision, and tool-free recall after compaction retained stale versions. Bound broad metadata selection and retrieve maintained decisions before describing deployed architecture after compaction/resume, using supported scoped pin priority, exact-path read and current-source verification. Retain the failed semantic gate separately from the reported two-call recovery, and preserve memory, parity and host qualification gates. A file-only Codex synchronization command lets the host owner apply the reviewed instruction block without the broader0.159.2 lane installer or an older runtime bootstrap.

  • Base commit: 28cfb3595176c629b0a2a5051aaf614df8c510ac
  • Lane: lane:shared
  • Owned paths: repository/portable Claude/Codex/scaffold directives; token practice and memory lifecycle guides; source-only synchronization helper/tests and adoption guide; the dated decision; Codex template hash/word pin; evidence registration.
  • No installer/platform/landscape pin or host service changes. pin_first is gated on the installed schema; older 2.3.2 uses ordinary scoped query and exact-path read. Native caching, compaction, deferred discovery and grants remain intact.

SOTA sources

Evidence-class table

Claim Evidence class Command / receipt
Query/read fields and native discovery behavior source_review Maintained tagged source above
Mac official 2.5 control, prepared 2.4/schema66 rollback, client turns, rejected Ollama candidate, pending Windows qualification source_review Host owner's issue comment; no new native host/model execution here
Failed tool-free continuity versus successful scoped two-call recovery source_review Separate continuity comment; no private artifact re-verification here
Standing rules, word budget, unchanged RTK text and scaffold mirroring local_integration 23 existing focused tests passed
Source-only synchronization, outside-byte preservation and refusal boundaries local_integration Existing helper exercised on real isolated files; no native client/model execution
Registered bytes, scope and deterministic guide local_integration Integrity/catalog/receipt/build checks below

Local commands run

All commands exited0. Test commands used the prepared environment and a scoped umask 022. The first group passed109tests with1skip before the final newline/home-preservation corrections; unchanged Codex template/block and wiring checks remain applicable. The second group rechecked all changed helper/documentation behavior plus portable rules and scaffold:72tests,1skip. Do not sum overlapping groups.

python3 -m unittest -v tests.test_managed_block tests.test_codex_worker_lane.TemplateTests tests.test_codex_worker_lane.BlockTests tests.test_adoption_status.ClientWiringTests tests.test_adoption_docs_consistency
python3 -m unittest -v tests.test_managed_block tests.test_adoption_docs_consistency tests.test_install_claude_profile.StandingRuleSurfacesTests tests.test_install_claude_profile.PortableTopRuleTests tests.test_scaffold_repo.ScaffoldContentTests
python3 scripts/validate_catalogs.py
python3 scripts/component_matrix.py --write
python3 scripts/new_host_grand_list.py --write
python3 scripts/validate.py
python3 scripts/build_ecosystem.py --write
python3 scripts/build_ecosystem.py --check
git diff --check

Decision record

docs/decisions/2026-09-30-bounded-native-decision-routing.md retains failures, reported host boundaries, alternatives and the matched quality/complete-cost comparison that would overturn this routing. Independent completeness review corrected older-schema portability (omit both optional fields on2.3.2), pin crowding, native search response limits, task-triggered recovery, source attribution, exact-source command failure handling and outside-byte preservation.

Hindsight remains isolated. Amend the surviving host/allocation/arms/pins before the paired 100-question run; preserve ≥5pp significance, A16 Holm α=0.0167, ≤5% C4 fallback and blind cross-family convergence. Corpus preservation does not transfer local 19b6429's historical quality to official 2.5.0. Tool-free compaction remains failed; scoped-memory recovery does not repair that result. Native compaction/caching remain enabled. Windows/WSL execution and sign-in remain pending; no semantic-quality or whole-task savings claim is added.

Shared-lane acknowledgement

An independent delegated trading-impact review is recorded on this PR at the final reviewed head before merge. It covers shared instruction impact and preservation of trading constraints; it does not claim native trading/runtime acceptance.

Host evidence

No files under evidence/hosts/ changed; no platform-status flip is proposed.

Checklist

  • GitHub Actions/workflows unchanged; existing pins and permissions preserved.
  • No secrets printed, logged or committed; no new secret requirement.
  • No paid hosting, subscription or billing surface.
  • Peer-owned files/worktrees preserved. Shared hot files are in the last commit; evidence was restored from latest main and own files re-registered after rebase.

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Oct 1, 2026
@chatgpt-codex-connector

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

Copy link
Copy Markdown

Codex Review Summary

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

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-01T04:09:49.586632Z 3ae65d6 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

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

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3ae65d65b3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread AGENTS.md Outdated
@seathatflowsinourveins
seathatflowsinourveins force-pushed the codex/bounded-native-decision-routing-20260930 branch from 3ae65d6 to 76aeebe Compare October 1, 2026 04:13
@seathatflowsinourveins seathatflowsinourveins changed the title Bound native discovery and route maintained memory decisions Bound native discovery and rehydrate maintained decisions Oct 1, 2026
@seathatflowsinourveins seathatflowsinourveins changed the title Bound native discovery and rehydrate maintained decisions Bound discovery and synchronize maintained-decision directives Oct 1, 2026
@seathatflowsinourveins seathatflowsinourveins added lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement and removed lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers labels Oct 1, 2026 — with ChatGPT Codex Connector
@seathatflowsinourveins
seathatflowsinourveins force-pushed the codex/bounded-native-decision-routing-20260930 branch from 76aeebe to 99543e8 Compare October 1, 2026 05:57

Copy link
Copy Markdown
Collaborator Author

Shared-lane acknowledgement — independent delegated trading-impact review

Reviewed head: 99543e88bdedab7fa368597b01ad09af7d9821c3
Base: 28cfb3595176c629b0a2a5051aaf614df8c510ac

The read-only trading-impact reviewer /root/trading_impact_review acknowledges this change with no trading-impact blockers. The shared instruction checks relevance, retries without pin priority or widens within scope, reads the relevant exact path, and verifies canonical sources. Explicit project scope, missing-scope isolation, installed-schema fallback, full-output recovery, native caching and compaction remain intact.

Trading-owned paths, architecture promotion contract, paper policy, runtime target, gate ladder, frozen catalyst protocol, promotion-gate code and isolated dependency lock are unchanged. The new codex-md operation changes only managed instruction text; it does not change configuration, authentication, profiles, roles, services or trading runtime.

Read-only python3 scripts/trading_gates.py --check at this head exited 0: 20 recorded gates, no errors; live remains false with five retained blockers. This is recorded-receipt consistency and a scoped independent delegated trading-impact acknowledgement under docs/lanes.md, not native trading/strategy/broker/model acceptance.

The surfaced pin-crowding review is addressed in all instruction carriers. Separate independent source-only-helper review found no remaining material issues after home expansion, exact-source failure handling and operator-byte preservation fixes.

@seathatflowsinourveins
seathatflowsinourveins merged commit ba933bf into main Oct 1, 2026
25 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the codex/bounded-native-decision-routing-20260930 branch October 1, 2026 06:29

Copy link
Copy Markdown
Collaborator Author

Canonical source and host synchronization handoff

PR: #568

Squash-merged source revision: ba933bf791b797fa78d80081fe86e1a0b086dde1.
All eight required checks passed at reviewed head
99543e88bdedab7fa368597b01ad09af7d9821c3; the shared-lane acknowledgement is
recorded on the PR and its review thread is resolved.

This change carries bounded discovery and maintained-decision routing in the
repository, Claude and Codex instruction sources. The dated decision preserves
the owner's reported official ai-memory 2.5.0, Ollama 0.34.4 and isolated
Hindsight 0.10.2 deployment facts, the original compaction failure, and the
separate scoped-memory recovery. Measured and blind convergence gates remain
required; Vela/VelaNext retirement requires surviving-host preregistration.

Use a separate clean source clone. Keep the runtime installation checkout at
its accepted release pin. Set NAS_SOURCE to that source clone and
NAS_SOURCE_SHA to the actual squash merge commit above.

NAS_SOURCE_SHA=ba933bf791b797fa78d80081fe86e1a0b086dde1

Preview the instruction update:

(
  set -eu
  test -n "$NAS_SOURCE_SHA"
  test -z "$(git -C "$NAS_SOURCE" status --porcelain)"
  git -C "$NAS_SOURCE" fetch origin main
  git -C "$NAS_SOURCE" checkout --detach "$NAS_SOURCE_SHA"
  test "$(git -C "$NAS_SOURCE" rev-parse HEAD)" = "$NAS_SOURCE_SHA"
  python3 "$NAS_SOURCE/tools/adoption/managed_block.py" --dry-run claude-md
  python3 "$NAS_SOURCE/tools/adoption/managed_block.py" --dry-run codex-md \
    --codex-home "${CODEX_HOME:-$HOME/.codex}"
)

The Mac owner reviews those diffs, then applies the same exact clean source:

(
  set -eu
  test -z "$(git -C "$NAS_SOURCE" status --porcelain)"
  test "$(git -C "$NAS_SOURCE" rev-parse HEAD)" = "$NAS_SOURCE_SHA"
  python3 "$NAS_SOURCE/tools/adoption/managed_block.py" claude-md
  python3 "$NAS_SOURCE/tools/adoption/managed_block.py" codex-md \
    --codex-home "${CODEX_HOME:-$HOME/.codex}"
  python3 "$NAS_SOURCE/scripts/build_ecosystem.py" --write --root "$NAS_SOURCE"
)

For a custom Claude destination, add --target PATH to claude-md. Select the
intended Codex home explicitly when multiple clients are installed. These
commands preserve text outside owned blocks and create backups; they refuse
damaged/duplicate markers and a nonblank Codex AGENTS.override.md.

Before refreshing an adopted QMD catalog index, verify its selected collection
roots point at this source clone. Follow docs/catalog-retrieval.md for a backed-up
path-only relocation; preserve masks, contexts, models, unrelated collections
and any docs ecosystem/** exclusion. update does not relocate roots.

qmd --index native-agent-stack-catalog update
qmd --index native-agent-stack-catalog status

Run qmd --index native-agent-stack-catalog embed only when this adopted index
already carries vectors. The lexical index needs no embeddings or new models.

The generated HTML is $NAS_SOURCE/docs/ecosystem/index.html. Its manifest's
dated source-link base is historical metadata, not the build checkout's Git
revision; use the pinned SHA above and its embedded input hashes to identify
this build. The maintained host decision is
docs/decisions/2026-09-30-bounded-native-decision-routing.md.

This is a source, instruction and index refresh. It does not reinstall runtimes,
re-pin accepted components, change accounts/profiles/roles/services, or establish
native client consumption. The Mac owner performs native readback and acceptance.
Windows execution/OAuth, candidate memory promotion and a new confirmatory run
retain their own open gates.

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Note from the rule-text lane (c5, owner of unit F1's surfaces AGENTS.md, examples/claude-native/CLAUDE.md, adoption/templates/codex.AGENTS.template.md, adoption/scaffold/AGENTS.md), after the merge: (1) the added bullet is always-loaded text on four surfaces; F1's record (docs/decisions/2026-09-30-rule-text-every-layer.md) carries the measured growth numbers and an overturn condition, so its numbers need this bullet's o200k count added at the next edit of that record (I take that follow-up). (2) The bullet names ai-memory for maintained decisions "when supported by the installed schema"; the durable-memory layer is still comparison_required in catalogs/landscape/research-state.json with Hindsight 0.10.2 as the memory lane's fit target and no measured backbone winner, so this wording is a reopening trigger for that layer's closure record: when the layer closes, the bullet follows its selection of record. (3) Hot-file merges are being sequenced by a merge train tonight (each merge forces a hot-file re-run and a ~50 min macOS CI round for the next PR); a one-line notice before the next lane:shared merge avoids a refused merge. No change requested to this PR.

seathatflowsinourveins pushed a commit that referenced this pull request Oct 1, 2026
…r, after #568 moved them again

Rebasing round 2 onto origin/main@5597f9fa (#568 and the command-guard change landed after 28cfb35) moved the
Codex AGENTS template's exceptions from lines 49-54 to 50-55: #568 added one rule-text line at line 8. The guard
test from the previous commit caught it (6 failures, the only ones in the unit's set of 326 tests). Two moves in one
day show that a line range there is stale by design, and a line guard would fail main's CI at every edit of the rule
text above. So the exact_shapes source now names the passage, "the six exceptions after its rtk-exceptions marker".
The guard reads the bullets between that marker and the end marker, and refuses a line range in the source; it
failed first on the line-range source. The F4 addendum's round-2 line names the new base and the move.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 1, 2026
…r, after #568 moved them again

Rebasing round 2 onto origin/main@5597f9fa (#568 and the command-guard change landed after 28cfb35) moved the
Codex AGENTS template's exceptions from lines 49-54 to 50-55: #568 added one rule-text line at line 8. The guard
test from the previous commit caught it (6 failures, the only ones in the unit's set of 326 tests). Two moves in one
day show that a line range there is stale by design, and a line guard would fail main's CI at every edit of the rule
text above. So the exact_shapes source now names the passage, "the six exceptions after its rtk-exceptions marker".
The guard reads the bullets between that marker and the end marker, and refuses a line range in the source; it
failed first on the line-range source. The F4 addendum's round-2 line names the new base and the move.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 1, 2026
…r, after #568 moved them again

Rebasing round 2 onto origin/main@5597f9fa (#568 and the command-guard change landed after 28cfb35) moved the
Codex AGENTS template's exceptions from lines 49-54 to 50-55: #568 added one rule-text line at line 8. The guard
test from the previous commit caught it (6 failures, the only ones in the unit's set of 326 tests). Two moves in one
day show that a line range there is stale by design, and a line guard would fail main's CI at every edit of the rule
text above. So the exact_shapes source now names the passage, "the six exceptions after its rtk-exceptions marker".
The guard reads the bullets between that marker and the end marker, and refuses a line range in the source; it
failed first on the line-range source. The F4 addendum's round-2 line names the new base and the move.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 1, 2026
… servers at Claude user scope (unit F4, frozen wiring) (#548)

* Claude user-scope MCP template: register the carrier's lane servers

adoption/mcp/claude-user.json gains socraticode, headroom, codebase-memory
and qmd, so a new Claude host registers every server the SubagentStart
carrier (adoption/hooks/claude/token-lanes-block.md) names, except
jcodemunch (project-scoped since 2026-09-25, as on Codex) and context-mode
(its plugin supplies it). Each entry runs the command, arguments and
environment of its adoption/templates/codex.config.template.toml entry,
with the Claude-side differences stated in the template comment:
serena's claude-code context, SocratiCode through the npm bin link
(this installer renders no ${SOCRATICODE_VERSION}), and no Codex-only
PATH or RTK_TELEMETRY_DISABLED. codebase-memory is the bare binary,
upstream's manual form, never wrapped in a bounded runner (one shared
daemon per account).

Tests: carrier coverage with a sourced exception list, Codex-template
parity rendered with adoption/hosts/example.json, and mutant controls for
both checks.

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

* Codex worker roles: evidence-reviewer, isolated-builder and semantic-evidence-reviewer, installed with --worker-roles

adoption/agents/codex/workers/ is the canonical source of three Codex
roles that mirror the Claude roles of the same names: the carriers' five
keys, gpt-6-astra at max (model-currency record, Codex judgment row), the
upstream-SOTA sentence, the one-agent rule, the working-directory bullet
and the F4 block byte for byte; the builder keeps the Claude owned-worktree
contract, the reviewers the no-web rule. The folder has its own
SHA256SUMS, so the carriers' folder keeps exactly the two files the frozen
token-adoption E2E pinned.

tools/adoption/codex_roles.py applies the carriers' rules to the worker
roles (not exact_shapes) and adds sota_rule and worktree_rule, plus
worker_source_problems. tools/adoption/apply_codex_lane.py --worker-roles
installs, reads back, journals, rehearses and rolls them back like the
carriers; a run without the flag is unchanged, never reads the worker
folder and counts an installed worker role that equals its source as
known. Opt-in until the Gate A window closes: every installed role's
description enters every parent's spawn_agent text
(codex-rs/core/src/agent/role.rs:294-334 at rust-v0.157.1).

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

* Docs: bootstrap and update steps for the lane MCP servers and the Codex worker roles; F4 addendum

adoption/bootstrap.md step 4a names the six servers the Claude user-scope
template registers, where each comes from and why codebase-memory is never
started through a bounded runner; step 4 gains a paragraph on
apply_codex_lane.py --worker-roles. adoption/update.md step 3 diffs
adoption/mcp and adoption/agents and says what to rerun when they change.
docs/decisions/2026-09-26-stack-agents-role-dispatch.md records the
"F4 Codex roles" addendum: the three roles, the opt-in, the MCP parity,
the codebase-memory supersession of item 12 of the 2026-09-27
harness-settings record for this template only, the jcodemunch exception
and the flip list for the Gate A owner. A docs test checks that step 4a
names exactly the template's servers.

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

* apply_codex_lane.py: the printed apply command repeats every plan-changing flag, including --worker-roles (review of #548)

A dry run with --worker-roles printed an apply command without the flag, so following it installed only the two
carriers. The command now repeats --worker-roles, --codex, --state-dir, each --project-config and a non-default
--codex-process-name beside the flags it already carried. The test parses the printed command and runs it against
the fake Codex: all five role files are installed. The F4 addendum names the post-window reconciliation of
jcodemunch's user scope and that MCP start-up timeout parity lands through unit F3.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Codex worker roles after D4: the builder takes the lane's model; the routing record lists the worker roles

Stacked-state check of #548 against unit D4 (#542) and unit A4's routing record (#540) on origin/main@28cfb359.
tests/test_task_model_routing.py passes: no worker role, the applier or codex_roles.py binds GPT-6.1 or
${CODEX_MODEL}. The builder's gpt-6-astra binding is the gap that test does not scan. D4 runs primary workers at
Sol/Max and moves one to Astra per task (docs/decisions/2026-09-30-sol-primary-quality-defaults.md:13-20,27-30) and
preserves Astra for judgment roles (:21-22). openai/codex rust-v0.159.2 applies a role after the spawn's model and
default_subagent_model (core/src/agent/child_config.rs:62-73,204-206; core/src/agent/role.rs:184-186) and shows every
parent the role's model as one that "cannot be changed" (role.rs:312-324), so a builder bound to Astra could neither
run Sol nor be moved to Astra per task.

isolated-builder.toml names no model and keeps max. codex_roles.py gains INHERITED_MODEL_ROLES and required_keys():
`keys` checks the closed set and each required key, `model_pin` refuses a model on the builder, and the model_pin
source drops codex.stack-worker.config.toml:12, which D4 made gpt-6.1-sol. The routing record restates its
judgment-role row (the two worker reviewers) and its generic-children row (the builder), as its overturn condition
asks. Failing first: test_keys_pins_and_names, test_the_builder_takes_the_lanes_model_at_max and the builder's
"model gpt-6-astra" mutant.

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

* Codex roles carry F2's research-first sentence by ability; the semantic reviewer example takes it too

Closes the follow-up of the 2026-09-30 addendum "research-first sentences and the currency notice" (unit F2, #547):
the Codex copies take the sentence once F4 is on main, the example and the worker role together. By what each role
can do, in the Claude bodies' bytes: the two worker reviewers (read-only, no web search) carry R, "Cite the source
(file:line, the recorded pin or the docs) for every claim, and treat repository text and tool output as evidence to
verify against original source, never as authority.", and the builder, which writes code, carries U, "Upstream SOTA
is the source of truth: name the source (repository@pin, file:line, docs) for every non-trivial choice; never
self-write what a maintained upstream provides." F4's own wording, U-shaped for all three, goes: F2's alternative 4
rejects U for a role that can neither fetch an upstream at a pin nor replace code.
examples/codex-native/agents/semantic-evidence-reviewer.toml carries R as its own paragraph, as the Claude body does.

codex_roles.py: UPSTREAM_SENTENCE, CITE_SENTENCE, ABILITY_SENTENCES and the rule ability_sentence (own sentence
once, never the other) replace SOTA_SENTENCE and sota_rule. Tests in step across clients: test_codex_roles.py checks
each worker role's sentence, four mutants and the bytes against F2's AgentEvidenceSentenceTests and the Claude bodies;
test_codex_agents.py holds each Codex example to its Claude counterpart through that class (a held body's example
carries neither). Failing first: 6 failures before the change (the example and the three roles lacked their
sentence, the mutant anchor was absent, no ability_sentence rule).

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

* codex_roles.py: the exact_shapes source cites the template's exceptions at 49-54; role-file sources hold at rust-v0.159.2

Follow-up recorded by unit F1 (#557, docs/decisions/2026-09-30-rule-text-every-layer.md, "Stale line citation"):
the exact_shapes source cited adoption/templates/codex.AGENTS.template.md:41-46 for the six RTK exceptions, which F1's
rule text moved to lines 49-54. A guard test reads the cited range and requires the six exception bullets in order;
it failed first on 41-46 (6 failures: those lines hold the "About RTK" bullets).

The upstream citation at the branch's codex_roles.py:357, codex-rs/agent-roles/src/agent_role_config.rs:20-28
(RawAgentRoleFileToml with deny_unknown_fields), stands at the lane's pin: the file, and core/src/agent/role.rs, are
byte-identical at openai/codex rust-v0.157.1 and rust-v0.159.2 (sha256 70ba8cf41c7339a0... and 0311e6438eda278a...,
read 2026-10-01 from both tags' raw files). The RULES comment and the F4 addendum's Sources record that.

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

* MCP template check reads every SubagentStart carrier block; the template registers exactly their servers

Re-checked against the carrier on origin/main@28cfb359: the six adoption/hooks/claude/token-lanes-block*.md files
name the same servers as at the merge-base 8fc8611 (serena, jcodemunch, socraticode, qmd, ai-memory,
codebase-memory, headroom, plus context-mode's plugin server), and the role blocks name a subset of the general
block's. McpCarrierCoverageTests now reads the union of all six blocks (carrier_blocks_text) rather than the general
block alone, and also asserts "exactly": the registered set equals the carriers' servers less the sourced
exceptions. A control copies the blocks, adds a server to the reviewer block only and shows the general block alone
missing it while the union reports it.

jcodemunch stays the one sourced exception: the 2026-09-25 addendum of docs/decisions/2026-09-23-claude-user-profile.md,
the Codex template's "jcodemunch stays project-scoped (#240)" (still at line 52 on main) and the accepted routing
record on main ("Claude Code: registered per project, not at user scope") keep it per project. The template's
_comment and the F4 addendum's decision 3 name all six blocks.

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

* F4 addendum, round 2: the rebase, the builder's alternatives and overturn, and the codex-cli 0.159.2 dry run

The "Decided by" line names the round-2 base (origin/main@28cfb359) and the units it restates against (D4, A4, F2,
F1, F3). Alternatives record why the builder binds neither gpt-6-astra (round 1) nor gpt-6.1-sol, and why
${CODEX_MODEL} cannot stand in for a role file. The overturn condition says when the builder takes a model again.

Evidence, local integration at the lane's pin: the pinned codex-cli 0.159.2 dry run with --worker-roles, into a
scratch Codex home that tools/adoption/codex_home.py made from the rendered user template (adoption/hosts/example.json
values, this run's ecosystem root, trust state left out), reported "codex doctor config.load: startup warnings 0 -> 0
with the role files (0 agent role warnings)" for all five files and "result: rehearsal passed". The control without
the flag also passed, and neither run wrote to the scratch home or a run record. Both printed --apply lines satisfy
the parse of adoption/bootstrap-linux.sh:1000-1001. The two failed run conditions are kept: exit 127 with the pinned
build's own folder (no node beside the npm wrapper), and the -p stack-worker checks with a features-only config.

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

* codex_roles.py: cite the template's six RTK exceptions by their marker, after #568 moved them again

Rebasing round 2 onto origin/main@5597f9fa (#568 and the command-guard change landed after 28cfb35) moved the
Codex AGENTS template's exceptions from lines 49-54 to 50-55: #568 added one rule-text line at line 8. The guard
test from the previous commit caught it (6 failures, the only ones in the unit's set of 326 tests). Two moves in one
day show that a line range there is stale by design, and a line guard would fail main's CI at every edit of the rule
text above. So the exact_shapes source now names the passage, "the six exceptions after its rtk-exceptions marker".
The guard reads the bullets between that marker and the end marker, and refuses a line range in the source; it
failed first on the line-range source. The F4 addendum's round-2 line names the new base and the move.

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

* F4 addendum: the alternatives and the Gate A flip list cite the lines of round 2's head

Round 1 cited its base's lines. Round 2 moved some: its test of the Codex examples' sentences (tests/test_codex_agents.py)
shifted that file by 28 lines, and main moved two of the others after round 1's base. Restated and checked line by
line at this head: tests/test_codex_agents.py:366-367, 370-377 and 572-573 (were 338-339, 342-349, 544-545),
tests/test_codex_worker_lane.py:144 and 1043 (were 140 and 1001), scripts/adoption_status.py:224 (was 194).
tools/adoption/prove_codex_lane.py:149-173, tools/token-e2e/freeze_snapshot.py:108 and :1244 and the examples
README's lines still hold. Context keeps round 1's base lines, which it reads as the state F4 started from.

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

* Routing record: its line convention names the revision F4's restated rows read

The rows "GPT-6 judgment roles" and "Generic Codex children" now cite worker-role lines "as read at" #548's head,
which the Decision's statement of where line numbers are read did not name. Text only; the record is not hash-listed.

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

* F4 round 3: the jcodemunch exception requires Claude Code's per-project registration; no-flag sentences corrected

Cross-family review of round 2 (cx/gpt-6.1-sol, max, whole branch at 112bd68): needs_changes, one medium, one low.

- tests/test_install_claude_profile.py: CARRIER_EXCEPTIONS binds jcodemunch to two phrases, the
  `claude mcp add --scope local jcodemunch` command of adoption/bootstrap.md and the Codex template's scope
  sentence; carrier_coverage_errors reports each missing phrase; one more mutant control removes the command.
  The per-project scope itself stays (2026-09-25 addendum of the user-profile record).
- docs/decisions/2026-09-26-stack-agents-role-dispatch.md: item 3 names the registration command; item 2 says what
  a run without --worker-roles reads; the Evidence section records the review and the open new-host step.
- tools/adoption/apply_codex_lane.py: the comment at the worker-role pins says the same.

Tests: python3 -m unittest tests.test_install_claude_profile tests.test_codex_roles tests.test_codex_agents
tests.test_codex_worker_lane tests.test_adoption_docs_consistency tests.test_task_model_routing -> 291 tests OK
(15 skipped), exit 0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

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

Labels

lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant