Skip to content

Register jCodeMunch per project instead of at user scope in the new-PC Claude profile - #240

Merged
seathatflowsinourveins merged 2 commits into
mainfrom
claude/jcodemunch-project-scope-20260925
Sep 25, 2026
Merged

seathatflowsinourveins merged 2 commits into
mainfrom
claude/jcodemunch-project-scope-20260925

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator

Summary

The new-PC Claude profile stops registering jCodeMunch at user scope. The user-scope template adoption/mcp/claude-user.json now carries only ai-memory and Serena. adoption/bootstrap.md step 4a still installs jcodemunch-mcp==1.108.319 and now documents a per-project opt-in. A dated addendum to docs/decisions/2026-09-23-claude-user-profile.md records the decision.

Why

  • At user scope, jCodeMunch's server instruction ("Prefer it over Read/Grep/Glob/Bash for code navigation") loaded into every session and contradicted agent-lab's routing: rg for discovery, Serena for symbols.
  • On the recording host's 5,076 retained transcripts, counted as unique tool_use ids: 15 jCodeMunch calls, against 33 for Serena and 7 for SocratiCode.
  • agent-lab's retrieval comparison scored it at hit@5 0.25, against SocratiCode's 0.85. Closure stays unresolved on a SocratiCode restore null, so jCodeMunch is not retired.

Changes

  • Template. jcodemunch is removed; the _comment gains a dated note.

  • bootstrap.md step 4a. The server list now reads ai-memory and serena. A "jCodeMunch, per project" paragraph gives the two opt-in forms:

    • claude mcp add --scope local …;
    • a checked-in .mcp.json entry using ${HOME}, which starts only after the workspace is trusted and the server approved.

    A nested ${VAR:-${HOME}/…} default does not expand, so a host with another prefix uses the local form.

  • Platform pages. linux-wsl2.md and macos-arm64.md describe the removal under the existing "changed after v2026.09.24.1" markers.

  • Tests.

    • The template-shape test now expects {ai-memory, serena}.
    • An inline JCODEMUNCH_SPEC, byte-equal to the removed entry, keeps the ${HOME} render and claude mcp get matcher coverage.
    • New tests check that the installed path registers only the template's servers, that env names are matched, and that both opt-in snippets keep JCODEMUNCH_SHARE_SAVINGS=0.
  • Manifest. Affected entries are rehashed.

Checks

  • python3 scripts/validate.py, validate_catalogs.py, evidence_manifest.py --check, new_host_grand_list.py --check, build_ecosystem.py --check and release_due.py --strict-if-repinned origin/main: all exit 0, re-run after the rebase onto 194a6226.

  • python3 -m unittest tests.test_install_claude_profile tests.test_adoption_docs_consistency tests.test_adoption_bootstrap tests.test_evidence_manifest: 110 tests OK, 1 skipped. The skip also occurs on base.

  • Mutation checks:

    • the template still naming jcodemunch;
    • the matcher ignoring env names;
    • render skipping env values;
    • the local snippet losing the savings variable.

    All four mutants failed a test.

  • Guarded gitleaks over origin/main..HEAD: 2 commits, no leaks.

  • The opt-in forms were run as local integration checks on Claude Code 2.1.282, under a temporary CLAUDE_CONFIG_DIR. Their output is not retained here; the addendum says so.

Review

An independent evidence review of the first commit found it merge-ready, with 5 low notes. The second commit resolves the two that concern this repository: the untested savings setting in the snippets, and the evidence label for the opt-in checks. The other three concern the agent-lab companion doc (updated there), counts that the review reproduced, and checks that ran before merge.

🤖 Generated with Claude Code

…C Claude profile

