Repository navigation
Preserve parent model for generic Codex children and document native token practice - #902
Conversation
7ed603a to
d9fc3df
Compare
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: d9fc3df941
ℹ️ 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".
| # (protocol/src/openai_models/reasoning_effort.rs and models-manager/models.json at the same pin). The child model is | ||
| # the coordinator's CODEX_MODEL, so a pin before 0.159.1 runs gpt-6-astra children at max. | ||
| default_subagent_model = "${CODEX_MODEL}" | ||
| # Generic children keep the parent step's model_info.slug; Max remains the default effort. |
There was a problem hiding this comment.
Preserve the default until the macOS pin is qualified
This shared template is also rendered for the pinned macOS Codex 0.155.1 client, but the cited inheritance evidence covers only 0.161.0/0.162.0; the new behavior record itself says at docs/token-practice.md:703-705 that 0.155.1 has no native inheritance qualification. Removing the model key nevertheless changes fresh macOS configurations, so generic children there no longer have the previously deterministic Astra model without evidence that this client inherits the parent correctly. Either retain the explicit default for that pin or qualify 0.155.1 before applying the omission to it.
AGENTS.md reference: AGENTS.md:L5-L7
Useful? React with 👍 / 👎.
| # Source: openai/codex rust-v0.162.0, codex-rs/core/src/agent/child_config.rs L115, L137, L204-249. | ||
| # The rust-v0.161.0 file is byte-identical (SHA256 33d4dd6f70e6640af1059398272c48b88e16e0005105fbd1ef13e30456d39a39). |
There was a problem hiding this comment.
Correct the pinned child-config source locators
The immutable openai/codex@979011409de0a60b52f179721948e65531d26144 source referenced by this change does not place these operations at the stated lines: the parent-model assignments are at lines 109 and 129, generic defaults are selected around 193-195, and the effort-only branch is around 229-236. The same incorrect locators are repeated throughout the new decision evidence, so readers following the claimed primary source land on unrelated code; regenerate the locators and recorded digest from the actual pinned file.
AGENTS.md reference: AGENTS.md:L6-L7
Useful? React with 👍 / 👎.
Generic Codex children previously received the template's rendered model default even when their active parent used another model. This draft removes
agents.default_subagent_model, retaining the parentmodel_info.slug, Max child effort and native explicit spawn/role precedence. The behavior record names every current lane and role, qualifies unsupported-parent Max and older macOS boundaries, and makes no token or cache saving claim.The CC Claude read's two P2 fixes correct the adopter guide and the renderer's CLI help. The record also requires F9's reviewed live-apply diff to delete the existing host key after landing; removing a template entry alone would leave that setting in a merge-style apply. The catalog now records a declined generic-model decision with live deletion explicitly pending. This PR does not read or edit the live host configuration or claim it has been applied.
Scope
06aca3df6c9ba0edea13719e4b7fb8169bba9838. The reviewed input head is7ed603a7b2fb124e9d4ba9c02f0099c0aaa04010, originally based onaba02ec3456d383bcc2fc72883db098f9be7918a. J8 and both input-head micro reads stand; the final micro reads cover the rebase delta and this description.lane:shared; the other lane's acknowledgement remains required before merge.adoption/templates/codex.config.template.toml,docs/token-practice.md, and existing teststest_render_config,test_codex_roles,test_task_model_routing.adoption/bootstrap.mdandtools/adoption/render_config.py's module docstring, which supplies its CLI help. Renderer source and AST outside the docstring remain unchanged.docs/decisions/2026-09-30-task-model-routing.md,2026-09-30-sol-primary-quality-defaults.md,2026-09-27-model-currency.md, and2026-09-26-stack-agents-role-dispatch.md. The Sol-primary September paragraph is restored verbatim as history; its dated addendum describes current enforcement.catalogs/foundation/upstream-surface-dispositions.jsonanddocs/decisions/2026-10-02-new-wsl-client-configuration.md. The prior metrics locator :290 fix and dated 402/362/211 projection remain. The generic-model catalog row now cites the required F9 deletion record, with no false applied-state claim.manifests/evidence.jsonis refreshed through canonicalregister_file, including new registrations fortests/test_task_model_routing.py,docs/decisions/2026-09-30-sol-primary-quality-defaults.md, anddocs/decisions/2026-09-30-task-model-routing.md. The hot-file rebase preserves main's entries together with this PR's registrations and updates.7ed603a7reported zero findings at confidence >=80, 31 below 80, and nine undeclared items; those nine are declared below. Both input-head micro reads are in. The required final reads cover only the rebase delta and description, followed by green CI and the CC's cue. 5f lands on cue; F9 applies after landing from a reviewed diff that deletes the live key.J8 scope declarations
tests/test_task_model_routing.py:86-87:D4_BINDINGSdrops(USER_TEMPLATE, "agents.default_subagent_model"). The stricterassertNotInat :279 also requires the generic model key to be absent from the template.tests/test_task_model_routing.py:319: the new assertion requires the generic-children record to be("Codex CLI", "max"); the child model is inherited from the active parent and its default effort remains Max.tests/test_task_model_routing.py:56-58:SOL_ROUTESnarrows from three explicit Sol routes to two because generic children no longer take a template-supplied model.manifests/evidence.jsonnewly registersdocs/decisions/2026-09-30-sol-primary-quality-defaults.md.manifests/evidence.jsonnewly registersdocs/decisions/2026-09-30-task-model-routing.md.adoption/templates/codex.config.template.toml:24-29removes the Max/Ultra explanatory comment; this comment removal changes documentation only.tools/adoption/render_config.py --checkagainst the existing live host will report drift until F9 applies the reviewed deletion after landing. Template omission alone does not delete an existing key during a merge-style apply. This is the declared pending-host effect; this lane has not run a live-host check or changed that host.docs/token-practice.md:153-244adds operator directives for worktree-confinedctx_execute_fileand shared-file reads throughctx_execute/ctx_batch_execute,bash -caround batches that start withfor, native tool discovery, Serena session identifiers, cache attribution, and inferred hcom terminal approval states. The 92-line block remains byte-identical to the reviewed input head; its directives are explicitly within the native token practice scope.J8 report:
api-actions-20261008/readers/J8/pr902/run-20261009T031426Z/report.md, SHA-256df3cbe1daae2c70e4bb5b074cf4d72e245c182535590ecce4bd50e8e84118f42. Line numbers above refer to the J8-reviewed input head. The existing method-level declaration table and recorded base-test failures remain part of this scope.SOTA sources
33d4dd6f70e6640af1059398272c48b88e16e0005105fbd1ef13e30456d39a39; the earlier independently fetched comparison is reused.cx/gpt-6.1-sol/maxwith no generic default and unchanged catalog. This is separate from source review or native qualification of other aliases/platforms.rtk read --help/rtk rewrite --helpfor supported windows, default-none and rewrite classification. Citations are added outside the protected 92-line block.docs/lanes.md:106–107andscripts/host_receipts.py:710, canonical registration; catalog disposition rules distinguish selected practice from applied host configuration. Existing citation and WSL-count guards remain unchanged.Evidence-class table
Local commands run
Every module ran separately at final head
d9fc3df9413795c8f61212066ef30bd9c6a3ebb4undernice -n 10 ionice -c2 -n7 timeout 600 python3 -B -m unittest <module>. The 11 literal template readers were render_config, codex_roles, task_model_routing, skills_manifest, observability_tool_names, install_claude_profile, codex_worker_lane, codex_agents, currency_due_notice, windows_terminal_defaults and runtime_worker_openhands_push_gate. The five relevant indirect/dependent readers were upstream_surface_watch, new_wsl_client_config, adoption_status, adoption_contract and adoption_docs_consistency. All three changed modules passed. Across the sixteen modules, unittest reported 1,107 tests, 22 skips, one failure and zero errors; fifteen modules returned 0 and windows_terminal_defaults returned 1. No module timed out or was rerun.The CC pre-cue tool's nonzero result is retained for the declared old expectations; it is not a passing check or a waived gate. The final micro reads and CC assess it alongside the changed-module results. Pre-cue output SHA-256:
2d81674220e8c899b242241222ba9f2ea6fbfc366cfef8e68b7e0908dd917d9e.The unchanged installed-Claude
plugin_notificationdecision-table failure intests.test_windows_terminal_defaults.OverlayTests.test_the_installed_client_knows_no_notification_type_without_a_decisionremains disclosed with its original-head reproduction. This PR does not suppress or repair that unrelated host policy. Final per-module results and log hashes are retained in the rebased-head receipt and sixteen-module report. The earlier native CLI-help result is retained from the reviewed input; its renderer blob remains identical after rebase.Decision record
docs/token-practice.md, "Generic child model default omission", records behavior, every lane/role, the Max failure boundary, explicit F9 deletion, older-platform qualification limit, provenance and the exact pre-cue declarations. Routing/model/role-dispatch addenda preserve dated history. The live apply must leave the effective model key absent across contributing layers; a merge-style omission cannot clear an existing host value. No token or cache saving was measured.Host evidence
No host receipt or platform-status change. The CC verified the existing live key; this lane neither read nor edited the host config.
Checklist