Repository navigation
Blind lanes round 2: sanitized export, receipt aliases, two-family adjudication - #145
Conversation
…pt aliases, adjudication Resolves the post-merge Codex threads on #141 and the #142 re-review: - blind_checkout --export replaces every project instruction file with a neutral stub and drops .claude/.codex/.agents (root AGENTS.md named the incumbent destination); remaining prose labels are a stated limit. - codex_lane resumes only returns whose provenance equals the current runner and prompt; the audit exempts only each segment's executable, so /bin/cat /usr/local/share/x is flagged; the README command matches ISOLATION_ARGS (test); documented entry points use an export or pass --allow-git-history. - lane_packets: receipts attach by component id, by an explicit validated alias (receipt-component-aliases.json: nautilus-trader -> nautilustrader, duckdb/edgartools/exchange-calendars -> data-*), or by repository only when no other component shares it; matched_by is recorded and withheld ids are listed in withheld. - build_verdicts compares frozen rows type-strictly (same_json). - New adjudicate.py + adjudication-lane.js + schemas + prompt: two-family, counterbalanced adjudication records validated with judge_adjudication. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…gister it Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Independent review of the round-2 branch: - adjudicate scrubs every evidence-path list to sorted bare paths (the 20260922 Claude returns annotated 263 of 423 sources_read entries, Codex none), requires an openai-pattern --model, prefers it over the event stream, and reruns judgments with a mismatched model; records carry provenance hashes (adjudicate.py, prompt, schemas, workflow). - codex_lane resume reruns returns with a missing, unknown or different model; the audit flags $VAR paths, bare/relative-home cd and executables under /usr outside bin dirs, and is documented as a heuristic lower bound. - README: export limits name prior evidence JSON that still carries selections and instruction files outside the export; receipts numbers and matched_by: alias; adjudication limits. - lane_packets --gap-receipts: each packet lists the receipt paths the gap-wave owner ledgers give its layer (no gap text). Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…adjudicator with fail-closed leaks Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…or blind-adjudicator - inputs drop packet_path, require --lane-repo-root, scrub every string (work-dir packet paths -> PACKET, repo paths relative, other host paths -> <outside-path>/<basename>) and refuse a layer whose host path survives. - Leak records accumulate per input sha256; every stage treats a leaked input as leaked until inputs rebuilds it; assemble drops its judgments (the layer stays pending_lanes). - The blind-adjudicator root rule is enforced at every entry point (exit 2), and a work dir inside the repository root is refused. - examples/claude-native/agents/blind-adjudicator.md vendored from agent-lab d2f7f3d. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…aming basenames) Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
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: 73569b2702
ℹ️ 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".
…le records, refuse whitespace paths Codex review of #145: a resumed judgment could be read against rebuilt returns, a refused layer left its earlier record in --out, and a root with a space defeated path scrubbing. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 576bb94504
ℹ️ 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".
… items, drop stale leaks, rerun on changed effort Codex re-review of #145. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 98732060af
ℹ️ 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".
…eview - Claude lane provenance adds agent_sha256: claude_lane.py refuses a blind-lane-reviewer definition other than the vendored one, landscape requires and registry-matches the field, and lane-provenance.json registers the role hash (append-only). - codex_lane resumes a return only at the same --model and --effort. - adjudicate: a missing lane return is a skipped layer (its record is purged); backticks delimit paths and the residual scan is boundary- independent; roots and work dirs are limited to [A-Za-z0-9._/-]; Codex leaks bind to the pre-call input hash; judgments carry the provenance captured when they ran and assemble refuses mixed provenance. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 29f7f79b46
ℹ️ 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".
…receipts - claude_lane requires --agent-file (the role the lane loaded) and refuses a differing project-level blind-lane-reviewer copy. - Adjudication provenance names the vendored blind-adjudicator role; claude-args refuses an installed role other than it. - Paths are normalized before relativizing; ../ tokens are scrubbed or refused. - Claude leak records bind to the claude-args snapshot hash. - Blind packets leave out registered receipts whose id or path names a selection role, and say so in withheld. - lane-return.schema.json lists provenance.agent_sha256. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 51c95c7753
ℹ️ 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".
…caping symlinks, counts - Adjudication provenance hashes the prompt actually used and the evidence export's tree digest; Codex resume requires the run's provenance. - blind_checkout --export removes symlinks that are absolute or resolve outside the export, and reports them. - README receipt counts regenerated after the label-bearing filter. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 26b6e2e4ef
ℹ️ 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".
…r role, symlink digest, stale packets Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cab78ca93b
ℹ️ 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".
… claude-args, leaks cover both orders Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9276430cb6
ℹ️ 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".
…transcript audit A real run retried after a usage limit lists each agent's final attempt in its record while the earlier attempt's transcript remains; the audit refused the whole run. Extra transcripts up to the record's retry count are accepted and audited like any other; a missing agent or more extras than retries still fail the run. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…ranscript audit Each transcript the run record does not list must map, by its prompt, to an item whose record agent was retried, at most attempt - 1 per item; an extra on a non-retried item, beyond an item's retries, or naming no item fails the run, so a planted transcript cannot hide in another item's allowance. Checked on a real retried run: every earlier attempt carries its final attempt's prompt. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…udit code, macOS slug, long project names - F1: a path, pattern or glob starting with '~' or holding '$' flags (Claude Code expands '~' in Glob and Grep paths while the transcript keeps it raw). - BR9-1: transcript_audit.py is a verdict-review-gate trust path, and its sha256 is in the Claude lane provenance (registered) and the adjudication provenance. - REG9-1/REG9-7: the locate test derives the slug from the resolved path; locate finds a shortened project directory by the session's unique id. - README round-9 section; registry re-registered. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
@codex review |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…rd time (round 10) - TA10-1/BR10-1: a Read, Glob or Grep path, pattern or glob that JavaScript trim() would change (ECMA-262 WhiteSpace and LineTerminator) now flags, before the leading-~ and $ test; the runtime trims before expanding ~. - TA10-2: locate treats an unreadable exact path (ENAMETOOLONG) as absent and falls back to the session id. TA10-3: record entries without an agentId are ignored; missing agents sort safely. - TA10-4: tests for each whitespace class, bare ~ and ~user, a mid-value $, per-item retry cases and locate's fallbacks (13/13 targeted mutants killed). - TA10-5/BR10-2: a test requires the current transcript_audit.py hash in the registry's current Claude entries; BR10-3: record time requires a new-wave Claude return to name this checkout's transcript_audit.py. - BR10-4: lane-return.schema.json lists transcript_audit_py_sha256, and a test requires every registered provenance field in it. - BR10-5/TA10-6: the docstring and README state the per-item retry rule. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
@codex review Round-10 fixes at ca89c0d: the transcript audit now flags any Read/Glob/Grep path, pattern or glob that JavaScript |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Local cross-family review of the round-10 delta (the GitHub Codex connector hit its review limit at 13:20Z) Command: Codex's summary: "The vendoring tests and repository integrity validators pass." It raised one finding:
🤖 Generated with Claude Code |
…d time (round 11) - NORM11-1: Glob trims an absolute pattern's base, so '<export>/.. /*' listed the export's parent while the whole value was unchanged by trim(). Any '/'-separated component trim() would change now flags, in every Read path and Glob or Grep path, pattern and glob. - NORM11-2: a test pins the 25 ECMA-262 trim code points and three kept ones (U+200B, U+200D, U+0085); 18/18 targeted mutants killed. - RR11-1/RR11-2: the registration guard covers both workflow paths and every adjudication key; the Claude uniqueness key includes the audit hash and adjudication entries are unique. - RR11-3: a new-wave adjudication's provenance must hash to this checkout's adjudication code (ADJUDICATION_FILES, pinned to adjudication_provenance). - README: the round-11 notes and the registry-edit rule (entries merged to main are never edited; unmerged in-PR entries may be amended), after the local Codex review's P2; CI enforcement is catalog issue #175. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
|
Follow-up to the local Codex review note (issue comment 5815002543) The independent round 11 verified the P2 disposition at source:
🤖 Generated with Claude Code |
|
Local Codex review of the round-11 delta (
The independent round 12 is still running. 🤖 Generated with Claude Code |
…und2-20260923 # Conflicts: # adoption/bootstrap.md # manifests/evidence.json
… P1) prose_exposure() read only Markdown and text files, so a receipt's "claim" naming a git-github-automation winner among "selected components" was never measured and a wave could stamp lanes.prose_exposed false. JSON and JSON Lines string values now go through the same statement matcher (keys do not; a document that does not parse is read as prose). On a 2026-09-24 export of this branch: 19 cited files expose 21 of 30 scored layers (was 13 and 18); 28 of 30 stay reachable, through 29 files (was 20). 4/4 mutants killed. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…s onto #145 a4dfd99 Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…staller agents, examples, committed project settings) (#196) * Run every Claude child at max effort under an Ultracode main loop Set effort: max in the five shipped agent definitions (adoption/agents/claude/*.md), keeping their task-matched models; the one-line change keeps them byte-identical to agent-lab's .claude/agents copies, which receive the same edit. Commit a project .claude/settings.json (byte-identical to the portable ultracode example and agent-lab's committed project settings) so single-repository cloud sessions on this repository start with Ultracode. It carries neither effortLevel (a max there is silently dropped) nor CLAUDE_CODE_EFFORT_LEVEL (any value but xhigh disables Ultracode, and max there overrides every child's effort). Update the Ultracode recipe: every child role at max with its task-matched model, the coordinator at Ultracode (xhigh plus orchestration), the measured constraints (max disables orchestration, cannot be persisted, and the environment variable overrides all child efforts), the per-stage rule (agent() calls pass effort: 'max'; a stage without it inherits xhigh) and GitHub/cloud-session guidance (claude-code-action has no effort input: use claude_args '--effort ultracode' or settings {"ultracode":true}, never '--effort max' beside Ultracode). Note the child-effort change in the native profile recipe. Record the decision with its probes, alternatives and overturn conditions in docs/decisions/2026-09-23-max-effort-default.md, linked from the Claude user profile decision, and rehash the two recipes in manifests/evidence.json. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Carry max effort through the examples, vendored lane and docs; fix the review findings Rebased onto the current main (v2026.09.23.1 pinned by #148). The five adoption/agents/claude definitions differ from that release, so adoption/bootstrap.md now says they "changed after `v2026.09.23.1`", and tests/test_adoption_docs_consistency.py treats what install_claude_profile.py copies (the agent and hook directories, the MCP template) as install inputs, matching a directory by its path, never its last component. The stale v2026.09.23 notes are dropped from the bootstrap, platform, README and next-host pages: the pinned release contains everything they described. Examples: the four example agents and every agent() stage of review-changes.js, readiness-audit.js and layer-verdict-lane.js bind effort max with models unchanged; the three scripts are byte-identical to agent-lab 915e73e. The vendored lane now names blind-lane-reviewer, vendored beside it and pinned under required_agents in vendored-lanes.json; SHA256SUMS, vendored-lanes.json and two appended lane-provenance.json entries rebind the new bytes. The contract suite pins max in ROUTING (which also clears the routing failure the old vendored lane already had on main) and now rejects a stage or agent at any other effort, a second effort line, MODEL drift, a routing table that restates an agent differently, CLAUDE_CODE_EFFORT_LEVEL or an effort cap in the settings, and instructions without the `effort: 'max'` literal; of 24 new mutations, 22 fail on their named assertion and two harmless edits do not. examples/claude-native/CLAUDE.md takes the host's current worker sentence, and AGENTS.md tells the coordinator to pass effort: 'max' on ad-hoc agent() calls and to stay at xhigh. Recipes and decision record: GitHub runs are non-interactive Agent SDK runs whose Workflow launches go through normal permission evaluation; autoContinueAtUsageLimit is no cost control and headless, SDK, GitHub and background runs fail at a usage limit; the claude-code-action pin is "read 2026-09-23" without an input count; the action's one CI smoke is cited and no Ultracode or effort run is claimed; /effort max is marked as not probed; Q1/Q2 replace the confounded P3/P4/P7/P8 as the evidence that a persisted max is dropped, and Q3 adds that a stage's effort wins over the frontmatter; CLAUDE_CODE_EFFORT_LEVEL is never set. catalogs/foundation/decisions.json's lean-workflow-child-routing activation names the max efforts and cites the decision. A new test requires one "effort: max" frontmatter line in each shipped agent. Checks (raw): validate.py, validate_catalogs.py, evidence_manifest.py --check, new_host_grand_list.py --check, build_ecosystem.py --check and release_due.py --strict-if-repinned origin/main (exit 0, not strict: no re-pin, nothing due) pass; the example suites pass as CI runs them (sha256sum --check) and as their README runs them (envelope 207/207, mutations 47/47, child-usage 16/16, usage-receipts 18/18, codex-envelope, check-syntax); the named unittest modules and the related ones pass. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Run the example contract suites in CI; fix the settings-example, adopt-step and concurrency wording Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Sync source-scout (maxTurns 100, foreground acceptance) and isolated-builder from agent-lab #46 (a7a67a3e) Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Rebase onto #145 and v2026.09.24.1: merge the secret guard into project settings, blind-adjudicator routing row, current agent-lab pins - .claude/settings.json keeps main's secret-read deny rules and guard hook and adds the ultracode keys; the recipe and decision no longer call it byte-identical. - bootstrap.md marks adoption/agents/claude and adoption/hooks/claude as changed after v2026.09.24.1; the lane test and lane files are #145's. - child-usage mirror synced from agent-lab; examples routing table lists blind-adjudicator. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> * Resolve the rebase review: current pin in the record, finish the macOS #94 cleanup, sync example agents - The decision record names v2026.09.24.1 and the settings file main added (#182). - The macOS step 4 re-pin note and next-host-stages' 'as the macOS page marks' go, since #94 is in the pinned tag. - The four example agents are byte-identical to agent-lab's again (source-scout maxTurns 100 and the foreground-acceptance sentence), as the recipe states. - The install-input docstring and comment name the secret-path guard's SHA256SUMS coverage. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> --------- Co-authored-by: seathatflowsinourveins <[email protected]> Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
…ory assistant capture opt-in, ignore Claude Code local state (#159) * Adoption hygiene: native Claude Code pin is a floor (2.1.281), ai-memory assistant capture is opt-in, ignore Claude Code local state bootstrap-macos.sh's install_native ran `"$bin" install <pin>` even when Claude Code's native auto-updater had already installed something newer, so re-running the bootstrap downgraded it. It now keeps a ~/.local/bin/<bin> whose --version is at or above the pin (logs "Kept", downloads and installs nothing); a missing, older or unreadable launcher takes the unchanged checksum-verified install. The check lives inside install_native because tests/test_adoption_bootstrap.py runs that function on its own. Bash 3.2 safe. Both claude-code pins move to 2.1.281 together (shared components keep one version on both platforms). darwin-arm64 a922981f... comes from the official 2.1.281 manifest.json and matches, byte for byte, the copy the native updater installed on a Mac. linux-x64 56fe3da8... comes from the same manifest and was not re-hashed; fetch() checks it before running anything. 2.1.281 fixes a recursive rm of command-substitution output running unprompted in auto and --dangerously-skip-permissions mode. The macOS page's pin table and the generated new-host grand list follow the pins. The Claude settings template no longer passes --capture-assistant to ai-memory's Stop hook. render_config.py adds it only when AI_MEMORY_CAPTURE_ASSISTANT=true (host value file or --set) and rejects any value other than true, false or empty. defaultMode and skipDangerousModePermissionPrompt are unchanged. .gitignore adds .claude/settings.local.json and .claude/worktrees/. Not included, because open PRs #116, #145 and #151 own these files: the manifests/evidence.json re-hash of the 12 changed files, and the adoption/bootstrap.md "changed after `v2026.09.23.1`" marker for the three changed install inputs. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Re-hash evidence and mark the Claude Code floor in the bootstrap guide Records the SHA-256/byte entries for every file this branch changes and adds the "changed after `v2026.09.23.1`" note that the docs-consistency test requires for the new install behavior (pins 2.1.281, floor instead of unconditional reinstall). Both files are also edited by open PRs; whichever lands later re-runs the same host_receipts.register_file helper. Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Co-authored-by: seathatflowsinourveins <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: Scout <scout@local>
…loor (stacked on #159) (#177) * Adoption hygiene: native Claude Code pin is a floor (2.1.281), ai-memory assistant capture is opt-in, ignore Claude Code local state bootstrap-macos.sh's install_native ran `"$bin" install <pin>` even when Claude Code's native auto-updater had already installed something newer, so re-running the bootstrap downgraded it. It now keeps a ~/.local/bin/<bin> whose --version is at or above the pin (logs "Kept", downloads and installs nothing); a missing, older or unreadable launcher takes the unchanged checksum-verified install. The check lives inside install_native because tests/test_adoption_bootstrap.py runs that function on its own. Bash 3.2 safe. Both claude-code pins move to 2.1.281 together (shared components keep one version on both platforms). darwin-arm64 a922981f... comes from the official 2.1.281 manifest.json and matches, byte for byte, the copy the native updater installed on a Mac. linux-x64 56fe3da8... comes from the same manifest and was not re-hashed; fetch() checks it before running anything. 2.1.281 fixes a recursive rm of command-substitution output running unprompted in auto and --dangerously-skip-permissions mode. The macOS page's pin table and the generated new-host grand list follow the pins. The Claude settings template no longer passes --capture-assistant to ai-memory's Stop hook. render_config.py adds it only when AI_MEMORY_CAPTURE_ASSISTANT=true (host value file or --set) and rejects any value other than true, false or empty. defaultMode and skipDangerousModePermissionPrompt are unchanged. .gitignore adds .claude/settings.local.json and .claude/worktrees/. Not included, because open PRs #116, #145 and #151 own these files: the manifests/evidence.json re-hash of the 12 changed files, and the adoption/bootstrap.md "changed after `v2026.09.23.1`" marker for the three changed install inputs. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Re-hash evidence and mark the Claude Code floor in the bootstrap guide Records the SHA-256/byte entries for every file this branch changes and adds the "changed after `v2026.09.23.1`" note that the docs-consistency test requires for the new install behavior (pins 2.1.281, floor instead of unconditional reinstall). Both files are also edited by open PRs; whichever lands later re-runs the same host_receipts.register_file helper. Co-Authored-By: Claude Opus 5.5 <[email protected]> * Keep a newer native Claude Code on Linux/WSL2: the pin is a floor there too adoption/bootstrap-linux.sh's install_native ran `"$bin" install <pin>` unconditionally, so on a Linux/WSL2 host whose native updater (latest channel) was ahead of the pin, re-running the bootstrap moved Claude Code back to the pin and dropped newer fixes. install_native is now the same function as bootstrap-macos.sh's (#159): a ~/.local/bin/<bin> whose --version first word is a dotted numeric version at or above the pin is kept (nothing downloaded or installed; install_pin logs "Kept installed ..." instead of "Installed ..."); a missing, older, non-numeric or failing launcher takes the unchanged checksum-verified install. Tests: NativeInstallFloorTests in tests/test_adoption_bootstrap.py run the verbatim fetch/install_native/install_pin against a one-pin fixture (curl shimmed; a shasum-backed sha256sum shim only where GNU --check --status is missing), plus an identity check that both scripts share one install_native. Docs: the Linux claude-code install_note describes the floor; bootstrap.md step 2's stale "Linux/WSL2's script and pins are the same at v2026.09.23 as on main" now says what differs at that tag; the claude-code floor notes on bootstrap.md, linux-wsl2.md and macos-arm64.md name the currently pinned release v2026.09.24.1 (#171), which the docs-consistency test requires. Co-Authored-By: Claude Opus 5.5 <[email protected]> * linux-wsl2.md: keep the changed-after marker on one line (docs-consistency) Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> --------- Co-authored-by: seathatflowsinourveins <[email protected]> Co-authored-by: Claude Opus 5.5 <[email protected]> Co-authored-by: Scout <scout@local>
The command center's correction #145 found the host account name, inside absolute home paths, in eleven public PR bodies and comments. The required sota-sources job (both byte-identical copies) now also checks the current PR body against scripts/validate.py's home-path and credential rules, written in JavaScript, and fails closed naming only the rule ids. ~/, <user> and the example home pass. A test runs every rule against its Python original on a shared corpus; the new tests fail on the job before this change. Co-Authored-By: Claude Opus 5.5 <[email protected]>
The command center's correction #145 found the host account name, inside absolute home paths, in eleven public PR bodies and comments. The required sota-sources job (both byte-identical copies) now also checks the current PR body against scripts/validate.py's home-path and credential rules, written in JavaScript, and fails closed naming only the rule ids. ~/, <user> and the example home pass. A test runs every rule against its Python original on a shared corpus; the new tests fail on the job before this change. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Summary
This is the last tooling round before the 2026-09-23 blind cross-family re-record. It resolves the post-merge Codex threads on #141, the re-review of #142 and four rounds of independent review of this branch. All touched files are gate trust inputs, so this lands before the re-record, and there are no verdict changes.
Blind export and Codex lane
blind_checkout --exportreplaces every project instruction file in the export with a neutral stub (AGENTS.md,CLAUDE.md,CLAUDE.local.mdandAGENTS.override.mdat any depth) and drops.claude/,.codex/and.agents/. The rootAGENTS.mdnamed the incumbent destination.~/.codex/AGENTS.mdloads for Codex children.codex_laneresume: it reruns a return whose provenance differs, or whose model is missing, unknown or different.codex_laneaudit: only each command segment's executable in a bin directory is exempt. It flags$VARpaths, bare or homecd, and/usr/local/sharereads, and it is documented as a heuristic lower bound.ISOLATION_ARGS, with a test. The recipe and README entry points use an export or pass--allow-git-history.Packets
receipt-component-aliases.json:nautilus-trader→nautilustrader, andduckdb,edgartoolsandexchange-calendars→ theirdata-ids. They attach by repository only when no other component shares it.matched_by, and withheld ids are listed inwithheld.nautilustradergets its 6 engine receipts, andnautilus-ibkr-adapterandcodex-native-sdkget none.--gap-receiptsexists for non-blind runs only. These receipts are checks run against the previous winner (111 of 249 quote gap text word for word, and some file names name the winner).gap_receiptsandgap_receipts_noteare now withheld keys, so a new wave refuses to seal such packets.Two-family adjudication (new)
adjudicate.pyhas subcommandsinputs,codex,claude-args,claude-collectandassemble.adjudication-lane.jsruns the judge and refuter asblind-adjudicator(agent-lab Qualify native memory and RAG with upstream dashboard evidence #40, vendored here). Both families share one prompt and schemas that fail closed on a leak.PACKET, repository paths become relative, other paths become a bare<outside-path>. Evidence-path lists are reduced to bare paths, because the 20260922 Claude returns annotated 263 of 423sources_readentries. Leaks stay recorded per input sha256 and are never counted.landscape.judge_adjudication, with provenance hashes. A root-depth rule matching the agent's is enforced at every entry point.Also
blind-lane-reviewer(agent-lab Qualify native installation, token practice and Workflow recovery #38;omitClaudeMd, no skills). The examples routing test is updated.build_verdictscompares them type-strictly (same_json), as github-automation flagged.Checks (local, this head)
python3 -m unittest: 3542 tests OK, 347 skipped. It ran at3024a1cf, and the final commit changes only adjudicate path tokens; its 37 tests pass.validatesteps pass:validate.py,landscape.py,validate_convergence --all-recorded,build_verdicts --check,component_matrix --check,new_host_grand_list --check,evidence_manifest --check, and the examplestest-envelope(197/197) andtest-contract-mutations(23/23).verdict_review_gate.py --base origin/main: passed, with trust paths changed only.accept. This head also fixes that review's two remaining minor findings: the lane-naming basenames and theRTK.mdtell.🤖 Generated with Claude Code