Skip to content

docs(claude-native-practice): bring the practice pages current to Claude Code 2.1.302 - #1234

Merged
seathatflowsinourveins merged 7 commits into
mainfrom
docs/claude-native-practice-currency-2.1.302
Oct 17, 2026
Merged

seathatflowsinourveins merged 7 commits into
mainfrom
docs/claude-native-practice-currency-2.1.302

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 16, 2026 •

Copy link
Copy Markdown
Collaborator

Scope

  • What this PR changes, in one or two sentences: brings the claude-native-practice skill's slot index and layer pages current to Claude Code 2.1.302 (CHANGELOG 2.1.296 to 2.1.302). It also records the results of the command center's owed checks for 2.1.302, pins each correction with a regression test, and keeps the slot manifest's label and note true at the head.
  • The changes, commit by commit:
    • The first commits bump the client headers, add CHANGELOG line citations to twelve slots, and record the route, note and owed-check changes those releases bring. slots.json mirrors every page edit.
    • Folds 2 to 5 apply the owed-checks report (OWED-CHECKS-2.1.302-20261017.md, cited by name), add regression tests for its corrections, and close the findings of the reads of each fold.
    • CC correction to fold 4's ruling 3 (fold 5): docs/decisions/2026-10-09-claude-code-gap-resolution.md stays at main's bytes, and its manifests/evidence.json row stays.
      • Fold 3 registered the record. The PR-registration check (scripts/validate.py:776 and :786-788, which CI runs with the PR base and previous heads) requires a row for every path a PR commit registered.
      • Only a deleted file may lose its entry (docs/lanes.md:119-127).
      • Fold 4 dropped the row, so validate.py --registration-base failed at 609d3e14. Fold 5 restores it with the file's current bytes.
  • Base commit: 90471d63f20918efa3a63ef949caffd8c012656c
  • Lane: lane:foundation
  • Owned paths touched:
    • .claude/skills/claude-native-practice/reference/: slots.md, slots.json and eleven layer pages. cross-client.md is unchanged, because it is hash-tested against cross-client-lines.json.
    • evidence/artifacts/claude-native-practice-20261009/claude-native-slot-manifest.json: its sha256_when_labeled follows slots.json, differs_from_this_snapshot_in lists the newly differing slots, and its note names the other fields that differ.
    • manifests/evidence.json: the re-registered hashes of the changed files.
    • Tests:
      • tests/test_native_practice_fork_toggle.py
      • tests/test_native_practice_owed_check_corrections.py (new)
      • tests/test_native_practice_snapshot_provenance.py
      • tests/test_upstream_surface_watch.py: two tests beside the existing checks on the gap-resolution record.

SOTA sources

  • anthropics/claude-code CHANGELOG.md at tag v2.1.302, fetched 2026-10-16T22:15Z with gh api repos/anthropics/claude-code/contents/CHANGELOG.md -H "Accept: application/vnd.github.raw", sha256 prefix 57fde96b3318543c.
    • Cited by line as [email protected] L<n>, the form the pages already use, and each cited line was checked against the fetched file.
    • The file has no 2.1.297 or 2.1.298 section, and none is cited.
  • Slot pages edited, with the lines cited:
    • native-clients.md
      • settings-permissions: L373, L280, L270 (rule evaluation and its fixes) and L245 (the rm-prompt change, not rule evaluation)
      • checkpoints-rewind: L186
      • model-effort-routing: L411, L224, L371
    • isolation.md
      • sandbox: L249, L242, L254, L322, L323, L190
      • worktrees: L153, L148, L77, L324, L157
    • token-efficiency.md
      • context-compaction: L217-L218, L6, L410, L110
      • output-compression: L414, L216, L189, L916
    • workers.md
      • subagent-definitions: L374, L410, L35, L36
      • background-workflows: L185, L365, L81, L411
    • mcp-surfaces.md
      • mcp-config-tool-search: L469, L377, L142, L602, L1926
    • agent-sdks.md
      • headless-sdk: L34, L35, L36, L291
    • observation-inference.md
      • usage-cost-monitoring: L126, L130, L75, L76, L18, L467, L186
    • slots.md: header only
  • rtk-ai/rtk at tag v0.51.0 (commit e001f773f80b22b7dc4c7a79521b30e35aaef026):
    • src/hooks/hook_cmd.rs:648-651: the PreToolUse rewrite returns Claude's tool_input with only command replaced.
    • src/discover/rules.rs:61: the git subcommands it rewrites.
    • src/hooks/permissions.rs:84-90 and src/hooks/hook_cmd.rs:688-691: the Claude hook checks the original command against the Bash deny rules first, and a match skips the rewrite (skip:deny_rule).
    • src/discover/rules.rs:120: the npx rule (^npx\s+), which rewrites only the npx commands that no deny rule matches.
    • These three locations were re-read at the tag for fold 5.
  • akitaonrails/ai-memory at tag v3.1.0 (commit 11ca7c5b3b65e7fc216c7eae5a9aac67d38c11ea):
  • The command center's owed-checks report OWED-CHECKS-2.1.302-20261017.md (written 2026-10-17T02:43:07Z; a private record, cited by name): findings F1.1, F2.1, F3.1, F3.2, F4.1 and F5.2.

Evidence-class table

Claim Evidence class Command / receipt
Each cited CHANGELOG line says what the page attributes to it, under the release section named source_review the fetched v2.1.302 CHANGELOG (sha256 prefix 57fde96b3318543c), line by line
Route changes (model-effort-routing, context-compaction, background-workflows, headless-sdk) follow the release notes; none was run on this host source_review the same file; the background-workflows resume clause is marked "to be re-observed"
slots.json matches the pages exactly for Evidence, Notes and Route local_integration tests.test_native_practice_retired_routes SurfaceTests, the ledger tests and the new correction tests
The owed-check results in five notes: the mcp__ allow/deny audit, the agent tools: audit, the rtk-hook check, the up-front MCP measurement and the OTel field state source_review and host reads the owed-checks report. Re-read on this host for the folds: diff -rq of the agent folders (exit 0), and the user settings' permissions.deny (19 npx *skills rules, 0 rtk npx twins, 2026-10-17T04:41:38Z)
Each correction fails its test on the text it replaced local_integration the fail-first runs with only the test files overlaid on 728141f2 and 1af2052c (fold 3 and fold 4 commit messages)
The slot manifest label, its difference lists and note, and the evidence registry match the shipped bytes local_integration tests.test_native_practice_snapshot_provenance, scripts/evidence_manifest.py --check, scripts/validate.py

What the owed checks settled, still owe, and hand to another PR:

  • Recorded, with results:
    • the audit of the allow, deny and agent tools: lists for prefix-matched mcp__ entries: none relied on prefix matching;
    • the rtk hook claude rewrite against the 2.1.300 updatedInput validation: no key to drop;
    • this host's up-front MCP context at the 4,096-character limit: only ai-memory's instructions are cut, as upstream designed;
    • the new OTel fields: neither collector profile keeps the five event fields, and the span attributes need no allowlist entry.
  • Still owed:
    • a re-measured transcript footprint on 2.1.302;
    • M1 and M49 on 2.1.302;
    • whether idle compaction follows Compact Instructions;
    • whether gen_ai.conversation.id closes the attribution gap, with Claude traces on.
  • In Keep Claude Code's new OTel event fields in both collector profiles; deny the rtk spelling of the skills CLI #1238: the collector allowlists for the five OTel event fields, and the 19 rtk npx deny twins of the skills-CLI rules.

Local commands run

At head a2f56f7b660237cdbfde95e80300960beb01eaf7 (fold 5), on this host. The registration runs read the committed head:

$ python3 scripts/validate.py
rc 0; {"components": 71, "hashed_files": 12286, "profiles": 4, "receipts": 240, "status": "passed"}

$ python3 scripts/validate.py --registration-base origin/main      # f00d4780
rc 0; {"components": 71, "hashed_files": 12286, "profiles": 4, "receipts": 240, "status": "passed"}

$ python3 scripts/validate.py --registration-base 1af2052c
rc 0; same summary

$ python3 scripts/validate.py --registration-base origin/main --registration-before 609d3e14   # CI's form
rc 0; same summary

$ python3 scripts/evidence_manifest.py --check
rc 0; {"files": 12286, "status": "passed"}

$ python3 -m unittest <module>   # the five acceptance modules, one at a time
tests.test_native_practice_ledger_obs_sched       Ran 8 tests   OK
tests.test_native_practice_ledger_rows_1          Ran 3 tests   OK
tests.test_native_practice_ledger_rows_tokeff_new Ran 7 tests   OK
tests.test_native_practice_snapshot_provenance    Ran 10 tests  OK
tests.test_skills_manifest                        Ran 38 tests  OK

At 609d3e14, both registration runs exited 1 with docs/decisions/2026-10-09-claude-code-gap-resolution.md: required registration row missing, and CI's validate-shard-0 failed. That is the check fold 5 fixes.

The test selection is not capped. It is every module that grep -rl over tests/ finds for the basename of any path the PR changes, plus claude-native-practice and slot-manifest: the same 76 modules as for fold 4. Before the commit, 75 ran in two streams, with tests.test_saturation_ledger alone afterwards; unittest counted 4,324 tests. tests.test_runtime_worker_openhands_push_gate (127 tests, OK) ran on the committed head.

  • 67 modules pass, among them tests.test_native_practice_owed_check_corrections (11 tests), tests.test_registry_rows (25), tests.test_validate (86), tests.test_host_receipts (184) and tests.test_saturation_ledger (99, OK with 1 skipped).
  • 9 modules fail because of this host, not the PR. Each fails the same way with the tracked tree at a previous head, or passes in a Python 3.12 venv built from .github/requirements-ci.txt:
    • tests.test_upstream_surface_watch: 4 CachedArtifactTests, which read this host's surface-watch cache. Its record tests pass.
    • tests.test_local_pages_overview: the 2 ComposerTests.
    • tests.test_local_pages_architecture_read_boundary and tests.test_local_pages_architecture_sources: no /usr/bin/zstd.
    • One test of tests.test_token_e2e_grader: git clone --local across filesystems.
    • tests.test_component_matrix, tests.test_final_admission, tests.test_final_stack and tests.test_gap_closeouts: they need jsonschema, and they pass in the venv.

Fail-first: each correction's new test was run with only the test files overlaid on the text it replaced. Every failure was an AssertionError:

  • 728141f2 for F1.1, F2.1 and F5.2;
  • 1af2052c for fold 4's F3.2 clause, the record locator and the manifest note;
  • 609d3e14 for fold 5's scoped F3.2 sentence: test_the_row_names_the_gap_and_its_fix and test_the_page_carries_the_row.

The fold 3, 4 and 5 commit messages list each test.

Before the push: git fetch origin main (main is f00d4780, #1237), then git merge-tree --write-tree origin/main a2f56f7b, which exited 0. The merged tree's manifests/evidence.json is sorted and unique, the rows of the changed paths match the merged blobs, and #1237's record keeps its row. No rebase was needed, so fold 5 is a fast-forward from 609d3e14. The pre-push host-name scan found 0 matches, and the digest guard and registry tests passed.

Decision record

None new. This is a currency update under docs/decisions/2026-10-09-claude-code-native-practice.md. Each slot's existing "Overturn when" stays. Where a release fired an overturn (context-compaction, background-workflows), the notes say so and record that the default stands. docs/decisions/2026-10-09-claude-code-gap-resolution.md is unchanged against main, as the command center ruled: its routines locator is pinned to the search revision 8c95a50d. Under the CC's correction to that ruling, it keeps the manifests/evidence.json row that fold 3 gave it, with its current bytes.

Host evidence

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

Checklist

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

🤖 Generated with Claude Code

https://claude.ai/code/session_01QcCViiYWLxs4igpJR3yws6

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Oct 16, 2026
…ude Code 2.1.302

Source for every edit: anthropics/claude-code CHANGELOG.md at v2.1.302 (fetched 2026-10-16T22:15Z
with `gh api repos/anthropics/claude-code/contents/CHANGELOG.md -H "Accept: application/vnd.github.raw"`,
sha256 prefix 57fde96b3318543c), cited by line as [email protected] L<n>; each cited line was
checked against the fetched file. The fetched file has no 2.1.297 or 2.1.298 section.

- Headers: slots.md, slots.json and the eleven layer pages move to client 2.1.302, checked
  2026-10-16; cross-client.md is left alone (hash-tested against cross-client-lines.json).
- native-clients.md: settings-permissions records the 2.1.299 rule-evaluation change (L373,
  L280, L245, L270) with an owed audit of prefix-matched mcp__ entries; checkpoints-rewind
  records that 2.1.300 transcripts carry each request (L186) and owes a re-measured footprint;
  model-effort-routing keeps CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL unset too (L411, L224, L371).
- isolation.md: sandbox cites the 2.1.299 and 2.1.300 sandbox changes and has M1 run on
  2.1.302 (L249, L190); the M49 worktree probe moves to 2.1.302 (L153, L148, L77, L324, L157).
- token-efficiency.md: context-compaction records idle compaction, the /config row and
  subagent autoCompactWindow at their defaults (L217-L218, L6, L410, L110); output-compression
  cites Read allow_large, CLAUDE_CODE_DISABLE_FILE_MENTIONS and updatedInput validation (L414,
  L216, L189) and owes an rtk-hook check.
- workers.md: subagent-definitions records the tools: list change and fork subagents on in -p
  (L374, L410, L35, L36); background-workflows routes the 2.1.300 resume through the Workflow
  tool's approval, to be re-observed (L185, L365, L81, L411).
- mcp-surfaces.md: the 4,096-character up-front limit (L469, L377, L142).
- agent-sdks.md: headless-sdk routes the 2.1.302 -p start mode and fork subagents (L34, L35,
  L36, L291).
- observation-inference.md: usage-cost-monitoring lists the new OTel fields for the collector
  allowlists (L126, L130, L75, L76, L18, L467, L186).

slots.json mirrors every page edit (Evidence, Notes and Route match the pages exactly); the
slot manifest's sha256_when_labeled follows slots.json and differs_from_this_snapshot_in gains
the newly differing evidence and route slots; manifests/evidence.json re-registers the changed
files.

Checks: python3 scripts/validate.py rc 0; scripts/evidence_manifest.py --check rc 0; the 13
native-practice test modules ran 347 tests, with the same two ComposerTests failures as on the
base 90471d6 (the overview composer's layer pages hit a ModuleNotFoundError in this
environment) and nothing else.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QcCViiYWLxs4igpJR3yws6
@seathatflowsinourveins
seathatflowsinourveins force-pushed the docs/claude-native-practice-currency-2.1.302 branch from 71db7bb to 0b361d4 Compare October 16, 2026 22:53
…2.1.302 practice pages

The CC's Claude-family read of 0b361d4 found one false citation: workers.md and slots.json gave
[email protected] L411 as a Workflow resume or limit change, but L411 (2.1.296) only adds
CLAUDE_CODE_WORKFLOW_SUBAGENT_MODEL. The overturn still fired through L365 (2.1.299, the nesting
limit) and L185 (2.1.300, resume through the Workflow tool's approval), so the parenthetical now cites
those two.

Wording now follows the cited lines: the /config Idle compaction row turns idle compaction off or back
on (L6); the 4,096-character figure is the default limit (L469); L34's comma is restored. The
settings-permissions (L373) and headless-sdk (L34, L35) notes now say that their overturn fired, as the
other updated slots do.

slots.json mirrors every edit; the slot manifest's sha256_when_labeled and the seven changed files'
manifests/evidence.json rows were refreshed with scripts/host_receipts.py register_file.
Checks: python3 scripts/validate.py rc 0; python3 scripts/evidence_manifest.py --check rc 0; the 13
test modules that read these pages ran 347 tests with the same two ComposerTests failures as on the
untouched base 90471d6 and nothing else.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…P1 at 887f929)

The headless-sdk row (agent-sdks.md:9 and its slots.json mirror) offered CLAUDE_CODE_FORK_SUBAGENT=0
as an alternative to keeping Agent out of --tools for a worker that must not fan out. [email protected]
L35 says the variable turns off fork subagents (subagent_type "fork") only, so a named subagent can still
fan out. The row now keeps Agent out of --tools as the control and describes the toggle as fork-only.

tests/test_native_practice_fork_toggle.py pins the corrected text (it fails on 887f929 with only the
test overlaid) and the page's mirror of the row. The two files' evidence rows are refreshed through
scripts/host_receipts.py register_file.

Source: anthropics/claude-code CHANGELOG.md at tag v2.1.302, line 35.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…bel the slot manifest

A fold on 728141f that applies the PR #1234 diffs of the command center's owed-checks report
(command-center/claude-native/OWED-CHECKS-2.1.302-20261017.md, written 2026-10-17T02:43:07Z). Each
page edit is mirrored in its slots.json row. Rule source: anthropics/claude-code CHANGELOG.md at tag
v2.1.302, cited as [email protected] L<n> with the release each line sits under.

- native-clients.md:53-54, settings-permissions (report F1.1, F1.2): L245 (2.1.299) fixes rm
  prompts on shell -c scripts; it does not change rule evaluation. The evidence and the note now
  cite L373 and L280 for rule evaluation and L245 for the built-in prompt. The owed audit of mcp__
  rules against L373, L280 and L270 (2.1.299) replaces the owed sentence: no rule relied on prefix
  matching, so none changes.
- workers.md:13, subagent-definitions (F2.1, F2.2): the note said four host copies differ from
  adoption/agents/claude and four host-only definitions exist. diff -rq of adoption/agents/claude
  and of .claude/agents against ~/.claude/agents exits 0, 11 files each, so the claim was false at
  728141f. The owed audit of the tools: lists against L374 (2.1.299) is recorded: 25 whole-name
  grants from six servers, and no list changes.
- token-efficiency.md:50-51, output-compression (F3.1): the owed check of the rtk hook against the
  updatedInput validation of L189 (2.1.300) is recorded (rtk-ai/[email protected]
  src/hooks/hook_cmd.rs:648-651 replaces only command), and L916 (2.1.290) joins the evidence.
- mcp-surfaces.md:12-13, mcp-config-tool-search (F4.1): the owed measurement of the up-front
  context at the 4,096-character default of L469 (2.1.296) is recorded, beside L377 (2.1.299);
  L602 (2.1.295) and L1926 (2.1.280) join the evidence.
- observation-inference.md:13, usage-cost-monitoring (F5.2): the note said each new field is to be
  added to the collector's allowlists. It now says neither collector profile keeps the five event
  fields of L126 (2.1.300), L75 and L76 (2.1.301) and L18 (2.1.302), and that the span attributes
  of L130 (2.1.300) need no allowlist entry because the templates export no Claude traces.

The six diffs were applied with git apply after git apply --check (exit 0 each). Each replaced
evidence or notes line occurs once at 728141f; the "]," lines that the slots.json hunks also rewrite
are placed by their context. Each result has the sha256 the report proposes.

Label fix: current_decision_source.sha256_when_labeled in claude-native-slot-manifest.json now names
the sha256 of this commit's slots.json, taken from sha256sum. This corrects 728141f, which changed
slots.json without moving the label, so tests.test_native_practice_snapshot_provenance
(test_the_label_names_the_shipped_slots_file) fails there; the CC had capped its test selection for
that commit. differs_from_this_snapshot_in is unchanged. Of the fields the manifest exports, the fold
changes only evidence, in settings-permissions, output-compression and mcp-config-tool-search, and
the manifest already lists all three. Notes are not exported.

The manifests/evidence.json rows of the seven changed files were refreshed with
scripts/host_receipts.register_file; scripts/evidence_manifest.py --write left the file unchanged.

Checks, run with the fold applied before this commit: python3 scripts/validate.py rc 0;
python3 scripts/evidence_manifest.py --check rc 0. The test modules that name a changed path (grep
-rl over tests/ for each changed file's basename, claude-native-practice and slot-manifest, not
capped) are 72; each ran on its own (unittest counted 4,099 tests). 64 pass, among them
tests.test_native_practice_snapshot_provenance (9 tests) and tests.test_native_practice_fork_toggle
(2). The other 8 fail from this host's environment, not the fold; at 728141f the only test that
failed in CI was the label test. Four fail the same way on the untouched 728141f:
tests.test_local_pages_overview (the 2 ComposerTests failures);
tests.test_local_pages_architecture_read_boundary and tests.test_local_pages_architecture_sources
(26 errors each, no /usr/bin/zstd); and one test of tests.test_token_e2e_grader (git clone --local
cannot hardlink across filesystems). The other four need jsonschema, which this host's python3
lacks: tests.test_component_matrix, tests.test_final_admission, tests.test_final_stack and
tests.test_gap_closeouts. With the fold they pass in a Python 3.12 venv built from
.github/requirements-ci.txt, as do tests.test_lane_packets, tests.test_paired_runs_results and
tests.test_saturation_ledger, whose jsonschema tests had skipped.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…oint the Cloud routines locator

Fold 3 on 450608c, at the command center's request after its read of fold 2.

Regression tests: tests/test_native_practice_owed_check_corrections.py, in the style of
tests/test_native_practice_doc_corrections.py, pins the two corrections fold 2 made from the
command center's owed-checks report (command-center/claude-native/OWED-CHECKS-2.1.302-20261017.md).

- F1.1, settings-permissions (SettingsPermissionsRmPromptTests): [email protected] L245 (2.1.299)
  fixes rm prompts on shell -c scripts; it does not change rule evaluation, which L373 and L280
  (2.1.299) do. The slots.json row cites L245 only as "L245 (2.1.299, rm prompts on shell `-c`
  scripts)", its rule-evaluation sentence cites L373 and L280 without L245, and the native-clients.md
  section carries the corrected Evidence and Notes lines and neither of the two wrong phrases.
