Repository navigation
New-WSL: Codex 0.160.0 profile pins, main-checkout Codex trust grant, Opus 5.5 model (follow-up to #626) - #683
Conversation
#626 PR #626 (merged at f77a35e, 2026-10-04T06:53:20Z) moved the shared Linux Codex pin and the openai-codex SDK pair to 0.160.0 and left the new-WSL profile, handbook and receipt for this follow-up. - adoption/new-wsl-profile.json: the Codex and Codex Python SDK rows and the boundary pins take the 0.160.0 values of #626's withdrawn profile commits (f51b3e0, fbbd939), each checked against main: npm tarball sha256 37351776... and 4,902 bytes (adoption/pins-linux-x86_64.json and the runtime-sdk-20261003 receipt), wheel sha256 61d2d855... (adoption/sdk/requirements-linux-x86_64-py313.lock), source commit a956835d (manifests/stack.json), published_at (runtime-sdk-20261003 qualification-facts.json) and the two rust-v0.160.0 release-asset digests (GitHub release API, read 2026-10-04). Both archives were downloaded and rehashed again on 2026-10-04. Provenance is #626's merged state on the #580 pattern: sdk_gate #626, sdk_gate_status merged_at_2026-10-04T06:53:20Z, accepted_main f77a35e. The TypeScript SDK row (#626 pinned no @openai/codex-sdk), source_head and the dated `codex update --help` observation stay. - adoption/new-wsl-profile.md: the overview sentences and the table follow. - tests/test_new_wsl_profile.py: #626's withdrawn hunk, verbatim (9bb0b1e^). - docs/new-wsl-handbook.{json,md}: python3 scripts/build_new_wsl_handbook.py --write, then --check (exit 0). - evidence/artifacts/new-wsl-handbook-20261001/receipt.json: profile_sha256 and the two outputs hashes follow the regenerated files (2026-10-01 handbook generator record, L665); generator_sha256 and the inventory are unchanged. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…odel
Codex trust grant (coordinator's decision of 2026-10-04, R16 review: Codex
0.160.0's folder-trust dialog stays, our root pre-trusted, unknown projects
still asked about; openai/codex #49160 is in rust-v0.160.0).
- adoption/new-wsl/client-config-map.json: the shared template's existing
projects."${PROJECT_ROOT}".trust_level piece gets its own entry, classed
authorization, so it is rendered and written only with
--with-authorization-settings and never over a file's own answer.
${PROJECT_ROOT} is the main checkout on the new distribution (host
template), and Codex looks a linked worktree's trust up under it by exact
key (rust-v0.160.0: tui/src/config_update.rs L264-279 and L305-366,
git-utils/src/trust.rs L12-24, core/src/git_info_tests.rs L829-968,
config/src/loader/mod.rs L131-133). The publication checkout and every
other projects.* piece stay not wired.
- tools/adoption/new_wsl_client_config.py: is_authorization_piece names
codex/*/projects.*.trust_level (the one pattern the record's open
observation asked for); the apply passes codex_home.py
--keep-project-trust; the merge reports a piece whose key names a
placeholder under the path the render filled (it reported such a grant as
added even when the file had it); the default authorization line and the
option's help name the grant.
- tools/adoption/codex_home.py: additive --keep-project-trust, the mirror of
--keep-hook-trust, so a new Codex home keeps the grant the render holds and
a later merge ends with the same file. The bootstrap passes neither flag;
its output is unchanged.
Model: the user's choice of 2026-10-04 (question tool), Opus 5.5. A map entry
overrides the shared template's opus[1m] with claude-opus-5-5 for the new
distribution only (code.claude.com/docs/en/model-config, read 2026-10-04:
the full model name pins a version; opus resolves to Opus 5.5 on the
Anthropic API). The resolved model is the same as before; the new
distribution no longer follows the shared template. No repository file held
`sonnet` for it.
- docs/decisions/2026-10-02-new-wsl-client-configuration.md: tables from
--check --markdown, counts (385 / 293 / 79 / 13) and an addendum of
2026-10-04 with sources and overturn conditions.
- tests: the authorization class gains the grant; new tests for a new Codex
home with the option, a file's own answer kept, the predicate rows, the
rendered model and codex_home's flag. Mutation controls: dropping the
placeholder fill fails 4 tests, dropping --keep-project-trust fails 2.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ol, last commit) host_receipts.register_file for the seven changed files main's manifests/evidence.json lists: adoption/new-wsl-profile.json and .md, docs/new-wsl-handbook.json and .md, the new-wsl-handbook-20261001 receipt, tests/test_bootstrap_full_profile.py and tests/test_new_wsl_profile.py. component_matrix.py --write and new_host_grand_list.py --write changed nothing. python3 scripts/validate.py: exit 0, status passed. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
Claude session native-agent-stack-5f: landing at head Observed main Required checks at this head: 8 pass . Unresolved review threads: 0. |
|
Claude session native-agent-stack-5f: post-merge observation. Landed as |
… three files Hot-file protocol, merge path (docs/lanes.md): main moved during the review round and its #688 edits docs/decisions/2026-09-22-github-automation-closure.md (30 lines at 465; this branch's sentence, now at 1653, merged cleanly) and .github/workflows/security-scan.yml. manifests/evidence.json is main's copy with tests/test_workflow_policy.py and the two decision records re-registered through host_receipts.register_file; component_matrix.py --write and new_host_grand_list.py --write changed nothing. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…1004
manifests/evidence.json conflicted (hot file): resolved by the docs/lanes.md merge path, taking
main's copy and re-registering this branch's five files with host_receipts.register_file:
.github/workflows/{adoption-bootstrap,catalog-freshness,validate}.yml and
tests/test_{shell_parser_ci,workflow_hardening}.py. tests/test_workflow_hardening.py merged
cleanly (#688's retired WSL OSV group, lines ~289-350, beside this branch's suite checks).
component_matrix.py and new_host_grand_list.py --write changed nothing; validate.py passes.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ot-file protocol) #683 (New-WSL Codex 0.160.0 profile pins, main-checkout trust grant, Opus 5.5) lands before this PR and edits the B1 record. manifests/evidence.json is main's copy (it auto-merged; main's copy was taken by checkout); the branch's rows are re-registered in the last commit. Conflict resolved in docs/decisions/2026-10-02-new-wsl-client-configuration.md (Decision 2's counts): main's wording (the trust grant as an authorization piece) with the counts measured on this merged tree by new_wsl_client_config.py --check --json: - measured on the merged tree: (386, 294, 200, 94, 79, 41, 38, 13) - main b629b5b alone: (385, 293, 200, 93, 79, 41, 38, 13) - approved on 2026-10-04: (386, 294, 200, 94, 80, 41, 39, 12) The one new row is still codex/stack-worker/mcp_servers.serena.required (slot:serena, wired); #683 moved one piece from not wired to authorization. The dated 2026-10-04 sentence (385, 293 and 93 before #674) still holds, and Decision 14's phrase (authorization 13, 79 not wired) does not move. tests/test_new_wsl_client_config.py merged cleanly; the module exits 0. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ds branch (hot-file protocol: main's registry; PR rows re-registered last) Co-Authored-By: Claude Opus 5.5 <[email protected]>
…y (387 pieces, 80 not wired, 39 own entry) The key under tui.model_availability_nux is one more not-wired piece (client state, not configuration). Recounted on the tree merged with main 54eb892 (#674, #683, #686) by the GPT-6.1 Sol worker; reviewed by the coordinator. Co-Authored-By: Claude Opus 5.5 <[email protected]>
… row, held status, TUI notice key (#687) * Codex dated holds (R6): one pin row with a host-agnostic 0.159.3 hold until 2026-11-04 - adoption/pins-linux-x86_64.json: the codex row carries holds[] with one entry, 0.159.3 until 2026-11-04 (X18, the #626 landing exception). Wrapper URL and SHA-256 are the row's values before f77a35e (from 85543ef, #580), re-verified against a registry download; the linux-x64 platform_dependency (row shape) is first recorded here from the npm registry. - scripts/adoption_status.py --pinned-versions: a probe naming a hold's version before its until date (UTC) is held (hold_* fields, summary "held", "held until <date> (<reason>)"), not drift; on and after until it is mismatched with the expiry stated. Malformed holds are skipped. The default run, the exit code and the existing keys are unchanged. - tools/adoption/apply_codex_lane.py still refuses any codex but CODEX_VERSION; the refusal now names a matching hold and its until date. - tests/test_pin_holds.py: every hold complete, until a real date after today (UTC) and at most 90 days away, at most one hold per row (the OSV ignoreUntil precedent), with mutants. - adoption/templates/codex.config.template.toml: "gpt-6.1-sol" = 4 under [tui.model_availability_nux], cited from openai/codex rust-v0.160.0 (MODEL_AVAILABILITY_NUX_MAX_SHOW_COUNT = 4). - docs/decisions/2026-10-04-codex-dated-holds.md: design, alternatives, precedent, overturn. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Codex dated holds: stack.json reference and evidence registry (hot-file protocol, last commit) manifests/stack.json's codex row carries no install data, so its freshness refers to the pins row's dated hold instead of copying it. manifests/evidence.json takes main's copy (6af8e55) and re-registers this branch's changed files plus its new test and decision record, as #626 did; component_matrix.py and new_host_grand_list.py --write reproduced their outputs unchanged. Co-Authored-By: Claude Opus 5.5 <[email protected]> * New-WSL client-config record: recount after the gpt-6.1-sol notice key (387 pieces, 80 not wired, 39 own entry) The key under tui.model_availability_nux is one more not-wired piece (client state, not configuration). Recounted on the tree merged with main 54eb892 (#674, #683, #686) by the GPT-6.1 Sol worker; reviewed by the coordinator. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Registry: re-register the PR-owned files after the recount (last commit) Co-Authored-By: Claude Opus 5.5 <[email protected]> * Hot-file protocol: reset manifests/evidence.json to the merge base before the final hot-file commit Co-Authored-By: Claude Opus 5.5 <[email protected]> * Reapply this branch's manifests/evidence.json edits on the merge base (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <[email protected]> * adoption_status: one hold schema for run time and the pins test (cross-family P1) pin_holds() now keeps only holds that hold_schema_problems() accepts. The same validator is imported by tests/test_pin_holds.py. It requires the wrapper url and sha256, and the platform package's shape, version, url, digest and binary check when the pin has one. So a hold with malformed install metadata is ignored, and the version is reported as drift instead of held. Failing-first: the three missing-field cases failed before the fix; 16 malformed-metadata cases pass after it. Built by the GPT-6.1 Sol worker; reviewed by the coordinator (Claude Opus). Co-Authored-By: Claude Opus 5.5 <[email protected]> * Registry: re-register the fix's files (last commit) Co-Authored-By: Claude Opus 5.5 <[email protected]> * Hot-file protocol: reset manifests/evidence.json manifests/stack.json to the merge base before the final hot-file commit Co-Authored-By: Claude Opus 5.5 <[email protected]> * Reapply this branch's manifests/evidence.json manifests/stack.json edits on the merge base (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Co-authored-by: Scout <scout@local> Co-authored-by: Claude Opus 5.5 <[email protected]>
Scope
openai-codex) to 0.160.0. (2) The client-config builder pre-trusts the main repository checkout in Codex as an authorization setting. (3) The builder pins NativeStack2604's Claude main model to Opus 5.5 (claude-opus-5-5).f77a35eb2bf30bc4bf6f3b4ee51bc9ce5397b4c5(the merge of Codex 0.159.3 -> 0.160.0 with the Python SDK pair: pins, qualification receipt, tests and checkpoint #626;origin/mainhad not moved at push time)lane:foundation(all paths are foundation-owned perdocs/lanes.md; themanifests/evidence.jsonchange is only the hot-file re-registration)adoption/new-wsl-profile.{json,md},adoption/new-wsl/client-config-map.json,tools/adoption/new_wsl_client_config.py,tools/adoption/codex_home.py,docs/new-wsl-handbook.{json,md},docs/decisions/2026-10-02-new-wsl-client-configuration.md,evidence/artifacts/new-wsl-handbook-20261001/receipt.json,tests/test_new_wsl_profile.py,tests/test_new_wsl_client_config.py,tests/test_bootstrap_full_profile.py,manifests/evidence.json(last commit, alone)SOTA sources
rust-v0.160.0(release published 2026-10-01T20:19:13Z, target commita956835d020762cb2b570053af06f643a11c0ecc; read 2026-10-04):codex-rs/tui/src/config_update.rsL264-279: a project's trust entry is found by exact key, case-insensitively only for a Windows path. L305-337: the lookup tries the cwd, then the project root, then the git trust root. L338-366: a savedtrustedlevel asks nothing.codex-rs/git-utils/src/trust.rsL12-24:resolve_root_git_project_for_trustresolves a linked worktree to the main repository's root.codex-rs/core/src/git_info_tests.rsL829-968: a worktree and its nested directories resolve to the main root; missing metadata, a mismatched backlink, a mismatched commondir and a symlinked.gitare refused.codex-rs/config/src/loader/mod.rsL131-133: project config layers are "loaded but disabled when untrusted".0d7b8117d3cc6d9ffe21d22375d70307133e9f16, an ancestor ofrust-v0.160.0(compare: behind_by 0): "Let/cdrequest folder trust".https://api.github.com/repos/openai/codex/releases/tags/rust-v0.160.0:codex-package-x86_64-unknown-linux-musl.tar.gz4fcc47ab…,codex-x86_64-unknown-linux-musl.tar.gz30686541….@openai/[email protected](https://registry.npmjs.org/%40openai%2Fcodex/0.160.0): tarball integritysha512-kEtVGzj…, equal to the local rehash. PyPIopenai-codex==0.160.0(https://pypi.org/pypi/openai-codex/0.160.0/json): wheel sha25661d2d855….opusalias resolves to Opus 5.5 on the Anthropic API; "To pin to a specific version, use the full model name, for exampleclaude-opus-5-5"; Opus 4.7 and later run with the 1M window on the Anthropic API without a[1m]suffix.f77a35eb2) and its withdrawn profile commitsf51b3e06,fbbd9393,5cb4d06fand the withdrawal9bb0b1e9;adoption/pins-linux-x86_64.json,manifests/stack.json,adoption/sdk/requirements-linux-x86_64-py313.lockandevidence/artifacts/runtime-sdk-20261003/{receipt,qualification-facts}.jsonat main; the handbook generator recorddocs/decisions/2026-10-01-new-wsl-handbook-generator.mdL665 (receipt hashes follow the regenerated files); the client-config record's open observation at L699-702 (trust pieces belong in the authorization class).What changed and why
c320b11ee). Every version-bound field of the Codex and Codex Python SDK rows reapplies Codex 0.159.3 -> 0.160.0 with the Python SDK pair: pins, qualification receipt, tests and checkpoint #626's withdrawn values unchanged: tarball name, URL, sha25637351776…and 4,902 bytes; wheel URL and sha25661d2d855…; install, README and quickstart sources atrust-v0.160.0; release tag andpublished_at;source_commit a956835d; the native-update floor; and the two release-asset digests. Each value was checked against main's pins, stack manifest, SDK lock and Codex 0.159.3 -> 0.160.0 with the Python SDK pair: pins, qualification receipt, tests and checkpoint #626's receipt, and live against GitHub, npm and PyPI. Both archives were downloaded and rehashed again on 2026-10-04.f77a35eb2on 2026-10-04T06:53:20Z, so the rows follow the Qualify Codex 0.159.3 and align the SDK pair #580 pattern already in the file:sdk_gateCodex 0.159.3 -> 0.160.0 with the Python SDK pair: pins, qualification receipt, tests and checkpoint #626,sdk_gate_status: merged_at_2026-10-04T06:53:20Zandaccepted_main: f77a35eb2….@openai/codex-sdk), the top-levelsource_head(bound by the test'sHEAD) and the datedcodex update --helpobservation.build_new_wsl_handbook.py --write. In the receipt, onlyprofile_sha256and the twooutputshashes move; the generator hash and the inventory are unchanged.8d5817f96). The shared Codex template already has a templated piece,projects."${PROJECT_ROOT}".trust_level, and NativeStack2604's host template setsPROJECT_ROOTto thenative-agent-stackcheckout in the home. No new template slot or literal path is needed.authorization:, notpractice: the tool's own definition ("suppresses a confirmation") and the record's open observation both say so.is_authorization_piecegains one pattern,codex/*/projects.*.trust_level. The grant is rendered and written only with--with-authorization-settings, and never over a file's own answer. The publication checkout's grant stays not wired.codex_home.pydropped every[projects]table from aconfig.tomlit created, so the apply would have reported the grant "added" without writing it. It gains an additive--keep-project-trust(the mirror of--keep-hook-trust), which the builder passes. The bootstrap passes neither flag, so its output is byte-identical.modelwithclaude-opus-5-5for the new distribution only, quoting the user's choice of 2026-10-04. The additions file cannot carry it:merge_additionsrefuses a key the shared template defines, and a mapoverrideis the builder's mechanism for that.advisorModelstaysfable.6b68939ac, alone): seven files main's manifest lists.component_matrix.py --writeandnew_host_grand_list.py --writechanged nothing.Deviations from the brief
sonnet. The builder already rendered the shared template'sopus[1m], which resolves to Opus 5.5 on the Anthropic API today. The "sonnet" is most likely a live host's saved/modelchoice: the docs say/modelsaves to the settingsmodel, anddocs/decisions/2026-09-29-sonnet-5-5-dispatch.mdL31 records a Sonnet 5.5 user setting on the workstation. This PR does not change the resolved model; it pins NativeStack2604 to the user's explicit choice, independent of the shared template. The next builder--applyoverwrites a savedsonnet, because template scalars win (Decision 12).--applyline is the plain one, so the grant is written only when the coordinator adds--with-authorization-settings, exactly as forapproval_policy = "never"today.tools/adoption/codex_home.py(additive flag) and the 2026-10-02 decision record (generated tables, counts and a 2026-10-04 addendum, all required by its tests).adoption/platforms/linux-wsl2-new-distro.mdL1013-1027) lists the authorization settings without the new grant. Its statements remain true for its plain--applyline. The page is hash-bound by the handbook and byblueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json, so updating it is a separate re-freeze.Evidence-class table
source_reviewgh api repos/openai/codex/releases/tags/rust-v0.160.0; npm and PyPI JSON; main's pins, stack, lock and runtime-sdk receiptlocal_integrationcurl+sha256sumat 2026-10-04T07:10:24Z:37351776…(4,902 bytes),61d2d855…; tarball sha512 equals npm's integritylocal_integrationbuild_new_wsl_handbook.py --writethen--check(exit 0);test_new_wsl_handbooksource_reviewrust-v0.160.0above (upstream tests read, not run)local_integration(synthetic fixtures)tests.test_new_wsl_client_config(new tests); mutation controls: no placeholder fill fails 4 tests, no--keep-project-trustfails 2claude-opus-5-5; other hosts keepopus[1m]local_integration--render --host example;test_settings_keep_the_practice_pieces_and_drop_the_old_profile_piecesclaude-opus-5-5pins Opus 5.5source_reviewNothing here is
native_proven. No client ran and no model was called. Nothing was applied to NativeStack2604 or to any host.Local commands run
Decision record
docs/decisions/2026-10-02-new-wsl-client-configuration.md, "Addendum 2026-10-04: the main checkout's Codex trust grant and the model". It names the sources, the alternative classes and what would overturn each decision: Codex matching trust by a parent directory or another key form; a decision that the root should ask again; or the user choosing another model or the floatingopusalias.Host evidence
Not applicable: no file under
evidence/hosts/changes.Checklist
permissions: contents: read(none changed).🤖 Generated with Claude Code