Repository navigation
Bound discovery and synchronize maintained-decision directives - #568
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 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".
3ae65d6 to
76aeebe
Compare
76aeebe to
99543e8
Compare
|
Shared-lane acknowledgement — independent delegated trading-impact review Reviewed head: The read-only trading-impact reviewer 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 Read-only 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. |
Canonical source and host synchronization handoffPR: #568 Squash-merged source revision: This change carries bounded discovery and maintained-decision routing in the Use a separate clean source clone. Keep the runtime installation checkout at NAS_SOURCE_SHA=ba933bf791b797fa78d80081fe86e1a0b086dde1Preview 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 Before refreshing an adopted QMD catalog index, verify its selected collection qmd --index native-agent-stack-catalog update
qmd --index native-agent-stack-catalog statusRun The generated HTML is This is a source, instruction and index refresh. It does not reinstall runtimes, |
|
Note from the rule-text lane (c5, owner of unit F1's surfaces |
…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>
…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>
…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>
… 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>
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.
28cfb3595176c629b0a2a5051aaf614df8c510aclane:sharedpin_firstis 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
01fc69f4), native global instruction loader: override/default selection and Rust whitespace.codex-mdreuses this repository's existing managed-block/backup/atomic-write helpers; no client/config/profile/role/authentication operation.a8757a05a960f96a0ba510b6341bcd520cf80bb2),crates/ai-memory-mcp/src/server.rs:QueryArgs,ReadPageArgs, bounded single-project pin priority. Older v2.3.2 lackspin_first.tool_search_spec.rsand handler: supported query/limit selection and schema loading; no invented omission count/cursor.2b6e839,skills/search-first/SKILL.md: research/reuse before a custom router.Evidence-class table
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.Decision record
docs/decisions/2026-09-30-bounded-native-decision-routing.mdretains 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