Skip to content

Lane prompt Rule 2: status, license and popularity are not evidence of fit (D1 merit rule) - #372

Merged
seathatflowsinourveins merged 1 commit into
mainfrom
claude/lane-prompt-merit-rule-20260926
Sep 26, 2026
Merged

seathatflowsinourveins merged 1 commit into
mainfrom
claude/lane-prompt-merit-rule-20260926

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Owner

Summary

This PR implements runbook decision D1, as the A2 rules-only PR. It adds one sentence to Rule 2 of the shared lane prompt tools/sota-convergence/lane-prompt.md. The sentence is generic and names no repository or product:

Adoption, incumbency, installation, retained-control status, receipt count, packet position, license, stars and popularity are not evidence of fit; choose among adopted candidates on what their evidence shows was run.

  • Scope of the sentence.
    • The runbook's D1 example lists adoption, installation, receipt count and packet position. The sentence adds the two terms of the user's merit directive that the example leaves out: incumbency and retained-control status.
    • It also names license, stars and popularity, following two later user directives of 2026-09-26 (quoted verbatim, typos included):
      • "license are not applibalbe for our env,as we are priviate experimental env not company"
      • "keep it so the future session can avoid gates unnessary , focuing on the quality and sotaness of the repos itself compare to its candidates in that field"
    • Adoption stays what Rule 2's first sentence makes it, the gate for entering the winner set. The new sentence says adoption is not merit.
  • Still five rules. The prompt keeps exactly five numbered rules. lane_packets.load_rules parses them into every packet's rules field, so every packet built from this head carries the sentence. That includes the packets read by the Claude refuters and the blind adjudication judges.
  • Prompt hash. The prompt's prompt_sha256 changes from 9b8a8364f13ff3fcb9fc690198c4ca8849c29cc12b81e8526121a46114517f54 to d3ef2cc0c06d33d6a4a058f5e74a1cf5be8a3760cc2b0b5572598f0e0e4288e4.
  • Registry appends. tools/sota-convergence/lane-provenance.json only gains entries. Every existing entry keeps its bytes, because those entries bind the earlier waves.
  • Tests.
    • tests/test_lane_packets.py gains LanePromptMeritRuleTests:
      • Rule 2 must carry the sentence.
      • The Rules section must number exactly 1-5. This test counts the rules itself, separately from load_rules, which only counts them.
      • The existing packet test now asserts that every packet's rules[1] carries the sentence.
    • tests/test_verdict_lane_vendoring.py gains test_the_current_claude_lane_key_is_registered_under_both_workflow_paths.
      • It checks the full record-time Claude key, scripts/landscape.py LANE_PROVENANCE_KEYS["claude"], prompt hash included, under both workflow paths.
      • Until now only the Codex prompt hash was tested, so a missing Claude append surfaced only when a verdict was recorded.
    • test_registry_entries_are_well_formed_and_unique now keys each lane on LANE_PROVENANCE_KEYS.
      • That is the key record time matches on.
      • The old Claude tuple left out prompt_sha256, so this prompt-only append collided with the 2026-09-24 pair and failed the test (10 != 8).
      • The same widening was made for an audit-only append in round 11 (RR11-2).
      • The test now also checks the format of the Claude prompt_sha256.
  • Evidence registration. GPT-6 live web search, Claude WebSearch session budget, and GPT-6/Claude family names in the blind-adjudication leak checks #352 (59dfe49f) registered tools/sota-convergence/lane-provenance.json in manifests/evidence.json after this branch was first cut. This PR follows the hot-file protocol in docs/lanes.md:
    • It takes main's manifest and re-registers that one file with host_receipts.register_file. Only the entry's sha256 and bytes change.
    • Before the re-registration, scripts/validate.py failed on the file (SHA-256 mismatch, byte count mismatch). After it, the validator passes.
    • scripts/component_matrix.py --write and scripts/new_host_grand_list.py --write ran and left their reports unchanged.
    • The other three changed paths are not registered in main's manifest.

Scope

  • Base commit: 59dfe49f, the merge of GPT-6 live web search, Claude WebSearch session budget, and GPT-6/Claude family names in the blind-adjudication leak checks #352 and origin/main at the rebase.
  • Lane: lane:shared.
    • The prompt judges both catalogs' layers.
    • lane-provenance.json is a verdict trust path (scripts/verdict_review_gate.py TRUST_PATHS).
    • manifests/evidence.json is a shared hot file. This PR only re-registers one hash in it.
  • Lane consolidation: on 2026-09-26 the user shut down the other lane sessions and assigned this work to the workstation coordinator ("no other peers live, i shut them with the token save repos install into our native workflow and github workflow , harness update and sota foundation of our session as main task"); this quote stands in for the trading lane's ack.
  • Paths touched:
    • tools/sota-convergence/lane-prompt.md
    • tools/sota-convergence/lane-provenance.json
    • tests/test_lane_packets.py
    • tests/test_verdict_lane_vendoring.py
    • manifests/evidence.json (one re-registered entry)
  • No wave files, verdict rows, sealed artifacts or other evidence registrations change. verdict-review-gate treats a trust-path change without a verdict change as rules-only.

Ordering (runbook A0/A2)

Disclosures and residuals

  • Where the sentence does not appear.
    • The Claude lane's lens prompts in the vendored layer-verdict-lane.js do not state it. That file is hash-bound and vendored from agent-lab.
    • adjudication-prompt.md does not state it either.
    • The refuters and judges get the sentence only through the packet's rules field.
  • The rule instructs; it does not blind.
    • Exported evidence prose is not rewritten, so a lane can still meet control-arm labels in comparison receipts.
    • The sentence tells a lane not to weigh stars, license or popularity; it does not remove such fields where the evidence carries them. For example, D2 makes observed.stars and pushed_at visible in newcomers' source reviews.
  • Verdict lanes only. The sentence governs how verdict lanes judge fit. This PR changes no license field or check anywhere else in the repository.
  • L3 rewording not bundled. The README's disclosed L3 rewording (overturn_when citing tests/ paths) is not part of this prompt revision.
  • Effect not measured. No lane has run on the new prompt, so the effect on verdicts is unmeasured until the B-phase wave. The tests below are local checks and synthetic fixtures only.
  • Review status. GPT-6 reviewed the pre-amendment head 476d00c3 and found no defects. The amended wording, the new hash, the rebase and the evidence re-registration came after that review and have had no independent review (see Review).

Evidence-class table

Claim Evidence class Command / receipt
The prompt parses to five rules, with the sentence in Rule 2 and in every packet's rules[1] synthetic (fixture) python -m unittest tests.test_lane_packets
The registry covers the current Claude key (prompt included) under both workflow paths, and the current Codex key local_integration (checkout check) python -m unittest tests.test_verdict_lane_vendoring
Main's registry lists are exact prefixes of this head's lists, and the extra entries are the reviewed appends with only prompt_sha256 changed local_integration; not retained (a scratch comparison script, not committed) compare git show origin/main:tools/sota-convergence/lane-provenance.json with this head, list by list
Each mutation below fails the named new or widened tests synthetic; not retained (a one-off in-place mutation run with files restored byte for byte; its script was not committed, so this row is a statement of the author's run, not a receipt) rerun it by applying any listed mutation and running the named test
Lanes weigh evidence over status, license and popularity on the new prompt not established the B-phase verdict wave

Mutation run on the amended tree (test names shortened; merit = test_rule_2_states_the_merit_sentence, count = test_the_rules_section_numbers_exactly_five_rules, packet = test_rules_are_the_five_lane_prompt_rules, claude_key / codex_key = the two registry-coverage tests, unique = test_registry_entries_are_well_formed_and_unique):

baseline {'merit': 'pass', 'count': 'pass', 'packet': 'pass', 'claude_key': 'pass', 'codex_key': 'pass', 'unique': 'pass'}
drop sentence {'merit': 'FAIL', 'packet': 'FAIL', 'count': 'pass'}
move sentence to rule 3 {'merit': 'FAIL', 'packet': 'FAIL', 'count': 'pass'}
sixth rule {'count': 'FAIL', 'merit': 'FAIL'}
renumber 5->6 {'count': 'FAIL'}
reviewed 476d00c3 wording {'merit': 'FAIL', 'packet': 'FAIL', 'count': 'pass'}
no license {'merit': 'FAIL', 'packet': 'FAIL', 'count': 'pass'}
no stars {'merit': 'FAIL', 'packet': 'FAIL', 'count': 'pass'}
no popularity {'merit': 'FAIL', 'packet': 'FAIL', 'count': 'pass'}
no claude appends {'claude_key': 'FAIL', 'codex_key': 'pass', 'unique': 'pass'}
only vendored-path claude append {'claude_key': 'FAIL'}
no codex append {'codex_key': 'FAIL', 'claude_key': 'pass'}
duplicate claude append {'unique': 'FAIL'}
appends keep the pre-amendment hash {'claude_key': 'FAIL', 'codex_key': 'FAIL', 'unique': 'pass'}
restored True

Decision record

No dated decision record is committed. The decision is D1 in the coordinator session's verdict-wave runbook of 2026-09-26, amended the same day by the two user directives quoted above.

  • Adopted: the sentence above, with license, stars and popularity.
  • Alternatives considered:
    • The D1 example sentence verbatim. It leaves out two of the merit directive's named terms.
    • The reviewed 476d00c3 wording, without license, stars and popularity. The two later directives superseded it.
    • Declining D1. The wave's record would then disclose that the prompt does not state the rule.
  • What would overturn it:
    • The B-phase wave's lane returns keep choosing the incumbent on layers where a non-incumbent adopted candidate has the stronger executed evidence. That would show the sentence is not enough and that the lens and adjudication prompts need the rule as well.
    • For the license term: this environment stops being private and experimental (for example, company use or redistribution). License would then be a real constraint again, and "license" should leave the sentence.

Local commands run

These ran on this host with a CI-equivalent virtualenv (Python 3.13.15 with jsonschema, PyYAML and numpy). The tests, the mutation run and the validators ran on the working tree that was then committed unchanged as e0ec2d29. The gate and the full suite ran on that commit.

$ python -m unittest tests.test_verdict_lane_vendoring tests.test_lane_packets tests.test_codex_lane
Ran 207 tests ... OK                                               # rc=0, 0 skipped: the A2 gate
$ python -m unittest tests.test_claude_lane tests.test_record_verdicts
Ran 146 tests ... OK                                               # rc=0, 0 skipped: the other modules that read lane-prompt.md
$ python scripts/validate.py
{"components": 69, "hashed_files": 7109, "profiles": 4, "receipts": 159, "status": "passed"}
$ python scripts/evidence_manifest.py --check
{"files": 7109, "status": "passed"}
$ python tools/sota-convergence/build_verdicts.py --check --root .
{"status": "checked", "waves": ["20260922"], ...}
$ python scripts/landscape.py --root .
{..., "status": "passed"}
$ python scripts/verdict_review_gate.py --root . --base origin/main
verdict-review-gate: no verdict rows changed (base 59dfe49f2334)   # rc=0
$ python -m unittest discover -s tests -q
Ran 6350 tests in 573.370s
OK (skipped=665)                                                   # rc=0; git status --porcelain empty afterwards
$ sha256sum tools/sota-convergence/lane-prompt.md
d3ef2cc0c06d33d6a4a058f5e74a1cf5be8a3760cc2b0b5572598f0e0e4288e4   # the prompt_sha256 of all three appended entries

The pre-commit gitleaks hook reported no leaks.

SOTA sources

  • The user's directives (2026-09-26). The sentence folds them into the prompt generically. The merit directive's named example stays out of the prompt.
    • Merit, relayed by the landscape-sweep session: "make sure every layer the winner repos earns it, no biases that assume ai-memory etc are the best but with true merit of its quality, SOTA-ness and evidence".
    • License: "license are not applibalbe for our env,as we are priviate experimental env not company".
    • Gates and comparison within a field: "keep it so the future session can avoid gates unnessary , focuing on the quality and sotaness of the repos itself compare to its candidates in that field".
  • Verdict-wave runbook, coordinator session, 2026-09-26:
    • §1 D1: "Add the user's merit rule to lane-prompt.md … generically, with no names. Fold it into Rule 2 … append claude and codex entries to lane-provenance.json … keep exactly 5 numbered rules."
    • §2 A2: the rules-only PR and its test gate.
    • §2 A0: the hold on these paths from B1 to B10.
  • Precedents for prompt and provenance appends (this repository):
  • Hot-file protocol: docs/lanes.md, "Hot-file protocol". Take main's manifests/evidence.json, re-register the branch's files with host_receipts.register_file, then run the two --write generators and scripts/validate.py.
  • Same directive, earlier wording: tools/sota-convergence/landscape-sweep/templates.json, the "Merit, not incumbency" paragraph of the 2026-09-26 sweep. That wording names products; this prompt stays generic.
  • Repository evidence rule: the top rule in AGENTS.md ("Stars, installs and popularity guide discovery; they are not evidence") and docs/harness-defaults.md ("Agreement, recency, stars and extra tooling are not evidence").

Review

  • Cross-family review of the pre-amendment head, 2026-09-26. GPT-6 (gpt-6-astra) ran through codex exec at reasoning effort max in a read-only sandbox, on 476d00c3. That head was based on b21a403c, and its sentence did not yet name license, stars or popularity (prompt 60a4115a…).
    • Its scope was the runbook's D1, A0 and A2 text, the draft body as an unverified author claim, and five D1 checks: blindness; exactly five rules that still parse; provenance appended, not rewritten, with matching prompt hashes for both lanes; sealed waves still verify; test discrimination.
    • It exited 0 after 101,226 tokens. Its transcript has no usage-limit markers.
    • Verdict, verbatim: NO DEFECTS.
    • It inspected lane_packets.load_rules and scripts/landscape.py LANE_PROVENANCE_KEYS with Serena find_symbol, and ran scoped checks through context-mode: "The focused tests, provenance hashes, sealed-wave check, publication validator, and review gate passed."
    • It stated its own limit: "Those checks won't establish how a model responds to the new rule." That is the "Effect not measured" disclosure above.
    • One mid-review suspicion, a diff that looked like a rollback of the grand-dashboard checkpoint, was resolved by the reviewer: it was dde28cc2 landing on main after the branch was cut.
    • Findings: 0 held, 0 fixed, 0 rejected.
  • Changes after the review. 476d00c3 was rebased onto 59dfe49f and amended into e0ec2d29. git range-diff b21a403c..476d00c3 59dfe49f..e0ec2d29 shows the whole change against the reviewed bytes:
  • Not re-reviewed. No independent review has looked at these post-review changes. This is a recorded residual; the 476d00c3 verdict does not carry over to them.
  • Evidence class. The review is an independent cross-family read-only review of the pre-amendment head. The reruns are local checks on this host. Neither measures how a lane behaves on the new prompt.
  • Open before merge.
    • The PR's own CI.
    • Merging before B1 (A2 gate, A0 hold).
    • An independent review of the post-review changes, if the coordinator requires one.

🤖 Generated with Claude Code

@seathatflowsinourveins seathatflowsinourveins added the lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement 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.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/lane-prompt-merit-rule-20260926 branch from e0ec2d2 to a3858f2 Compare September 26, 2026 22:54
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Amendment review and replay (coordinator, 2026-09-26):

  • GPT-6 cross-family round on the amendment (476d00c3 → e0ec2d29): gpt-6-astra, max effort, read-only, live search, rc=0. Verdict NO DEFECTS. The reviewer ran the 16 targeted tests and repository validation, and both pass. Removing any one of license, stars or popularity fails an existing test. The provenance hashes match, and no prior entry changed.
  • Replay onto main 4a32e646 (Native data (G2): token-tool savings into Loki and Grafana, one series per native scope #365 merged) as a3858f2f, under the hot-file protocol: main's manifests/evidence.json with the four changed files re-registered. Their content is byte-identical to e0ec2d29. validate.py FAILS=0; verdict-review-gate reports no verdict rows changed; 596 core tests OK; the lane modules (vendoring, packets, codex_lane, claude_lane, record_verdicts) ran 353 tests OK.

…f fit (D1 merit rule)

Fold the 2026-09-26 merit directives into Rule 2 of the shared lane prompt,
generically and with no repository or product names: "Adoption, incumbency,
installation, retained-control status, receipt count, packet position,
license, stars and popularity are not evidence of fit; choose among adopted
candidates on what their evidence shows was run." License, stars and
popularity follow the user's later 2026-09-26 directives: license does not
apply to this private experimental environment, and future sessions should
judge a repository on its quality and SOTA-ness against the other candidates
in its field instead of on unnecessary gates. The prompt keeps exactly five
numbered rules, which lane_packets.load_rules parses into every packet's
rules field.

prompt_sha256 changes from 9b8a8364... to d3ef2cc0.... lane-provenance.json
gains entries and changes none: two claude entries (source and vendored
workflow paths; the 2026-09-24 workflow, role and transcript-audit hashes
with the new prompt hash) and one codex entry (current codex_lane.py with the
new prompt hash). No adjudication entry is needed: its prompt is
adjudication-prompt.md, which this branch does not change.

Rebased onto 59dfe49. Main's lists, #352's adjudication append included,
stay an exact prefix and these three entries follow them. Main has
registered lane-provenance.json in manifests/evidence.json since this
branch's base, so the entry is re-registered under the hot-file protocol;
the component-matrix and grand-list generators left their reports unchanged.

Tests: Rule 2 must carry the sentence, including in every packet; the Rules
section must number exactly 1-5, counted apart from load_rules; the full
record-time Claude key, prompt included, must be registered under both
workflow paths. The uniqueness test now keys each lane on
LANE_PROVENANCE_KEYS: the old Claude tuple left out prompt_sha256, so a
prompt-only append collided with the earlier pair (the RR11-2 widening).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/lane-prompt-merit-rule-20260926 branch from a3858f2 to ec93710 Compare September 26, 2026 23:21
@seathatflowsinourveins
seathatflowsinourveins merged commit 34c5634 into main Sep 26, 2026
24 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/lane-prompt-merit-rule-20260926 branch September 26, 2026 23:39
seathatflowsinourveins pushed a commit that referenced this pull request Sep 29, 2026
…echeck stamps, stack revision (#437 review H5a-d)

(a) Summaries run to 606 characters, not 600: summarize() cuts at 600 and
appends the 6-character " [...]" marker; 138 of 206 are cut and 60 exceed 600.
The subset's own method field keeps the generator's wording and stays as
generated. (b) The 38 exit-null records are 12 MCP requests (seven Claude Code
tool calls: six socraticode, one qmd; five mcporter requests to repomix) and 26
shell plumbing, upstream CLI runs, a capture harness and local checks, not
"mostly MCP calls". (c) The socraticode, qmd and ai-memory release rechecks are
stamped 2026-09-27T01:11:26Z-01:24:04Z (2026-09-26 local). (d) condense.py stops
at the first card whose pin differs from manifests/stack.json; the cards assume
the stack manifest at 34c5634 (#372), which the rtk and toon cards cite, and
55fc8d1 (#433) has the same pins. The Reproduce section runs condense.py in a
temporary root with that manifest; the documented block exited 0 with identical
bytes at 2026-09-29T03:28Z (also with 55fc8d1). It also restores the pin
sentence the previous commit split. Tests derive each statement from the
bundle's data and fail on the previous README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Sep 29, 2026
… drift notes and a weekly native E2E (#437)

* Token topic: 2026-09-27 per-tool card edition, stack-pinned join and drift note

docs/token-efficiency-stack.json gains a dated edition. 17 rows carry a card
condensed from the sanitized token-stack cards: upstream, native adaptation,
E2E returned results, adapted performance per payload and lane, invoke rates
and GPT-6 review, each labelled with its evidence class. The other 7 rows
carry an explicit "no card in this edition" marker. gpt-tokenizer has a card
but no stack.json component, so it is listed under edition.cards_without_row.

scripts/build_ecosystem.py joins each row to manifests/stack.json for the
version and repository and rejects row-level pins. When a card's recorded pin
differs from the stack pin, the row shows a drift note instead of editing the
card. The build validates every card block's evidence class, each
comparison's counts and the card's source bytes and sha256. The edition and
its artifacts link at the publication ref.

evidence/artifacts/token-stack-cards-20260927 holds the sanitized cards, the
invoke snapshot, the 206 cited returned-result records (command, exit,
summary and the sha256 of each omitted body), the GPT-6 review index, a README
with evidence classes and dates, and the generators.

native-token-e2e.yml adds a weekly Monday 07:11 UTC schedule. AGENTS.md and
docs/token-session-handbook.md each gain one pointer to the rows.

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

* Token topic page: render the per-tool cards (template outside the brief's path list — coordinator to accept or reassign)

The page's only inline script lives in docs/ecosystem/template.html, so the
edition header, the stack-pinned drift note, the no-card marker and the six
card blocks (upstream, native adaptation, E2E returned results, performance
per payload and lane, invoke rates, GPT-6 review) render there. Each block
states its evidence class; figures keep their lane, payload and unit and are
never added across them. Only existing helpers (make/add/link with safeHref,
textContent) are used; the build recomputes the CSP script hash.

tests/test_ecosystem_manifest.py runs the real template through the Node
page harness and asserts the rendered card text, the drift note and the
no-card marker.

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

* Hot files: evidence registration and generated reports

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

* Token topic cards: card link fields pass the build's public_url gate (#437 review H2)

docs/ecosystem/template.html topicCard renders upstream.recommended_install.url,
recommended_wiring[].url, new_since_pin[].url and limitations[].url as links, but
token_topic_card returned the card unchanged, so these reached safeHref, which
accepts any http/https URL. Each now passes public_url, the gate card.source and
the build's other external source links use; a rejected URL fails --check with
the card's source path and the field. Tests plant http://, 127.0.0.1 and
javascript: URLs in each field (12 cases, all passed the unchanged build) and
accept a clean HTTPS set unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Token stack cards: bundle.py keys the returned results by the supplied basename (#437 review H5e)

source() records each input under clean_text(path.name), but main() read
inputs["returned-results.json"], so renaming the --returned-results file raised
KeyError at line 190. The subset's source block now uses the supplied basename
for both the lookup and its name; with the canonical name the output is
unchanged. tests/test_token_stack_cards.py runs bundle.main on a synthetic
input set under both names (the renamed case raised KeyError before the fix).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Token stack cards: retained ledger readings behind the native_snapshot figures (#437 review H1)

The five native_snapshot figures (rtk 42,367,855 and 26,531,271, headroom
579,411, context-mode 3,244,032 and 6,311,424) cited private assembly inputs
only. tools/counter_readings.py opens the private token-report ledger read-only
(sqlite3 URI mode=ro), matches each entry to its one snapshots row on tool,
$HOME-relative scope, observed_at to the second and saved figure, requires the
kind and session estimate the entry's basis quotes to equal the row's, and
writes counter-readings.json: ledger ids 67, 68, 69, 71 and 72 with tool, scope,
observed_at, success, saved, kind and, for context-mode, the session estimate
(27,109,948 and 157,255). The evidence column and metrics.raw are never copied;
the output passes a private-content scan before it is written. The copy re-measures nothing.

The README's new section tabulates the backed figures and names the two rtk
shortfall figures the card cites without a reading (39.2% over the host's
lifetime, 16,493 rtk discover skips): they rest only on the private rtk.json
input (sha256 in the Reproduce table) and this artifact does not verify them.
The jcodemunch-mcp card has no native_snapshot entry. Tests require an
identical reading for every entry, fail when one reading's saved figure, scope
or time changes, allow only the sanitized fields and check the README section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Token stack cards README: measured summary bound, exit-null counts, recheck stamps, stack revision (#437 review H5a-d)

(a) Summaries run to 606 characters, not 600: summarize() cuts at 600 and
appends the 6-character " [...]" marker; 138 of 206 are cut and 60 exceed 600.
The subset's own method field keeps the generator's wording and stays as
generated. (b) The 38 exit-null records are 12 MCP requests (seven Claude Code
tool calls: six socraticode, one qmd; five mcporter requests to repomix) and 26
shell plumbing, upstream CLI runs, a capture harness and local checks, not
"mostly MCP calls". (c) The socraticode, qmd and ai-memory release rechecks are
stamped 2026-09-27T01:11:26Z-01:24:04Z (2026-09-26 local). (d) condense.py stops
at the first card whose pin differs from manifests/stack.json; the cards assume
the stack manifest at 34c5634 (#372), which the rtk and toon cards cite, and
55fc8d1 (#433) has the same pins. The Reproduce section runs condense.py in a
temporary root with that manifest; the documented block exited 0 with identical
bytes at 2026-09-29T03:28Z (also with 55fc8d1). It also restores the pin
sentence the previous commit split. Tests derive each statement from the
bundle's data and fail on the previous README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Token session handbook: token topic rows are the adoption reference, cards are dated snapshots (#437 review H4)

The line this PR added made each tool's topic row "its lane and adoption
reference", but the cards are dated 2026-09-26/27 snapshots and the qmd card's
lane_rule is already superseded by the SubagentStart carrier
(adoption/hooks/claude/token-lanes-block.md L9 also names foundation-docs and
foundation-adoption). The row is now the adoption reference, the current lane
list is the carrier block, and each card block is called a dated snapshot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Hot files: AGENTS.md token-topic pointer and evidence registration (#437 review H4)

AGENTS.md: the pointer this PR added now makes a tool's topic row its adoption
reference, calls its card a dated snapshot, and names the SubagentStart carrier
block (adoption/hooks/claude/token-lanes-block.md) as the current lane list; one
line, no other line touched.

manifests/evidence.json registers the changed listed files (AGENTS.md,
docs/token-session-handbook.md, scripts/build_ecosystem.py,
tests/test_ecosystem_manifest.py, the card bundle README and tools/bundle.py)
and the new evidence files counter-readings.json and tools/counter_readings.py.
component_matrix.py --write and new_host_grand_list.py --write left their four
reports unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Token stack cards: reproduction block status, truncation condition, list guard, test comment (#437 verifier findings)

The round-one verifier found the README's reproduction block reported cmp's status, so it passed even when condense.py stopped: the block now runs under set -e and the README states the measured exit statuses of the block as written and with the current stack manifest. The truncation sentence names its condition (cut at the last space only when it is past character 300). token_topic_card's list guard now rejects any non-list, including a falsy one: a test covers {}, "" and null and fails against the previous guard. A test comment states where card.source.url comes from.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* AgentsView re-pin registry: count the per-tool card lines that name the pinned version

#437 adds per-tool card blocks to docs/token-efficiency-stack.json. The agentsview
card names 0.43.0 on 12 lines as dated card facts (the pin the card recorded), so
main's RepinLocationRegistryTests, which pairs every matching line of a re-pin
file with a recorded location, failed with 14 matching lines against 2 recorded
locations (CI run 36526587362). The registry entry now records dated_record_lines
(count 12, with its basis) and location_mismatches counts them exactly; a wrong
count fails a new test. A re-pin still changes only the two install lines.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Hot files: re-register the AgentsView registry files in the evidence manifest (manifests/evidence.json only; last commit per docs/lanes.md)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant