Skip to content

Qualify CLI transfers and retain applied client-tools evidence - #776

Draft
seathatflowsinourveins wants to merge 6 commits into
mainfrom
codex/ns2604-p1-cli-20261006
Draft

seathatflowsinourveins wants to merge 6 commits into
mainfrom
codex/ns2604-p1-cli-20261006

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Scope

Qualify the bounded CLI transfer collection and repository host steps, and record the tools windows' applied package pins and client registrations. This retained draft folds #780's dated code-navigation dossier and #815's applied-window records into #776; it performs no host installation, configuration or client trial. The72missing filenames include30legacy user-bin names and42package bin/sbin names, including backups, versioned SDK aliases and a daemon; they are not72distinct products.

  • Base: ecfa112.
  • Lane: lane:foundation.
  • Ten named install rows share seven native transactions;62dated exclusions retain source pins and consumer/owner gaps.
  • Foundation84owners/63selected installations and default dispatch are unchanged.
  • Owned paths: the install-plan bundle/checker, transfer runbooks, client maps/templates, profile/catalog/recipes, token instructions, touched tests and dated artifacts. manifests/stack.json and manifests/evidence.json are in the LAST commit.
  • Repository changes only. No host install, sudo, service/config change, fresh model/provider execution or merge by this lane.

Approved folds and preservation

Landing path

The co-op arranges the combined independent read, the CC ACK names the exact checked head, and 5f lands this retained draft at the approved rank 24. Rebase once, only on the relayed landing cue. This creates no new PR. Current source-review, requested-smoke and organic-counter evidence remain separate.

SOTA sources

Evidence-class table

Claim Evidence class Command / receipt
Actual legacy/target CLI and package metadata;72missing filenames accounted for local_integration transfer-inventory.json; private sanitized inventory outputs
Same checker passes72transfer rows;84/63foundation contract unchanged local_integration check_plan.py exit0; transfer-local-checks-20261006.json
323tests run:320passed,3conditional statusline skips retained local_integration; individual stand-ins synthetic exact unittest argv/output hash/skipped names in local-check receipt
Missing-shim control discriminates auto-install side effect synthetic + pinned source review transfer contract test; not upstream mise acceptance
Native helper version/help reuse, scoped-prefix/entrypoint facts native_proven (version only) + source_review inventory's amtool/promtool/hf/context-mode fields
New installation/self-test commands and repository/fstab lifecycle source_review; planned host work CLI/repository runbooks;10bash blocks syntax0, not executed
Integrity/privacy/scope and diff checks local_integration validate0 and git diff --check0

Local commands run

Combined fold validation at cda3e50:

rtk proxy nice -n 19 ionice -c3 python3 evidence/artifacts/new-wsl-install-plan-20261002/check_plan.py
# 0: 84 foundation rows, 72 transfer rows, 10 named-only transfer installs.
rtk proxy nice -n 19 ionice -c3 python3 scripts/build_new_wsl_handbook.py --check
# 0: matches the new native fold-generation record.
rtk proxy nice -n 19 ionice -c3 python3 -m unittest tests.test_new_wsl_transfer_clis tests.test_new_wsl_definitive_defaults tests.test_new_wsl_client_config tests.test_new_wsl_handbook tests.test_task_model_routing tests.test_token_lanes_subagent_start tests.test_new_wsl_profile tests.test_handbook_summary tests.test_landscape
# 0: 542 tests in 128.779s; 3 retained conditional skips (539 passed).
rtk proxy nice -n 19 ionice -c3 python3 scripts/validate.py
# 0: 10,286 hashed files; integrity/scope only.
rtk git diff --check
# 0.

Independent fold-completeness review ACCEPT: all source paths covered; #780 is 2/3 whole-file identical (registry merged), #815 is 21/32 (11 explicitly documented current-carrier/generated/registry merges). All eight added original artifacts are byte-identical, as are both historical handbook receipts and all 13 retained-target artifacts. The native builder stays unchanged. These are repository integration checks, not upstream suites, organic use, fresh host acceptance or benchmarks. Hosted CI at this head is pending.

Retained original transfer checks:

rtk proxy nice -n 19 python3 evidence/artifacts/new-wsl-install-plan-20261002/check_plan.py
# 0:84foundation rows/63selected;72transfer rows/10named install rows.
rtk proxy bash -n evidence/artifacts/new-wsl-install-plan-20261002/install.sh
rtk proxy bash -n evidence/artifacts/new-wsl-install-plan-20261002/accept.sh
# Both0.
rtk proxy nice -n 19 python3 -m unittest tests.test_new_wsl_transfer_clis tests.test_new_wsl_definitive_defaults tests.test_new_wsl_client_config
# 0:323tests in95.518s;3conditional statusline skips (320passed).
rtk proxy nice -n 19 python3 scripts/validate.py
# 0:integrity/scope only; no live provider/GPU qualification.
rtk git diff --check
# 0.

Initial local contract failures are retained privately and corrected: first function indentation, expanded-fixture inventory coverage, source Path namespace, and safe compiler-ID slugs. Source critics found exclusion dispatch/source-validation and shim auto-install gaps; meaningful negative controls now cover them. No upstream failure was patched/skipped or promoted into acceptance.

Hosted CI's OSV scan fails on unchanged baseline locks: mako1.4.1 (GHSA-5639-2j2p-m4mx), fsspec2025.9.0 (GHSA-27vj-qcqg-25rc), multidict6.7.0 (GHSA-54p9-h82j-f925), werkzeug3.1.8 (GHSA-g6x2-hccm-hh4m), and source-map-js1.2.1 (GHSA-68fv-2mgg-jv7q). The five affected lockfiles have zero diff against ecfa112, including the frozen macOS artifact. This lane makes no lockfile repair or suppression; co-op routes these to their owners before landing. Local checks passed; this draft is not claimed CI-green or ready.

Decision record

docs/decisions/2026-10-06-transfer-cli-scope.md records alternatives/overturn criteria. Scope follows A8: transfer-only collection, same checker, no foundation default revision. A9B excludes Poppler CLIs while retaining26.09.0 migration if a consumer appears. A10A keeps two unowned wrapper purpose/consumer questions open with the legacy owner before R5; no equivalence claimed and old bins remain intact for salvage.

Exact host apply, readbacks and rollback

The co-op runs these from the reviewed checkout, one installation/heavy step at a time, nice19. The CC's current foundation-first rule removes foundation paper/calendar holds. Heavy commands use nice19/ionice-c3; host configuration changes still use the CC's reviewed source and announced brief lane park. This PR executes none of the host steps. A native manager must already exist; absent prerequisites fail69. Keep before/after metadata in a dated0700private directory. Reuse an already matching pin; record a differing prior request and its exact restoration before replacing it.

Seven native installations; the pkgconf canonical row supplies four aliases. The native self-tests are UNRUN by this PR. They bind versions/help plus option-parser controls; Gitleaks's generated detector fixture is synthetic. All transfer acceptance subprocesses disable mise auto-install.

set -euo pipefail
p1_cli_receipt="$HOME/.local/state/native-agent-stack/backups/p1-clis-$(rtk proxy date -u +%Y%m%dT%H%M%SZ)"
rtk proxy mkdir -m 0700 -p "$p1_cli_receipt"
rtk proxy mise ls --global --json > "$p1_cli_receipt/mise-before.json"
rtk proxy uv tool list > "$p1_cli_receipt/uv-before.txt"
rtk proxy apt-cache policy pkgconf pkgconf-bin libpkgconf7 > "$p1_cli_receipt/apt-before.txt"
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/install.sh --only transfer-cli-gitleaks
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/install.sh --only transfer-cli-grype
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/install.sh --only transfer-cli-ntfy
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/install.sh --only transfer-cli-qdrant
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/install.sh --only transfer-cli-tvly
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/install.sh --only transfer-cli-vllm
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/install.sh --only transfer-cli-pkgconf
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-gitleaks --stage post_install
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-grype --stage post_install
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-ntfy --stage post_install
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-qdrant --stage post_install
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-tvly --stage post_install
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-vllm --stage post_install
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-pkgconf --stage post_install
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-pkg-config --stage post_install
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-x86_64-linux-gnu-pkgconf --stage post_install
rtk proxy nice -n 19 ionice -c3 bash evidence/artifacts/new-wsl-install-plan-20261002/accept.sh --only transfer-cli-x86_64-linux-gnu-pkg-config --stage post_install
rtk proxy mise ls --global --json > "$p1_cli_receipt/mise-after.json"
rtk proxy uv tool list > "$p1_cli_receipt/uv-after.txt"
rtk proxy uv pip freeze --python "$(rtk proxy uv tool dir)/tavily-cli/bin/python" > "$p1_cli_receipt/tavily-dependencies.txt"
rtk proxy uv pip freeze --python "$(rtk proxy uv tool dir)/vllm/bin/python" > "$p1_cli_receipt/vllm-dependencies.txt"
rtk proxy dpkg-query -W -f='${binary:Package} ${Version}\n' pkgconf pkgconf-bin libpkgconf7 > "$p1_cli_receipt/apt-after.txt"
rtk proxy mise unuse --global aqua:gitleaks/gitleaks@8.30.1
rtk proxy mise unuse --global aqua:anchore/grype@0.119.0
rtk proxy mise unuse --global aqua:binwiederhier/ntfy@2.28.0
rtk proxy mise unuse --global aqua:qdrant/qdrant@1.19.1
rtk proxy uv tool uninstall tavily-cli
rtk proxy uv tool uninstall vllm
for p1_package in pkgconf pkgconf-bin libpkgconf7; do
  test "$(rtk proxy dpkg-query -W -f='${Version}' "$p1_package")" = 2.5.1-4
done
rtk proxy apt-get --simulate remove pkgconf pkgconf-bin libpkgconf7 > "$p1_cli_receipt/apt-removal-preview.txt"
rtk proxy python3 - "$p1_cli_receipt/apt-removal-preview.txt" <<'PY'
from pathlib import Path
import sys
allowed = {"pkgconf", "pkgconf-bin", "libpkgconf7"}
removed = {line.split()[1].split(":")[0] for line in Path(sys.argv[1]).read_text().splitlines()
           if line.startswith("Remv ")}
assert removed <= allowed, "rollback would remove another consumer"
PY
rtk proxy sudo apt-get remove -y pkgconf pkgconf-bin libpkgconf7
rtk proxy mise ls --global --json > "$p1_cli_receipt/mise-rollback.json"
rtk proxy uv tool list > "$p1_cli_receipt/uv-rollback.txt"
rtk proxy apt-cache policy pkgconf pkgconf-bin libpkgconf7 > "$p1_cli_receipt/apt-rollback.txt"

The rollback blocks above apply only to newly introduced requests/packages still matching this apply. Restore a saved prior pin for an upgrade; preserve intervening operator changes. Native mise pruning preserves other tracked consumers. UV uninstall targets only the named environment. The apt preview must remove only the three introduced packages; no autoremove/purge. P1-GIT#767 separately owns its paired containment wrappers and their lifecycle.

Repository clones and vault bind

Clone nas-ops, distinct librarium (not librarium-course), and a fresh native-agent-stack-live. All track main and record the actual remote/local heads. Each destination must be new; no existing checkout/key/sign-in is copied.

Exact operator-specific fstab line, explicitly requested:

/mnt/c/Users/<user>/librarium-vault ~/projects/librarium/vault none bind,nofail 0 0

The following blocks use that SAME operator path and matching HOME guard. Run every block in the SAME ordinary-user shell with set-euo; save receipt variables before later rollback. They preserve existing cloned vault contents/fstab, verify mount identity, reject concurrent fstab changes during full-file restoration, and move only recorded new clones during rollback.

set -euo pipefail
p1_repo_backup="$HOME/.local/state/native-agent-stack/backups/p1-repositories-$(rtk proxy date -u +%Y%m%dT%H%M%SZ)"
rtk proxy mkdir -m 0700 -p -- "$p1_repo_backup"
rtk proxy mkdir -p -- "$HOME/code" "$HOME/projects"

test ! -e "$HOME/code/nas-ops"
test ! -L "$HOME/code/nas-ops"
rtk proxy nice -n 19 git clone --branch main -- \
  https://github.com/seathatflowsinourveins/nas-ops.git "$HOME/code/nas-ops"
printf '%s\n' nas-ops >> "$p1_repo_backup/created-clones"

test ! -e "$HOME/projects/librarium"
test ! -L "$HOME/projects/librarium"
rtk proxy nice -n 19 git clone --branch main -- \
  https://github.com/seathatflowsinourveins/librarium.git "$HOME/projects/librarium"
printf '%s\n' librarium >> "$p1_repo_backup/created-clones"

test ! -e "$HOME/code/native-agent-stack-live"
test ! -L "$HOME/code/native-agent-stack-live"
rtk proxy nice -n 19 git clone --branch main -- \
  https://github.com/seathatflowsinourveins/native-agent-stack.git "$HOME/code/native-agent-stack-live"
printf '%s\n' native-agent-stack-live >> "$p1_repo_backup/created-clones"
p1_clone="$HOME/code/nas-ops"  # repeat for the other two destinations
test "$(rtk proxy git -C "$p1_clone" symbolic-ref --short HEAD)" = main
rtk proxy git -C "$p1_clone" rev-parse HEAD
rtk proxy git -C "$p1_clone" rev-parse origin/main
test "$(rtk proxy git -C "$p1_clone" rev-parse HEAD)" = "$(rtk proxy git -C "$p1_clone" rev-parse origin/main)"
test -z "$(rtk proxy git -C "$p1_clone" status --porcelain=v1)"
p1_vault_source=/mnt/c/Users/<user>/librarium-vault
p1_vault_target="$HOME/projects/librarium/vault"
p1_fstab_line='/mnt/c/Users/<user>/librarium-vault ~/projects/librarium/vault none bind,nofail 0 0'

test "$HOME" = ~
test -d "$p1_vault_source"
test ! -L /etc/fstab
test ! -L "$p1_vault_target"
if rtk proxy findmnt --mountpoint "$p1_vault_target" --noheadings --output TARGET >/dev/null; then exit 1; fi
if rtk proxy findmnt --fstab --mountpoint "$p1_vault_target" --noheadings --output TARGET >/dev/null; then exit 1; fi
if test -e "$p1_vault_target"; then
  test -d "$p1_vault_target"
  test ! -e "$p1_repo_backup/librarium.vault.before"
  rtk proxy mv -- "$p1_vault_target" "$p1_repo_backup/librarium.vault.before"
fi
rtk proxy mkdir -p -- "$p1_vault_target"

rtk proxy sudo cp -a -- /etc/fstab "$p1_repo_backup/fstab.before"
printf '\n%s\n' "$p1_fstab_line" | rtk proxy sudo tee -a /etc/fstab >/dev/null
rtk proxy sha256sum /etc/fstab > "$p1_repo_backup/fstab.applied.sha256"
rtk proxy sudo systemctl daemon-reload
rtk proxy sudo mount "$p1_vault_target"
rtk proxy git -C "$HOME/projects/librarium" config --local core.fileMode false
rtk proxy findmnt --verify --verbose --target "$p1_vault_target"
rtk proxy findmnt --fstab --mountpoint "$p1_vault_target" --noheadings --output SOURCE,TARGET,FSTYPE,OPTIONS
rtk proxy findmnt --mountpoint "$p1_vault_target" --noheadings --output SOURCE,TARGET,FSTYPE,OPTIONS
test "$(rtk proxy stat -c '%d:%i' "$p1_vault_source")" = "$(rtk proxy stat -c '%d:%i' "$p1_vault_target")"
test "$(rtk proxy git -C "$HOME/projects/librarium" config --local --get core.fileMode)" = false
if rtk proxy findmnt --mountpoint "$p1_vault_target" --noheadings --output TARGET >/dev/null; then
  rtk proxy sudo umount -- "$p1_vault_target"
fi
if test -f "$p1_repo_backup/fstab.before"; then
  if test -f "$p1_repo_backup/fstab.applied.sha256" &&
     rtk proxy sudo sha256sum --check --status "$p1_repo_backup/fstab.applied.sha256"; then
    rtk proxy sudo cp -a -- "$p1_repo_backup/fstab.before" /etc/fstab
  else
    # A concurrent edit or interrupted append: inspect/remove only the owned row.
    rtk proxy sudoedit /etc/fstab
  fi
  rtk proxy sudo systemctl daemon-reload
fi
if rtk proxy findmnt --mountpoint "$p1_vault_target" --noheadings --output TARGET >/dev/null; then exit 1; fi
if rtk proxy findmnt --fstab --mountpoint "$p1_vault_target" --noheadings --output TARGET >/dev/null; then exit 1; fi
if test -d "$p1_repo_backup/librarium.vault.before"; then
  if test -e "$p1_vault_target"; then rtk proxy rmdir -- "$p1_vault_target"; fi
  rtk proxy mv -- "$p1_repo_backup/librarium.vault.before" "$p1_vault_target"
fi

# Move only destinations recorded as newly created by this apply; preserve edits.
if rtk proxy grep -qx nas-ops "$p1_repo_backup/created-clones"; then
  if test -e "$HOME/code/nas-ops"; then
    test ! -e "$p1_repo_backup/nas-ops"
    rtk proxy mv -- "$HOME/code/nas-ops" "$p1_repo_backup/nas-ops"
  fi
fi
if rtk proxy grep -qx librarium "$p1_repo_backup/created-clones"; then
  if test -e "$HOME/projects/librarium"; then
    test ! -e "$p1_repo_backup/librarium"
    rtk proxy mv -- "$HOME/projects/librarium" "$p1_repo_backup/librarium"
  fi
fi
if rtk proxy grep -qx native-agent-stack-live "$p1_repo_backup/created-clones"; then
  if test -e "$HOME/code/native-agent-stack-live"; then
    test ! -e "$p1_repo_backup/native-agent-stack-live"
    rtk proxy mv -- "$HOME/code/native-agent-stack-live" "$p1_repo_backup/native-agent-stack-live"
  fi
fi

Host evidence and limits

No evidence/hosts entry, platform status, service/API/model gate or strategy gate changed. amtool/promtool/context-mode remain scoped owner binaries with no new PATH alias. CLI restoration does not qualify Grype CVE detection, ntfy delivery, Qdrant queries, vLLM GPU/model behavior or compile/link correctness. Transitive UV dependencies resolve at host apply and are separately recorded; top-level pins are not a lockfile.

Checklist

  • One lane:foundation draft; reviewed owned branch and paths.
  • Exact native pins, source/command equality, meaningful controls and complete bounded inventory.
  • No credential values, source auth stores or active client configuration copied.
  • No host install/sudo/service change/fresh provider execution/merge by this lane.
  • Shared evidence registry is the last commit; no generated-handbook/default catalog change.
  • Peer-owned worktrees, files and the selected trading runtime preserved.
  • Claude cross-family read before ready; co-op-controlled host apply/landing.

Known landing composition: #819 and #826 (revised)

At the recorded cda3e50 head the portable Claude registration uses codebase-memory-mcp, while USER_SCOPE_SERVERS still names the old key. Retain this as a composition condition, not a passing equality-test claim.

The later command-center ruling review-ns2604-coop-20261007T080628Z supersedes the vendor-key rename plan: #819 lands without the rename. At #776's one landing rebase, only on the relayed cue, keep then-main's server names, test name set, registered-name fixtures and client-map references. Do not introduce the vendor-key rename unless a later relay explicitly authorizes it. Preserve the other CLI-transfer and #780/#815 fold changes; compose with #826, which edits the same Claude template, without reviving the deferred rename.

Run the relevant equality checks and repository validation at that resulting head, and register checksums last. No branch edit, push or early rebase is performed for this description correction.

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Oct 6, 2026
seathatflowsinourveins added a commit that referenced this pull request Oct 7, 2026
### Scope

- Select one default for each logical NativeStack2604 host tool and name every coordinated consumer amendment. This decision exposes the bootstrap/trading/CI pin split without claiming it has already been resolved.
- Base commit: `67c6b6f94b456a3a7b5d28bb1fa34625a808d316`.
- Lane: exactly `lane:foundation`; this PR remains draft for the command center's cross-family read.
- Owned paths: two dated decisions, resolver watch documentation, source/version and partial context-review artifacts, sanitized assignment metadata, evidence registry last. Live bootstrap/profile/install-plan/CI and trading files are not edited. Currency's consumer follow-up starts only after #642/#645 land, or is folded by 5f's request; fixwave-defects owns #723/#776, github-ci-finalize owns the CI uv/hash, and 5f owns the trading gate/digest.

The canonical defaults are Node24.21.0,uv0.12.22,gh2.102.0,host Python3.13.16,Codex0.160.1,Claude2.1.292,Harbor0.24.0,Collector0.162.0 andvLLM0.31.0. This is a decision and owner handoff. Claude's ordinary cooldown and Harbor/vLLM qualification remain gates; the trading project's Python3.12.3 remains a separate project requirement.

The executable bootstrap consumes pins-linux-x86_64.json, so a profile summary edit alone would leave drift. 5f must fold the uv0.12.22 gate and verified sync-vector digest together. CI's promotion uv/hash and Python's family-versus-patch selection are named explicitly. C5's reopened context audit is ongoing in this same PR: the command center assigned the NativeStack2604 resolver loop to currency. Seven of nine items have primary review evidence; two Codex tagged-source checks remain pending. Nice19 local publication validation passed on the rebase and is rerun for the J805 fixes. No instruction/template file is edited. Preserve unrelated rows, update the three existing document rows by key, and append only newly reviewed name rows. These final catalog changes are pending; the live catalog remains unchanged.

## SOTA sources

- [native-agent-stack@0d5e6506:profile defaults:4655](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/adoption/new-wsl-profile.json#L4655), [plan mise pins:6-15](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/evidence/artifacts/new-wsl-install-plan-20261002/mise.toml#L6-L15), [bootstrap artifact consumer:233](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/adoption/bootstrap-linux.sh#L233), [native newer-client preservation:843](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/adoption/bootstrap-linux.sh#L843): exact split and qualified preservation policy.
- [Node v24.21.0](https://nodejs.org/en/blog/release/v24.21.0), nodejs/node@955266bf; [uv0.12.22](https://github.com/astral-sh/uv/releases/tag/0.12.22), astral-sh/uv@70fe1196; [gh2.102.0](https://github.com/cli/cli/releases/tag/v2.102.0), cli/cli@fc4b137c; [Python3.13.16](https://www.python.org/downloads/release/python-31316/), python/cpython@cbc944f4: plan-aligned maintained host defaults and release dates.
- [Codex rust-v0.160.1](https://github.com/openai/codex/releases/tag/rust-v0.160.1), d27764b8; [Claude v2.1.292](https://github.com/anthropics/claude-code/releases/tag/v2.1.292), release-repository fbe20e00; [Harbor v0.24.0](https://github.com/harbor-framework/harbor/releases/tag/v0.24.0), b53b8134; [Collector v0.162.0](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases/tag/v0.162.0), ae8c5075 and [distribution](https://github.com/open-telemetry/opentelemetry-collector-releases/releases/tag/v0.162.0), f6159a77; [vLLM v0.31.0](https://github.com/vllm-project/vllm/releases/tag/v0.31.0), db9527a4: F12 selected targets, identities and pending gates.
- [Trading sync pins:8-9](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/blueprints/us-equities/runtime-2604/sync-trading-2604.sh#L8-L9), [verified vector:84-88](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/blueprints/us-equities/runtime-2604/install-trading-2604.sh#L84-L88), [uv gate:112](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/blueprints/us-equities/runtime-2604/install-trading-2604.sh#L112): exact 5f handoff; no trading file edit.

C5 primary sources: [Claude memory](https://code.claude.com/docs/en/memory), [skills lifecycle](https://code.claude.com/docs/en/skills#skill-content-lifecycle), [environment reference](https://code.claude.com/docs/en/env-vars), [network trust](https://code.claude.com/docs/en/network-config#ca-certificate-store), [official Codex Markdown AGENTS guide](https://learn.chatgpt.com/docs/agent-configuration/agents-md.md), read2026-10-06; [Claude2.1.292 changelog](https://github.com/anthropics/claude-code/blob/fbe20e00e2851fc01506f54f98a8f0b875af3847/CHANGELOG.md). Installed Claude artifact/byte windows and qualified comparison limits are in review.json; assignment source is resolver-assignment.json.

J805 fixes: the residual map covers the exact Codex lane guard, uv CI downloader/hash, generated installer/acceptance/Python selections, Inspect/Scout's Harbor package, producer contract, vLLM/Collector recipes and inactive template. SDK/bundled CLI0.160.0, dedicated SDK interpreter, dated holds, rollback and macOS pins are classified separately. The idleCompaction source now names the actual byte-window line113; row updates are by key, not duplicates. No executable pin/guard is changed by this decision PR.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| Profile, bootstrap, plan, CI and trading consumers differ | source_review | Immutable main reads and exact linked locators |
| Installed host-tool versions match the plan; F12 drift is dated | local_integration, read-only version observation | selection.json; normalized versions and command labels explicitly identified |
| Selected default versions have official release identities/dates | source_review | Maintainer release/ref metadata; no downloaded-asset verification or new runtime acceptance |
| Every in-scope consumer is named; qualification is not inferred | source_review, independent completeness critic | 0P1/0P2; two P3 provenance refinements corrected |
| Publication integrity | local_integration | Nice19 validate.py exit0 after registration; this is integrity/scope evidence only |

### Local commands run

```text
Fresh owned worktree creation from origin/main with Worktrunk --no-hooks
exit0; hooks skipped for the paper window; original worktrees preserved.
Installed --version and cached official release/ref reads
exit0; source ledger records normalized versions, not full argv/raw outputs.
Independent bounded completeness critic
0P1/0P2; two P3 source/provenance refinements fixed.
git diff --check / staged whitespace check
exit0.
host_receipts.register_file for the two owned new files
exit0; registry-only commit LAST.
python3 scripts/validate.py
Exit0 under the later REBASE-805/J805 authorisation for light checks with the paper session inactive; repeated after J805 evidence registration.
```

### Open shared-file neighbours

#802, #770, #769 and #764 also edit upstream-surface-dispositions.json. Rebase after any lands first and take main's catalog. Preserve unrelated rows, update the three existing document rows by key, and append only newly reviewed name rows. Keep #802's corrected context_management source locator. Queued branches remain 5f-only. This PR remains currency-written and draft while the review completes.

J805 checks:6 DispositionCitationTests pass (nice19), actual proposed source113 passes the existing predicate while old line1 is rejected, and bounded independent completeness critic reports no remaining material P2. Source-review findings are not new runtime acceptance.

### Decision record

`docs/decisions/2026-10-06-one-host-tool-default.md` names defaults, full residual inventory/exceptions, owners and overturn conditions. `docs/decisions/2026-10-06-harness-context-budget-refresh.md` records the reopened partial C5 review and proposed CC-only sentences. Executable one-pin acceptance remains pending owners' folds.

### Host evidence

No evidence/hosts or platform-status change. Version output is not native adoption or a passed new host run.

- [ ] Host-receipt validation: not applicable.
- [x] Independent source/consumer completeness read recorded.
- [x] No platform-status update inferred.

### Checklist

- [x] No Actions/workflow permissions change.
- [x] No credential values/files read or committed; no new required secret.
- [x] No paid hosting/subscription/billing surface.
- [x] Peer-owned files, historical receipts, main and other worktrees preserved.
- [x] Registry committed last; draft retained.
- [x] Nice19 local publication validation passed for the registered J805 content; no native acceptance inferred.
@seathatflowsinourveins seathatflowsinourveins changed the title feat(adoption): qualify CLI transfer decisions and repository host steps Qualify CLI transfers and retain applied client-tools evidence Oct 7, 2026
seathatflowsinourveins added a commit that referenced this pull request Oct 7, 2026
### Scope

This PR adds 31 scoped gateway-provenance correction records and their preparation notes. It preserves original results, record bytes and basis digests; it changes no client configuration, runtime, model route or readiness state.

- Base commit: `cd1cd78ec3f8bb82ca4343be4f859a2e107e2035`
- Prepared head: `d4565a13a2fc4b1a4ec09f05d5bd7c7c960f87a9`
- Lane: `lane:foundation`
- Owned paths: `evidence/artifacts/ns2604-gateway-evidence-relabel-20261007/` and native-generated `manifests/evidence.json`.

### Landing path

This is a prerequisite of #775 and #791 under the gateway plan's T10. The co-op performs the byte/hash check and validate at the exact head, the command center ACKs it, and 5f lands it in the slot immediately before #775 on the command center's cue. Records merge before #791's references and #775's publication. Rebase once at the landing turn only if its landing check needs it, then re-register hashes last; no rebase before opening.

Dated cap exception (2026-10-07): this one additive, registry-only-overlap prerequisite may open separately because folding it into #776 at rank 24 would delay the monitoring change; authorized by review-ns2604-coop-20261007T071859Z.

## SOTA sources

- [native-agent-stack at 0d5e650](https://github.com/seathatflowsinourveins/native-agent-stack/tree/0d5e6506434fab598dee861c749a22e628beb75a): the original caller and artifact snapshots cited by each correction, including `examples/omniroute-codex-sdk/worker.py` and the install plan's `accept.sh`. Those pinned sources establish the recorded caller/default basis; they do not prove an unrecorded endpoint.
- [native-agent-stack at cd1cd78](https://github.com/seathatflowsinourveins/native-agent-stack/tree/cd1cd78ec3f8bb82ca4343be4f859a2e107e2035): `docs/acceptance-evidence-policy.md`, `docs/lanes.md` and the unchanged native `scripts/host_receipts.py` registration API (SHA256 `c3dc47cdab33e2ed2f1473700774a006a34c6218d6cd7ceb36f33d7f71f0fd6f`).
- Reviewed gateway plan revision 3.1, SHA256 `8ce35229f4b1628e274675b1ab6fa283a240ecaf6ae9165e7dbe7fb7b6424cc3`, and readiness change set sections 1–5, SHA256 `99c42fd333feef63ad48a5a8b6ff0852540463ff98afd82551b739d37887b088`. The new dated A19 schema amendment preserves that SHA-bound original.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| Five old-default/old-host inferred scopes and 26 unknown reviewer/profile scopes | source_review | The 31 v1 records contain original item digests and quoted source line/hash bases. No inference is promoted to a recorded endpoint. |
| Original observations, scoped record bytes and v1 shape preserved | source_review | Byte/hash and nine-field comparisons against the prepared original; hashes below. |
| Native registry and repository integrity are consistent | local_integration | `python3 scripts/validate.py`: exit 0, 10,448 hashed files; no live provider or GPU execution. |

There are 3 E1, 18 E3, 4 E4, 4 E5 and 2 E12 correction scopes. The 31 JSON records are byte-unchanged through the A19 amendment. The README and `schema-addendum-A19-20261007.md` are separate preparation documents; the latter adds exactly `native-no-gateway` and `not-2604` to the original six class names, retaining the v1 shape and original item scopes. The CC may rename the two spellings before publication. Positive native execution is not assigned a gateway class or left unknown when that same scope is proven native.

### Frozen correction hashes

All paths in this table are relative to `evidence/artifacts/ns2604-gateway-evidence-relabel-20261007/`.

| Correction | SHA256 |
| --- | --- |
| `e1-grafana-sdk-1-old-gateway-inferred.json` | `41ec81ce0102a60194dea6db065ae4fd4088691d60afd9a176503b465a36b5e2` |
| `e1-grafana-sdk-2-old-gateway-inferred.json` | `1d26ef660e8d7f99e681062e5481578ec85b086e196f699479019c8b29c40143` |
| `e1-grafana-sdk-3-old-gateway-inferred.json` | `7f0a026d1f2ce4cb2befbce02958fac0aeef503511c62966fb2f61d312a7b3b5` |
| `e12-a01-old-host-20261007.json` | `52e8a279ece0f345a5532032b2771c7fe814a155f083f46c4c3cba06b3aff8bf` |
| `e12-a02-old-host-20261007.json` | `ef40e3232bb64b0eaf91e41f268440d4cd24f8c1f27b63f3d742907f97de5fed` |
| `e3-L0032-mcp-surfaces--mcp-inspector-20261007.json` | `8eae901eae4b232e22211380a972c37e8d59598c0b1fa32d0b73c15bd0e1280c` |
| `e3-L0040-semantic-rag--code-search-20261007.json` | `ba2e6b176e9ca6f628d7383e2a802fc02fd9428550c97ba017c65f9bb3c8e19d` |
| `e3-L0048-durable-memory--memory-owner-20261007.json` | `e454e5348c2a34d0aa4cdf36ffbc7f77d45714448fb52b5d94d9ca49ff06f3dc` |
| `e3-L0049-token-efficiency--ccusage-20261007.json` | `e11307552bafac444e96e4ba69bf5717930c7f2847c609f8064c07ef96003a3b` |
| `e3-L0050-token-efficiency--context-supply-20261007.json` | `8f9195d6dbb13b16793a73afca3d758214cb1fdd5ed61c722e19506cc31c259d` |
| `e3-L0052-token-efficiency--command-output-20261007.json` | `93e7707fbc1502d81de50775e8af1bbf6dea4b8e361e705015f805fcdefcb177` |
| `e3-L0053-token-efficiency--output-compression-20261007.json` | `8baf31b963a3d7c0273e5b02c238d60db0668ef17e92fe7205f4041e3e331cd0` |
| `e3-L0054-token-efficiency--code-index-20261007.json` | `68d68d3de0f1a38b75ebb8a118c473824bdf1e0ed8228c3427452d82783a82b2` |
| `e3-L0055-token-efficiency--code-graph-20261007.json` | `ddd3cfb512ab352bb7de0185cd740df8ff02134e4facdc0d585cb311d6ce62cd` |
| `e3-L0056-token-efficiency--repo-packing-20261007.json` | `157af92aeb521c59eec67a10f83b0b84607f97031cf6313eb4db65120b2523b4` |
| `e3-L0057-token-efficiency--structured-data-20261007.json` | `70e1c63be916bcc8a8ac63d98fc45d1bee6cf5c754f0f9b03df3f1a4639316be` |
| `e3-L0058-token-efficiency--doc-conversion-20261007.json` | `029628fbd88c77bcfa6b7eabf95e7639e0e44966689922ca6698613dbaf2315d` |
| `e3-L0059-token-efficiency--api-docs-20261007.json` | `24ff83fa47274834f5f9f277457654ce70988b12c57f02a878768afb52f6e00b` |
| `e3-L0060-token-efficiency--trace-viewer-20261007.json` | `d07a932f7f8707b6e095e479c8a782f4c879db5bcc65119931ca124b8acf01b7` |
| `e3-L0070-observation-inference--session-analytics-20261007.json` | `6e6b1f164accf1b8e66483e59f6180bf92a00533ca0a611e15364a3b1e6d9b82` |
| `e3-L0071-quality-evaluation--inspect-ai-20261007.json` | `f5f1eef8cd97062ab69ec3794f40792e02502a7f3427b09191fab1f31d505d9b` |
| `e3-L0083-git-github-automation--difftastic-20261007.json` | `bd9deb930af367e52d58c4f5d7c168d2d586811cb230390c050a36129061c1b3` |
| `e3-L0092-isolation--sandbox-runtime-srt-20261007.json` | `fbc83cdbf3e54e51ba6241200e0878a35e9d0bc8741ad949cf21829c043d4f59` |
| `e4-a06-unknown-gateway.json` | `e0081f7c97a60f5040968953635c502eec2dd7cae0a719c052fdae85ffe627fa` |
| `e4-a07-unknown-gateway.json` | `5afaf8d5e0c41c3083de986121bbb703328a9f9edb01f35320ff95a78dc9c44d` |
| `e4-a09-unknown-gateway.json` | `1a37c91464ca2fa37cf105d22fb8744f1cf787c3d293d89475cad7188d4a9ab2` |
| `e4-a12-unknown-gateway.json` | `d6c646938507c23d7727dd1ee8440f9ed61c8defa3c6d2bc5dba067c972cafcb` |
| `e5-b06-profile-scope-unknown.json` | `83a9b5d602a92880cad07968d71bd563497a7f1c73f9592be9c37c5bd02f35ff` |
| `e5-b08-profile-scope-unknown.json` | `6ae9a2e2f23688d86749d6ad1522c20e976acea32367575cdd73bc7a16e4ce2a` |
| `e5-b09-attempt-endpoint-unknown.json` | `cbe2bec96018145b4c71274de24b2f2927fffeda0365a69642cfbf0f2a2834d0` |
| `e5-b12-attempt-endpoint-unknown.json` | `4fc0d03ebeada335538e299226b82cd7be020078d970e7f6974cfc760ca3b471` |

Preparation-document hashes: README `1323912a18fa87ab13a5121e0c44acc19593d5f7db5b1473ace925fe1b97a571`; dated schema amendment `15977627eae5c107e90ae6e5073fc63574f779d466a1a2075222e8cf04fa9124`.

### Local commands run

```
rtk proxy nice -n 19 ionice -c3 python3 scripts/validate.py
exit 0; 69 components, 10,448 hashed files, 4 profiles, 224 receipts

git diff --check (captured with the owned-worktree selector)
exit 0
```

The unchanged native registration API updated the README and registered the new schema document; every other 10,446 registry entry and manifest metadata was retained. Content is committed first; the registry is the last commit. No custom acceptance runner, new client smoke, model request, host apply or organic counter is introduced.

### Decision record

`evidence/artifacts/ns2604-gateway-evidence-relabel-20261007/schema-addendum-A19-20261007.md` is the dated additive record-format amendment. This PR makes no new component-selection or host-readiness decision.

### Remaining conditions

E2/E4-private/E5-private/E6/E7/E8/E10 require their qualified, sanitized originals and bases; E9 remains its existing owner's responsibility. Disarmed/provenance labels remain draft until the actual T5 apply receipt and archive bindings exist. The T5 record plus renamed originals are the archive; their bytes are not duplicated. Missing call-log rows prove no route. T4's flagless acceptance-stage hold remains until C0, C1 and A have merged and GW-01 passes. This PR is a provenance publication prerequisite, not a new acceptance or organic-use receipt.

### Host evidence

No files under `evidence/hosts/` change. No platform status is changed.

### Checklist

- [x] No GitHub Actions workflow changes.
- [x] No secrets, raw conversations, new authentication requirement or private active configuration.
- [x] No paid hosting, subscription or billing surface.
- [x] Peer-owned files, worktrees and historical observations preserved.
- [ ] Independent exact-head read and CC ACK requested through the named landing path.
- [ ] CI at the eventual landing head required; prepared validation is not a claim of current hosted CI.
seathatflowsinourveins added a commit that referenced this pull request Oct 7, 2026
### Scope

Route catalog lookup through QMD's lexical queries and bounded document retrieval; use SocratiCode for semantic catalog search at the main checkout's projectPath. Keep reranking available and prohibit qmd embed/pull. Update current maintenance recipes and native instruction carriers through the repository renderers.

Existing Serena consumers read its manual before navigation, and jCodeMunch consumers obtain the current guide before a typed route with the actual caller model and execution off. Four existing Claude roles gain only Serena's manual tool. Reviewer/builder keep their no-menu boundary, and a focused read of a known path and line remains valid.

This landing repair appends the preregistration's Amendment4 to bind the deliberately changed role bodies and compacts lane-authored RTK explanations within the unchanged compact and startup budgets. The entire composed pre-RTK prefix, upstream awareness, owner's blocks, exact SKILL line, seven exceptions, models and effort are preserved. Prior amendment rows, observations, seals and RUNBOOK bytes remain unchanged.

The canonical code-graph rename is prepared as a separate patch and is excluded from this head under command-center ruling081016Z. Main's existing names remain in both templates, the map, fixtures and carriers. The protected lane token requires the owner's word before the rename can land. Until that follow-up, this host's Claude code-graph access is through the vendor's hook channel only; the stale MCP carrier id is a recorded limitation and is not claimed fixed.

- Base commit: `c44993b379da25fae923dbbe70188978af5104aa` (verified native source; #803 already landed).
- Lane: `lane:foundation`; draft.
- Head: `9985e468fa4997d22630714b2fa6a76666e3cda9`. Native bytes: compact 8076 <8192, rendered 9142, three-file startup 20101 <=20103; full Claude block 4087 <=4100. These are byte gates, not token-use measurements.
- Owned paths: token-lane carriers and their paired handbook text, minimal manual grants and mirrors, Codex template/rendered copies, native loader/routing/sequence tests, current recipes and generated handbook, append-only decisions/preregistration amendment, follow-up receipts and checksum/registry projections.
- ROLE-CARRIER-GAPS and ROLE-GRANTS are separate future work and stay out of this change.

Landing path: explicit command-center cue070358Z and fallback ruling081016Z permit one pushed rebase/content repair onto then-current main while #802/#813/#830 land. The co-op performs the new-head delta read with its CI result; the command center ACKs; 5f lands. A further pushed rebase requires the separate dated landing-conflict cue. Host configuration, cutover and fresh-session/working-day acceptance belong to their owners.

## SOTA sources

- [QMD v2.8.3 lexical query](https://github.com/tobi/qmd/blob/v2.8.3/src/mcp/server.ts#L294), [typed searches/rerank](https://github.com/tobi/qmd/blob/v2.8.3/src/mcp/server.ts#L321) and [document retrieval](https://github.com/tobi/qmd/blob/v2.8.3/src/mcp/server.ts#L412): native lexical subqueries, retrieval and optional rerank. Rerank defaults true (:334-335). [README maintenance syntax:1033-1037](https://github.com/tobi/qmd/blob/v2.8.3/README.md#L1033-L1037) supplies bounded commands.
- [SocratiCode v1.15.0 codebase_search](https://github.com/giancarloerra/SocratiCode/blob/v1.15.0/src/index.ts#L138): semantic search at an absolute projectPath. Owner ruling224125Z selects the routing and preserves rerank-on acceptance; this PR performs no host cutover.
- [Serena c6fbd1c5 manual order](https://github.com/oraios/serena/blob/c6fbd1c5932df2494ffa0020af5a9fbe80b82143/src/serena/resources/config/prompt_templates/system_prompt.yml#L5-L6), [manual tool:28-40](https://github.com/oraios/serena/blob/c6fbd1c5932df2494ffa0020af5a9fbe80b82143/src/serena/tools/workflow_tools.py#L28-L40) and [project/session binding:44-49](https://github.com/oraios/serena/blob/c6fbd1c5932df2494ffa0020af5a9fbe80b82143/src/serena/tools/config_tools.py#L44-L49): manual first, active cwd project and returned session id for switches.
- [jCodeMunch 1.108.330, 28803366, typed route:446-463](https://github.com/jgravelle/jcodemunch-mcp/blob/288033668f0425ab0547f420dd647c14bd186c7f/src/jcodemunch_mcp/server.py#L446-L463), [guide:4743-4752](https://github.com/jgravelle/jcodemunch-mcp/blob/288033668f0425ab0547f420dd647c14bd186c7f/src/jcodemunch_mcp/server.py#L4743-L4752) and [policy:101-128](https://github.com/jgravelle/jcodemunch-mcp/blob/288033668f0425ab0547f420dd647c14bd186c7f/src/jcodemunch_mcp/cli/policy.py#L101-L128): guide-first and typed task/model route. These files are unchanged at target1.108.331/d94049d0. The executable schema corrects the guide's query example; no new adaptive-tier setting or upstream rebuild.
- `native-agent-stack@c44993b:tests/test_token_e2e_preregistration.py:637-663,905-909`: later dated role-pin amendment and sealed RUNBOOK contracts. Amendment4 preserves every earlier row/seal and extends the current-row selector. The command center records merge chronology at landing; this is a structural repair and authorizes no run.
- [DeusData/codebase-memory-mcp v0.11.0 release](https://github.com/DeusData/codebase-memory-mcp/releases/tag/v0.11.0), the repository's pinned component, and the command center's native-client read-back identify the canonical server name. Its proposed client-key/wire-id/owner-token correction is kept in the separate patch, preserving every payload and strict fixture. Ruling081016Z explicitly keeps main's names in this publication while the owner's instruction-token decision remains open.
- RTK explanation provenance: `native-agent-stack@2d849ba` (#726) and `@50b9579` (#389), `adoption/templates/codex.AGENTS.template.md` after its exceptions marker. The eight explanations shorten while all facts and protected bytes remain. Command-center064832Z accepted their class and scoped wording.
- Native helpers at `native-agent-stack@c44993b`: `tools/adoption/managed_block.py:169` (`codex_block`), `tools/adoption/codex_roles.py:287` (`f4_block`), `scripts/host_receipts.py:710` (`register_file`), `docs/lanes.md:94-128`. Current generated inventory/handbook and checksum bindings use those repository tools; historical receipts and the frozen catalog passage are preserved.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| Documented native routing/manual/guide interfaces | source_review | Pinned upstream files above |
| Carrier rendering, protected bytes, new body pins and tool ids | local_integration | Existing native helpers, hashes and required modules |
| Permission/sequence/byte-mutant/frozen-row controls | synthetic | Existing tests with assertions preserved |
| Deployed use and token savings | Pending owner evidence | No model, host apply or working-day measurement in this repair |

### Local commands run

```text
$ CI=true nice -n 19 ionice -c3 python3 -B -m unittest tests.test_token_lanes_session_start tests.test_token_lanes_subagent_start tests.test_scaffold_repo tests.test_new_wsl_handbook tests.test_adoption_docs_consistency tests.test_codex_agents tests.test_codex_roles tests.test_codex_worker_lane tests.test_token_e2e_preregistration tests.test_new_wsl_client_config.RecordTests tests.test_install_claude_profile tests.test_managed_block tests.test_task_model_routing tests.test_new_wsl_client_config.MapTests tests.test_new_wsl_client_config.AgentGapTests tests.test_new_wsl_client_config.RenderTests tests.test_new_wsl_client_config.ApplyTests.test_the_first_run_writes_what_the_wired_pieces_name_and_nothing_else
exit 0; Ran 595 tests in 109.929s; OK (skipped=14)

$ CI=true nice -n 19 ionice -c3 python3 -B -m unittest tests.test_install_claude_profile tests.test_adoption_docs_consistency tests.test_new_wsl_client_config.RecordTests
exit 0; Ran 150 tests in 16.306s; OK (skipped=2)

$ CI=true nice -n 19 ionice -c3 node examples/claude-native/workflows/test-envelope.mjs
exit 0; SUMMARY passed=254 failed=0 total=254

$ CI=true nice -n 19 ionice -c3 python3 -B tools/adoption/new_wsl_client_config.py --check --markdown
exit 0

$ CI=true nice -n 19 ionice -c3 python3 -B scripts/build_new_wsl_handbook.py --check
exit 0
```

The passing 595-test run is retained on unchanged source/assertion inputs from the pre-window checkpoint; the 150-test run checks the concrete relocation-fixture and workflows-README changes in the new main base. Their counts overlap and are not added. The fresh Node run passes 254/254. Strict checksums in both Codex directories and the Claude hook directory, plus `git diff --check`, exit 0. All three Amendment-4 role digests were re-derived in both copies and are unchanged from the previous published head.

```text
$ CI=true nice -n 19 ionice -c3 python3 -B scripts/validate.py
exit 0; 69 components, 10,482 hashed files, 4 profiles, 224 receipts, status passed
```

The earlier landing composition used source `630b6ece8485a7710ea51321682d5a12e364e25c` and hot commit `5703ef1061b982078038425fada888fd35153868`; its native checks and source-critic result are retained. The authorized locator follow-up changes only `catalogs/foundation/upstream-surface-dispositions.json` and that file's registry row: the `otel.environment` citation now points to the command at `examples/codex-native/README.md:214`. Source commit `2b36cfee` is followed by registry-last commit `9985e468fa4997d22630714b2fa6a76666e3cda9`, with no further rebase. Claude/Codex instruction bytes, role hashes, historical records, namespace and byte budgets remain unchanged.

The registry starts from exact main `c44993b379da25fae923dbbe70188978af5104aa`, registers the same 67 changed-file rows through the native producer, and preserves main's receipt and convergence arrays. The two-file correction passed the 114-test citation module, the two exact failing methods and a second native validator run. The worktree is clean; the shifted-citation scan found no other current target to repair. Historical before/after references remain intact.

```text
$ CI=true nice -n 19 ionice -c3 python3 -B -m unittest tests.test_upstream_surface_watch
exit 0; 114 tests, 6 skipped

$ CI=true nice -n 19 ionice -c3 python3 -B -m unittest tests.test_upstream_surface_watch.DispositionCitationTests.test_every_cited_line_names_the_key tests.test_upstream_surface_watch.DispositionCitationTests.test_a_dotted_key_has_its_parent_near_the_citation
exit 0; 2 tests

$ CI=true nice -n 19 ionice -c3 python3 -B scripts/validate.py
exit 0; integrity and scope passed
```

The hosted run at5703 returned two failures in11,495 tests because the documentation locator moved. A reviewed locator still gates when its repository test fails. This follow-up closes that exact contract; it adds no assertion waiver or namespace change.

Read-only overlap metadata checked all 47 open PRs, including full file pagination where needed. Source overlaps: #645, #706, #709, #754, #769, #770, #775, #776, #795, #810, #821, #826, #829. Shared registry/checksum paths use the hot-file protocol; no peer branch is changed.

Earlier failed CI at3ba ran11,381tests and failed six role-body-pin subcases; its complete failed log is retained privately. The failed 560-test and earlier 595-test preparation runs also remain retained. This repair uses a dated amendment, preserves the older source evidence and strict current-body comparison, and performs no full-suite or provider acceptance run. Validator results are integrity and scope evidence only.

### Decision record

`docs/decisions/2026-10-06-qmd-lexical-catalog-instructions.md` and `docs/decisions/2026-10-07-serena-jcodemunch-native-navigation-wiring.md`, with appended clarifications and the new landing follow-up, explain the behavior and limits. The preregistration README gains Amendment4 only; its RUNBOOK and earlier sealed records stay byte-identical. No prior result is recast as a new run.

### Host evidence

Repository-only change. No live instruction file, MCP registration, hook trust, client setting, gateway setting/key or model session changed. Source/render checks and synthetic fixtures remain distinct from the configuration owner's read-back and organic-use acceptance.

### Checklist

- [x] No GitHub Actions or paid service change.
- [x] No credentials, raw conversations or live client configuration committed.
- [x] Models, effort, owner's blocks and historical observations preserved.
- [x] Peer-owned worktrees and source preserved.
- [x] Native validation passed; changed checksums/registry committed last at the final head.
seathatflowsinourveins added a commit that referenced this pull request Oct 7, 2026
### Scope

Restore the handbook test's live publication binding so a later profile or handbook regeneration updates its own maintained receipt, instead of editing #826's dated landing record.

- Base commit: `6d252c9c102e575bc9229bf6bb2149409655d5f3`; head: `4d2ce2a7719adca918025ffde295ef1dfa30bf02`.
- Lane: `lane:foundation`; draft.
- Exactly four paths: `tests/test_new_wsl_handbook.py` (one receipt-path line), `evidence/artifacts/new-wsl-handbook-20261001/receipt.json` (current computed binding plus one appended regeneration), its one-line `README.md`, and registry last.
- The generator, profile, both generated outputs, hash/inventory assertions, existing receipt observations/history and #826's dated record stay byte-identical.
- **Named landing path:** co-op cross-family exact-head read, hosted validate, command center CI read and cue; **right after #820, ahead of #775**. ONE replay at that cue if #820 changes main; full test phase in that landing turn. Hold this draft head for the reads.

## SOTA sources

- `native-agent-stack@6d252c9:tests/test_new_wsl_handbook.py:1672-1691`: the publication contract checks actual current generator/profile/output hashes and inventory, with byte-change negative controls. Its comment says hashes follow regeneration. Only its receipt locator changes.
- Same pin, `evidence/artifacts/new-wsl-handbook-20261001/receipt.json:268,656,700`: the receipt is a current hash mirror and prior entries expressly refresh mutable producer/output bindings while preserving observations. This existing repository practice fills the publication-binding gap; no new manifest, generator or validator is introduced.
- Same pin, `docs/acceptance-evidence-policy.md:59-65` and `docs/landscape-domain-notes.md:33,38`: retain historical inputs/results/failures/pins. All prior receipt fields, regeneration prefix and `previous_outputs` are retained; #826's dated record remains historical.
- Same pin, `docs/lanes.md:94-115`: main-copy/own-registration protocol; `scripts/host_receipts.py:710` updates the three own hashes and inserts the README, in the registry-only final commit.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| Existing strict publication contract passes at the maintained binding | `local_integration`, `synthetic` | 87 handbook tests, exit 0; existing byte-change negative controls unchanged. |
| Actual generated bytes are current | `local_integration` | Native builder `--check`, exit 0; MD a1a0cb17… and JSON a42c8915… as recorded in the appended regeneration. |
| Dated records/history/other test assertions preserved | `source_review`, `local_integration` | Exact base-file/JSON comparison, exit 0; independent bounded source critic ACK. |
| Publication integrity after registry-last commit | `local_integration` | `validate.py` before/after, exit 0; 69 components, four profiles, 224 receipts, 10,508 hashes. |

### Local commands run

All checks use the owned external TMPDIR, `nice -n 19 ionice -c3` and closed stdin.

```text
python3 -B scripts/build_new_wsl_handbook.py --check
exit 0, status passed; current outputs unchanged.
python3 -B -m unittest tests.test_new_wsl_handbook
exit 0: Ran 87 tests in 37.368s; OK.
Exact unchanged-field, regeneration-prefix, dated-record and one-test-line comparison
exit 0; all preservation controls true.
python3 -B scripts/validate.py
exit 0 before and after final registry commit; 10508 file hashes.
git diff --check
exit 0.
```

The scoped cached open-PR check found 44 open PRs and these overlapping neighbours: #645, #754, #769, #770, #810 on the maintained receipt; #776 and #810 on the test. The CC assigned this narrow critical-path repair before later regeneration PRs. No peer head or file is edited by this lane.

### Decision record

The CC's J-HANDBOOK-BINDING ruling supplies the bounded disposition. The one-line receipt README identifies the maintained current-state carrier. No old decision or dated observation is rewritten, and no extra decision file is added to this small unit.

### Host evidence

No host/client/installation or acceptance-status changes. These checks establish the repository publication contract, not upstream model or native host acceptance.

### Landing read fields

The intentional main-test edit is `tests/test_new_wsl_handbook.py:1677`, disposed of in advance by the CC for this exact receipt rebind. Name it in `main-tests=` at the landing read. Declare every actual post-read/replay change in `adapted=`; the full-suite phase is deferred to the landing turn. Nothing is re-pointed to a new dated path.

### Checklist

- [x] Existing current-state receipt reused; earlier observations and dated record preserved.
- [x] Only one test line changes; assertions, producer and profile unchanged.
- [x] Own entries registered last; required local checks pass.
- [x] No workflow, dependency, paid surface or credential change.
- [x] Draft and one foundation label; named read/ACK/queue path.
seathatflowsinourveins added a commit that referenced this pull request Oct 8, 2026
…heck (#838)

### Scope

The required Linux test job runs serially and blocks each landing for roughly half an hour. This change runs native unittest discovery as eight module shards and keeps one final required check named `validate`, which fails on any unsuccessful dependency or incomplete module coverage.

- Base commit: `b16cb8cf7cb8e37bf0d0edb9924502beb3e6a276`.
- Lane: `lane:shared`; the command center requests trading acknowledgement for the one promotion workflow-contract method.
- Owned paths: validate workflow, shard helper/weights, its fixtures, declared workflow-contract tests, the decision/receipt and the final registry commit.
- Landing path: exact-head co-op cross-family read after the draft's hosted timing run; command-center ACK; 5f lands after #833/#836 and before #820/#829/#776, per GO-RELAUNCH230713Z and RULING203309Z. The draft stays draft until that read. Critical-path cap allowance confirmed by item191739Z; all25kind3rows accepted by name in203309Z subject to their stronger-assertion condition.
- #706 relation: this final summary supersedes G-6 (serial suite counts); G-1 (PR-metadata workflow work) stays in #706 for its rank38 turn.

## SOTA sources

- [GitHub matrix strategies and failure handling](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations), read 2026-10-07.
- [GitHub needs result](https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#needs-context) and [always](https://docs.github.com/en/actions/reference/workflows-and-actions/expressions#always), read 2026-10-07.
- [Skipped jobs](https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/control-jobs-with-conditions) report success even when required; [required status checks](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging) accept skipped statuses. This final job always runs and explicitly rejects skipped/cancelled/failed dependencies.
- [CPython v3.12.3 native discovery](https://github.com/python/cpython/blob/v3.12.3/Lib/unittest/loader.py#L109), [load_tests protocol](https://docs.python.org/3.12/library/unittest.html#load-tests-protocol) and [TextTestRunner](https://docs.python.org/3.12/library/unittest.html#unittest.TextTestRunner). The helper supplies assignment and receipt glue; unittest runs the tests.
- `native-agent-stack@b16cb8c:.github/workflows/validate.yml:147-250`: the unchanged provisioners and diagnostics.
- Same pin, `docs/decisions/2026-10-03-suite-parallelism-trial-outcome.md:24-27`: the superseded Linux serial instruction; failed pool-trial evidence and macOS instruction preserved.
- Existing pinned download/upload artifact actions are reused; no requirement file or other workflow job changes.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| Historical timing weights | source_review of retained native output | run37653671981/job112905135751, log SHA b1d2d43e; 17 failures retained |
| Native discovery and assignment | local_integration | Current tree discovery-only sample:272owners/11607cases, no bodies; predates final fixture set |
| Focused contracts and fixtures | local_integration; synthetic fixtures remain synthetic | 368tests/95.067s with one retained serial-binding failure; its authorized class delta3tests/0.874s passes; final new-module13tests/3.383s passes |
| Syntax/integrity | local_integration | actionlint0; offlinezizmor0/findings[]; py_compile0; diff--check0; validate.py0 |
| Hosted timing and exact module/count union | pending | The draft's actual run supplies this; historical estimates are not acceptance |

Expected first-run limitation: this branch is still based on b16cb8c, while main28327acc carries #837's new frozen-lock exceptions. The first osv-scanner check is expected red for that base; it is refreshed only at the command-center landing cue's single rebase. No exception or requirement change is added here, and a local check never substitutes for the landing head's hosted result.

### Local commands run

```text
nice -n 19 ionice -c3 actionlint -color .github/workflows/validate.yml
exit0

nice -n 19 ionice -c3 zizmor --offline --no-config --no-ignores --format json .github/workflows/validate.yml
exit0, []

python3 -I -B -X pycache_prefix=<ignored-owned-path> -m py_compile <helper and five touched test modules>
exit0

nice -n 19 ionice -c3 <activated Python3.12.3> -I -B -X faulthandler <stdlib unittest bootstrap> -q --durations 50
selected: test_validate_shards, test_workflow_hardening, test_shell_parser_ci,
test_landscape_sweep_skills, test_workflow_security_coverage, test_promotion_gate,
test_adoption_docs_consistency
exit1, 368ran/95.067s/onefailure/fiveskips (retained)
Only failure: the promotion class's serial-command binding.
Authorized delta: that class exit0, 3ran/0.874s; other36method ASTs and surrounding bytes preserved.
New fixture deltas:12ran/3.407s and13ran/3.383s, both exit0.
No full-suite phase or hidden baseline waiver.

nice -n 19 ionice -c3 <activated Python3.12.3> -I -B scripts/validate.py
exit0, components69/hashed_files10559/profiles4/receipts226.
git diff --check
exit0
```

The local environment has Python3.12.3/PyYAML6.0.3 and real Node24.21.0/npm11.19.0 bins before generic PATH. It is a focused environment, not full hosted-image parity. Every hosted cell keeps the current installer and promotion/parser/NodeYAML provisioners; non-test checks execute once in cell zero.

### Contract changes

Each listed existing test deliberately replaces the serial whole-suite binding with complete module-shard coverage under `docs/decisions/2026-10-07-validate-module-shards.md` (kind3). Provisioning, history, timeout/faulthandler and native failure controls remain. The one promotion method additionally runs the tiny native aggregate fixture; neighboring and numeric assertions remain byte-identical.

The trading lane's conditional acknowledgement, ledger row `report-native-agent-stack-5f-20261007T200005-shardack`, binds that promotion method to three conditions:

1. Every shard runs the promotion provisioner with `--require-hashes` on `blueprints/us-equities/data/requirements.lock` and exports `REQUIRE_PROMOTION_GATE_VENV=1` before testing, including the shard assigned this module.
2. Module coverage comes from live native discovery, with each module's executed suite exactly once. Weights are scheduling estimates, not a separate test inventory.
3. Final `validate` runs under `if: always()` and passes only on successful shards; cancellation, skipping and timeout fail the gate. The trading lane checks these again on this PR before merge.

| Test ID | Kind | Record |
| --- | --- | --- |
| `tests.test_workflow_hardening.WholeSuiteJobsCheckOutFullHistory.test_whole_suite_jobs_set_fetch_depth_zero` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_workflow_hardening.WholeSuiteHeadroomAndDiagnostics.test_every_whole_suite_job_names_its_suite_step` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_workflow_hardening.WholeSuiteHeadroomAndDiagnostics.test_each_suite_lists_its_50_slowest_tests_with_faulthandler_on` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_workflow_hardening.WholeSuiteHeadroomAndDiagnostics.test_linux_suites_abort_five_minutes_before_the_job_limit` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_workflow_hardening.WholeSuiteHeadroomAndDiagnostics.test_validate_uploads_its_verbose_log_even_when_the_suite_fails` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_workflow_hardening.ValidateSuiteStepTracesAHang.test_a_hang_prints_the_hung_test_traceback_and_fails_the_step` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_workflow_hardening.ValidateSuiteStepTracesAHang.test_control_without_faulthandler_the_hang_leaves_no_traceback` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.ProvisioningStepTests.test_provisioning_step_exists_in_the_validate_job` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.ProvisioningStepTests.test_provisioning_step_precedes_the_unittest_step` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.ProvisioningStepTests.test_step_command_is_derived_from_the_pin_file` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.ProvisioningStepTests.test_step_exports_the_directory_through_github_env` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.ProvisioningStepTests.test_step_cannot_be_skipped_or_ignored` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.ProvisioningStepTests.test_the_provisioning_job_is_the_job_that_runs_the_suite` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.ProvisioningStepTests.test_every_whole_suite_job_provisions_the_parser_or_is_a_recorded_gap` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.ProvisioningControls.test_each_mutant_is_reported_in_its_category` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.ProvisioningControls.test_a_scratch_copy_of_the_workflow_without_the_step_fails_the_structure_tests` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.RealRatchetControls.test_the_real_workflows_pass` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.RealRatchetControls.test_a_new_whole_suite_job_in_a_real_workflow_is_reported` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.RealRatchetControls.test_provisioning_a_recorded_gap_job_is_cleared_by_deleting_its_entry` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_shell_parser_ci.RealRatchetControls.test_a_step_that_only_names_the_pin_file_is_judged_by_the_structure_checks` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_landscape_sweep_skills.SkillsYamlProvisioningTests.test_the_validate_job_provisions_the_yaml_pin_before_the_suite` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_landscape_sweep_skills.SkillsYamlProvisioningTests.test_every_whole_suite_job_provisions_the_yaml_pin_or_is_a_recorded_gap` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_landscape_sweep_skills.SkillsYamlProvisioningControls.test_each_mutant_is_reported_in_its_category` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_landscape_sweep_skills.SkillsYamlProvisioningControls.test_the_ratchet_reports_a_new_whole_suite_job_and_a_gap_that_now_provisions` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |
| `tests.test_promotion_gate.WorkflowProvisioningContract.test_unittest_step_runs_the_full_suite` | 3 | docs/decisions/2026-10-07-validate-module-shards.md |

### Failed attempts and limits

The failed unittest-parallel trial remains unchanged. The historical weighting run failed17 tests. Worker fixture-authoring attempts (one missing-helper error; then one failure/one error among12cases) remain disclosed separately; later root runs do not replace them. An early validate returned1 for pending registry hashes, and an incorrect register_file CLI probe returned2 before the documented Python API was used.

The source critic's two fixture gaps (global zero discovery and a package hook invoking nested discovery) are covered by the passing native delta fixtures. Shared fixture origins trigger an explicit serial fallback; that preserves native semantics and must be reported as a performance constraint. Actual hosted latency, skips and complete module coverage remain pending.

### Decision record

`docs/decisions/2026-10-07-validate-module-shards.md`; scoped observations in `evidence/artifacts/validate-module-shards-20261007/preparation.json`. The final commit changes only `manifests/evidence.json`.

### Host evidence

No host receipt, platform-status change, install or setting change.

### Checklist

- [x] Changed actions pinned to full SHAs with version comments.
- [x] Top-level permissions empty; each job grants contents:read only.
- [x] No credential value or new secret.
- [x] No new billing surface.
- [x] Peer worktrees preserved.
- [ ] Trading acknowledgement before merge (command center requests it).
- [ ] Hosted timing/coverage receipt and exact-head cross-family read.
seathatflowsinourveins added a commit that referenced this pull request Oct 9, 2026
### Scope

- What this PR changes, in one or two sentences: the secret-path guard's PreToolUse hook declares Claude Code 2.1.295's `onFailure: "block"` in both repository declarations, so a guard that can't start, times out or exits with an unexpected code blocks the Bash call instead of letting it through. A new test pins that the guard hooks carry the key and no other hook does.
- Base commit: `9f7b38b23d15e47ceb6f68c6651b86088f621797`
- Lane: `lane:foundation`
- Owned paths touched: `.claude/settings.json`, `adoption/templates/claude.settings.template.json`, `adoption/new-wsl/client-config-map.json` (the guard entry's note), `tests/test_install_claude_profile.py`, `docs/decisions/2026-10-08-guard-hook-fails-closed.md`, `manifests/evidence.json` (hashes re-registered with `scripts/host_receipts.py` `register_file`)

### SOTA sources

- [anthropics/claude-code `CHANGELOG.md` at `602df92bf481ed904533e95c09f740f40aab5aed`](https://github.com/anthropics/claude-code/blob/602df92bf481ed904533e95c09f740f40aab5aed/CHANGELOG.md#L5), entry `2.1.295`, line 5: "Added `onFailure: "block"` for command and HTTP hooks: a hook that can't start, times out, or exits with an unexpected code blocks the action instead of letting it through". The file's SHA256 is `c0b1f9aa313a8021d863ec0053c047b0acc792d74e04af9c7741d3ecd23c3d1a`, the same bytes as `main` when read on 2026-10-08.
- The installed Claude Code 2.1.295 client (binary SHA256 `4503bfe11a6c7fcc1e0b39b5e0d347c04248f750b03b0977b3ad6b531fe6f358`). Its hook schema declares `onFailure` on command and HTTP hooks. Its runner skips the key on `async` and `asyncRewake` command hooks and ignores it on `Stop`, `SubagentStop`, `TaskCompleted` and `TeammateIdle`.
- [Claude Code hooks reference](https://code.claude.com/docs/en/hooks.md), read 2026-10-08: "Other exit codes" (only exit 2 blocks without the key; exit 1 is a non-blocking error) and "Disable or remove hooks" (`--settings '{"disableAllHooks": true}'` for one run; file edits are normally picked up by the file watcher). The page does not document `onFailure` yet.

### Changed existing test expectations

None. One test method is added: `tests/test_install_claude_profile.py` `SecretGuardProfileTests.test_only_the_secret_guard_hook_fails_closed`. It walks every command hook in `.claude/settings.json` and in every JSON file under `adoption/`. Every hook that runs `secret_path_guard.py` must carry `onFailure: "block"`, no other hook may carry the key, and both known declarations must be found. No existing assertion changed.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| With the key on the hook entry, a PreToolUse Bash hook that exits 3, is not found (127) or times out blocks the call. Without the key, the call runs. On the matcher group the key does nothing, and a hook that exits 0 is unaffected. | `native_proven` | Ten `claude -p --model claude-haiku-5-5 --strict-mcp-config` runs on this host, 2026-10-08 22:13Z to 22:48Z: cases A to J in the decision record, with transcript hashes |
| The key also works from a `--settings` file; a user settings file has the same hook shape | `native_proven` / `source_review` | Cases I and J; the user scope was not run, because a probe must not edit the live user settings |
| Client 2.1.294 loads the file, ignores the key and runs the call | `native_proven` | Case B run with the 2.1.294 binary |
| Only the guard hooks carry the key | `local_integration` | New test method; four mutations each fail it (either guard without the key, `rtk` with it, effort guard with it), and the files were restored byte for byte |
| A new-WSL render writes the key on the guard hook only | `local_integration` | `new_wsl_client_config.py --render --host example --out <scratch>`: rc 0; `settings.json` has the key on the guard and on none of the other 15 command hooks |
| `apply_claude_settings.py` does not carry the key to a host that already runs the guard | `local_integration` | `merge_settings` run against an existing-host base and an empty base (see open points) |

### Local commands run

```
$ timeout 600 python3 -m unittest tests.test_install_claude_profile          # rc 0, Ran 110, OK (skipped=1)
$ timeout 600 python3 -m unittest tests.test_adoption_docs_consistency       # rc 0, Ran 39, OK (skipped=1)
$ timeout 600 python3 -m unittest tests.test_new_wsl_client_config           # rc 0, Ran 228, OK
$ timeout 600 python3 -m unittest tests.test_apply_claude_settings           # rc 0, Ran 53, OK
$ timeout 600 python3 -m unittest tests.test_workflow_policy                 # rc 0, Ran 29, OK
$ timeout 600 python3 -m unittest tests.test_upstream_surface_watch          # rc 0, Ran 114, OK (skipped=6)
$ timeout 600 python3 -m unittest tests.test_credential_status               # rc 0, Ran 48, OK
$ timeout 600 python3 -m unittest tests.test_task_model_routing              # rc 0, Ran 10, OK
$ timeout 900 python3 scripts/validate.py                                    # rc 0, {"hashed_files": 10901, "status": "passed"}
$ python3 scripts/evidence_manifest.py --check                               # rc 0
$ python3 -B tools/adoption/new_wsl_client_config.py --render --host example --out <scratch>   # rc 0
```

The first six modules were run again at the committed head, with the same results.

### Decision record

[`docs/decisions/2026-10-08-guard-hook-fails-closed.md`](docs/decisions/2026-10-08-guard-hook-fails-closed.md). It holds the sources, the evidence table and the risk: a broken guard now blocks every Bash call, and the guard's median run time was 74 to 87 ms against its 10 s timeout. It also notes the SchemaStore schema (no `onFailure`, `additionalProperties: false`) and the inverse: delete the key, or for one run pass `--settings '{"disableAllHooks": true}'`.

### Open points

- **Existing hosts.** `tools/adoption/apply_claude_settings.py` merges hooks by command and keeps the existing hook object. On a host that already runs the guard, applying this template therefore leaves the live hook without the key. A new host and a new-WSL build do get it. On an existing host the live change is one key added by hand to the guard's PreToolUse `Bash` hook object. Changing the merge contract is a separate change.
- **Minimum client.** The key needs Claude Code 2.1.295. Older clients ignore it and keep failing open.
- **One SocratiCode registration (the brief's second change) is not in this PR, by coordinator ruling.** On this host Claude Code skips the plugin's server because the user-scope entry has the same command line, so each Claude session connects one SocratiCode server. The standing decision (`docs/decisions/2026-10-07-clean-upstream-install-finalizes-a-candidate.md:150-152`) pairs the plugin with that entry. The repository lags that host state:
  - `adoption/mcp/claude-user.json` still declares the older command form.
  - The map's `claude/mcp/server/socraticode` row cites a 1.15.0 path.
  - No template enables the plugin or sets `SOCRATICODE_SPEC`.

  Drafts #776, #810 and #834 touch the same file. This is an open item for a single owner, to be assigned by the coordinator.

### Host evidence

Not applicable: no file under `evidence/hosts/` changes.

### Checklist

- [x] New/changed GitHub Actions are pinned to a full commit SHA with a
      version comment (no floating tags). (No workflow change.)
- [x] New/changed workflows declare top-level `permissions: {}` and grant each job
      only what it needs (`contents: read`, or an explicitly justified addition). (No workflow change.)
- [x] No secrets are printed, logged or committed; no new required secret was
      added without a documented owner.
- [x] No new paid hosting, subscription or billing surface was introduced.
- [x] Peer-owned untracked files and worktrees were preserved (not deleted,
      moved or overwritten).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

This branch has not been deployed

No deployments
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