adoption/mcp/claude-user.json drops its jcodemunch entry, so
install_claude_profile.py registers only ai-memory and serena at user
scope. Its server instruction ("Prefer it over Read/Grep/Glob/Bash for
code navigation") loaded into every session. On 2026-09-25 the host's
5,076 retained transcripts held 15 jCodeMunch tool calls (Serena 33,
SocratiCode 7). agent-lab's retrieval comparison scored it hit@5 0.25
against SocratiCode's 0.85; closure is unresolved on SocratiCode's null
restore_pass.

adoption/bootstrap.md step 4a keeps the jcodemunch-mcp install and adds
a per-project opt-in, either `claude mcp add --scope local` or a
checked-in .mcp.json entry using ${HOME}. Both forms were run on Claude
Code 2.1.282 under a temporary CLAUDE_CONFIG_DIR. A nested
${VAR:-${HOME}/...} default failed to connect. The "changed after
v2026.09.24.1" notes on bootstrap.md and both platform pages now also
cover the jcodemunch removal.

docs/decisions/2026-09-23-claude-user-profile.md gains a dated
2026-09-25 addendum with the evidence, alternatives, overturn condition
and limitations.

tests/test_install_claude_profile.py now expects {ai-memory, serena}.
Rendering and get-output matching keep the ${HOME}-in-env and env-name
coverage through an inline copy of the removed jcodemunch entry. A new
test checks that the installer registers exactly the template's servers.
manifests/evidence.json is rehashed.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…bel the opt-in checks as local

Review of dffce8fb: the template no longer carries JCODEMUNCH_SHARE_SAVINGS=0, so a
docs test now pins it in both adoption/bootstrap.md opt-in forms (mutation-checked),
and the addendum labels the two opt-in results as unretained local integration checks.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@seathatflowsinourveins
seathatflowsinourveins enabled auto-merge (squash) September 25, 2026 08:52
@seathatflowsinourveins
seathatflowsinourveins merged commit 997e7e1 into main Sep 25, 2026
23 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/jcodemunch-project-scope-20260925 branch September 25, 2026 09:04
seathatflowsinourveins added a commit that referenced this pull request Sep 25, 2026
…tools; --pinned-versions coverage check (#289)

* Codex MCP servers at user scope so every worktree inherits them; --pinned-versions coverage check

Codex loads a project .codex/config.toml only from the project root it runs in,
and the main checkout's copy is untracked, so Codex workers in fresh worktrees
had none of the token-practice MCP servers (coverage check complete=false).
The Codex user template now carries serena, socraticode, ai-memory, headroom,
codebase-memory and qmd; the project template keeps only jcodemunch (#240); the
context-mode cwd override is dropped. adoption_status.py gains an opt-in
--pinned-versions that runs only a pin's declared "exec" version_probe (#251)
and never an npm-metadata one. Applied on the workstation with codex mcp add
and read back from a fresh worktree: complete false -> true, all six servers
start. Decision: docs/decisions/2026-09-25-codex-mcp-scope.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Repair: version matching mirrors the bootstrap exactly (bounded exact, numeric minimum)

The independent review of #289 found two bugs in the new version_output_matches: a non-numeric minimum floor (e.g. 2.0.0.dev0) raised and emptied the whole report, and exact was an unanchored substring test (2.10 matched 12.10.0). Both now follow adoption/bootstrap-linux.sh: exact is bounded by (^|[^0-9.])...([^0-9.]|$), and minimum compares numeric parts via a ported version_at_least that returns no-match on a non-numeric part. Regression tests for both, plus malformed pins files. The host coverage result is unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Sep 26, 2026
…ecks, four real limits, and a correction to #296's QMD row (#343)

* Record the token stack inside native Codex sessions, and correct #296's QMD row

Codex side of #296: one native `codex exec` session per tool (codex-cli
0.155.1, gpt-6-astra, effort max) in a dedicated worktree, using RTK's
standing instructions, the Context Mode plugin, the #289 user-scope MCP
servers and the CLIs. 11 of 15 tools pass their answer checks; RTK +17782
saved for the run-only worktree; nine exact o200k comparisons from 28.2% to
99.8%; Codex-returned usage 7,085,015 input (6,253,312 cached) and 164,906
output over 17 sessions. The four failures are real limits: jCodeMunch is
project-scoped (#240), QMD's catalog index excludes adoption/, Repomix
--compress dropped a declaration, Context Hub lacks the upstream facts.
#296's QMD PASS retrieved a wrong document for its question; its README now
says so.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Sanitize the Codex E2E receipt after cross-family review (PR #343)

Codex review (gpt-6-astra, read-only) confirmed every number and evidence
class and asked for three fixes: replace the live-clone path, the
session-derived codebase-memory project id and the SocratiCode collection id
with placeholders, and state the QMD document count per attempt (121, then
122 as the live index grew).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 1, 2026
…ate 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 <[email protected]>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 1, 2026
…ate 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 <[email protected]>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 1, 2026
…ate 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 <[email protected]>
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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

---------

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant