Skip to content

Pin ai-memory 2.4.1 and mcporter 0.14.1 on Linux; workstation SOTA refresh record (headroom 0.39.0 qualified, not switched) - #307

Merged
seathatflowsinourveins merged 7 commits into
mainfrom
claude/pins-aimemory-mcporter-20260925
Sep 26, 2026
Merged

seathatflowsinourveins merged 7 commits into
mainfrom
claude/pins-aimemory-mcporter-20260925

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Owner

Summary

This PR moves the Linux x86_64 pins to ai-memory 2.4.1 and mcporter 0.14.1, both already switched on the workstation nativestack-5975wx-20260925. It also records the rest of the user-requested 2026-09-25 workstation SOTA refresh, with evidence for every decision.

ai-memory, two production cutovers, each approved by the user:

  • 2.3.2 → 2.4.0, 2026-09-25 20:43–20:46Z:
    • V64 → V66 migration; the fingerprint showed 0 pages changed and 0 observations missing.
    • The hook rewrite changed only the binary path, on 8 Claude and 7 Codex commands.
    • A real-client capture was verified.
  • 2.4.0 → 2.4.1, 2026-09-26 00:14–00:21Z:
    • V66 → V67; 0 pages changed and 0 observations missing.
    • The Record skill provenance and native catalog limits #792 fd-leak fix is live: live sockets show TCP keepalive, and in the rehearsal 60 of 60 vanished peers were reclaimed within 75 s, where 2.4.0 still held all 60.
  • Process for each: an at-rest cold copy first, then a rehearsal on a restored copy, then an independent verifier.
  • Pending: the user trusts the changed Codex hooks in Codex /hooks.

mcporter 0.13.13 → 0.14.1:

  • A/B: 37/37 checks pass on both versions.
  • Live calls work after the switch.
  • Limitation: ps must be on the daemon's PATH.

headroom 0.39.0: qualified, not switched. It stays on 0.37.0.

Recorded in docs/decisions/2026-09-25-workstation-sota-refresh.md:

docs/decisions/2026-09-25-ai-memory-2-4-0-release-review.md gets a dated correction section and a pointer at the top.

SOTA sources

Evidence

Receipts (all native_cli_e2e), with sanitized artifacts under evidence/artifacts/sota-refresh-20260925/:

  • evidence/receipts/ai-memory-240-qualification-20260925.json
  • evidence/receipts/ai-memory-241-qualification-20260925.json
  • evidence/receipts/mcporter-0141-qualification-20260925.json
  • evidence/receipts/headroom-039-qualification-20260925.json

The cutover.json files hold only coordinator-observed aggregates. No store contents, cold-copy data or private paths are included.

Deliberately unchanged

  • Winner pins: the ledger winner pins in catalogs/landscape/foundation.json come from the sealed 2026-09-22 packets and do not move (see vLLM 0.30.0 host receipts on the workstation: install agree, use pending the winner pin #267). A dated limitation records the cutovers.
  • macOS pins: untouched. The Mac lag is explicit in tests/test_adoption_bootstrap_macos.py, and adoption/platforms/macos-arm64.md has a standing section on Mac hook paths.
  • R1/A17: keeps official 2.4.0 as its isolated control build, per the user's decision.

Review

An independent evidence-reviewer ran:

  1. round 1: needs_changes, with 8 doc and evidence defects;
  2. a repair round, all 8 fixed;
  3. a re-check that found 2 small items, fixed along with the 2.4.1 and headroom additions;
  4. a delta review of those additions, which is in progress.

Codex cross-family review was skipped because of the Codex usage limit until 2026-09-30.

Verification (uv Python 3.13 with jsonschema/PyYAML/numpy; head 929ca16 on main e833e3e)

  • Pass:
    • validate.py (5993 files, 153 receipts), evidence_manifest --check, host_receipts validate (134);
    • component_matrix --check, new_host_grand_list --check, build_ecosystem --check;
    • catalog_decisions --check, landscape.py, validate_foundation.py;
    • build_verdicts --check, verdict_review_gate --base origin/main (0 rows);
    • gitleaks: clean.
  • release_due: reports release_due, as expected, since this changes new-machine files after v2026.09.25.2; the markers are added.
  • Full suite: Ran 5784 tests / OK (skipped=613).

Label: lane:foundation. This follows the #260 and #291 precedent; no trading-path file changes.

🤖 Generated with Claude Code

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Sep 26, 2026
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@seathatflowsinourveins

seathatflowsinourveins commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner Author

A second Linux host that must not follow this ai-memory pin yet: the WSL authoring laptop (wsl-authoring-20260923).

Measured on the laptop, 2026-09-26 01:03Z (ai-memory status):

  • The service runs a local build of 2.3.2 with the docs: refresh foundation layer pins and evidence dates #859 prefix change backported (2.3.2-prefix-a11c26f0).
  • Its store's vectors are prefixed Nemotron: openai-compat/nvidia/Nemotron-3-Embed-1B-BF16+dp1-707ad539ebca7d87 at dim 2048, 301 of 303 rows.

This PR already records two relevant facts in docs/decisions/2026-09-25-workstation-sota-refresh.md:

  • 2.4.1 does not contain docs: refresh foundation layer pins and evidence dates #859, and its config.rs has no prefix keys. Unknown keys are accepted silently, so prefix settings would produce unprefixed vectors.
  • 2.4.1's migrations are forward-only (V64 → V67), so after it opens the store the older binary refuses it.

On this laptop, the new adoption/update.md step 1 (re-run the bootstrap, which "repoints each tool's bin/ link at once") would therefore do three things:

The at-rest copy you added protects the data, but not retrieval quality.

Suggested one-line caveat, in adoption/update.md step 1 or the ai-memory install_note: a host whose store uses #859 prefix keys (an embedding identity with +dp) keeps its prefix build until the first official release that contains #859 passes qualification. The laptop stays on its build until then. It is filing a workstation request for qualifying that release and for the prefixed-Nemotron against qwen3-embedding:4b arm.

Nothing else here blocks the Linux pin for new hosts or the workstation. The mcporter 0.14.1 and Headroom decisions match what the laptop sees.

@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/pins-aimemory-mcporter-20260925 branch from 929ca16 to b64f9b0 Compare September 26, 2026 01:07
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Review trail:

  • An independent evidence-reviewer ran round 1 (needs_changes, 8 defects), a repair round and a re-check (2 small items), then a delta review of the 2.4.1 and headroom additions (3 small fixes).
  • All fixes are at head b64f9b0.
  • The coordinator spot-checked:
    • receipt 28/28 matches the 28 checks in results/step4-rehearsal.json;
    • no .pem files are tracked, and both keys are listed as not published (source: https://registry.npmjs.org/-/npm/v1/keys);
    • the release-review sentence is dated.
  • The worker's full suite on b64f9b0: Ran 5784 tests / OK (skipped=613).

Scout and others added 7 commits September 25, 2026 21:16
…facts and receipt)

Qualified on nativestack-5975wx-20260925 against the installed 2.3.2 on
restored copies of an online backup (2.3.2 baseline 16/16 on its second
attempt, 2.4.0 rehearsal 19/19: V64 -> V66 with nothing missing, /healthz
200, 23 tools unchanged, both hook clients captured, 2.3.2 refuses the
migrated store), reviewed by an independent verifier (agree, 3 minor
defects), then switched by the coordinator in a user-approved cold-copy
cutover (20:43:48Z stop, 20:44:37Z start, V65/V66 applied, fingerprint
PASS, real Claude Code capture). The Codex /hooks trust step for the 7
changed commands is pending and the user's.

- evidence/artifacts/sota-refresh-20260925/ai-memory/: the driver and
  the verifier's scripts byte-identical, sanitized step results,
  cutover.json with the coordinator's aggregate facts only (no cold copy,
  fingerprint file or store content), a read-only read-back and
  results.json with both arms, the verifier verdict and what was not
  published.
- evidence/receipts/ai-memory-240-qualification-20260925.json
  (native_cli_e2e).

Review repairs (2026-09-25, independent review needs_changes): the
receipt adds the failed production compare check (claude_settings_unchanged:
~/.claude/settings.json changed at 19:01:59Z by an unidentified writer);
results.json corrects the verifier's two wording defects in place and keeps
the originals in a corrections list; recorded_at_utc is the time the
receipt content was written. Final round: the #792 limitation says the
fix is not in 2.4.0 and was released in v2.4.1 at 2026-09-25T21:46:32Z.

manifests/evidence.json registration follows in the branch's last commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…facts and receipt)

Qualified on nativestack-5975wx-20260925 against the installed 0.13.13:
the verified npm tarball (sha256 8e489864..., SLSA provenance from
release.yml at refs/tags/v0.14.1) in a new prefix, and the same 37-step
acceptance in isolated daemon namespaces passing 37/37 on both versions
with identical outcomes. An independent verifier agreed and measured the
one difference the acceptance cannot see: without ps on the daemon's
PATH, 0.14.1 cannot connect keep-alive servers and `daemon stop`
refuses. The coordinator then relinked bin/mcporter with no daemon
running; `list socraticode --brief --no-oauth` listed 26 tools and
codebase_health reached Qdrant.

- evidence/artifacts/sota-refresh-20260925/mcporter/: harness and
  verifier scripts byte-identical, both arms' results, the per-step raw
  outputs bundled into two JSON files (deduplicated), integrity and
  provenance outputs, cutover.json, a read-only read-back and
  results.json.
- evidence/receipts/mcporter-0141-qualification-20260925.json
  (native_cli_e2e).

Review repairs (2026-09-25, independent review needs_changes): the
staging install's package.json and package-lock.json are published as
stage/package.evidence.json and stage/package-lock.evidence.json (bytes
unchanged), so they are not repository dependency manifests and the OSV
inventory and Dependabot scope stay as they were; results.json records
the renames; recorded_at_utc is the time the receipt content was written.

Delta review (2026-09-26): the two npm registry key .pem files are
listed under not_published (source https://registry.npmjs.org/-/npm/v1/keys),
because .gitignore excludes *.pem; they were never committed.

manifests/evidence.json registration follows in the branch's last commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ts and receipt)

Qualified on nativestack-5975wx-20260925 against production 2.4.0 on
restored copies of one online backup (2.4.0 arm 26/26, 2.4.1 arm 28/28:
V66 -> V67 with nothing missing, 2.4.0 refuses the V67 copy, path-only
install-hooks render, and the #792 A/B: 65/65 keepalive timers and all 60
vanished peers reclaimed on 2.4.1, none on 2.4.0), reviewed by an
independent verifier (agree, 8 minor defects). The coordinator then
performed the user-approved cutover on 2026-09-26: stop 00:14:12Z, cold
V66 copy, relink, path-only hook rewrite, start 00:19:51Z with V67
applied, fingerprint PASS, keepalive on 2 of 2 live sockets and real
Claude Code capture. The Codex /hooks re-trust is pending and the
user's. The 2.4.0 receipt stays as history.

- evidence/artifacts/sota-refresh-20260925/ai-memory-241/: the driver
  and the verifier's scripts byte-identical, sanitized results for both,
  cutover.json with the coordinator's aggregate facts only (no cold copy,
  fingerprint file or store content), a read-only read-back and
  results.json (steps for both arms, the verdict, and the verifier's
  wording corrections).
- evidence/receipts/ai-memory-241-qualification-20260925.json
  (native_cli_e2e); recorded_at_utc is the time the content was written.

Delta review (2026-09-26): results/step4-rehearsal.json has 28 checks,
all true, so the receipt and the B-arm excerpt say 28 (the original 29 is
kept in results.json corrections), and the R1/A17 control-build limitation
cites issue #274.

manifests/evidence.json registration follows in the branch's last commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…acts and receipt)

Qualified on nativestack-5975wx-20260925 against the pinned 0.37.0: the
verified wheel in a new prefix (RECORD 555/555), the unchanged upstream
#3736 test 6/6 (0.37.0: 4/6), and the stack's MCP path over stdio with
byte-exact retrieval and cross-version store reads; an independent
verifier agreed. The coordinator retains 0.37.0: at v0.39.0 the
'[N lines omitted: ...]' notice counts levels over all input lines
(log_compressor.py:461-487 and the Rust format_output; checked with gh),
so fixture A's '[593 lines omitted: 1 ERROR]' reports the kept CRITICAL
line as omitted; the Rust detector still lacks the #3736 timestamp
guard; #299 pins 0.37.0 in the bootstrap and #296's counters run at it.
No pin changes.

- evidence/artifacts/sota-refresh-20260925/headroom-039/: harness and
  verifier scripts, key results as files, all other outputs and the
  production snapshots bundled, a read-only read-back and results.json
  (decision reasons, overturn condition, beacon note, corrections).
- evidence/receipts/headroom-039-qualification-20260925.json
  (native_cli_e2e).

manifests/evidence.json registration follows in the branch's last commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rter 0.14.1

adoption/pins-linux-x86_64.json moves ai-memory to the v2.4.1 archive
(sha256 15cafdc4..., 16,026,020 bytes, equal to the release sidecar, the
API digest and the release body; binary dec065a8...; tag commit 433a19f3) and mcporter to the 0.14.1 npm
tarball (sha256 8e489864..., integrity sha512-/6pv...). The notes carry
the forward-only migration and the ps-on-PATH requirement.
pins-macos-arm64.json is unchanged: the Mac qualifies on its own.

adoption/templates/claude.settings.template.json: the eight ai-memory
hook commands name tools/ai-memory-2.4.1, matching the live source host
after the upstream install-hooks rewrite. bootstrap.md,
platforms/linux-wsl2.md and platforms/macos-arm64.md say the Linux pin
file and the template changed after v2026.09.25.2, and tell a Mac to
point the rendered hooks at its installed 2.3.2 prefix.

recipes/README.md: both rows name the new pins, and a new "Upgrading an
existing store" section gives the cold-copy procedure the host used.
Copies follow in docs/token-efficiency-stack.json,
tools/token-report/README.md and observability/native-data/README.md.
The two catalogs/landscape/upstream-snapshot.json rows come from a
fresh run of their gh api endpoints, and the saturation-audit rows cite
the new receipts. catalogs/landscape/foundation.json winner pins do not
move.

tests/test_adoption_bootstrap_macos.py required every shared component to
carry the same version and npm hash on both platforms, which a Linux-only
move breaks. It now names each Mac-behind-Linux lag exactly (ai-memory
2.3.2/2.4.0 and mcporter 0.13.13/0.14.1, with their receipts), so a move
on either side fails until the table is reviewed, and compares npm hashes
only between equal versions.

Review repairs (2026-09-25, independent review needs_changes):
- recipes/README.md: the hook commands' 49374 is an example; use the
  host's own server URL (NativeStack binds 127.0.0.1:49474, and 49374 is
  another distro's default there) and record what NativeStack used. The
  upgrade section states the order hazard: bootstrap-linux.sh repoints
  bin/ai-memory at once, so an existing store is stopped and cold-copied
  before any bootstrap re-run; adoption/update.md step 1 says the same.
- platforms/macos-arm64.md: the changed-after marker in step 3 states only
  the difference and points to a standing "ai-memory hook paths on macOS"
  note, which gives the full recipe command (--apply, --capture-mode
  allowlist, --no-capture-prompts, --server-url): with no stored mode,
  v2.3.2's installer falls back to denylist.
- catalogs/landscape/foundation.json durable-memory: one appended, dated
  limitation for the 20:44Z cutover; the earlier 2026-09-25 text is kept,
  and the winner pin (a verdict field) does not change.

Final round (2026-09-26): the ai-memory pin, the hook template, the
recipes and docs, the upstream-snapshot row, the saturation-audit row and
the Mac-lag test pair move from 2.4.0 to 2.4.1 after the user-approved
2.4.1 cutover (the 2.4.0 receipt stays as history). The upgrade section
covers both cutovers and warns against `pgrep -f` in the quiesce wait.
platforms/macos-arm64.md now says accurately that #299 also added
ccusage, headroom, repomix, serena, socraticode and toon to the Linux
pins, and which of the ten have Mac entries. The foundation.json
limitation names both cutovers.

Delta review (2026-09-26): the ai-memory install_note dates the
three-value check to 2026-09-25 (22:43Z qualification, 23:10Z verifier)
and says 2026-09-26 re-checked the API digest.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…station SOTA refresh

docs/decisions/2026-09-25-ai-memory-2-4-0-release-review.md gains a dated
correction section; the original text is kept. GHSA-9pj6-vhgr-3mwh is not
reachable on this host (stateless transport: GET /mcp 405 with allow:
POST, no --http-stateful), and 2.4.0 writes no automatic pre-migration
archive for a store created by 2.3.2 (snapshot_before_db_migration is
gated to the 1.x -> 2.0 upgrade). It also records that the upgrade was
performed on 2026-09-25 and cites the new receipt.

docs/decisions/2026-09-25-workstation-sota-refresh.md is the dated
research-convergence record for the whole workstation-lane refresh: per
unit, the decision, its primary sources (releases, compares, advisories
and the refuter's key finding), the alternatives and the overturn
condition. rtk, markitdown, mcporter and ai-memory were qualified and
switched; socraticode 1.15.0 is qualified with the cutover deferred to no
earlier than 2026-10-01; dagu 2.17.2 is held by the trading lane;
headroom stays 0.37.0 because 0.38.0 carries #3736 on the MCP compress
path; qmd, qdrant, ccusage, worktrunk and vllm are already current;
llama.cpp b11146 is recorded, not qualified; both models are retained;
the ai-memory Nemotron embedder is evaluation-only. The research and
qualification results are cited as private inputs only.

Review repairs (2026-09-25, independent review needs_changes), each
fact re-checked with gh api at about 22:35Z:
- headroom: v0.39.0 (2026-09-25T19:29:55Z) contains d971f7c3 (compare
  ahead 86, behind 0; the release notes list #3748), so the overturn
  condition is met; qualifying 0.39.0 is the queued follow-up.
- ai-memory: only commands/hook*.rs and commands/install_hooks.rs are
  unchanged in the v2.3.2...v2.4.0 compare (config.rs, serve.rs, run.rs,
  reindex.rs, mcp_bridge.rs and six ai-memory-core files changed).
- ai-memory v2.4.1 (2026-09-25T21:46:32Z) carries the #792 fix and the
  forward-only V67 migration but not #859; it meets the "a 2.4.1
  appears" condition, and qualifying it (another rehearsal and the
  user's approval) is queued. Recorded in both documents.
- The embedder section cites issue #274 (the Mac-only harness, A17, "the
  workstation now owns R1") and catalogs/foundation/memory-stack-20260925.json;
  #274 covers the C3/C4 rerun, and the Nemotron-prefix evaluation comes
  after it.
- The release review gains a dated one-line pointer under its title.
- The rtk and markitdown receipts are linked now that #291 has merged.

Final round (2026-09-26):
- ai-memory: the record and the release review state that 2.4.1 was
  rehearsed and, with the user's approval, switched on 2026-09-26
  (00:14:12Z stop, 00:19:51Z start, V66 to V67), replacing the "needs
  another rehearsal and the user's approval" sentences and "2.4.0 serves".
- headroom: 0.39.0 was qualified and is not switched. The reasons are
  source-checked with gh at 00:28Z: the omission notice counts levels
  over all lines (log_compressor.py:461-487 and the Rust format_output;
  same Python blob since v0.37.0; #3635 changed only the Rust file), the
  Rust detector lacks the #3736 guard, and #299/#296 run 0.37.0.
- The embedder section cites experiment.json and convergence.json for
  the C1 to C3 arms (the catalog has no C1 label).

Delta review (2026-09-26): the refresh record says 2.4.1 arm 28/28
(results/step4-rehearsal.json has 28 checks), and the release review's
"now name 2.4.0" is dated to the 2.4.0 cutover and marked superseded by
2.4.1.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… regenerate reports

Rebuilt on main c09dd6d (#306) per the hot-file protocol: the reviewed
stack.json diff, the same registered path set and all four qualification
receipts as the reviewed head b64f9b0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Codex cross-family review, read-only, at 25c258d:

  • Setup: codex exec -s read-only -m gpt-6-astra -c model_reasoning_effort=high via codex-cli 0.155.1, with stdin closed.
  • Verdict: VERDICT: agree. It found no concrete defects.
    • Both release commits match, and freshly downloaded archive hashes match the pins; the ai-memory executable hash matches too.
    • All 60 receipt provenance hashes and all 198 artifact-file hashes verify.
    • The retained results support the scoped switch and retain decisions.
    • No private data is exposed.
  • It could not check: the private production cold copies and capture records (only aggregates are published), native re-qualification, Codex hook trust, and macOS acceptance.
  • Coordinator observation: during that Codex run, ai-memory recorded 0 observations with agent codex. So the 7 changed Codex ai-memory hooks are still skipped as untrusted, as expected, until the user trusts them in /hooks.

@seathatflowsinourveins
seathatflowsinourveins merged commit ff20470 into main Sep 26, 2026
25 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/pins-aimemory-mcporter-20260925 branch September 26, 2026 01:30
seathatflowsinourveins added a commit that referenced this pull request Sep 26, 2026
…stack pin (#307) (#310)

catalogs/us-equities/foundation-memory.json still listed ai-memory v2.3.1
(checked 2026-09-19). manifests/stack.json has pinned 2.4.1 since #307.

- version and installed_version are now 2.4.1. source_commit is the v2.4.1
  tag's commit, 433a19f3: GitHub's annotated tag 1e11aa43 peels to it,
  checked both with gh api and git ls-remote.
- release_date is 2026-09-25T21:46:32Z, per the GitHub release.
- The v2.4.1 README and release URLs replace the v2.3.1 ones.
- evidence_refs gain the 2.4.1 qualification receipt and keep the 2.4.0
  one as history.
- A dated limitation says the foundation.json durable-memory winner pin
  stays 2.3.2 (the sealed 2026-09-22 packet) and macOS stays on 2.3.2.
- source_pin_scope says this is a release-tag pin, not a source review.

validate_catalogs, catalog_decisions --check, tests.test_catalogs (47 OK),
validate, evidence_manifest --check and convergence pass.

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Sep 26, 2026
…t, template, recipes, quota practice

evidence/hosts/nativestack-5975wx-20260925/...--codex--install--20260926.json:
recorded with scripts/host_receipts.py record from a clean detached
worktree at origin/main ca8e37f (published; the catalog_revision),
stage install, component codex, version 0.157.1 with
--allow-unbound-version because the landscape winner pins stay 0.155.1
until a verdict wave (the qualification receipt's own limitation).
Four bounded read-only commands, all exit 0: codex --version
(codex-cli 0.157.1), codex features list filtered to daemon_auto_start
(stable false), the data.switch daemon process count (0) and package
check (absent). It supersedes nothing (no same-day codex install
receipt). The quota read is not in it: scripts/codex_quota.py is not on
origin/main at that revision. Its manifests/evidence.json files[] entry
is left to the coordinator (sha256 b3b8495e..., 5,260 bytes).

Pins and manifests, following the qualification receipt's after-switch
follow-ups and the #307/#332 pattern:
- adoption/pins-linux-x86_64.json: codex 0.157.1, the wrapper tarball
  URL and sha256 813e2a94..., dist.integrity, the platform package's
  sha256 and integrity and the daemon note in install_note.
- manifests/stack.json: codex 0.157.1, evidence id
  codex-01571-qualification-20260926 (stack evidence ids must be
  receipts[] entries; host receipts are files[] only), the release URL
  and a dated freshness note.
- blueprints/token-native-focus/saturation-audit.json: the codex row's
  version and public receipt.
- adoption/templates/codex.config.template.toml: daemon_auto_start =
  false under [features], so a new host bootstrapped at the 0.157.1 pin
  does not start the self-updating daemon on its first interactive
  launch (0.155.1 accepts the key; results/daemon.json).
- recipes/README.md: the rust-v0.157.1 codex-package digest
  (sha256:0e211868..., equal to the GitHub API digest) and the codex row.
The macOS pin stays 0.155.1 (its own qualification; no test needs it
moved).

docs/token-practice.md: the native quota probe with the measured
numbers and the shared-budget practice (one host slot pool, the verdict
wave first, tell the user at the limit).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Sep 26, 2026
…n lag

catalogs/landscape/upstream-snapshot.json: the codex row's
selected_version follows manifests/stack.json to 0.157.1 (scripts/
landscape.py requires them equal) and its release_relationship becomes
selected_version_matches_latest_stable: the snapshot's own 05:12Z
checks already name rust-v0.157.1 (commit 36650394) as the latest
stable release and checked its commit. codex leaves the summary's
newer-stable review queue, and the recommendation counts four.

tests/test_adoption_bootstrap_macos.py: MAC_PIN_LAGS_LINUX records
codex 0.155.1 (Mac) against 0.157.1 (Linux) with the qualification
receipt, the mechanism #307 used for ai-memory and mcporter. The macOS
pin itself stays 0.155.1 until a Mac qualifies 0.157.x.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Sep 26, 2026
…a probe and runner gate (#348)

* Harden the native Codex quota probe and test it against a protocol fake

scripts/codex_quota.py reads the account's usage snapshot through
`codex app-server` (stdio JSON-RPC, account/rateLimits/read). Checked
against openai/codex codex-rs/app-server-protocol at rust-v0.155.1 and
rust-v0.157.1 (common.rs, v1.rs, v2/account.rs, rpc.rs identical for
these shapes): messages carry no "jsonrpc" field; initialize sends
clientInfo {name, title, version}; the initialized notification follows
the initialize answer; the read uses excludeResetCreditDetails (the
background-poll form); error answers are {id, error {code, message,
data?}}; the top-level rateLimits is the account's "codex" snapshot
(app-server account_processor.rs).

Hardening over the first draft:
- One deadline bounds the whole exchange (selectors on the pipe); the
  draft's blocking readline never timed out on a silent server.
- Cleanup: EOF, then TERM and KILL to the server's own process group,
  so children that ignore TERM are gone too.
- The server runs in an empty temporary directory without RUST_LOG, and
  a server request is answered with method-not-found.
- --gate PERCENT exits 3 when a window's used_percent reaches PERCENT,
  rateLimitReachedType is set or ordinaryUsageAllowed is false; 2 when
  no snapshot arrives or nothing can be judged. --json prints exactly
  one object; accountId and the upsell banner are never printed.

tests/test_codex_quota.py (12 tests, no network, no account): snapshot
parsing and the exact protocol sequence, interleaved notifications and
a server request, the gate outcomes, an error answer, a server that
never answers and ignores TERM with a TERM-ignoring child (timeout and
group cleanup), a server silent on the read, an early exit, codex
missing from PATH.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Landscape sweep: optional quota gate before each GPT-6 job

staged.json codex.quota_stop_percent (written by build_args.py
--quota-stop-percent; absent, the gate is off) makes the runner, after a
job gets its slot and before codex starts, run codex_quota.py --json
--gate <percent>. Exit 3 is refused like a usage limit: the job ends
with exit 3 before codex starts, <work-dir>/LIMIT (created only when
absent, so an earlier reason or a real limit is kept) and the job's
stderr.txt name the reason, the used percent and the reset time, and
later starts print the marker's reason. Every probe is kept in
<job>/quota.json (an attempt file, so it moves to attempts/<n>/ with
the rest) and `result` summarizes it as `quota`. A failed probe (no
snapshot within codex.quota_timeout_s, default 30 s, an error answer, a
missing script) is recorded and never blocks the job.

build_args.py stages scripts/codex_quota.py beside the runner as
codex_quota.py and records its sha256 under harness.quota_probe; a
staged runner uses only that frozen copy, the checkout runner uses
scripts/codex_quota.py. The fake codex in the harness tests now answers
the app-server quota read; new tests cover the gate off by default, a
probe below the stop percent, the refusal and the rerun after a reset,
a limit flag below the percent, an existing marker's reason kept, a
failed and a missing probe that do not block, bad stop percents and the
staged gate. README: files table, a Quota gate coordination entry and
the tests note.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Record the Codex 0.157.1 switch: host receipt, Linux pin, stack, audit, template, recipes, quota practice

evidence/hosts/nativestack-5975wx-20260925/...--codex--install--20260926.json:
recorded with scripts/host_receipts.py record from a clean detached
worktree at origin/main ca8e37f (published; the catalog_revision),
stage install, component codex, version 0.157.1 with
--allow-unbound-version because the landscape winner pins stay 0.155.1
until a verdict wave (the qualification receipt's own limitation).
Four bounded read-only commands, all exit 0: codex --version
(codex-cli 0.157.1), codex features list filtered to daemon_auto_start
(stable false), the data.switch daemon process count (0) and package
check (absent). It supersedes nothing (no same-day codex install
receipt). The quota read is not in it: scripts/codex_quota.py is not on
origin/main at that revision. Its manifests/evidence.json files[] entry
is left to the coordinator (sha256 b3b8495e..., 5,260 bytes).

Pins and manifests, following the qualification receipt's after-switch
follow-ups and the #307/#332 pattern:
- adoption/pins-linux-x86_64.json: codex 0.157.1, the wrapper tarball
  URL and sha256 813e2a94..., dist.integrity, the platform package's
  sha256 and integrity and the daemon note in install_note.
- manifests/stack.json: codex 0.157.1, evidence id
  codex-01571-qualification-20260926 (stack evidence ids must be
  receipts[] entries; host receipts are files[] only), the release URL
  and a dated freshness note.
- blueprints/token-native-focus/saturation-audit.json: the codex row's
  version and public receipt.
- adoption/templates/codex.config.template.toml: daemon_auto_start =
  false under [features], so a new host bootstrapped at the 0.157.1 pin
  does not start the self-updating daemon on its first interactive
  launch (0.155.1 accepts the key; results/daemon.json).
- recipes/README.md: the rust-v0.157.1 codex-package digest
  (sha256:0e211868..., equal to the GitHub API digest) and the codex row.
The macOS pin stays 0.155.1 (its own qualification; no test needs it
moved).

docs/token-practice.md: the native quota probe with the measured
numbers and the shared-budget practice (one host slot pool, the verdict
wave first, tell the user at the limit).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Regenerate the component matrix and new-host grand list for the codex switch

python3 scripts/component_matrix.py --write, then
python3 scripts/new_host_grand_list.py --write: the new codex install
receipt raises the native-clients and agent-sdks codex pass count from
7 to 8 (latest 2026-09-26T14:34:12Z; platform_status unchanged,
host_verified), and the Linux bootstrap column reads 0.157.1 while the
winner pin and the macOS bootstrap stay 0.155.1. The generators'
manifests/evidence.json hash updates are left to the coordinator's
registration.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Keep the codex selection consistent: upstream snapshot and the Mac pin lag

catalogs/landscape/upstream-snapshot.json: the codex row's
selected_version follows manifests/stack.json to 0.157.1 (scripts/
landscape.py requires them equal) and its release_relationship becomes
selected_version_matches_latest_stable: the snapshot's own 05:12Z
checks already name rust-v0.157.1 (commit 36650394) as the latest
stable release and checked its commit. codex leaves the summary's
newer-stable review queue, and the recommendation counts four.

tests/test_adoption_bootstrap_macos.py: MAC_PIN_LAGS_LINUX records
codex 0.155.1 (Mac) against 0.157.1 (Linux) with the qualification
receipt, the mechanism #307 used for ai-memory and mcporter. The macOS
pin itself stays 0.155.1 until a Mac qualifies 0.157.x.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Label the unretained quota figures in the shared Codex quota note

Review finding: the section cited used_percent 61 to 63, the weekly window,
reset time and plan, plus a 14:28Z single-bucket 0.77 s read, but no committed
receipt or artifact retains that output, and the linked host receipt states the
quota read is not part of it. Keep the coordinator-reported figures, label them
unretained observations until a sanitized --json read is recorded from a
published checkout that contains the script, drop the unretained 14:28Z read,
and say the host receipt does not cover the quota read.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* codex_quota: start the app-server with a read-only sandbox

The probe only reads account state, so the server should prepare no writable roots (a
workspace-write sandbox protects .git mount points inside roots such as /tmp). Live
check on codex 0.157.1: the read-only probe returned the snapshot and created nothing
under /tmp. Both fakes now require the -c sandbox_mode="read-only" override.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Codex install receipt: independent review (agree)

A separate headless Claude session reviewed the 0.157.1 install receipt against the
#332 qualification's data.switch and the live host (codex 0.157.1, daemon_auto_start
false, no daemon process or package, 0.155.1 kept for rollback) and recorded
independent_session agree.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Codex quota probe: repair the GPT-6 review findings (NOT_READY at c0a949f)

- codex_quota.py never echoes server error text (backend errors can carry account ids);
  it reports stage and code with a fixed message.
- codex_quota.py stops and reaps the app-server and closes its pipes when setup fails
  after Popen (an injected EMFILE left them behind).
- codex_job.py records a fixed probe-failure message, never the command line (absolute
  interpreter and work-directory paths), and passes the stop percent and timeout with
  round-trip precision (95.00001 no longer becomes 95).
- docs/token-practice.md quotes no quota figure without a retained, sanitized read.
Each finding has a test that fails on c0a949f's code; both suites: 94 tests OK.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Re-register the repaired quota files (hot-file commit)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Mark the Codex pin, recipe row and template as changed after v2026.09.26.2

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Mark the Linux Codex pin change after v2026.09.26.2 on both platform pages

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Re-register after the release markers (hot-file commit)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 1, 2026
…, the arms without a result and upstream v2.5.2

The row's verdict fields (winners, alternatives, open_gaps) are the sealed 2026-09-22 wave and stay as recorded.
The note follows the practice of #269 and #307: a dated limitations entry. It records that ai-memory is the source
host's selection of record and the comparison's reference arm, that the merit winner is undetermined, which arms of
the frozen harness have no result (C4, D2h, K1, M1, M2), that the 2026-09-25 result is D2 against C3 with the
reranker off, that upstream published v2.5.2 on 2026-10-01, and that a verdict wave can name only an adopted
candidate as winner.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 1, 2026
…puts; durable-memory note; landed #575 citations and four trading acceptance classes (#585)

* Durable-memory landscape row: dated 2026-10-01 note on the merit rule, the arms without a result and upstream v2.5.2

The row's verdict fields (winners, alternatives, open_gaps) are the sealed 2026-09-22 wave and stay as recorded.
The note follows the practice of #269 and #307: a dated limitations entry. It records that ai-memory is the source
host's selection of record and the comparison's reference arm, that the merit winner is undetermined, which arms of
the frozen harness have no result (C4, D2h, K1, M1, M2), that the 2026-09-25 result is D2 against C3 with the
reranker off, that upstream published v2.5.2 on 2026-10-01, and that a verdict wave can name only an adopted
candidate as winner.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Sweep inputs: date the sealed verdict fields and join the gap-wave ledgers onto the shown gaps

An audit of the 32 frozen sweep inputs (the Codex catalog lane, 2026-10-01) found 14 winner pins behind the stack
and gap texts that committed receipts had already answered. Both come from one cause: build_inputs.py copies
winners, alternatives and the first five open_gaps from the row's sealed 2026-09-22 verdict, which only a new verdict
wave re-records, and says nothing about their date.

A repository-layer input now also carries verdict_checked_at (the row's checked_at), verdict_note (which fields are
the sealed verdict; components_vs_upstream[].pin is the pin installed today) and open_gaps_followup: the gap-wave
owner ledgers joined onto the shown gaps by index and exact text, with status, receipts present in the checkout,
waves and ledgers. Existing fields keep their shape and no template changes, so the pinned prompt hashes stay.
The summary line counts the ledger entries joined, dropped and beyond the five shown. Reference for the ledger
reading: tools/sota-convergence/lane_packets.py gap_receipts_index.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Program record, decision 5: how a comparison's result reaches the landscape catalog

A verdict wave can name only an adopted candidate as a layer's winner (a candidates[] entry with a disposition of
selected or conditional; lane_packets.py build_candidate, landscape.py lane_winner_components), and a lane's return
has no undetermined form. A comparison's result therefore enters catalogs/landscape/ through a candidate entry with
an adopted disposition that cites the executed comparison, then a new verdict wave. The sealed 2026-09-22 verdict
fields are not edited by hand; a dated limitations entry and the sweep input's dated fields carry what changed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Architecture edition: the citations of merged #575 are landed sources; four trading acceptance classes corrected from committed receipts

The 39 pending sources that named pull request 575 (37 in rows, 2 in the header) are plain source_path entries now
that it merged as 75c83d8. DVC, pandera, MLflow and Inspect AI were rated none_recorded from the assessment's
source review only; committed gap-wave2 receipts of 2026-09-23 record a run of each (the Codex lane's audit named
them, the trading lane owner corrected its rating, and each receipt was read before its class changed). DVC, MLflow
and Inspect AI become upstream_example_or_native_operation and pandera local_integration_check; the rows'
classes follow (identity-provenance local_integration_check; data-quality-orchestration and evaluation-experiments
structural_validation). The identity-provenance row names the four-store run as the comparison so far, not a
closing one. Counts in the record: 130 winner entries, 14 none_recorded.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Architecture edition: the trading lane owner's note on identity-provenance (verbatim from its acknowledgement of #585)

The note said the comparison needs a recorded DVC install first. The committed 2026-09-23 receipt records a native
DVC run, so the owner replaced the sentence: the comparison needs a fresh DVC install on the target host and the
point-in-time fixture; DVC's pin is the verdict's baseline 3.67.1 with no stack pin.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Re-register this branch's changed files in manifests/evidence.json (hot-file protocol)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
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