Skip to content

Blind lanes round 2: sanitized export, receipt aliases, two-family adjudication - #145

Merged
seathatflowsinourveins merged 60 commits into
mainfrom
claude/blind-lanes-round2-20260923
Sep 24, 2026
Merged

seathatflowsinourveins merged 60 commits into
mainfrom
claude/blind-lanes-round2-20260923

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator

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

  • Export instruction files: blind_checkout --export replaces every project instruction file in the export with a neutral stub (AGENTS.md, CLAUDE.md, CLAUDE.local.md and AGENTS.override.md at any depth) and drops .claude/, .codex/ and .agents/. The root AGENTS.md named the incumbent destination.
  • Stated limits: Markdown prose and prior evidence JSON still name selections ("selected" appears 1,799 times in 121 JSON files across 35 artifact directories). Instruction files outside the export are not covered either; ~/.codex/AGENTS.md loads for Codex children.
  • codex_lane resume: it reruns a return whose provenance differs, or whose model is missing, unknown or different.
  • codex_lane audit: only each command segment's executable in a bin directory is exempt. It flags $VAR paths, bare or home cd, and /usr/local/share reads, and it is documented as a heuristic lower bound.
  • Docs and recipe: the README command matches ISOLATION_ARGS, with a test. The recipe and README entry points use an export or pass --allow-git-history.

Packets

  • Receipt matching: receipts attach by component id or by an explicit, validated alias in receipt-component-aliases.json: nautilus-trader → nautilustrader, and duckdb, edgartools and exchange-calendars → their data- ids. They attach by repository only when no other component shares it.
  • Receipt fields: each entry records matched_by, and withheld ids are listed in withheld.
  • Result on the real tree: 93 of 286 candidates carry receipts. nautilustrader gets its 6 engine receipts, and nautilus-ibkr-adapter and codex-native-sdk get none.
  • Gap receipts: --gap-receipts exists 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_receipts and gap_receipts_note are now withheld keys, so a new wave refuses to seal such packets.

Two-family adjudication (new)

  • Tooling: adjudicate.py has subcommands inputs, codex, claude-args, claude-collect and assemble. adjudication-lane.js runs the judge and refuter as blind-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.
  • Blinding: inputs carry no host paths: packet paths become 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 423 sources_read entries. Leaks stay recorded per input sha256 and are never counted.
  • Records: each is validated with landscape.judge_adjudication, with provenance hashes. A root-depth rule matching the agent's is enforced at every entry point.

Also

Checks (local, this head)

  • python3 -m unittest: 3542 tests OK, 347 skipped. It ran at 3024a1cf, and the final commit changes only adjudicate path tokens; its 37 tests pass.
  • The validate steps 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 examples test-envelope (197/197) and test-contract-mutations (23/23).
  • verdict_review_gate.py --base origin/main: passed, with trust paths changed only.
  • Guarded gitleaks on the range: no leaks.
  • Independent Opus review: four rounds, final verdict accept. This head also fixes that review's two remaining minor findings: the lane-naming basenames and the RTK.md tell.

🤖 Generated with Claude Code

…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]>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-24T09:26:29.719577Z 68e74f2 Manual request
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
…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]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
… items, drop stale leaks, rerun on changed effort

Codex re-review of #145.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/codex_lane.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
…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]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/claude_lane.py Resolved
Comment thread scripts/landscape.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/lane_packets.py Resolved
…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]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/README.md Resolved
…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]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/claude_lane.py Resolved
Comment thread tools/sota-convergence/claude_lane.py Resolved
…r role, symlink digest, stale packets

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
… claude-args, leaks cover both orders

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/adjudicate.py Resolved
Comment thread tools/sota-convergence/claude_lane.py Resolved
…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]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

…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]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

@codex review

Round-10 fixes at ca89c0d: the transcript audit now flags any Read/Glob/Grep path, pattern or glob that JavaScript trim() would change (TA10-1), handles an ENAMETOOLONG exact path in locate (TA10-2) and agentId-less record entries (TA10-3), with mutation-checked tests (TA10-4). A registry guard test (TA10-5/BR10-2) and a record-time current-audit check for Claude returns (BR10-3) bind transcript_audit.py; lane-return.schema.json lists its provenance field (BR10-4). Please focus on tools/sota-convergence/transcript_audit.py and record_verdicts.py.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Local cross-family review of the round-10 delta (the GitHub Codex connector hit its review limit at 13:20Z)

Command: claude -p '/codex:review --wait --scope branch --base 821c23cce6794d6319c7c262b2d41bbe1a9e428c --json', run from a dedicated detached checkout at ca89c0d8. It took 197 s; companion status 0, empty stderr.

Codex's summary: "The vendoring tests and repository integrity validators pass." It raised one finding:

  • [P2] lane-provenance.json:59, append new audit registrations instead of replacing old hashes. Proposed disposition: no change.
    • All 12 registry entries on main are kept verbatim at ca89c0d8, and main has no transcript_audit_py_sha256 field.
    • The three edited entries were added inside this PR and never merged.
    • git grep 717d44c98aed finds no sealed return or adjudication naming the replaced hash, at either revision.
    • So the squash merge keeps the registry append-only relative to main.
    • The independent round 11 is checking this at source.

🤖 Generated with Claude Code

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Sep 24, 2026
…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]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Follow-up to the local Codex review note (issue comment 5815002543)

The independent round 11 verified the P2 disposition at source:

  • On main 4911baf4, the registry holds adjudication 0, claude 6 and codex 6 entries. All three lists are unchanged prefixes of ca89c0d8's, and main has no transcript_audit_py_sha256 field.
  • The edited entries are claude[6], claude[7] and adjudication[0]. All three sit beyond main's list lengths, so they are branch-only.
  • git grep 717d44c98aed finds no sealed return or adjudication that names the old hash.

8007a1a2 states the rule in the README: entries merged to main are never edited, and entries added in an unmerged PR may be amended before merge. It also names the two checks that exist, the verdict-review gate's TRUST_PATHS rule and landscape.py's orphan check. CI does not yet compare the registry with the base branch; #175 tracks that.

8007a1a2 also closes round 11's NORM11-1, a trim-padded path component inside a Glob pattern, and the lows NORM11-2 and RR11-1 to RR11-3.

🤖 Generated with Claude Code

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Local Codex review of the round-11 delta (ca89c0d8..8007a1a2)

  • Command: claude -p '/codex:review --wait --scope branch --base ca89c0d8e56cd4c16fc492db89ac8b5dc351ed2d --json', run from a dedicated detached checkout at 8007a1a2.
  • Run: 151 s; companion status 0; empty stderr; thread 01a0d3c3-b870-7ae2-b4a9-3cb9a5ea3ab0.
  • Result: "No actionable regressions were found. All 632 focused and adjacent tests passed, along with repository integrity and catalog validation; live provider behavior was not exercised."

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]>
@seathatflowsinourveins
seathatflowsinourveins merged commit ff2ac50 into main Sep 24, 2026
22 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/blind-lanes-round2-20260923 branch September 24, 2026 16:28
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
…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]>
seathatflowsinourveins added a commit that referenced this pull request Sep 25, 2026
…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>
seathatflowsinourveins added a commit that referenced this pull request Sep 25, 2026
…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>
seathatflowsinourveins added a commit that referenced this pull request Oct 11, 2026
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]>
seathatflowsinourveins added a commit that referenced this pull request Oct 12, 2026
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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant