Skip to content

Carry the dated manifest's surviving newcomers into every packet (--manifest-newcomers) - #151

Merged
seathatflowsinourveins merged 8 commits into
mainfrom
claude/manifest-newcomers-20260923
Sep 24, 2026
Merged

seathatflowsinourveins merged 8 commits into
mainfrom
claude/manifest-newcomers-20260923

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator

Stacked on #145; retargets to main and is rebased once #145 squash-merges.

Why

The 2026-09-23 re-record must judge every layer against the current field. Foundation packets took their candidates from the frozen v1 ledger only, so a repository discovered after it never reached a foundation lane. That includes the 2026-09-23 landscape sweep (github-automation session, one discovery agent per layer with two cross-family refuters). Manifest-mode trading packets carried every manifest newcomer, refuted ones included, with no evidence.

What changes (tools/sota-convergence/lane_packets.py, opt-in --manifest-newcomers)

  • Foundation newcomers. Foundation packets add the manifest row's candidates and alternatives_keep_but_compare whose repository is not already a candidate. They are shuffled together with the ledger candidates, so a key's position does not tell them apart.
  • Refuted discoveries left out. A repository with a refuted_* disposition in any of its entries is left out, in both catalogs.
  • Registered evidence attached. A newcomer's evidence_refs are its evidence[] entries that are exactly an evidence/ path listed in manifests/evidence.json files[] with the file's current sha256. Under --withhold-labels, label-bearing paths are dropped.
  • Nothing else from the manifest is copied. proposed_label, disposition, source, adversarial_verification, upstream_now and the evidence prose never enter a packet. Under --withhold-labels, newcomer and note are stripped as before.
  • Newcomers never win. A newcomer is never adopted, and scripts/landscape.py lane_winner_components forbids a non-adopted winner. A lane can only prefer one as its challenger, with an overturn protocol.

The flag is off by default, so the 2026-09-22 packets reproduce, and all existing lane_packets tests pass unchanged.

Evidence

  • Real manifest. On manifest-20260923.json with --trading-candidates manifest --withhold-labels --registered-receipts --manifest-newcomers, the blind build has 306 candidates across 32 packets: 29 foundation newcomers added and 9 refuted trading newcomers removed. withheld_packet_keys finds nothing in any packet.
  • Tests. 14 new lane_packets tests: the default build has no newcomers; only registered, unchanged, exact paths are attached; newcomers are shuffled with the ledger candidates; blind builds drop label-bearing paths and the newcomer markers; the CLI flag reaches the packets; refuted newcomers are left out in manifest mode.
  • Full suite. 3596 OK (342 skipped) locally. Guarded gitleaks found no leaks.

🤖 Generated with Claude Code

@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-24T00:23:49.884550Z 32be199 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: 8eda7de7ca

ℹ️ 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/lane_packets.py Resolved
Comment thread tools/sota-convergence/lane_packets.py Resolved
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/manifest-newcomers-20260923 branch from 8eda7de to 434b0f9 Compare September 23, 2026 23:29
seathatflowsinourveins added a commit that referenced this pull request Sep 23, 2026
…a refuted discovery (Codex review of #151)

- LABEL_BEARING_RECEIPT also covers the manifest disposition vocabulary (refuted, keep_but_compare,
  targeted_candidate, newcomer, discovered, reject, demot, disposition); none of the 142 registered receipts
  matches the added terms.
- A refuted_* disposition withholds only a newcomer addition: the 2026-09-23 refutations of ledger
  repositories refute the discovery proposal ("not new to the catalog", "already conditional"), not the
  repository, so a ledger candidate keeps its place (documented and tested).

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: 0b0557c08a

ℹ️ 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/lane_packets.py Resolved
seathatflowsinourveins added a commit that referenced this pull request Sep 23, 2026
…a refuted discovery (Codex review of #151)

- LABEL_BEARING_RECEIPT also covers the manifest disposition vocabulary (refuted, keep_but_compare,
  targeted_candidate, newcomer, discovered, reject, demot, disposition); none of the 142 registered receipts
  matches the added terms.
- A refuted_* disposition withholds only a newcomer addition: the 2026-09-23 refutations of ledger
  repositories refute the discovery proposal ("not new to the catalog", "already conditional"), not the
  repository, so a ledger candidate keeps its place (documented and tested).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/manifest-newcomers-20260923 branch from 0b0557c to fa68f8b Compare September 23, 2026 23:51
seathatflowsinourveins added a commit that referenced this pull request Sep 23, 2026
…ew of #151)

Hugging Face model candidates have no GitHub slug and were dropped. Under --manifest-newcomers a non-GitHub
https repository is identified by its lowercased URL (no trailing slash or .git); the default build keeps the
slug-only rule. On manifest-20260923 the blind build now carries 312 candidates, 6 of them Hugging Face models.

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: c84a1b64ab

ℹ️ 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/lane_packets.py Resolved
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
… with (Codex review of #151)

An evidence[] entry such as '<path> items[x].corrections[0]' now attaches <path> (registered, unchanged,
not label-bearing when blind); the locator is dropped. The 2026-09-23 manifest names one such file; the
landscape-sweep source-review receipts supply the rest.

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

Codex Review: Didn't find any major issues. 👍

Reviewed commit: 32be199cfa

ℹ️ 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".

seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
…a refuted discovery (Codex review of #151)

- LABEL_BEARING_RECEIPT also covers the manifest disposition vocabulary (refuted, keep_but_compare,
  targeted_candidate, newcomer, discovered, reject, demot, disposition); none of the 142 registered receipts
  matches the added terms.
- A refuted_* disposition withholds only a newcomer addition: the 2026-09-23 refutations of ledger
  repositories refute the discovery proposal ("not new to the catalog", "already conditional"), not the
  repository, so a ledger candidate keeps its place (documented and tested).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
…ew of #151)

Hugging Face model candidates have no GitHub slug and were dropped. Under --manifest-newcomers a non-GitHub
https repository is identified by its lowercased URL (no trailing slash or .git); the default build keeps the
slug-only rule. On manifest-20260923 the blind build now carries 312 candidates, 6 of them Hugging Face models.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
… with (Codex review of #151)

An evidence[] entry such as '<path> items[x].corrections[0]' now attaches <path> (registered, unchanged,
not label-bearing when blind); the locator is dropped. The 2026-09-23 manifest names one such file; the
landscape-sweep source-review receipts supply the rest.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/manifest-newcomers-20260923 branch from 32be199 to ebd03f0 Compare September 24, 2026 02:26
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
…a refuted discovery (Codex review of #151)

- LABEL_BEARING_RECEIPT also covers the manifest disposition vocabulary (refuted, keep_but_compare,
  targeted_candidate, newcomer, discovered, reject, demot, disposition); none of the 142 registered receipts
  matches the added terms.
- A refuted_* disposition withholds only a newcomer addition: the 2026-09-23 refutations of ledger
  repositories refute the discovery proposal ("not new to the catalog", "already conditional"), not the
  repository, so a ledger candidate keeps its place (documented and tested).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
…ew of #151)

Hugging Face model candidates have no GitHub slug and were dropped. Under --manifest-newcomers a non-GitHub
https repository is identified by its lowercased URL (no trailing slash or .git); the default build keeps the
slug-only rule. On manifest-20260923 the blind build now carries 312 candidates, 6 of them Hugging Face models.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
… with (Codex review of #151)

An evidence[] entry such as '<path> items[x].corrections[0]' now attaches <path> (registered, unchanged,
not label-bearing when blind); the locator is dropped. The 2026-09-23 manifest names one such file; the
landscape-sweep source-review receipts supply the rest.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/manifest-newcomers-20260923 branch from ebd03f0 to cd91dc0 Compare September 24, 2026 07:46
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
…a refuted discovery (Codex review of #151)

- LABEL_BEARING_RECEIPT also covers the manifest disposition vocabulary (refuted, keep_but_compare,
  targeted_candidate, newcomer, discovered, reject, demot, disposition); none of the 142 registered receipts
  matches the added terms.
- A refuted_* disposition withholds only a newcomer addition: the 2026-09-23 refutations of ledger
  repositories refute the discovery proposal ("not new to the catalog", "already conditional"), not the
  repository, so a ledger candidate keeps its place (documented and tested).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
…ew of #151)

Hugging Face model candidates have no GitHub slug and were dropped. Under --manifest-newcomers a non-GitHub
https repository is identified by its lowercased URL (no trailing slash or .git); the default build keeps the
slug-only rule. On manifest-20260923 the blind build now carries 312 candidates, 6 of them Hugging Face models.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Sep 24, 2026
… with (Codex review of #151)

An evidence[] entry such as '<path> items[x].corrections[0]' now attaches <path> (registered, unchanged,
not label-bearing when blind); the locator is dropped. The 2026-09-23 manifest names one such file; the
landscape-sweep source-review receipts supply the rest.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/manifest-newcomers-20260923 branch from cd91dc0 to 9931380 Compare September 24, 2026 10:21
@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Sep 24, 2026
Base automatically changed from claude/blind-lanes-round2-20260923 to main September 24, 2026 16:28
…anifest-newcomers)

Foundation packets took their candidates from the frozen v1 ledger only, so a repository discovered after
it (the 2026-09-23 landscape sweep) never reached a foundation lane. With --manifest-newcomers:
- foundation packets add the manifest row's newcomers and keep-but-compare alternatives, shuffled with the
  ledger candidates so a key's position does not tell them apart;
- a repository with a refuted_* disposition in any entry is left out (both catalogs);
- a newcomer's evidence_refs are its evidence[] entries that are exactly an evidence/ path registered in
  manifests/evidence.json files[] with the file's current sha256; label-bearing paths are dropped when blind.

Off by default, so the 2026-09-22 packets reproduce. On manifest-20260923 the blind build gains 29 foundation
newcomers and drops 9 refuted trading ones (306 candidates, no withheld keys remain).

Tests: 14 new lane_packets tests; full suite 3596 OK (342 skipped).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…a refuted discovery (Codex review of #151)

- LABEL_BEARING_RECEIPT also covers the manifest disposition vocabulary (refuted, keep_but_compare,
  targeted_candidate, newcomer, discovered, reject, demot, disposition); none of the 142 registered receipts
  matches the added terms.
- A refuted_* disposition withholds only a newcomer addition: the 2026-09-23 refutations of ledger
  repositories refute the discovery proposal ("not new to the catalog", "already conditional"), not the
  repository, so a ledger candidate keeps its place (documented and tested).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…ew of #151)

Hugging Face model candidates have no GitHub slug and were dropped. Under --manifest-newcomers a non-GitHub
https repository is identified by its lowercased URL (no trailing slash or .git); the default build keeps the
slug-only rule. On manifest-20260923 the blind build now carries 312 candidates, 6 of them Hugging Face models.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
… with (Codex review of #151)

An evidence[] entry such as '<path> items[x].corrections[0]' now attaches <path> (registered, unchanged,
not label-bearing when blind); the locator is dropped. The 2026-09-23 manifest names one such file; the
landscape-sweep source-review receipts supply the rest.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/manifest-newcomers-20260923 branch from 9931380 to cf82e68 Compare September 24, 2026 16:38
…view of #151 at cf82e68, P2)

With --manifest-newcomers, granite-embedding's unique name part "embedding"
became a redaction term and semantic-rag's requirement lost "a compatible
embedding service". Capability and format words measured in newcomer names
(embedding, embed, reranker, multilingual, bench, https, typescript, parallel,
orchestrator, group, brokerage and variants) are generic name parts now.
A real-manifest test requires newcomers to add no placeholder to any packet's
shared prose; the default build changes only LEAN's "Brokerage model" line.

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

Copy link
Copy Markdown
Collaborator Author

Local cross-family review of the rebased #151 (ff2ac50a..cf82e689). The GitHub Codex connector is at its review limit, so I ran it locally.

  • Command: claude -p '/codex:review --wait --scope branch --base ff2ac50a… --json', from a dedicated checkout. It took 402 s; status 0.
  • Codex's summary: "All 784 related tests passed, and default packet generation remains unchanged."
  • Finding [P2]: lane_packets.py:470, "Preserve generic requirement terms when adding model candidates."
    • With --manifest-newcomers --withhold-labels, granite-embedding's unique name part embedding became a redaction term.
    • That turned semantic-rag's requirement "a compatible embedding service" into "a compatible service".
    • Confirmed: it was the only shared-field change newcomers caused across the 32 real packets.

Fixed in ba57f96f

  • Capability and format words found in newcomer names are now generic name parts, like retrieval and memory already were:
    • embedding, embed, reranker, multilingual, bench, https, typescript, parallel, orchestrator, group and brokerage, with their variants.
  • The new RealNewcomerPacketTests builds the real packets with newcomers and requires two things:
    • the requirement keeps "a compatible embedding service";
    • newcomers add no placeholder to any packet's requirement, limitations or overturn text.
    • Removing the fix makes both tests fail.
  • The default build changes in one place only: "Brokerage model defaults …" in LEAN's own card limitation (execution-broker) is no longer redacted.
  • Checks: 4317 OK on 3.12 and on 3.13; envelope 197/197; validate.py passed; gitleaks clean.

🤖 Generated with Claude Code

@seathatflowsinourveins
seathatflowsinourveins merged commit 149940a into main Sep 24, 2026
22 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/manifest-newcomers-20260923 branch September 24, 2026 17:21
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
…heir approved text

The regression added for PR #985 (c9155c3) checked that the docs row and the
inventory entry name the research and Jev uses and the runner, and rejected the
fragments "separately authorized", "needs its own" and "separate key". The GPT
review of c9155c3 (CHANGES_REQUESTED, one P2 at
tests/test_credential_status.py:294, :295 and :299-301) measured three
contradictions of the owner's 2026-10-10 grant that all passed it, rc 0:
  - docs/secret-storage.md:20, the dated grant clause replaced by
    ", excluding the trading lane's research work and Jev harness"
  - "A trading-lane use requires its own independently authorized key."
    appended to the docs row
  - the same sentence appended to the inventory notes
    (adoption/credential-inventory.json:140)

test_typesafe_row_keeps_the_research_and_jev_grant_without_a_separate_key keeps
its name: it still says what it enforces. In both real files it now requires
the dated affirmative grant and the complete approved text after whitespace
normalisation (the docs row and the inventory notes), and loaders equal to
exactly the runner command. The phrase blacklist is gone. The same check runs
on planted contradictions that must fail it with the expected message: the
grant revoked, and each of two key-requirement sentences appended (the one
8e9e56c removed and the reworded one), in both places. A whitespace-only
reflow must still pass, and the docs row is found after whitespace
normalisation so a reformatted table does not hide it.

tests/test_credential_status.py is re-registered in manifests/evidence.json
with host_receipts.register_file (docs/lanes.md:107); only its sha256 and
bytes change.

Corrections audit (#151)
  Source: the GPT verdict for PR #985 at c9155c3, ~/.cache/ns2604-gpt-reads/
  fix2-pr985-c9155c3d8/VERDICT.md (sha256
  ccd7bffc9115c3770a481e2eef1b4b663f34ff2e6efe4257f0f7b7c60cb52ba6) with its
  REVIEW-EVIDENCE.md; the repo's own docs/secret-storage.md:20 and
  adoption/credential-inventory.json:140 at c9155c3. Mechanism, Python
  3.13.16 standard library as installed: unittest/case.py:1324-1338
  (assertRaisesRegex), :746-765 (_formatMessage appends the explicit message to
  the standard one after " : ", which the planted-case regexes rely on) and
  :537-566 (subTest).
  Fail before: the c9155c3 test returns rc 0 on each of the three
  contradictions above.
  Fail after: this test returns rc 1 on each (docs revocation: "docs/secret-
  storage.md row lost the dated grant"; the two appended sentences: "departs
  from the approved text"), and on the exact 2a33680 docs file (194,754
  bytes, sha256 028f69a6...), the dropped grant and runner in either file, and
  a revoked inventory grant. Each run is the single-test command with one real
  input file changed in an isolated archive copy of c9155c3.
  Pass after: the single-test command rc 0, 1 test; tests.test_credential_status
  rc 0, 49 tests; scripts/validate.py rc 0 (11421 hashed files);
  scripts/evidence_manifest.py --check rc 0. Whitespace-only changes to the
  docs row and the notes also pass, rc 0.
  Untested boundary: text outside the pinned docs row, notes and loaders, such
  as the inventory rotation field, is not bound (a sentence appended there
  still passes, rc 0).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
seathatflowsinourveins added a commit that referenced this pull request Oct 11, 2026
… Jev harness (#985)

* Authorize the stored TypeSafe key for the trading lane's research and Jev harness

The owner decided on 2026-10-10 (north-star plan, owner item 2) that the trading
lane's research work and Jev harness may use the stored typesafe key instead of a
separate one. Each use still runs in its own process started through the
credential runner, and no lane environment holds the key. The inventory note and
the secret-storage row now record that; the lane field keeps its single-string
schema. Both files are re-registered in manifests/evidence.json per the hot-file
protocol.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* docs: drop the stale separate-key sentence from the typesafe row

The GPT read of #985 found docs/secret-storage.md:20 still said a trading-lane use needs its own,
separately authorized key, contradicting this PR's inventory note and body. The sentence is
removed; the row keeps the narrow research and Jev-harness grant and the credential-runner
requirement. Also restores the missing list comma. Re-registered per the hot-file protocol.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* test(credentials): pin the TypeSafe row's grant and runner command

PR #985 corrected docs/secret-storage.md:20 so the typesafe row agrees with
adoption/credential-inventory.json (owner decision 2026-10-10: the trading
lane's research work and Jev harness may also use the stored key, each in its
own process started through credential_run.py). No test caught the stale
sentence "A trading-lane use needs its own, separately authorized key", and
the GPT range-diff read of 8e9e56c asked for a committed regression.

The new test in tests/test_credential_status.py,
test_typesafe_row_keeps_the_research_and_jev_grant_without_a_separate_key,
asserts that the inventory row keeps the runner loader and the grant, that
the one docs row keeps the runner command and the grant, and that neither
carries a separate-key requirement.

tests/test_credential_status.py is re-registered in manifests/evidence.json
with host_receipts.register_file (docs/lanes.md:107); only its sha256 and
bytes change. scripts/evidence_manifest.py only sorts and checks the order
of files[] and has no hash-update mode.

Verdict: ~/.cache/ns2604-gpt-reads/fix1b-pr985-8e9e56cdc/VERDICT.md
(sha256 b057e6eedb496ae228d1a54805e3814da690e77494b53c53c961092950fccc03).

Fail before, with docs/secret-storage.md checked out from 2a33680 and
restored afterwards (adoption/credential-inventory.json is identical at both):
  git checkout 2a33680 -- docs/secret-storage.md
  python3 -B -m unittest tests.test_credential_status.CredentialStatusTests.test_typesafe_row_keeps_the_research_and_jev_grant_without_a_separate_key
    rc 1, 1 test, failures=1: 'separately authorized' unexpectedly found
    (place='docs/secret-storage.md row')
  python3 -B -m unittest tests.test_credential_status
    rc 1, 49 tests, failures=1 (only this test)

Pass after, at this commit:
  the same single-test command: rc 0, 1 test
  python3 -B -m unittest tests.test_credential_status: rc 0, 49 tests (48 before)
  python3 scripts/validate.py: rc 0 (11421 hashed files)
  python3 scripts/evidence_manifest.py --check: rc 0

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* test(credentials): pin the TypeSafe docs row and inventory notes to their approved text

The regression added for PR #985 (c9155c3) checked that the docs row and the
inventory entry name the research and Jev uses and the runner, and rejected the
fragments "separately authorized", "needs its own" and "separate key". The GPT
review of c9155c3 (CHANGES_REQUESTED, one P2 at
tests/test_credential_status.py:294, :295 and :299-301) measured three
contradictions of the owner's 2026-10-10 grant that all passed it, rc 0:
  - docs/secret-storage.md:20, the dated grant clause replaced by
    ", excluding the trading lane's research work and Jev harness"
  - "A trading-lane use requires its own independently authorized key."
    appended to the docs row
  - the same sentence appended to the inventory notes
    (adoption/credential-inventory.json:140)

test_typesafe_row_keeps_the_research_and_jev_grant_without_a_separate_key keeps
its name: it still says what it enforces. In both real files it now requires
the dated affirmative grant and the complete approved text after whitespace
normalisation (the docs row and the inventory notes), and loaders equal to
exactly the runner command. The phrase blacklist is gone. The same check runs
on planted contradictions that must fail it with the expected message: the
grant revoked, and each of two key-requirement sentences appended (the one
8e9e56c removed and the reworded one), in both places. A whitespace-only
reflow must still pass, and the docs row is found after whitespace
normalisation so a reformatted table does not hide it.

tests/test_credential_status.py is re-registered in manifests/evidence.json
with host_receipts.register_file (docs/lanes.md:107); only its sha256 and
bytes change.

Corrections audit (#151)
  Source: the GPT verdict for PR #985 at c9155c3, ~/.cache/ns2604-gpt-reads/
  fix2-pr985-c9155c3d8/VERDICT.md (sha256
  ccd7bffc9115c3770a481e2eef1b4b663f34ff2e6efe4257f0f7b7c60cb52ba6) with its
  REVIEW-EVIDENCE.md; the repo's own docs/secret-storage.md:20 and
  adoption/credential-inventory.json:140 at c9155c3. Mechanism, Python
  3.13.16 standard library as installed: unittest/case.py:1324-1338
  (assertRaisesRegex), :746-765 (_formatMessage appends the explicit message to
  the standard one after " : ", which the planted-case regexes rely on) and
  :537-566 (subTest).
  Fail before: the c9155c3 test returns rc 0 on each of the three
  contradictions above.
  Fail after: this test returns rc 1 on each (docs revocation: "docs/secret-
  storage.md row lost the dated grant"; the two appended sentences: "departs
  from the approved text"), and on the exact 2a33680 docs file (194,754
  bytes, sha256 028f69a6...), the dropped grant and runner in either file, and
  a revoked inventory grant. Each run is the single-test command with one real
  input file changed in an isolated archive copy of c9155c3.
  Pass after: the single-test command rc 0, 1 test; tests.test_credential_status
  rc 0, 49 tests; scripts/validate.py rc 0 (11421 hashed files);
  scripts/evidence_manifest.py --check rc 0. Whitespace-only changes to the
  docs row and the notes also pass, rc 0.
  Untested boundary: text outside the pinned docs row, notes and loaders, such
  as the inventory rotation field, is not bound (a sentence appended there
  still passes, rc 0).

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

---------

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