Repository navigation
Wave-2 phase-0 records: X17 interim installs, install plan, client-configuration map and templates, skills, K4 guard and handbook - #659
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: b6828c7da2
ℹ️ 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".
|
Root exact-head FINDINGS: three P2 source defects after the requested Astra/max source read. Head b6828c7, base/captured main 4ced292. Fresh native API guard13:01:14 confirms this head OPEN/non-draft. Consequential trigger:75 changed paths, including15 executable files governing default authority, install order, client configuration and acceptance. Root independently checked the deciding original Git blobs after the reader returned. These are static source findings, without executing the counterexamples.
Source consistency is accepted separately:9420→9421 registry rows, no removals, all53 changed/added bindings match actual head blobs within the75-path delta;187 receipts and26 convergence records unchanged. Historical decisions remain separate from interims; selection-only records do not establish installed state. Both acknowledgements, CI, destination hook comparisons, loaded plugins and section1.8 remain held. Reported422-test/9847-test runs and their guard-copy failure/skips are retained as prior reports, without new root execution. Timeout1500 covers the research CLI invocation, not setup/preflight, and has no kill-after deadline. Custody: frozen manifest45742B/SHA256 Please hand back the exact repair head for a bounded three-finding source reread. Root leaves Claude-owned files with their owner. |
|
Root source recovery following the three-P2 verdict, at the same head b6828c7, base 4ced292. The three immutable upstream URLs that returned curl6/DNS during the requested Astra read were recovered independently through native GitHub API originals. Six API calls0 and all six decoded Git identities/SHA256 bindings were root-verified. This is source recovery; the original DNS failures remain in custody.
No unsupported flag or CONFIG_PATH interface was found in this narrow pinned source comparison. Actual loaded environment, route/model delivery, zero embedding calls, Semble model/cache loading and installation remain unqualified. GPT Researcher's CLI calls load_dotenv, so env-i at invocation is not by itself complete loaded-environment evidence. The wrapper's1500-second timeout covers its CLI invocation; it does not bound setup/preflight or add kill-after. This recovery does not change any of the three P2 findings, acknowledgements or section1.8 holds, and did not run an install, test or model task. Custody manifest9088B/SHA256 |
b6828c7 to
42c43b3
Compare
|
SOURCE ACCEPT WITH INTEGRATION NOTE — exact head The assembler authority predicate now requires an affirmative Root independently checked all52 original observation stream bindings (50native0, two expected ancestry native1),39 complete native Git source byte/OID identities, and13 registered changed-context bindings. The unchanged75-path PR roster contains19 modified repair paths with no additions/deletions in the head-to-head delta. Executable source coverage retains the four changed contexts and11 unchanged original/OID contexts from the prior read. The packet separately retains its recovered processing IndexError1; original raw tool-result custody for that processing error is explicitly unavailable. The previous primary-source recovery remains historical source evidence, with its original DNS failures retained. Integration note: native final guard14:35:31UTC reports this same OPEN/non-draft head and base/current-main59f8. Native tree/history checks separately show merge-base4ced, with main and b682 not ancestors of this head; their expected exit1 results remain retained. All9420 current-main registry members/order and187 receipts/26 convergence records remain present. Against the complete75-path roster, the sole foreign head/current-main registry difference is validate.yml's old binding: No new native client/configuration/skill installation, tests, provider/model run, freeze/default qualification or required-CI acceptance in this read. Claude-owned paths were not edited by root. |
|
native-agent-stack-f9: cross-family convergence result (2026-10-03; two GPT-6 Astra and two Claude Opus votes) for two install-plan rows that the daily report shows behind upstream.
|
…installs nothing (X17) The layer-consensus record gains a wave-2 batch (2026-10-03) with its own hashed record (wave2-records.json: the wave-2 dossiers, GPT checks and rulings the repository cites, from run wf_18aa601f-b71, journal sha256 5f904de2..., synthesis sha256 3b512613...), its rule text (amendment 3 and its exception to the no-install rule) and the acknowledgements it still owes. - assemble_manifest.py: check_batch() and apply_interims(); an interim is written to the row's own `interim` field, outside PROTECTED; the decision rule gains amendment 3, the manifest gains no_install_rule_exception, consensus_wave2 and counts.interim. - Rows: interim installs on memory-owner (ai-memory 2.5.2, 127.0.0.1:29374, zero-LLM, local embedder), code-search (semble 0.6.1, model pinned) and context-supply (context-mode 1.0.169), each on the owner's decision of 2026-10-03; an added statusline row (claude-hud 0.10.0 plus the Codex footer); amendments on credential-custody (custody change 15) and credential-guard (custody change 11). playwright-cli keeps its hold; the local-model rows are untouched. - check_plan.py and new_wsl_client_config.py read the interim (installs, slot_verdict). - Tests and controls: five interim tests, 8 refusal controls and 1 label control (49 killed). The install plan rows, the handbook and the client configuration follow in later commits of this branch; check_plan.py, the handbook check and the client-config check fail at this commit. Co-Authored-By: Claude Opus 5.5 <[email protected]>
… rows Install plan (evidence/artifacts/new-wsl-install-plan-20261002/): - memory-owner (ai-memory 2.5.2, 127.0.0.1:29374, local embedder), code-search (semble 0.6.1 with the model pinned to a local snapshot) and context-supply (context-mode 1.0.169: Claude plugin with the stats.json-only compare gate, Codex plugin at --ref 6f0cc684, verified npm tarball) install as interim rows; statusline (claude-hud 0.10.0) is added. All UNRUN. - research-harnesses: DeerFlow as the embedded DeerFlowClient (uv sync --locked; no Compose, service or port), GPT Researcher through tools/research/gpt_researcher.sh (research changes 2-5, 9, 18; synthesis X18), with a keyless committed configuration and a fail-closed preflight. - tobi-qmd: needs.gpu true, config paths, an after-provisioning check (qmd change 16). - gpt-gateway: EMBED_WS_PROXY_PORT=21131 and plain NAME=value lines (gateway change 12); X1-X3 notes on the observability rows and the gateway row. - The three skills rows delegate to tools/adoption/install_skills.py (skills change 7). Skills (skills changes 1, 3, 6): grill-me, improve-codebase-architecture and semgrep retired (dated addendum, template off, runtime-worker reuse entries and coverage removed); agent-browser held; skill-creator a Claude-Code-only copy. install_skills.py and skills_status.py learn the held state and the agents/copy fields, with tests. The Codex template disables the bundled skill-installer by path. check_plan.py passes (70 rows). The client configuration, the handbook and the evidence registration follow; their checks still fail at this commit. Co-Authored-By: Claude Opus 5.5 <[email protected]>
… lines and builder fixes Phase 0.3 of the wave-2 synthesis (sha256 3b512613...), with the rulings it cites: - Map: semble (Claude and Codex entries, per-client SEMBLE_CACHE_LOCATION, SEMBLE_MODEL_NAME on the pinned snapshot, approval mode and two exact-name allow rules in the authorization class; code-search changes 2-5), the statusline row (claude-hud v0.10.0 marketplace and the setup.mjs command at 75683c6d as overrides, statusLine keep_existing; Codex [tui] status_line; usage changes 3-5, 8, 9), the six context-mode [hooks.state] entries (context change 9), Codex inherit = "none" with its set table (custody change 7), ai-memory at the host file's AI_MEMORY_URL (X5). The cache-heal hook stays unwired (the plugin writes it; X11). rtk, headroom and SocratiCode stay slot entries. - Builder: AI_MEMORY_BIN from the plan's memory-owner link (render_config.py would derive the 2.4.1 pin path); host values filled in an MCP override; the verify step skips http servers; agent gaps count a wired plugin's tools and skills (context change 14); an allow rule already present counts as the same; labels name the Codex profile and allow rules; the default authorization line names approval modes and allow rules. codex_home.py gains --keep-hook-trust so a new Codex home and a merge end the same. - Instruction lines in both sources (context-mode lane, semble, GPT Researcher, messaging; Codex lines after their own marker), blocks regenerated; the Claude template's word baseline re-recorded with the reason. - Tests and records follow: client-config tests (145), the decision record's addendum and regenerated tables, and the shared suites the templates and the earlier skills commit touched (install profile, worker lane, scaffold, landscape sweep, recipe, docs consistency). validate.py still fails on manifests/evidence.json registration, and the handbook check on the wave-2 consensus row; both follow on this branch. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ains host alerts Phase 0.5 of the wave-2 synthesis: - K4 (custody change 11): 21128, the new WSL distribution's single-port gateway, takes 20128's permit rows; 21129, its live-dashboard WebSocket, takes none, so every covered /api/ request to it refuses. The ports join K4_GW_HEAD, K4_GW_FIND and the gateway anchors (2112 beside 2012), so interpreter code that names only a 2112x port is read too. Tests: the frozen matrix rows and the refused-port set, and destination cases (/api/providers/client on curl, wget, xh, node and Python; /v1 allowed). adoption/hooks/claude/SHA256SUMS carries the new hash. This host's installed guard differs until install_claude_profile.py --only guard runs, so test_host_profile_copy_is_verbatim fails here. - currency_due.py (lifecycle change 7): a fifth count, host_alerts, from the backup and restore-check status records (change 8's last_success/last_attempt shape; failed or partial, overdue past 48 h or 8 days, unreadable) and from the user manager's unit properties (an enabled stage-2 unit or dagu.service that is failed or inactive). A host without the record or the unit has no alert; a user manager that cannot be asked is coverage. Tests and a dated addendum to docs/decisions/2026-09-30-session-currency-notice.md. Co-Authored-By: Claude Opus 5.5 <[email protected]>
- scripts/build_new_wsl_handbook.py: consensus_slots() reads the layer-consensus record's wave2.add_rows (the statusline row) beside its first batch; the counts check mirrors the producer's interim count (amendment 3; present when the manifest records consensus_wave2); a waiting row that carries an interim install shows it in the Install column beside its decided default's reason, and the inventory sentence names how many do. - docs/new-wsl-handbook.md and .json regenerated; evidence/artifacts/new-wsl-handbook-20261001/receipt.json carries the new generator and output digests (the profile and the inventory are unchanged). - tests/test_new_wsl_handbook.py: 90 rows and six consensus rows, amendments from both batches, and the interim display. Co-Authored-By: Claude Opus 5.5 <[email protected]>
- docs/secret-storage.md: the gateway matrix the guard's docstring names follows K4_GW_ROWS (21128 takes 20128's rows; 21129 none; wave-2 custody ruling, change 11). - catalogs/landscape/skills-lifecycle.json: the installed lists follow adoption/skills/manifest.json after the wave-2 skills ruling retired grill-me, improve-codebase-architecture and semgrep (changes 1 and 3): the design-intake task has no installed skill, codebase-design alone serves architecture, and the security task names the custom static rules as unowned; checked_at stays the sweep's date. tests/test_landscape_sweep_skills.py: no pinned skill keeps a listing other than on, so only the Codex flag kind is stated today. - tests/test_windows_terminal_defaults.py: [tui] status_line joins the pinned keys after its upstream check (Tui.properties.status_line in codex-rs/core/config.schema.json at rust-v0.160.0; the six ids are StatusLineItem variants of codex-rs/tui/src/bottom_pane/status_line_setup.rs at that tag). - blueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json carries the new hashes of the recipe and its test, both changed on this branch, as PR #608 did for the same two inputs. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…hell policy, remote plugin rules, apply gate Review of the wave-2 records branch, 2026-10-03 (one repair round): - Blocking (custody change 7, synthesis X12): Codex shells under inherit = "none" now get XDG_RUNTIME_DIR (/run/user/<uid> of the user the builder runs as, [email protected](5)) and DOCKER_HOST (unix://${XDG_RUNTIME_DIR}/docker.sock, wired through the container-engine slot); a render test holds both. - New-distribution keys leave the shared templates: inherit = "none" with its set table, both semble servers, semble's Claude allow rules and ai-memory's Codex approval mode move to adoption/new-wsl/templates/*.additions.*, which only tools/adoption/new_wsl_client_config.py reads (template_data merges them; a key both define is refused). codex.config.template.toml, claude-user.json, the Claude settings template and bootstrap.md step 4a are again what every other host renders, so decision 5 of 2026-09-26-codex-worker-lane.md stands unamended there. - Messaging change 1: the Codex instruction block runs the research script and the courier as long commands (yield_time_ms 30000, then write_stdin polls with empty chars until the process exits; codex-rs rust-v0.160.0 unified_exec/mod.rs L73-77, shell_spec.rs L117-154); blocks regenerated, top-rule hash and word count updated. - Skills change 5: --apply reads the account's remote plugin cache and adds one [[skills.config]] name rule per plugin skill (<manifest name>:<frontmatter name>, as Codex qualifies it) and an off switch per plugin MCP server (map piece step/codex-remote-plugin-rules); arrays of tables are written as [[...]] items and the merge adds the render's rules a file lacks after its own, refusing an inline array. - Code-search change 1: a real --apply refuses while consensus.json wave2.acknowledgements_owed names a family and the render wires an interim install; a dry run says so. - Map entry for ai-memory's Codex hook trust and recipes/README.md:145 amended for the X10 route. - Record tables and counts regenerated (385 pieces). Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ontext-mode auto-update check, wave-2 docs Review of the wave-2 records branch, 2026-10-03 (one repair round): - Code-search change 1 gate: install.sh's interim_acknowledged reads wave2.acknowledgements_owed from consensus.json with jq and refuses while it names a family; each interim row's install function calls it first, and check_plan.py fails a plan whose interim function does not. Recorded in the layer-consensus record, Wave 2. - memory-owner (memory changes 12-13, synthesis X10/X11): ai-memory's own `install-hooks --agent codex --apply` writes its seven Codex hooks once (the X11 exception: the builder writes no ~/.codex/hooks.json); the post-install check reads the seven events back from hooks.json (ai-memory 7580b74d docs/install.md L118-121, L593-595; install_hooks.rs L2071-2093; render_shared.rs L907-915). The row note no longer forbids it; trust per X10. - context-supply (context change 17): the notes say why the default-head route stays behind the compare gate, and the acceptance checks that marketplace auto-update is off (code.claude.com/docs/en/plugins/loading). - The assembler resolves an owner decision's relayed_by in the hashed record it names and requires the entry to name the slot or the owner, dated as the authority; the browser hold is enforced by the record. - Tests: check_plan.py mutations (interim not installed, owner not the interim's, gate missing) and the gate itself against scratch consensus files; six new assembler refusals. - SOURCES.md, README.md and VALIDATION.md gain Wave 2 sections; counts are 70/42/3/25; the OmniRoute env line is exported with set -a; the DeerFlow Compose route is marked superseded. Co-Authored-By: Claude Opus 5.5 <[email protected]>
… shape for both acknowledgement gates
- with_remote_plugin_rules writes enabled = false on each remote plugin table it touches. Read at rust-v0.160.0: a
local [plugins."<id>"] table defaults enabled to true (config/src/types.rs L1004-1006), a local entry the synced
remote list lacks stays as configured (core-plugins/src/loader.rs merge_configured_plugins_with_remote_installed),
and load_plugin loads an enabled entry whose bundle is cached, so a table with only the MCP server switch would turn
on a cached plugin the account no longer installs. Docstring and the client-configuration record now say so.
- install.sh's interim_acknowledged refuses a list holding an empty name, as owed_acknowledgements does; the bash test
covers the same inputs as the builder's ({} and [""] added).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
… and repository pairs its record lists The Codex root lane's source read of b6828c7 (finding 1, P2): relayed_decision took a mention of the slot or the repository's last part anywhere in the relayed decision's text for the owner's authority, so a browser interim for crawl4ai, which owner_decisions[0] names only as a candidate the kept browser hold measures first, was admitted. - wave2-records.json: each owner_decisions entry gains `authorizes`, the exact slot and repository pairs its decision installs or puts to use, under the decision's own verb (memory-owner akitaonrails/ai-memory and code-search MinishLab/semble by `install` in [0]; context-supply mksglu/context-mode by `use` in [1]); the method says the coordinator structures it and that a kept hold is in no list. Its sha256 moves to c091152f... in consensus.json's four references; definitive-manifest.json and the handbook are regenerated (hash fields only), and the handbook receipt's two output digests follow them (generator, profile and inventory unchanged). - assemble_manifest.py relayed_decision: after the mention and before the date check, the entry must list the interim's slot and repository (norm) under an action in AUTHORIZING_ACTIONS ("install", "use"). - Tests: two refusal cases in test_the_assembler_refuses_an_interim_outside_the_rule (crawl4ai on playwright-cli; an authorized repository in another authorized slot) and test_an_owner_decision_authorizes_only_the_exact_pairs_its_ record_lists (each recorded interim is a listed pair; the old input refused; scratch-record grants missing, of another action, slot or repository refused; the unchanged entry admitted). controls.py gains the crawl4ai case. Negative control: the b6828c7 assembler accepts both new inputs (run once against its blob). - The layer-consensus decision record and the consensus folder's README state the rule. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ule list, refused as inline, never a kept conflict The Codex root lane's source read of b6828c7 (finding 2, P2): with a valid existing `[skills] config = []`, is_table_array([]) is false, so plan_merge kept the render's skill-installer and remote-plugin disable rules out as an ordinary conflict and the step ended `merged with conflicts kept` without them. - plan_merge: an existing empty list counts as a rule list, so the render's rules are planned as appends after the file's own (none), not as a conflict. TOML writes an empty array only inline and TOML 1.0 forbids adding [[...]] items to a statically defined array, even an empty one, so merge_toml_text reaches its existing inline-array refusal and nothing is written; the message adds that removing the empty key is enough. is_table_array is unchanged, so the writer still writes an empty list as `key = []`. - The remote-plugin line says the rules and off switches are planned and in place once the codex-config step has written and read them back, instead of "turned off" before any write. - Test test_an_existing_rule_list_gains_the_rules_or_is_refused_and_an_empty_one_is_never_kept_as_a_conflict: the plan for the empty and the non-empty list (appends, no conflict, the merged list), the empty file refused with the file unchanged and no conflict reported, the same file without the key gaining both rules, and a non-empty array of tables extended after its own rule with every line kept. Negative control: against the b6828c7 blob the empty plan is a conflict with no appends and the apply exits 0 without the rules. - The usage text and the client-configuration decision record say so. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…wn folder with no shared same-name entry The Codex root lane's source read of b6828c7 (finding 3, P2): classify_skill returned ok for a global copy entry from the pinned SKILL.md bytes and the lock entry alone, so --check-only, which the install plan's smoke check runs, passed a Claude entry that is a link onto the shared folder, or a real copy beside a same-name entry in ~/.agents/skills, where Codex loads skills; scripts/skills_status.py fails both layouts. - copy_placement_problem: the Claude entry must not be a link, and the shared canonical folder must hold no entry of the name (os.path.lexists, as skills_status.py reads it). classify_skill returns 'misplaced' for either, before the lock and bytes are read. - process_skill refuses 'misplaced' in every mode (--check-only, --dry-run and --force included), names the path and the condition, runs no add or remove and deletes nothing; the exit status is 1. - Test test_a_copy_is_ok_only_as_claude_codes_own_folder_with_no_shared_entry: the same pinned bytes and lock entry in four layouts; a real Claude folder is ok (the positive control); a link, a shared same-name folder and a dangling shared link are misplaced in all four modes with the home unchanged and no add or remove. Negative control: against the b6828c7 blob all twelve misplaced subcases return ok with exit 0. - The module docstring, the --check-only help, adoption/skills/lifecycle.md and the skills decision record's wave-2 addendum say so. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ollows the Codex home Review thread "Resolve the bundled skill path from CODEX_HOME" (chatgpt-codex-connector on b6828c7): the rule path = "${HOME}/.codex/skills/.system/skill-installer/SKILL.md" missed Codex's bundled copy wherever the Codex home is not ~/.codex. codex_home.py (L250) writes the rendered config into $CODEX_HOME/config.toml when CODEX_HOME is set (apply_codex_lane.py L457 resolves the same home), and bootstrap-linux.sh (L994-995) runs codex_home.py without --codex-home, so on such a host the bundled skill-installer stayed on. new_wsl_client_config.py refuses CODEX_HOME for a real run (L1951-1955) and writes <home>/.codex (L1981), so the new distribution's route was not affected. - adoption/templates/codex.config.template.toml: path = "skills/.system/skill-installer/SKILL.md". Codex installs its bundled skills in <Codex home>/skills/.system (openai/codex rust-v0.160.0 codex-rs/skills/src/lib.rs L62-69) and resolves a relative path in the user config.toml against that file's folder (config/src/loader/mod.rs L557, L573-582, L1424-1445; utils/absolute-path/src/lib.rs L392-405). The same functions are at rust-v0.159.3 and rust-v0.155.1 (loader L584, L609, L1443 there). scripts/skills_status.py codex_rule_path already models this resolution. No new render placeholder: render_config.py, the host value files and the bootstrap are unchanged. - tests/test_render_config.py test_the_bundled_skill_installer_rule_follows_the_codex_home: the rendered rule is relative and resolves under ~/.codex and under another Codex home. Planted negative: the earlier absolute form, resolved the same way, misses the other home (checked against this branch's previous template: False). - tests/test_new_wsl_client_config.py: the three applied-config expectations take the relative rule. Local probe (this host, codex-cli 0.159.3, the Linux pin; app-server skills/list with a scratch HOME and a scratch CODEX_HOME that is not HOME/.codex, one rule in its config.toml; output not retained as a receipt): no rule -> skill-installer enabled true path = "skills/.system/..." -> enabled false (and false with CODEX_HOME unset, config in HOME/.codex) path = "<HOME>/.codex/skills/..." -> enabled true (the reported defect) The destination pins 0.160.0, whose files above are the same functions; that version was not run. Caveat: when a whole user config.toml fails ConfigToml typing, the loader keeps it unresolved (loader L1430-1433) and skill_config_rules_from_stack then skips that file's [[skills.config]] rules as invalid (skills_config.rs L163-168); an absolute rule does not depend on that typing. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…terval 5, accept the configured command Review thread "Run claude-hud setup before wiring its copied launcher" (chatgpt-codex-connector on b6828c7): the statusline row stopped after the plugin install, but the status line the client configuration renders, '<mise node>' '<config dir>/plugins/claude-hud/statusline.mjs' (adoption/new-wsl/client-config-map.json L205), names the launcher that only upstream's helper copies there (jarrodwatts/claude-hud@75683c6d scripts/setup.mjs L69-80), and the acceptance ran the cached scripts/statusline.mjs directly, so it passed while Claude Code's configured status line had no file to run. The wave-2 usage ruling (wave2-records.json, layers.analytics-statusline, changes 3 and 4) already says automation runs the helper without prompts; the row's notes left it to a step outside the plan. - install.sh statusline() and install-plan.json commands: two commands after the plugin install. (1) In the one cached 0.10.0 (refused with none, or with 0.10.0 in two marketplaces), under the first of bun and node on PATH (commands/setup.md L24; mise's Node here), `setup.mjs inspect --shell posix`, then `install --shell posix` (setup.md L35 and L58): install copies the launcher, backs up settings.json and writes statusLine (setup.mjs L69-101). (2) refreshInterval 5 when the statusLine has none (code.claude.com statusline.md L69): setup.mjs keeps earlier statusLine keys only when they were claude-hud's (L94), and the client configuration's apply keeps a statusLine the file has (keep_existing), so nothing else would add it. Written to the real file behind a link, its mode kept, through a temporary file in the same folder. - accept.sh and install-plan.json acceptance: the configured statusLine.command, run through bash as Claude Code runs it (setup.md L10), with upstream's sample input (L72) must print two lines; statusLine.type command, refreshInterval 5, the command naming the copied launcher, that copy equal to 0.10.0's scripts/statusline.mjs and one cached version. The name check sits in the last [[ ]], so it does not rest on errexit. - Row notes, README.md, SOURCES.md and VALIDATION.md (check_plan.py: 87 commands, 62 acceptance entries); the plan's and owners.json's revised_at_utc. - tests/test_new_wsl_definitive_defaults.py StatuslineInstallAndAcceptance runs the row's own strings with a scratch HOME, links to the system tools and a stand-in runtime: the helper's calls and its three refusals; refreshInterval added only when absent, through a link, mode kept; the acceptance passes the wired state and fails each planted condition (the copied launcher missing, no or another refreshInterval, another version's copy, a second cached version, a command that runs the cached launcher). Negative control: on the missing-copy fixture the acceptance as it was (this branch before the change) exits 0; the new one exits 2. Not run: upstream's helper and launcher, and anything on a distribution; the row stays UNRUN. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…the relative path Follows e622dcb (the rule follows the Codex home): ListingBudgetTemplateTests read the template's one [[skills.config]] rule as the earlier ${HOME}/.codex/... string, and the acceptance run of the seven unittest modules failed it (1 of 502). It now expects path = "skills/.system/skill-installer/SKILL.md" and names the test that resolves it under any Codex home. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…le protocol) The branch's last commit, by docs/lanes.md's hot-file protocol, on origin/main ecea286: main's manifest, with the 54 files this branch changes that main's manifest lists re-registered through host_receipts.register_file, and the branch's one new evidence file, evidence/artifacts/new-wsl-layer-consensus-20261002/wave2-records.json, registered (55 entries; no entry removed; receipts[] and convergence_records[] as main has them). It replaces 42c43b3 (the same registration on 4ced292, before the two review repairs), so the manifest change sits in the last commit only. Against 42c43b3's set, two entries are new: adoption/skills/lifecycle.md (main's manifest lists it now) and tests/test_render_config.py (changed by the review repair). main's files[] at ecea286 is out of order at one entry (docs/decisions/2026-10-03-omniroute-sdk-worker-0160.md after docs/decisions/2026-10-03-retire-pr320-loki-denominator-host-receipts.md; read from origin/main's file), and scripts/validate.py refused this registration for it ("files[] must be sorted by path"); scripts/evidence_manifest.py --write sorted it, moving that one entry and changing no entry's fields. component_matrix.py and new_host_grand_list.py were rewritten and are unchanged. validate.py passed (9498 hashed files, 191 receipts). Co-Authored-By: Claude Opus 5.5 <[email protected]>
42c43b3 to
99a2e3c
Compare
|
Exact-head FINDINGS on P2 — the HUD installer and acceptance disagree about an existing refresh interval. install.sh:331 sets five seconds only when the value is absent. The pinned upstream helper preserves existing HUD keys. An existing interval of three therefore survives installation, but accept.sh:362 requires exactly five and rejects the resulting configuration. The committed fixtures confirm both halves of this source counterexample: the install test preserves three and expects exit 0, while the acceptance test rejects three. Align the acceptance check with the recorded “five when absent” preservation contract, and cover the installed configuration passing through acceptance. This finding was established from source; I did not execute a fixture or read/write any client configuration. The original three connector concerns otherwise have a bounded repair path: the misplaced skill-copy refusal is unchanged from the accepted head; HUD setup now invokes the maintained helper and tests the configured copied launcher; the Codex rule uses a relative skill path, supported by the pinned config-directory resolution. The relative-path change is source-supported; the owner-reported scratch native read and destination qualification were not independently executed in this review. Custody: I verified 30 complete repository originals, eight pinned upstream originals and all 46 native stream pairs. There were 45 native exits 0 and one retained malformed GraphQL query exit 1, followed by its corrected capture. The delta has 79 exact main carries and 14 owned modifications; 62 other paths retain their accepted Git identities. Foreign Git identities and 9,443 foreign registry row values, 191 receipts, 29 convergence records and unowned metadata are preserved. The identified adjacent decision-row swap is the explicitly accepted #666 normalization. The client-config test is unregistered at old, main and new; no new omission is introduced. Recheck actual-main preservation/sortedness and required current-head gates at landing. Source findings do not supply native installation or lifecycle acceptance. |
…, any positive integer Review of 99a2e3c (P2): install.sh adds refreshInterval 5 only when absent, and claude-hud's helper keeps an earlier claude-hud statusLine with its keys (jarrodwatts/claude-hud@75683c6d scripts/setup.mjs L94), so an earlier 3 survives installation, while accept.sh required exactly 5 and rejected that configuration. - accept.sh and the row's acceptance command in install-plan.json: the interval check takes a present integer of at least 1, the type and minimum of statusLine.refreshInterval in the settings schema the Claude Code settings page names (SchemaStore/schemastore@de76181a src/schemas/json/claude-code-settings.json L2454; code.claude.com/docs/en/statusline.md L69, "The minimum is 1"). It still fails an absent, non-numeric, zero or negative value. The copied-launcher, version, single-cache and command-names-the-copy checks are unchanged. - tests: install then acceptance on one scratch home pass with 5 added when absent and with an earlier 3 kept byte-identical; the planted negatives now cover an absent, non-numeric, quoted, zero, negative and fractional interval, with the four other planted conditions kept; a negative control runs the exact-5 check from 99a2e3c on the same run (exit 1 for the kept 3, 0 for the added 5). - install-plan.json notes, VALIDATION.md and SOURCES.md state the acceptance requirement as a positive integer; README.md describes only the install (5 when absent) and is unchanged. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…json (hot-file protocol) Re-registered with host_receipts.register_file, in place, sorted order kept: the install plan's accept.sh, install-plan.json, SOURCES.md and VALIDATION.md, and tests/test_new_wsl_definitive_defaults.py. component_matrix.py --check and new_host_grand_list.py --check pass, so neither report is rewritten. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
SOURCE ACCEPT at Acceptance at line 362 and the plan's matching command now take an integer refresh interval of at least 1. They preserve the installed earlier value instead of requiring exactly 5. This matches the unchanged claude-hud installer preservation rule and the newly bound SchemaStore type/minimum. Schema/source consistency is not a new installed-client test. The fixtures exercise the install steps and acceptance on the same scratch home, with planted helper writes and a stand-in runtime: absent interval becomes 5; existing 3 remains 3 and passes. The old exact-five predicate is retained as a negative control rejecting preserved 3. Invalid/missing intervals, launcher mismatch/missing copy, a second cached version and the cached-launcher route remain negative cases. Root verified the AST outside Root independently bound all 48 capsule files, all six complete current source Git/SHA originals, the prior originals/unchanged installer and the new complete pinned schema. All 13 retained native capture stream pairs are exact and returned 0. The plan JSON changes only the statusline acceptance command and notes. Registry roster/order remains 9,498 rows with exactly five matching payload rehashes; 191 receipts and 29 convergence records are unchanged. All 9,443 foreign main row values/memberships are preserved. The inherited two-row sorting difference from main is the already reviewed #666 normalization, not a new repair deletion or rewrite. At the dated 17:50:56Z gate observation, base/main is |
…otocol) #647 settled local-generation-model and embedding-model by their preregistered measurement; this branch adds the wave-2 records, interim installs, statusline and the client-configuration map. Both survive. 15 paths conflicted. Regenerated with the repository's generators, not hand-merged: - definitive-manifest.json: evidence/artifacts/new-wsl-definitive-defaults-20261001/assemble_manifest.py (90 slots, 31 definitive, installed 59, interim 3; by_state resolved 23, measurement 6, split 5; consensus 6), then --check. - docs/decisions/2026-10-01-new-wsl-definitive-defaults.md: its only conflict was inside the generated tables; render_tables.py --write, then --check. - docs/new-wsl-handbook.json and .md: scripts/build_new_wsl_handbook.py --write. - evidence/artifacts/new-wsl-handbook-20261001/receipt.json: no generator writes it; the two output digests come from the builder's own digest function (as --write printed them); generator, profile and inventory were unchanged. Hand-merged, keeping both sides: - install.sh: both header notes; both functions (interim_acknowledged, model_server_answers); --list takes this branch's code-search line and main's embedding-model line; the dispatch loops take this branch's selected lists and main's named-only list (local-generation-model, embedding-model). - accept.sh: both header notes; the skipped-slot loop drops all five rows that now install (code-search, memory-owner, context-supply, embedding-model, local-generation-model), in plan order. - install-plan.json, owners.json: revised_at_utc set to the merge's time (2026-10-03T18:26:54Z); the plan's status keeps main's sentence, then this branch's. Rows auto-merged (disjoint: 13 rows here, 3 there). - README.md: counts from the merged plan (70 rows: 44 installed, 42 by the default run with three interims and two only when named, 3 measurement-only, 23 not installed; post_install 28/15/1, service 10, after sign-in 7; route counts with model-server 2); the default-run rule keeps the interim clause and main's named-only sentence. - README.md, SOURCES.md, VALIDATION.md: both new sections, in the order written (the local-model sections first written 05:25Z, wave 2 at 10:16Z), which VALIDATION's opening line requires. VALIDATION's opening line now says 70 rows and names the Wave 2 section, and Wave 2's checks list records the merged plan's check_plan.py line. - tests/test_new_wsl_client_config.py: 44 planned rows. - tests/test_new_wsl_definitive_defaults.py: the merged counts above; both sides' test classes (StatuslineInstallAndAcceptance; LocalModelAcceptance, ModelServerGuard). manifests/evidence.json: 54a96ff's copy (git checkout --theirs), then host_receipts.register_file for the branch's 55 registered files (17 of them re-hashed by this merge); receipts[] and convergence_records[] are main's. component_matrix.py --write and new_host_grand_list.py --write change nothing; scripts/validate.py passes (9542 hashed files). check_plan.py: OK: 70 rows: 44 installed (42 by the default run, 2 only when named), 3 measurement-only, 23 not installed; 94 commands and 66 acceptance entries agree with the scripts. bash -n install.sh and accept.sh: exit 0. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
Codex root — FINDINGS at
Root independently verified 52 captured native acquisitions (all exit 0), 104 original stream bindings, 38 complete changed/overlapping Git bodies, the ten old/current CI-source identities, the complete statusline class/owner-row equality and full foreign-registry projection. Private source custody: |
…, as BSD wc pads it Codex root review of 06f6259, finding 1 (macOS CI run 37141171758, job 111255745857, at 2f5d8b0: the wired state with refreshInterval 5, 1 and 3 exited 1 with an empty stderr). The acceptance compared the `wc -l` count of cached claude-hud versions with the string `1`; BSD and macOS wc print the count as " %7ju" (apple-oss-distributions/text_cmds@592aaf8a wc/wc.c L214-215), so one installed version read " 1" and failed. - accept.sh (statusline, L385) and the row's acceptance command in install-plan.json: `"$versions" -eq 1`, an arithmetic comparison inside [[ ]], instead of `== 1`. The other conditions are unchanged. The other `wc -l` counts in these files were already numeric and are unchanged: `"$lines" -ge 2` (statusline) and `"$refs" -ge 5` (research-harnesses, after_sign_in); install.sh has none. The check's comment cites wc.c. - tests: a stand-in wc that counts with the system one and prints the bare (GNU) or the padded (BSD) format; the acceptance passes the wired state with refreshInterval 5, 1 and 3 in both formats and fails a second cached version in both. Negative control: the string check as it was at 06f6259 passes the bare count and fails the padded one. - SOURCES.md and VALIDATION.md record the source and the checks. No macOS host ran these; the padded format is the stand-in's. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…losed without one Codex root review of 06f6259, finding 2 (macOS CI run 37141171758: exit 127, "env: timeout: No such file or directory"). gpt_researcher.sh ran a bare `timeout` inside its env -i child, whose PATH is /usr/bin:/bin; macOS has no timeout there, and a parent PATH change cannot reach that child. - gpt_researcher.sh: the timer is resolved in the parent, before the run directory and the scrub, with `type -P` (a PATH search for an executable file only): GNU coreutils' timeout, else gtimeout, the name Homebrew's coreutils gives it on macOS; a relative result is anchored to $PWD. The scrubbed child runs it by absolute path with the same 1500 seconds; the child's environment and PATH are unchanged. With neither timer, the research run stops with exit 1 and a message naming both, after the preflight and before the CLI starts; --preflight-only needs no timer. - tests/test_research_entry.py: the fixture finds the host timer the same way and puts first on the wrapper's PATH a `timeout` that records its arguments and runs that timer; the run test checks the CLI ran under it, by absolute path, with 1500. It skips, with the reason stated, only where no supported timer exists: the GitHub runner image of the macos-15 label lists no coreutils, timeout or gtimeout (actions/runner-images README.md L34 at a99056ad; images/macos/macos-15-arm64-Readme.md at f95c0c79 and images/macos/macos-15-Readme.md at 07cc2190). Negative control: with a PATH of only bash, env, dirname, date and install, the run exits 1, not 127, names the missing timer, and the CLI never starts. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…(hot-file protocol) Re-registered with scripts/host_receipts.register_file, on the branch's own registry: the install plan's accept.sh, install-plan.json, SOURCES.md and VALIDATION.md, and tests/test_new_wsl_definitive_defaults.py (sha256 and bytes only; files[] stays sorted and unique, 9,542 paths). tools/research/gpt_researcher.sh and tests/test_research_entry.py were not in files[] and stay unregistered. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
Codex root verdict: SOURCE ACCEPT for the reviewed repair at exact head The earlier source findings are closed at this head:
This closes the source repairs in the earlier 06f findings. I read all changed source originals and independently verified the captured full Git bodies, rather than treating the owner's audit booleans as acceptance. The historical failing run remains retained. At the repair packet's 19:58Z snapshot, six required checks passed and Linux/macOS validation were still running. Any later CI result needs its own exact-head evidence; the source verdict does not assert a current pass or a new NativeStack2604 install. Runtime host acceptance, upstream test execution and locally authored fixtures retain their separate evidence classes. This review edited no Claude-lane file, client configuration, native sign-in or install state. |
Only manifests/evidence.json conflicted: main's registry taken, the 55 PR-owned rows re-registered with host_receipts.register_file. Two PR-owned files also changed on main (#649) and merged without conflict: build_args.py and tests/test_landscape_sweep_harness.py; their rows carry the merged content. Co-Authored-By: Claude Opus 5.5 <[email protected]>
|
Codex root MERGE FINDINGS / HOLD for head All eight required checks are SUCCESS at the 20:25Z native GitHub snapshot, bound to this exact head and GitHub Actions app15368; macOS finished at20:18:06Z. The source repairs remain accepted. Their independently verified native prospective carry was for main463, which is now the parent of #649's actual merge 6112d14. Fresh native Handoff for the manifest/PR owner: reconcile the shared registry against exact new main, preserving the new-main foreign rows/order, receipts/convergence metadata and reviewed owned payload bindings. Publish the resulting exact head and full original delta for a bounded carry review. The numeric HUD and executable timer fixes need no repeated architecture judgment if their bytes stay unchanged. Root edits none of the Claude-lane paths. Green checks and prior source acceptance remain distinct from a mergeable current pair and actual NativeStack2604 runtime acceptance. No active-input exception, relock, lock relocation, install, sign-in, default transition or workload was performed by this review. |
|
Exact-head Codex SOURCE CARRY ACCEPT WITH RETAINED RESIDUALS on All 75 owned branch patches retain exactly the same ordered added/removed lines as reviewed The prior main611 conflict is repaired for this exact pair: native prospective merge-tree returned 0, tree Source custody: 50 native acquisitions/prospective commands all exit0; all 100 full original streams, 10 changed captured blobs plus the reused full main registry, and five commit objects independently checked. Source/prospective acceptance does not establish required current-head CI or an actual merge. No tests, provider/model experiment, service/configuration change, freeze, default selection or merge were performed by this review. Existing failed conditions and host/provider qualification limits remain intact. This verdict follows the user's original goal and assumes no CC/fallback task authority. No Claude-owned paths or credential/auth files/values were edited/read/copied. Owner independent-family conditions remain separate from this source carry. |
|
Actual landing source ACCEPT for #659: accepted head I independently checked the actual parent/landed/accepted Git trees and full registries. All 75 landed payload membership tuples equal the previously accepted exact head. All 10,196 foreign Git memberships, 9,509 full foreign registry rows in order, and every non-files registry field are preserved. The 55 changed registration rows equal the accepted head; the 20 unregistered payload paths retain their prior status. The 21:49:00Z public observation reports the merge at 21:43:46Z and all eight required contexts passing. This verifies landed source carry. Host application, NativeStack2604 installation, actual model delivery, both comparison measurements and complete SDK role qualification retain their existing gates. Root ran no tests, merge, install or runtime trial. A failed initial private shared-clone locator (exit128) and its successful bounded recovery are retained alongside complete Git captures. |
…k is regenerated on top of main's #659 version (only this PR's research-state.json input-hash line) and the receipt's two output hashes are refreshed by hand (standing ACK); registry carries main's rows plus the owned bindings Conflicts: evidence/artifacts/new-wsl-handbook-20261001/receipt.json and manifests/evidence.json only. - receipt.json, docs/new-wsl-handbook.md, docs/new-wsl-handbook.json: main's copies, then only `python3 scripts/build_new_wsl_handbook.py --write` (exit 0). Against main the outputs differ only in the catalogs/landscape/research-state.json input-hash line; that file is the only one of the generator's 38 sources this PR changes. The receipt's two `outputs` hash lines were refreshed by hand to the regenerated files' sha256 (json dbe33bcd..., md 79030729...); nothing else in the receipt changed. - docs/harness-defaults.md: auto-merged; main's three 2026-10-03 anti-pattern rows land at the table top and #641's two rows keep their accepted position below main's #648 row, byte-identical to the ACCEPTed head's +/- lines. - manifests/evidence.json: main's copy with the ten owned files re-registered through host_receipts.register_file (hot-file protocol). Co-Authored-By: Claude Opus 5.5 <[email protected]>
After main's #659 the user template carries [[skills.config]], an array of tables. This PR's strict-config native test re-emits the rendered template through emit_toml to register a working fixture Serena, and the writer wrote the list as JSON objects, which Codex rejects ("Error loading config.toml", line 17 column 18); main's own copy of the test writes the rendered text directly, so the failure appeared only on the merge of main into this branch. The writer now emits a list of tables as [[...]] blocks after the table's key-value pairs. A structural guard round-trips the rendered user template and a nested case through emit_toml: failing first against the unchanged writer (Ran 1, FAILED errors=2), passing after (Ran 1, OK); the native test passes again against codex-cli 0.159.3 (Ran 1, OK). Co-Authored-By: Claude Opus 5.5 <[email protected]>
Refresh onto main e7c297e (20 commits after 1f5a791, through #665), by the round-4 method and the hot-file protocol (docs/lanes.md): - .gitattributes: both sides kept. Main's codex-client-check entry comes first, then this branch's two exec-help entries at the end. No pattern repeats or contradicts another. - docs/new-wsl-handbook.{md,json} and the handbook receipt: main's copies (#659) are the base, then python3 scripts/build_new_wsl_handbook.py --write. In the receipt only profile_sha256 and the two outputs hashes change, to this branch's profile and the regenerated files. generator_sha256 stays main's a78239b6..., which is the hash of the unchanged generator. - manifests/evidence.json: main's copy, with this branch's receipts[] row runtime-sdk-20261003 appended. The two grand-list outputs are re-registered by new_host_grand_list.py --write, and this branch's other 85 files by host_receipts.register_file from the merged tree. Main's 9,658 other rows are unchanged and in main's order. - manifests/stack.json and observability/grand-dashboard/state.json: main has not changed them since 1f5a791, so this branch's copies stand. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* fix(codex): require Serena before the worker's first turn Co-Authored-By: Claude Opus 5.5 <[email protected]> * chore(evidence): register the Serena startup port Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(codex): repair round on the Serena startup port after independent review Port #436's lane-home key-filter assertion and comment; record the driver's cleanup deviation, the control-profile hashes, the open model_reasoning_summary knob and the dated rebase resolution; cite mod.rs:4343-4346; document the dry run's required-serena read-back; reflow two broken sentences. Co-Authored-By: Claude Opus 5.5 <[email protected]> * chore(evidence): re-register the Serena startup port after the repair round Co-Authored-By: Claude Opus 5.5 <[email protected]> * Codex lane: read back Serena's effective enabled and required; qualify the first-turn promise (P2 on #674) Codex waits only for MCP servers whose effective enabled and required are both true (openai/codex@a956835d, rust-v0.160.0: codex-rs/codex-mcp/src/connection_manager.rs:270-275), and a permitted cached start-up satisfies the wait without a live connection (connection_manager/required.rs:29-35). Both files are byte-identical at rust-v0.159.3. - apply_codex_lane.py: the read-back records Serena's effective enabled and disabled_reason (codex -p stack-worker mcp get --json, cli/src/mcp_cmd.rs: 970-983) and its effective required and startup_readiness, derived from config/read's layers plus the installed profile at precedence 21, because no command that takes --profile prints them (cli/src/main.rs:1861-1885). Validation fails on any recorded lookup error, on a missing read-back, and unless Serena is effectively enabled and required; an unreadable source reports "unknown" and fails. Existing checks are unchanged. - Template comment and recipe line: promise only what Codex guarantees, and name what lifts the wait (inherited enabled = false, project config, -c). The template stays TOML-equal. - Tests: SerenaReadbackTests (8 tests: inherited enabled = false, required missing, recorded lookup error, layer precedence, a failed config/read); failing first against the unchanged script (Ran 8, FAILED failures=14), passing after (Ran 8, OK). The fake codex now waits only for enabled required servers, can fail a named lookup, and can report extra layers. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Registry: re-register the four files of the P2 repair (last commit, hot-file protocol) host_receipts.register_file for adoption/templates/codex.stack-worker.config.toml, recipes/README.md, tests/test_codex_worker_lane.py and tools/adoption/apply_codex_lane.py. component_matrix.py --write and new_host_grand_list.py --write changed nothing; validate.py and evidence_manifest.py --check pass (9,564 files). Only these four files[] rows changed; receipts[] and convergence_records[] are unchanged, and no convergence record pins a changed path. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Worker-lane tests: emit arrays of tables in the fixture TOML writer After main's #659 the user template carries [[skills.config]], an array of tables. This PR's strict-config native test re-emits the rendered template through emit_toml to register a working fixture Serena, and the writer wrote the list as JSON objects, which Codex rejects ("Error loading config.toml", line 17 column 18); main's own copy of the test writes the rendered text directly, so the failure appeared only on the merge of main into this branch. The writer now emits a list of tables as [[...]] blocks after the table's key-value pairs. A structural guard round-trips the rendered user template and a nested case through emit_toml: failing first against the unchanged writer (Ran 1, FAILED errors=2), passing after (Ran 1, OK); the native test passes again against codex-cli 0.159.3 (Ran 1, OK). Co-Authored-By: Claude Opus 5.5 <[email protected]> * Registry: re-register the worker-lane tests after the fixture writer fix (last commit) host_receipts.register_file for tests/test_codex_worker_lane.py; the two --write generators changed nothing; validate.py and evidence_manifest.py --check pass (9,692 files). Only that files[] row changed. Co-Authored-By: Claude Opus 5.5 <[email protected]> * New-WSL client config: expectations for Serena's required key (B1, owner Option 2) The configuration owner approved updating the two expectations, not the code, and the coordinator ACKed it on 2026-10-04. With this branch's mcp_servers.serena.required = true merged, the checker counts one more piece, codex/stack-worker/mcp_servers.serena.required, wired through slot:serena. - docs/decisions/2026-10-02-new-wsl-client-configuration.md: Decision 2's counts become the measured (386, 294, 200, 94, 80, 41, 39, 12), and one dated 2026-10-04 sentence says why they moved. Decision 14's phrase quotes authorization 12 and 80 not wired, which did not move. - tests/test_new_wsl_client_config.py: the rendered stack-worker serena table is {"startup_timeout_sec": 60, "required": True}. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Serena startup port: record the 0.160.0 rerun after #626 (receipt block, addendum resolution) The pinned codex-cli 0.160.0 (adoption/pins-linux-x86_64.json, wrapper and linux-x64 tarballs matched by SHA-256 and SHA-512, vendored binary 12eb3e81...) ran in a scratch prefix; the host's default codex stayed 0.159.3. - CodexIntegrationTests: exit 0, Ran 12, OK (skipped=1, the opt-in trial). - The preregistered startup trial: exit 0; selection A holds (3/3 delayed starts expose Serena, 3/3 failed starts fail before any request). - Scratch checks (a) parse, (b) fail closed on a nonexistent command and (c) the real Serena transport the config template renders returned the same results under 0.160.0 and 0.159.3. (b) carries negative controls without required = true on the same nonexistent command: they get past MCP startup (a completed loopback turn, or the model call on the default provider with no credentials), while required = true exits 1 with only the required-server error, also when the provider requires auth. evidence/receipts/codex-serena-startup-port-20261003.json gains the dated rerun_0160_20261004 block (local_integration, no provider execution, no host apply) and two appended residual notes; residuals[8] (the driver's process-group kill) and [9] (a real --dry-run) stay open. The addendum gets a dated Resolution 2026-10-04 paragraph. No earlier text changed. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Registry: re-register the eight PR-owned files on main 6af8e55 (last commit, hot-file protocol) main's manifests/evidence.json (taken in the merge) plus register_file for the seven changed files main already lists and the new receipt. The other 9,871 rows and the receipts and convergence_records sections equal main's, in main's order. component_matrix.py --check and new_host_grand_list.py --check pass, so neither report needed --write. The two B1 files are not listed in main's manifest and are not registered. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Registry: re-register the eight PR-owned files on main b629b5b (last commit, hot-file protocol) main's manifests/evidence.json (taken in the merge) plus register_file for the seven changed files main already lists and the new receipt. The other 9,874 rows and the receipts and convergence_records sections equal main's, in main's order. component_matrix.py --check and new_host_grand_list.py --check pass, so neither report needed --write. The two B1 files are not listed in main's manifest and are not registered. 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
4ced2923063db6a6dcafa9f25af5ee05a4153c75(origin/main). The branch was built on Layer consensus of 2026-10-02 in the manifest, plan and handbook (89 slots), and the WSL scope of the two-host decision #620's pre-merge headfd111e59a748and rebased after Layer consensus of 2026-10-02 in the manifest, plan and handbook (89 slots), and the WSL scope of the two-host decision #620 merged: its nine content commits applied without conflict, and its twomanifests/evidence.jsoncommits were replaced by one last commit under the hot-file protocol (10 commits; 75 files, +5310/-1118).lane:foundationadoption/(new-wsl/map, instruction sources andtemplates/*.additions.*; the Claude settings, Codex config and Codex AGENTS templates;skills/manifest.jsonandskills/lifecycle.md;platforms/linux-wsl2-new-distro.md;scaffold/AGENTS.md;hooks/claude/SHA256SUMS),blueprints/runtime-workers/skills/,blueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json,catalogs/landscape/skills-lifecycle.json, five records underdocs/decisions/,docs/new-wsl-handbook.mdand.json,docs/secret-storage.md,evidence/artifacts/(new-wsl-definitive-defaults-20261001/,new-wsl-install-plan-20261002/,new-wsl-layer-consensus-20261002/,new-wsl-handbook-20261001/receipt.json),examples/claude-native/CLAUDE.md,recipes/README.md,scripts/(build_new_wsl_handbook.py,currency_due.py,skills_status.py,hooks/secret_path_guard.py),tools/adoption/(new_wsl_client_config.py,install_skills.py,codex_home.py),tools/research/,tools/sota-convergence/landscape-sweep/, 16 test modules, andmanifests/evidence.json(hot file, last commit only).Items (the phase-0 brief, following the wave-2 synthesis's phase 0, 0.1 to 0.5):
assemble_manifest.pygains amendment 3 (check_batch(),apply_interims(); an interim is written to the row's owninterimfield, outside PROTECTED) with an exception to the no-install rule. Interim installs on memory-owner (ai-memory 2.5.2 at 127.0.0.1:29374, zero-LLM, local embedder), code-search (semble 0.6.1, model pinned) and context-supply (context-mode 1.0.169), each on the owner's decision of 2026-10-03; a new statusline row (claude-hud 0.10.0 plus the Codex footer); amendments on credential-custody (custody change 15) and credential-guard (custody change 11). playwright-cli keeps its hold; the local-model rows are untouched. The layer-consensus record gains the wave-2 batch with its hashed record,evidence/artifacts/new-wsl-layer-consensus-20261002/wave2-records.json.uv sync --lockedand no Compose, service or port; GPT Researcher throughtools/research/gpt_researcher.shwith a keyless committed configuration and a fail-closed preflight); tobi-qmd (qmd change 16); gpt-gateway (EMBED_WS_PROXY_PORT=21131and plain NAME=value lines, gateway change 12); the skills rows delegate totools/adoption/install_skills.py(skills change 7); X1-X3 notes.install.shrefuses an interim install whileconsensus.jsonwave2.acknowledgements_owednames a family, andcheck_plan.pyfails a plan whose interim function skips that gate. ai-memory's owninstall-hooks --agent codex --applywrites its seven Codex hooks once, and the post-install check reads them back.SEMBLE_CACHE_LOCATION,SEMBLE_MODEL_NAMEon the pinned snapshot, approval mode and exact-name allow rules in the authorization class), the statusline (the claude-hud marketplace andsetup.mjscommand as overrides,statusLinekeep_existing, Codex[tui] status_line), the six context-mode[hooks.state]entries, Codexinherit = "none"with its set table (includingXDG_RUNTIME_DIRandDOCKER_HOST), ai-memory at the host file'sAI_MEMORY_URL, and the instruction lines (context-mode lane, semble, GPT Researcher, messaging). At--applythe builder adds one[[skills.config]]name rule per remote plugin skill and an off switch per plugin MCP server, writingenabled = falseon each remote plugin table it touches. The new-distribution keys (inherit = "none"with its set table, both semble servers, semble's Claude allow rules and ai-memory's Codex approval mode) live inadoption/new-wsl/templates/*.additions.*, which onlytools/adoption/new_wsl_client_config.pyreads; the shared templates carry only what every host gets (the retired skills set off, the Codex rule that turns off the bundled skill-installer by path, the Codex[tui] status_linefooter and the instruction lines). A real--applyrefuses while acknowledgements are owed.held; skill-creator a Claude-Code-only copy; no playwright-cli row while the browser hold stays.install_skills.pyandskills_status.pylearn the held state and the agents and copy fields; the Codex template disables the bundled skill-installer by path./api/request to it refuses).currency_due.pygains a fifth count,host_alerts, from the backup and restore-check status records and the user manager's unit properties.docs/new-wsl-handbook.mdand.jsonwith its receipt) and the decision records' tables are regenerated by their own generators and check current on this base; the changed files are registered inmanifests/evidence.jsonby the hot-file protocol (52 entries re-registered,wave2-records.jsonadded, none removed).Not in this PR: wave-2 r3's 1.8 installed-state comparison and strip (hooks as a multiset of complete definitions, kept entries bound on nine fields, an owned-key file, refusals that exit 2, and the preregistered controls) are not in this PR. They come in a follow-up client-wiring-check PR, and the 1.8 gate waits for it.
Residuals:
tests.test_secret_path_guardtest_host_profile_copy_is_verbatimfails: this PR changesscripts/hooks/secret_path_guard.py(K4 for 21128/21129), and the installed user-scope guard is still the earlier copy. It passes aftertools/adoption/install_claude_profile.py --only guardonce this merges.tests.test_windows_terminal_defaults(test_the_installed_client_knows_no_notification_type_without_a_decision),tests.test_order_throughput(test_cli_refuses_live_base_url_from_env_file_without_network, an error) andtests.test_gpt6_family_tiering_20260926(the SIGTERM test,test_sigterm_records_the_running_call_as_interrupted_without_counting_it). Each module fails with that one test at this head and with the same test on origin/main4ced29230. The full suite itself ran before the rebase (9847 tests); it was not rerun after it.XDG_RUNTIME_DIRandDOCKER_HOSTare now rendered only by the builder's additions file,adoption/new-wsl/templates/codex.config.additions.toml; the shared Codex template carries neither.codex app-serverhooks/list on the destination.EMBED_WS_PROXY_PORT) is outside the guard: K4 covers 21128 and 21129 only.SOTA sources
Each pin is the one the wave-2 dossiers and rulings give (hashed in
evidence/artifacts/new-wsl-layer-consensus-20261002/wave2-records.json); nothing was installed from them in this PR.rust-v0.160.0(openai/codex):[tui] status_line:Tui.properties.status_lineincodex-rs/core/config.schema.json; the six ids areStatusLineItemvariants incodex-rs/tui/src/bottom_pane/status_line_setup.rsL54-L76.enabled = false):config/src/types.rsL1004-1006 (a local[plugins."<id>"]table defaultsenabledto true) andcore-plugins/src/loader.rs(merge_configured_plugins_with_remote_installed,load_plugin), as the builder's docstring and the client-configuration record cite them; supported by source, not confirmed live.codex-rs/core/src/unified_exec/mod.rsL73-77 andtools/handlers/shell_spec.rsL117-154 (yield_time_ms30000, thenwrite_stdinpolls).codex-rs/core/src/mcp_tool_call.rs,codex-rs/core/src/state/turn_token_usage.rs,codex-rs/features/src/lib.rs,codex-rs/utils/cli/src/shared_options.rsL61.a956835d:codex-rs/cli/src/plugin_cmd.rsL61, L447,codex-rs/cli/src/marketplace_cmd.rsL70.7580b74d0fb9d14a6d949dc92f5ea8bb7feb3c83, asset): Codex hooks through its own installer,docs/install.mdL118 and L593,install_hooks.rsL2071,render_shared.rsL907; the local embedder,docs/local-embeddings.mdandconfig.default.tomlL10.src/semble/mcp.py, L249;src/semble/index/index.pyL264; README at24497845), with the model pinned to minishlab/potion-code-16M-v2 ate9d2a44c.mksglu/context-mode@6f0cc684:start.mjs,hooks/core/routing.mjsL892-L915, README security.75683c6d:scripts/setup.mjs,scripts/statusline.mjsL29-L39.0957c301(cli.pyL336,gpt_researcher/config/config.pyL158,pyproject.tomlL23); DeerFlow v2.1.0 (Install.mdL38,README.mdL330).docs/reference/ENVIRONMENT.mdlines 158-190, forEMBED_WS_PROXY_PORT=21131and plain lines for systemd'sEnvironmentFile=, as the install plan'sSOURCES.mdcites it.7407f389(README L20); the retired skills at their pins: mattpocock/skillsc55ee460grill-me, mattpocock/skillsd81f3a18improve-codebase-architecture, trailofbits/skills82fe8226semgrep.keyring_default.goL1-L7 andagentops/launch.goL85.[email protected](5)(XDG_RUNTIME_DIRis/run/user/<uid>), Docker rootless mode, systemd on WSL.3b51261387827a2c7c3eb0d866e36e2976ff8d66eb0b4ee9febb206878c4a8c1) and its per-layer dossiers, GPT-family checks and rulings, extracted with their hashes intowave2-records.json.Evidence-class table
List each material claim with its evidence class. Classes:
native_proven(actual execution on a host, receipt retained),
local_integration,synthetic(fixture),source_review. Never label a claim a class strongerthan what was actually run.
source_reviewevidence/artifacts/new-wsl-layer-consensus-20261002/wave2-records.json[tui] status_line, remote pluginenableddefault, long-command polling) and the Claude Code plugin, status-line and permission rulessource_reviewrust-v0.160.0files and the code.claude.com pages above; not confirmed livelocal_integrationassemble_manifest.py --check(0),controls.py(0),tests.test_new_wsl_definitive_defaultslocal_integrationcheck_plan.py(0: 70 rows, 85 commands, 62 acceptance entries);bash -n install.sh,accept.sh(0); the plan is UNRUN on any hostlocal_integrationnew_wsl_client_config.py --check(0);tests.test_new_wsl_client_configlocal_integrationtests.test_skills_manifestlocal_integrationtests.test_secret_path_guard(K4 tests pass, two adapter self-tests skipped; the installed host copy is not refreshed)local_integrationbuild_new_wsl_handbook.py --check(0),render_tables.py --check(0)local_integrationvalidate.py(0),validate_convergence.py --all-recorded(0, 26 records valid)No claim here is
native_proven: nothing in this PR ran on the destination distribution or on any other host.Local commands run
Run from the repository root at
b6828c7daon4ced29230, each withTMPDIRset to a private scratch directory andnice -n 19:Rebase and registration (hot-file protocol,
docs/lanes.md):Attribution of the full-suite failures:
Decision record
Path to the dated decision record for this change (if any), naming the
evidence, alternatives considered and the comparison that would overturn it:
docs/decisions/2026-10-02-new-wsl-layer-consensus.md: the Wave 2 batch, its acknowledgements and the owner's decision of 2026-10-03; hashed recordevidence/artifacts/new-wsl-layer-consensus-20261002/wave2-records.json.docs/decisions/2026-10-01-new-wsl-definitive-defaults.md: amendment 3, interim installs on rows whose decided default installs nothing (X17).docs/decisions/2026-10-02-new-wsl-client-configuration.md: the phase 0.3 addendum and its regenerated tables.docs/decisions/2026-09-30-session-currency-notice.md: dated addendum forhost_alerts.docs/decisions/2026-09-25-skills-trial-and-usage.md: dated addendum retiring grill-me, improve-codebase-architecture and semgrep.Host evidence
None in this PR: no file under
evidence/hosts/is added or changed.Refresh onto main after #647 (2026-10-03)
06f6259f7d9e3199283523c883de9559c20cd7f5merges main54a96ff3d(New WSL local models: settle the generation and embedding slots by their preregistered measurement #647) into the accepted head2f5d8b01. It is a merge commit, without rebase or force push.git show --remerge-diff 06f6259f7shows only the resolution, across exactly the 15 paths that conflicted (123 insertions, 331 deletions).definitive-manifest.json(assemble_manifest.py: installed 59 = 56 + 1 + 2);render_tables.py --write);build_new_wsl_handbook.py --write);digest).install.sh,accept.sh,install-plan.json,owners.json, the install plan's README, SOURCES and VALIDATION, and two test modules. Each PR keeps its own rows.manifests/evidence.jsonis New WSL local models: settle the generation and embedding slots by their preregistered measurement #647's copy plus this branch's 55 re-registered owned files, sorted.06f6259f:check_plan.py0;bash -non both scripts 0;build_new_wsl_handbook.py --check0;validate.py0 (9,542 hashed files, 193 receipts);validate_convergence.py --all-recorded0 (29 records);component_matrix.py --check0;new_host_grand_list.py --check0;assemble_manifest.py --check0;render_tables.py --check0;new_wsl_client_config.py --check0;controls.py0 (51 of 51 mutations caught);54a96ff3d..HEAD0.test_host_profile_copy_is_verbatim.cac8700ba(after Retire PR #416's unrun compaction-window pilot #661 and docs: carry the three Claude-owned #613 residual passages #648): all five conditions pass, with merged treee04adcdd.4e61849b). No file in this PR changes for it.Checklist
version comment (no floating tags). (No workflow changed.)
permissions: contents: read(or a narrower, explicitly justified addition). (No workflow changed.)
added without a documented owner. (gitleaks: 10 commits, no leaks; the GPT Researcher configuration is keyless.)
moved or overwritten).
🤖 Generated with Claude Code