- F2.1, subagent-definitions (SubagentDefinitionsDriftNoteTests): the note has none of the three
  stale drift phrases and states that the copies match; the workers.md section mirrors it. The
  count of definitions in the corrected sentence equals the files in adoption/agents/claude and in
  .claude/agents, which are byte-identical. Its locator into
  docs/decisions/2026-10-13-claude-agent-drift-check.md names the line that records the old note as
  stale. The host folder ~/.claude/agents is not readable from the repository.

Fail first: with only the test file overlaid on 728141f, each of the 5 tests fails with an
assertion (FAILED (failures=1) each; the module FAILED (failures=5)). At 450608c with the file added,
each passes (module OK).

Locators: /usr/bin/grep -rn over the whole repository, not capped, for the basename of slots.json and
of each of the 12 reference pages this PR changed, followed by :<digits>, finds 103 locators in text
files and one compiled .pyc that git ignores. Only slots.json moved lines in this PR: every hunk in the
pages replaces lines one for one. One live locator into it was stale. The gap-resolution record at
line 174 cited reference/slots.json:1625 for the "Cloud routines" alternative of scheduled-tasks: the
right line at 8c95a50, the revision its search names, and on main. The text is at line 1649 now.
Because the sentence reports that search, the locator keeps :1625 at 8c95a50 and adds "current
locator `:1649`", the form the ecosystem-roadmap record uses (2026-09-28-ecosystem-roadmap.md:357).
Line 1649 is "Cloud routines" in the alternatives of scheduled-tasks. The edit stays on its line, so
the record keeps its 245 lines and its lines 179-181 keep the numbers that the usage-cost-monitoring
note and tests/test_native_practice_ledger_obs_sched.py:85 cite. Its slots.json:3 locator
(client_version) still resolves. The other hits stay as they are:
- 64 sit in evidence/artifacts/claude-native-practice-20261009/primary-source-reading.json. They
  resolve at a30c218, and tests.test_native_practice_snapshot_provenance checks them there. The
  record that describes them (2026-10-09-claude-code-native-practice.md:344) gives slots.md:35 as
  an example and says it resolves at that revision.
- The test comments that cite a review finding of #1001 or #1005 are history.
- The rest name other files whose names end the same way: 2026-09-30-omniroute-runtime-workers.md,
  2026-09-28-openhands-resolver-isolation.md, a docs/token-efficiency.md that this repository has
  never tracked (agent-lab's), and the dated slots.json snapshots under evidence/artifacts.

Evidence rows: scripts/host_receipts.register_file added rows for the two changed files; the
gap-resolution record had none. scripts/evidence_manifest.py --write left the file unchanged.

Checks, run with fold 3 in the tree before this commit: python3 scripts/validate.py rc 0;
python3 scripts/evidence_manifest.py --check rc 0. The test modules that name a changed path (grep
-rl over tests/ for each changed file's basename, claude-native-practice and slot-manifest, not
capped) are now 74. Two are new to the list: the new module, and tests.test_upstream_surface_watch,
which reads the gap-resolution record. unittest counted 4,220 tests. 64 modules pass, among them the
new module (5 tests), tests.test_native_practice_snapshot_provenance (9) and
tests.test_native_practice_fork_toggle (2). The other 10 fail because of this host, not the fold. CI
passed every validate shard at 450608c.
- These fail the same way with the tracked tree at 450608c: tests.test_upstream_surface_watch (4
  CachedArtifactTests, which read this host's surface-watch cache; its record checks pass);
  tests.test_local_pages_overview (the 2 ComposerTests); tests.test_local_pages_architecture_read_boundary
  and tests.test_local_pages_architecture_sources (26 errors each, no /usr/bin/zstd); and one test
  of tests.test_token_e2e_grader (git clone --local across filesystems).
- tests.test_component_matrix, tests.test_final_admission, tests.test_final_stack and
  tests.test_gap_closeouts need jsonschema, which this host's python3 lacks. With fold 3 they pass
  in a Python 3.12 venv built from .github/requirements-ci.txt, as do tests.test_lane_packets and
  tests.test_paired_runs_results.
- tests.test_saturation_ledger lost one V2PendingCliTests test, with "native publication scanner
  unavailable", in each of two runs made while three test streams shared the host. Run alone it
  passes under python3 (OK, skipped=1) and in the venv (OK).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
… each pinned by a test

Fold 4 on 1af2052. Both reads of 1af2052 are done; this commit fixes the four findings the command
center listed from them. Each correction has a regression test that fails, with an AssertionError,
on the text it replaces.

1. P2: F5.2 had no regression test (observation-inference.md:13, slots.json:2107; F5.2 of the
   command center's owed-checks report, OWED-CHECKS-2.1.302-20261017.md). The new class
   UsageCostMonitoringSpanAttributeTests in tests/test_native_practice_owed_check_corrections.py
   checks that the row and the page:
   - lack "is to be added to the collector's tool-name and privacy allowlists";
   - carry "The span attributes need no allowlist entry" and "To be tested, with Claude traces on".
   It also checks that the test line the note cites (tests/test_observability_tool_names.py:178)
   still asserts OTEL_TRACES_EXPORTER "none". Run with only the test file overlaid on 728141f,
   each of its 3 tests fails. They pass at 1af2052, where fold 2 made the correction, and at this
   commit.

2. P3: the L916 sentence ([email protected] L916, 2.1.290) left out F3.2 (token-efficiency.md:51,
   slots.json:785). One sentence is added to the output-compression note, written to the row and
   the page from one string. It says three things:
   - rtk 0.51.0 rewrites every npx command (rtk-ai/[email protected] src/discover/rules.rs:120);
   - none of the 19 `npx *skills` deny rules in the user settings has an `rtk npx` twin;
   - PR #1238 adds the 19 twins to the template.
   The counts come from an exact-key read of permissions.deny at 2026-10-17T04:41:38Z (19 rules, 0
   twins). The repository's own matcher (ProfileTemplateSettingsTests.bash_rule_matches) finds no
   deny rule for six rtk spellings of the skills CLI there, and one for the plain spelling. PR
   #1238's template holds 19 rules and 19 twins at its head 6bf2eb5.
   OutputCompressionRtkNpxGapTests checks that the row and the page carry the sentence after the
   force-push one; both checks fail on 728141f and on 1af2052. It also checks that the template
   still holds 19 `Bash(npx *skills` rules, which stays true after #1238. The slot manifest's
   sha256_when_labeled is the sha256 of this commit's slots.json, taken from sha256sum.
   differs_from_this_snapshot_in is unchanged because notes are not exported
   (test_no_other_exported_field_differs passes).

3. P3: fold 3's "current locator `:1649`" in docs/decisions/2026-10-09-claude-code-gap-resolution.md:174
   would go stale. As the command center ruled, the record is back to main's bytes (git checkout
   origin/main; git diff --quiet origin/main exits 0), because its citation is already pinned to the
   search revision 8c95a50. The evidence row fold 3 added for it is removed; the record has none on
   main. DispositionCitationTests in tests/test_upstream_surface_watch.py already checks this record
   against references that move. It gains two tests:
   - the routines sentence keeps `reference/slots.json:1625` and has no "current locator" (fails on
     1af2052; passes on 728141f and here);
   - line 1625 is "Cloud routines" at 8c95a50 (skipped when the history lacks that revision).

4. P3: the slot manifest's note (claude-native-slot-manifest.json:69) named six slots whose notes
   differ from the snapshot when 21 do. It also named three of the five top-level keys that differ:
   checked_at and client_version differ too, since this PR's first commit. The sentence now names
   fields, not slots: "Slot fields this export does not carry also differ (notes, primary_sources,
   primary_sources_total and github-action's retired block), and so do the top-level checked_at,
   client_version, cross_client, selection_rule and status_values." A new test in
   tests.test_native_practice_snapshot_provenance's BaselineHistoryTests,
   test_the_note_names_what_differs_beyond_the_exported_fields, builds that sentence from the
   baseline and current slots files. On failure it prints the sentence to write; it fails on
   728141f and on 1af2052. The note's other counts hold at this commit: the 2.1.302 update changed
   the evidence of eleven slots and four routes.

Evidence rows: manifests/evidence.json is 450608c's copy, with rows registered through
scripts/host_receipts.register_file for the six files this fold changes and for the fold-3 test.
Against 1af2052 it drops the record's row and refreshes those six. scripts/evidence_manifest.py
--write left it unchanged.

Checks, run with fold 4 in the tree before this commit:
- python3 scripts/validate.py rc 0; python3 scripts/evidence_manifest.py --check rc 0.
- The five acceptance modules, each by name, all OK:
  tests.test_native_practice_ledger_obs_sched (8 tests), tests.test_native_practice_ledger_rows_1 (3),
  tests.test_native_practice_ledger_rows_tokeff_new (7), tests.test_native_practice_snapshot_provenance
  (10) and tests.test_skills_manifest (38).
- The test selection is not capped: grep -rl over tests/ for the basename of every path this PR or
  this fold changes, plus claude-native-practice and slot-manifest, gives 76 modules.
  - 75 ran one at a time and unittest counted 4,324 tests; 66 modules pass.
  - tests.test_runtime_worker_openhands_push_gate, which reads the committed HEAD, runs after this
    commit.
  - The other 9 fail because of this host, not the fold; CI passed every validate shard at 450608c.
- These fail the same way with the tracked tree at 450608c, as measured for fold 3:
  - tests.test_upstream_surface_watch: the same 4 CachedArtifactTests, which read this host's
    surface-watch cache. Its new record tests pass.
  - tests.test_local_pages_overview: the 2 ComposerTests.
  - tests.test_local_pages_architecture_read_boundary and tests.test_local_pages_architecture_sources:
    26 errors each, no /usr/bin/zstd.
  - one test of tests.test_token_e2e_grader: git clone --local across filesystems.
- tests.test_component_matrix, tests.test_final_admission, tests.test_final_stack and
  tests.test_gap_closeouts need jsonschema, which this host's python3 lacks. With fold 4 they pass in
  a Python 3.12 venv built from .github/requirements-ci.txt, as do tests.test_lane_packets and
  tests.test_paired_runs_results.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…e row; scope the rtk npx sentence

Fold 5 on 609d3e1. Both reads of 609d3e1 requested changes, and the higher rating governs. This
commit fixes the two findings the command center listed.

1. P1 (Muse): the command center corrects ruling 3 of fold 4.
   - docs/decisions/2026-10-09-claude-code-gap-resolution.md stays at main's bytes, but its
     manifests/evidence.json row must not be dropped.
   - Fold 3 (1af2052) registered the record. The PR-registration check requires a row for every
     path a PR commit registered (scripts/validate.py:776 and :786-788). CI runs it with the PR
     base and the previous heads (.github/workflows/validate.yml:173-178). Only a deleted file may
     lose its entry (docs/lanes.md:119-127; the fixtures at tests/test_registry_rows.py:68-84 and
     :112).
   - At 609d3e1, python3 scripts/validate.py --registration-base 1af2052 and
     --registration-base f00d478 each exited 1 with "docs/decisions/2026-10-09-claude-code-gap-resolution.md:
     required registration row missing", and CI's validate-shard-0 failed.
   - scripts/host_receipts.register_file restores the row with the reverted file's current sha256
     and bytes (15899 bytes; the file is unchanged against main).

2. P3 (Claude and Muse): "Every npx command is rewritten too" is false at rtk v0.51.0
   (rtk-ai/rtk@e001f773) for an npx command that a deny rule matches.
   - rtk's Claude hook checks the original command against the Bash deny rules first
     (src/hooks/permissions.rs:84-90) and skips the rewrite on a match
     (src/hooks/hook_cmd.rs:688-691); only the remaining npx commands reach the npx rule
     (src/discover/rules.rs:120).
   - The sentence now limits the rewrite to npx commands that no deny rule matches, and says that
     the twins in #1238 cover the `rtk npx` spelling, which rtk's own deny check does not cover.
   - The edit script reads the sentence from the test's CLAUSE and writes it to
     token-efficiency.md:51 and slots.json:785. The module docstring is scoped the same way.
   - With only the test file overlaid on 609d3e1,
     OutputCompressionRtkNpxGapTests.test_the_row_names_the_gap_and_its_fix and
     test_the_page_carries_the_row each fail with an AssertionError; both pass here.
   - The slot manifest's sha256_when_labeled is the sha256 of this commit's slots.json, taken from
     sha256sum. differs_from_this_snapshot_in is unchanged, because notes are not exported.

Evidence rows: register_file refreshed the rows of slots.json, token-efficiency.md, the slot
manifest and the test module, and restored the record's. scripts/evidence_manifest.py --write left
the file unchanged.

Checks, run with fold 5 in the tree before this commit:
- python3 scripts/validate.py rc 0; python3 scripts/evidence_manifest.py --check rc 0. The
  registration checks read the committed head, so validate.py with --registration-base origin/main
  and with --registration-base 1af2052 runs after this commit; the PR body records the exits.
- The five acceptance modules all pass: tests.test_native_practice_ledger_obs_sched (8 tests),
  tests.test_native_practice_ledger_rows_1 (3), tests.test_native_practice_ledger_rows_tokeff_new (7),
  tests.test_native_practice_snapshot_provenance (10) and tests.test_skills_manifest (38).
- The uncapped selection is the same 76 modules as for fold 4. 75 ran before the commit, in two
  streams, with tests.test_saturation_ledger alone afterwards; unittest counted 4,324 tests.
  - 66 pass, among them tests.test_registry_rows, tests.test_validate and tests.test_host_receipts.
  - tests.test_runtime_worker_openhands_push_gate runs on the committed head.
  - The other 9 are the environment failures recorded for fold 4. Each fails the same way at the
    previous head, or passes in the CI-requirements venv: four CachedArtifactTests, two
    ComposerTests, no /usr/bin/zstd (two modules), one cross-filesystem clone, and four modules
    that need jsonschema.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@seathatflowsinourveins
seathatflowsinourveins marked this pull request as ready for review October 17, 2026 07:01
@seathatflowsinourveins
seathatflowsinourveins merged commit 93aabf3 into main Oct 17, 2026
34 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the docs/claude-native-practice-currency-2.1.302 branch October 17, 2026 07:13
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