Skip to content

feat(eot-hook): Branch A — recommendation-laziness self-check nudge - #234

Merged
artyhoo merged 1 commit into
stagingfrom
chore/eot-hook-recommendation-nudge
May 25, 2026
Merged

feat(eot-hook): Branch A — recommendation-laziness self-check nudge#234
artyhoo merged 1 commit into
stagingfrom
chore/eot-hook-recommendation-nudge

Conversation

@artyhoo

@artyhoo artyhoo commented May 25, 2026

Copy link
Copy Markdown
Owner

Summary

Extends .claude/hooks/end-of-turn-reminder.sh Branch A (long-text recap, no question) with a recommendation-laziness self-check nudge — mirrors the existing Branch B/C «настоящая развилка» framing for the case where there is no AskUserQuestion.

Why: Defer-reflex Stage 2 benchmark (PR #232) REJECTed the regex-based detection mechanism (precision 3%, recall 0/3). The underlying problem (agent says «PR ready, ждёт твой клик» instead of merging — 3 documented incidents in feedback_no_human_verification_ai_self_verifies.md) is real and uncovered. Maintainer pointed out: Branch B/C already has the «один вариант явно лучше → НЕ спрашивай, сделай» nudge, but it only fires on asked=true. Defer-reflex incidents happen in Branch A turns (long recap, no explicit question). Extending Branch A with the same nudge closes the gap without a regex gate — text-recall reminder fires always, no precision/recall trade-off.

Sibling, not regex replacement: This is the text-recall complement to T20 (inline-verdict-without-evidence) — same family, different action surface. Per recommendation-laziness-discipline.md §1.12 framing.

Changes

File LOC delta What
.claude/hooks/end-of-turn-reminder.sh +1 New bullet inside Branch A cat <<EOF block, between «Следующий шаг» and «Любой пункт не выходит конкретным»
packages/core/hooks/end-of-turn-reminder.test.ts +4 (1 assertion + 3-line comment) Inside existing Branch A it(...) block: `expect(payload.reason).toMatch(/рекомендовал

Not a capability commit

Hook edit (existing file) + test extension (existing file). No new dep, no new ≥80 LOC packages/ source, no new file under new packages/ subdir. Pre-push detectCapabilityReason returns null → no Prior-art trailer required.

How to verify

  • All 14 hook tests pass — verified: pnpm vitest run hooks/end-of-turn-reminder.test.ts green, including new Branch A nudge assertion
  • Pre-push hook ran tests on push — verified: 115 tests passed (18 files), pre-push exit 0
  • Hook smoke — verified: bash hook <<< '{"transcript_path":"/dev/null","stop_hook_active":false}' exits 0 silently
  • Diff scope — verified: 2 files, +5 lines total, no drive-by changes
  • Branch A wording mirrors B/C — verified: identical imperative tone, «настоящая развилка» / «сделай и скажи что сделал» action verb
  • @cc-only-rationale annotation preserved — verified: hook line 2 unchanged (internal dev tooling, not shipped to consumer projects)
  • No regex gate added — verified: this is text-recall reminder only, fires always when Branch A fires; orthogonal to PR research(defer-reflex-detection): Stage 2 benchmark — REJECT UMBRELLA verdict #232's REJECTed mechanism
  • Empirical effect — owner: maintainer + future sessions; falsifier: defer-reflex incidents continue WITH this nudge active in Branch A → text-recall insufficient → escalate to AI-agnostic sub-agent (option 3 from Stage 2 §5)

§1.7 Forward/Backward-check applied

Forward-check:

  • Complies with no-paid-llm-in-ci.md §1: deterministic bash, no LLM, no API calls — file:line evidence: .claude/hooks/end-of-turn-reminder.sh:228 (text-only insertion in heredoc)
  • Complies with dual-implementation-discipline.md §3: hook already carries @cc-only-rationale: internal dev tooling — end-of-turn reminder injection for maintainer's CC session; not shipped to consumer projects via install.sh at line 2; extension inherits — no annotation change needed
  • Complies with parallel-subwave-isolation.md §1: Worker ran in harness-allocated worktree via isolation: \"worktree\"
  • Complies with recommendation-laziness-discipline.md §1.12 — this is exactly the «delivery-channel» implementation of §1.12 «Lead with a reasoned recommendation; act when the best path is clear» for the non-AskUserQuestion case

Backward-check:

Rollback plan

Revert single PR — Branch A reverts to pre-nudge wording; recommendation-laziness discipline reverts to T20 + Branch B/C-only coverage (the pre-this-PR state).

…follow-up to defer-reflex Stage 2 REJECT)

Stage 2 REJECTed regex-based detection (precision 3%, recall 0/3); this is
the text-recall complement maintainer requested per Branch B/C pattern.

Branch A (long-text, no question) now includes a self-check bullet mirroring
Branch B/C «настоящая развилка» framing: if the AI recommended something or
said «ждёт твой клик», it must verify alternatives were genuinely considered
before deferring — not offload to the maintainer reflexively.

Companion test: Branch A it() extended with expect(reason).toMatch on the
nudge text keywords (рекомендовал|жду твоего решения|перекладывай).

NOT a capability commit: hook edit + test extension within existing files;
no new ≥80 LOC file, no new dep.

Prior-art: skipped — hook wording extension only, no new capability introduced; test extension follows existing paired-negative pattern in the same file.
@artyhoo
artyhoo merged commit 45c0ff8 into staging May 25, 2026
42 checks passed
artyhoo added a commit that referenced this pull request Aug 6, 2026
#1211)

BFR two-axis verdict on the three `anthropics/knowledge-work-plugins`
the operator named as uncovered by 53c2ec + #1210: engineering, design,
product-management. Complements (does not duplicate) both prior verdicts
and corrects #1210 §A0's "no engineering/design plugin exists" — true only
for `claude-plugins-official`, false for `knowledge-work-plugins`.

Verdict: ADOPT-operator + KEEP NARROW-shipped for all three, with a
load-bearing Cowork-vs-CC caveat. README verbatim "Built for Claude
Cowork, also compatible with Claude Code" + explicit `claude plugin
install <p>@knowledge-work-plugins` block → trio IS CC-CLI-installable
(kickoff's "Cowork-only" over-narrowed it), but optimal seat = Cowork.

Per-capability T16 (actual counts corrected: engineering 10 skills/0 cmds,
design 7/0, PM 8+1 = 26 capabilities, not the kickoff's "~38"): 0/26
direct problem-class matches; 1/26 real mechanism-overlap
(product-brainstorming ↔ superpowers:brainstorming) that is
domain-divergent (PM product-problem vs technical-capability design) —
additive, not a displacement candidate; 1/26 name-adjacent-format-divergent
(write-spec PRD prose vs machine-parseable kickoff). Negative-existence
(6-item §1): zero hooks.json/.husky/scripts/CI in the trio; enforcement
is .mcp.json connectors + skill prose, structurally distinct from our
20 CC hooks and from security-guidance's decision:"block".

SSOT row #235 chosen (not #234) to leave #234 for in-flight PR #1210.
Principle tests 08/10/11 GREEN (28/28).

Prior-art: prior-art-evaluations.md#235

Co-authored-by: Test <test@example.com>
artyhoo added a commit that referenced this pull request Aug 6, 2026
…y verdict + SSOT #234 (#1210)

Utility/gap-fill audit answering the operator question: now that verdict
53c2ec established the Anthropic first-party plugins are NOT competitors,
where are they useful to US in /arch /dispatcher /harvest + the maintainer's
harness + what we ship? Plus the design-plugin (frontend-design) investigation.

Headline: engineering v1.2.0 pack = KEEP NARROW (53c2ec closed it). Two
marketplace siblings 53c2ec flagged-but-did-not-adjudicate are where the real
utility is — security-guidance ships a real decision:"block" PostToolUse hook
(closes a security-pattern gap our 20 CC hooks don't cover); code-modernization
ships a legacy-modernization orchestration with no counterpart in our contour.
frontend-design = ADOPT-operator (maintainer builds UI), REJECT-shipped (first-
party CC-only, we ship no design-generation surface). Shipped net = ZERO
companion changes. security-guidance + code-modernization flagged for separate
prior-art passes.

Two-axis (operator vs shipped) per build-first-reuse-default §1.1. T16 per
plugin. §A0 resolves plugin identity (no 'engineering'/'design' in the
marketplace roster; DeepWiki + host census agree). Falsifier per verdict §A6.

Zero build: research-patch + SSOT row #234 only. companions.manifest unchanged.
Verdict 53c2ec (off-staging) cited, not modified.

Prior-art: prior-art-evaluations.md#234 (this commit — the verdict itself;
sibling precedent at verdict 53c2ec, the standalone engineering-pack verdict,
off-staging at time of this patch).

Co-authored-by: Test <test@example.com>
artyhoo added a commit that referenced this pull request Aug 7, 2026
…A/B arm re-homed to S-K (#1251)

Operator verdict 2026-08-07 on the §5 PARKED DECISION-NEEDED: Option A. The ADR-8 A/B experiment
is descoped from S-D′; the stage ships subtraction maps + review-seat agent definitions + the #234
annotation, and a PR with no evaluation arm is now conformant rather than incomplete.

Edits:
- Header rev marker -> REV 6, stating what moved and that the §5 blocker is lifted (the two-gate
  S-E + S-H dependency is untouched and still binds; S-E has not merged).
- §1 item 3: PARKED -> DESCOPED. The four Phase -1 findings stay as the record of WHY; the binding
  instructions to the executor are inverted from "held" to "absence is not a shortfall".
- §4 T2: re-scoped. ADR-8's baseline left with the arm, but S-D′'s OWN before/after baseline is
  still in scope and still subject to "captured, not described" -- now citing the pre-prune
  snapshot per the header INPUT CONDITION landed in #1250.
- §5: heading and framing flipped to RESOLVED; the fork text kept verbatim as the record of what
  was decided against what alternative.
- §5 INCONCLUSIVE: CLOSED, with evidence. aif creates the task id AFTER the prompt is composed --
  the kickoff ships as `description` inside POST /tasks (AifHandoffBackend.ts:231-239) and the id
  exists only in that response (:249); the only post-create mutation is PUT {paused:false} (:260),
  the sole other write a best-effort DELETE rollback (:263). A parity-selected arm therefore cannot
  live in the dispatch prompt without a two-phase redesign -- independent grounds for Option A.
  Caveat carried: verified client-side only; packages/api not audited for description-editability
  of a paused task.
- §6 (new): S-K stub. Entry criteria = the four unchanged findings + the task-id finding; the three
  surfaces it needs (ledger schema, dispatcher SKILL.md, install.sh skip-list) named as the reason
  it could not live in S-D′; inherits the INPUT CONDITION; depends on S-D′ merged.
- Umbrella kickoff: S-K stub row added, S-D′ row updated (Implements ADR-8 -> ADR-1), and the
  "ADR-8 is NOT orphaned" paragraph extended with the second recorded deviation and the new host.

Recorded rather than quietly ignored: Option A's own text instructed rewriting out a §3 sentence
("a PR that ships maps with no executable A/B arm fails the stage's purpose") that DOES NOT EXIST
in this file. Verified by exhaustive grep, not by reading §3 -- the §3 region carries only the
#optout-as-reflex note about install-fingerprint snapshots. The A/B framing lived in §1 item 3 and
§4 T2, which is what this rev actually edits. The discrepancy is annotated inline in §5 so the next
reader does not re-hunt for it.

Prior-art: skipped — records an operator decision into an existing kickoff, no new capability

Co-authored-by: Test <test@example.com>
artyhoo added a commit that referenced this pull request Aug 8, 2026
…(stage PR) (#1290)

* feat(s-d-prime): per-seat subtraction maps (S-D′ deliverable 1)

Single map doc under docs/superpowers/specs/ authoring what each CC seat
class STOPS loading — senior main seat / review subagents / Explore-Plan
/ aif-container / ZCode population table per ADR-2.

Per-row cells: cost (measured, cited) · reach (with BASIS — S-H P11 /
S-L census / `UNVERIFIED — no probe exists`) · restoration trigger
(OBSERVABLE per T-SDP-B) · mechanism + §0.6 agnosticism-behaviour.

Key rows:
- S-MAIN-INJ — bootstrap injector (FORK E mandatory block), 1,760 +
  1,866 B/firing, residency-weighted ~53 KB/session, ~12× P5a lever
  (S-H §5). PROPOSED DIFF — once-per-session cache pattern with
  compact_boundary invalidation.
- S-MAIN-SKILL — skill_listing 26,696 cp / 8,870 tok (S-L §5 top-ranked,
  4.9× any other message-stream row). PROPOSED DIFF — de-list zero-
  invocation skills.
- S-MAIN-AGENT — built-in agent descriptions 2,305 cp (S-L §2.2
  built-in subset). Upstream feature request, documented degradation.
- S-MAIN-TOOL — deferred_tools + mcp_instructions 7,816 cp combined
  (S-L §2.1). Per-MCP-server upstream PRs, recommended.

§3.1 Tier-0 swap — DECISION: NO SWAP FIRES THIS STAGE. §0.5 priority
ordering puts skill_listing (8,870 tok) ahead of the largest Tier-0
rule (build-first-reuse-default ~3,167 tok @ 4 B/t). §2 proposed-diffs
carry the senior-seat subtraction; the §3.2 candidate-choice fork
PARKED as DECISION-NEEDED for a future stage.

§4 Review subagents — 8 in-scope agents enumerated (T10 before T1);
reach uniform `UNVERIFIED — no probe exists` per kickoff §3 M2; agent-
file edits ship via Task 6 (cross-referenced).

§5 Explore/Plan — ALREADY DONE per S-H P11 (REAL verdict: 26,659 tok /
26,783 tok vs control 62,340 tok, no rules / no CLAUDE.md loaded).

§0.1 INPUT CONDITION PARKED — no host-side billing-projection snapshot
channel exists in this repo; map cites per-block measured figures as
BEFORE baseline, DECISION-NEEDED surfaced for PR body.

§1.7 self-reflexive note: forward-check + backward-check + recursive-
self-application all verified.

Stage S-D′ of the arch-v2-context-pipeline umbrella. ADR-8 A/B arm
descoped per kickoff §5 Option A (operator verdict 2026-08-07) — a PR
with no evaluation arm is conformant.

Prior-art: prior-art-evaluations.md#234 (token-economy subtraction maps;
verdict per SSOT row, this stage's annotation appended in Task 9).

* feat(s-d-prime): review-seat agent replacement prompts + regen snapshots (S-D′ deliverable 2)

Replacement system prompts for the 8 in-scope review-seat agents per S-D′
deliverable 2 (kickoff §1 item 2). Each carries reviewer-discipline clauses
(§1 role separation + §2 DECISION-NEEDED 4-step), a subtraction-map-row
reference (S-D′ §4.2 pointer), and a GO/REVISE/STOP vocab note where the
agent's grammar is the source per dispatch-input-checker.md:121.

Agents + before→after bytes (per S-D′ §4.2):
- adapter-jig-reviewer.md      13,067 → 8,430  (-35%)
- backward-sweep-auditor.md     8,221 → 6,413  (-22%)
- capability-reuse-auditor.md   8,691 → 6,886  (-21%)
- compliance-verifier.md       13,380 → 7,030  (-47%)
- dispatch-input-checker.md    12,469 → 9,940  (-20%) [DISPATCH-INPUT grammar at L121 preserved verbatim]
- docplan-auditor.md            7,924 → 7,307  (-8%)
- fidelity-auditor.md           9,072 → 8,095  (-11%) [FIDELITY grammar + Watch-list schema preserved verbatim]
- reviewer-discipline.md        4,892 → 5,091  (+199 B, no-op trim — map §4.2 had flagged "LIKELY NO-OP")

Wishful byte targets were not all met: the binding kickoff criteria
(b)+(c)+(d) additions (reviewer-discipline clauses, subtraction-map-row ref,
GO/REVISE/STOP vocab note ~1,050 B/agent) made some targets infeasible
without gutting agent function. Recorded honestly in map §4.1 + §4.2 with
a "Wishful-targets finding" block per §3a park-don't-guess contract —
actuals cited with percentages, no number gutted to hit a target.

Snapshot baselines regenerated (8 fingerprint files across 4 templates ×
brownfield/greenfield) — the agent file edits shift install fingerprints
per kickoff §1 item 2. SNAPSHOT_MODE=compare passes 15/15.

host-verify gates (kickoff §3): all three green on host.
- snapshot compare: 15 PASS / 0 FAIL
- render-rule-index --check: up-to-date
- render-rule-channels --check: 40 verdicts, 0 undeclared refusals
- Tier-0 swap leg: N/A — no swap fires this stage (map §3.1); skill_listing
  8,870 tok > biggest Tier-0 rule ~3,167 tok, so no swap can pay.

* docs(s-d-prime): SSOT #234 annotation — trigger (a) fired (S-D′ deliverable 4)

Per kickoff §1 item 4: trigger (a) fired — operator-declared expensive-seat
budget exhaustion, 2026-08-06 session. Verdict text unchanged (DEFER);
annotation appended per the row's own protocol.

Why verdict unchanged: S-D′ (the reopened S-D scope) answers the trigger
via the SUBTRACTIVE path (per-seat subtraction maps + review-seat replacement
system prompts at agents/*.md — see commit e1eb0bab99 for the map and
0f183ba9f9 for the agents), not as the additive L2 build this row scoped.
The row's "re-open S-D as a build" clause remains armed for a future
ADDITIVE incident.

Last reviewed bumped 2026-07-31 → 2026-08-07.

* fix(s-d-prime): regen stale capability-reuse-auditor.md snapshots (review d079447b)

Review-iteration 1/3 of S-D′ found the snapshot gate RED: 7 PASS / 8 FAIL on
`SNAPSHOT_MODE=compare bash tests/install-sh/snapshot.sh`. The committed
fingerprints stored hash `6a8829fd…` for `agents/capability-reuse-auditor.md`
but the actual install today produces `233fb47b…` across all 8 npm-template
baselines (react-next, react-spa, react-native, ts-server × greenfield/brownfield).
The python/cargo/go baselines don't ship `.claude/agents/` and already passed.

Root cause (per review): the agent file was edited again after its snapshot was
captured in `0f183ba9f9` but before commit, and the regen was not re-run. This
stacked fix commit re-runs `SNAPSHOT_MODE=capture bash tests/install-sh/snapshot.sh`
and re-verifies:

  $ SNAPSHOT_MODE=compare bash tests/install-sh/snapshot.sh
  ✓ PASS: ts-server/{greenfield,brownfield}
  ✓ PASS: react-next/{greenfield,brownfield}
  ✓ PASS: react-spa/{greenfield,brownfield}
  ✓ PASS: react-native/{greenfield,brownfield}
  ✓ PASS: python/{greenfield,brownfield-ruff,brownfield-sgconfig}
  ✓ PASS: cargo/{greenfield,brownfield-clippy}
  ✓ PASS: go/{greenfield,brownfield-golangci}
  Result: 15 pass / 0 fail

Diff is a pure one-line hash swap per fingerprint file — no path additions or
removals (verified: each diff is exactly the `6a8829fd… → 233fb47b…` line for
`.claude/agents/capability-reuse-auditor.md`). The other two host-verify gates
are unchanged and still green:

  $ npx tsx scripts/render-rule-index.mjs --check
  ✓ rule-index up-to-date
  $ npx tsx scripts/render-rule-channels.mjs --check
  ✓ rule-channel matrix up-to-date: 40 verdicts, 0 undeclared refusals

Stacked rather than amending `0f183ba9f9` per CLAUDE.md `git-conflict-merge-forward`
— force-push is permission-classifier-blocked for agents in every form, so an
amend of a published PR-branch commit is a dead end.

Not a capability commit (snapshot regen only) — Prior-art trailer skipped per
the snapshot-regen escape hatch in CLAUDE.md `Prior-art: trailer syntax`.

* fix(s-d-prime): correct stale §4.1/§4.2 AFTER byte counts (review e08389f4177f)

Review iteration 2 found the §4.1 AFTER column carried predicted values
authored in commit e1eb0bab99 that diverged from the actual agent sizes
authored in commit 0f183ba9f9; the map was never reconciled.

Corrected cells (verified via `wc -c` at HEAD):
- capability-reuse-auditor: 6,886 → 7,854 B (delta −1,805 → −837)
- dispatch-input-checker:   9,940 → 10,922 B (delta −2,529 → −1,547)
- adapter-jig-reviewer:     8,430 → 8,439 B (delta −4,637 → −4,628)
  — 9-byte pre-existing typo NOT in the finding, but forced: the finding
    requires the §4.1 TOTAL row to be accurate, and leaving adapter-jig at
    8,430 would make rows sum to 61,142 while true `wc -c` sum is 61,151.
- §4.1 TOTAL: 59,192 → 61,151 B (delta −18,524 → −16,565, −24% → −21%)
- §4.2 trim cells/percentages updated for the three rows above.

§4.1 AFTER column now sums to 61,151 (matches TOTAL); delta column sums
to −16,565 (matches TOTAL). Grep confirms zero remaining stale values.
No agents/*.md, rules, or snapshots touched — render-rule-index and
render-rule-channels gates re-confirmed green.

* fix(s-d-prime): restore plugin/agents/compliance-verifier.md twin parity

Task 6 rewrote agents/compliance-verifier.md but not its byte-identical
plugin twin, breaking the drift guard at
packages/core/principles/24-plugin-manifest-integrity.test.ts arm (d)
("every plugin/agents/*.md is byte-identical to its agents/ source").

Copied agents/compliance-verifier.md over plugin/agents/compliance-verifier.md
(exact bytes).

PERMITTED-FILES DEVIATION (forced): plugin/agents/ sits outside the kickoff
§2 allowlist. The edit is not optional — the principle-24 twin invariant makes
the plugin copy a mechanical consequence of the allowlisted agents/ edit, and
leaving it out ships a RED principle test. Flagged in the PR body as a forced
deviation, not a scope expansion.

* fix(s-d-prime): replace stale line-number anchors with section anchors

Task 6's reflow moved dispatch-input-checker.md's verdict grammar from :121
to :111 and its verdict rule from :134 to :124, leaving 10 citations in 7
sibling agents (and one in the spec's §4.2 row) pointing at the wrong lines.

Fixed by anchoring on the stable section heading instead of a line number:
"dispatch-input-checker.md §Output grammar" (the heading at :108 owns both the
DISPATCH-INPUT block and the K1/K2/K5→STOP, K3/K4→REVISE verdict rule), so the
citation survives any future reflow of that file.

Sites: adapter-jig-reviewer:25, backward-sweep-auditor:21,88,
capability-reuse-auditor:22,74, compliance-verifier:17,131,
docplan-auditor:24,103, fidelity-auditor:30, dispatch-input-checker:31
(its own "at line 121" self-reference), spec §4.2 dispatch row.

plugin/agents/compliance-verifier.md re-copied in the same commit to keep the
principle-24 arm (d) twin invariant green (forced permitted-files deviation,
see the previous commit's rationale).

* fix(s-d-prime): restore two antecedents the slimming pass dropped

adapter-jig-reviewer (T-AJ-A): the trap paragraph kept "cite the real lane"
but dropped the verdict mapping, leaving the reader without the consequence.
Restored: an arm wired to the fixture but never exercised against the real lane
is theatre → flag it INSUFFICIENT.

fidelity-auditor (single-block invariant): "the gate rejects both appended-block
shapes" had no antecedent after the trim — the two shapes are now named again
(an appended `skipped` neutralising a recorded REVISE; an appended `GO` shadowed
by the round-1 REVISE above it), and the load-bearing consequence is restored:
every line of the block, including the `Evidence:` file:line, must sit inside
the section, because hasEvidence() scans only within the section bounds
(packages/core/hooks/checks/pr-body-fidelity.ts:113,121-122).

* fix(s-d-prime): align liveness fixture with the agent's GO-form summary

tests/fixtures/shipped-agent-liveness/compliance-verifier.md:54 modelled a
tool-less RED response using the old "§1.7 Forward-check: PASS" summary shape.
agents/compliance-verifier.md now emits GO/REVISE tokens
("- Forward-check: GO | REVISE (N issues)"), so the fixture's RED marker no
longer mirrored any output the agent can produce. Updated to the current
GO-form line; the marker's point (a confident verdict with no tool call) is
unchanged.

* fix(s-d-prime): re-derive every token figure as a band + correct the S-L quote

Three numeric defects, all pointing the same direction (understated cost):

C4 — §0.3 misquoted the S-L band as "2.62-3.43 cp/tok for dense tables,
3.43-4.00 cp/tok for Cyrillic": both endpoints and the direction were wrong.
The true operative bands (s-l §1.2, :100-101) are bytes 1.835-3.416 B/tok and
codepoints 1.835-3.128 cp/tok, with dense ASCII pipe-tables at the LOW end and
Cyrillic-rich prose at the HIGH end. The §1.3 unit-binds-to-channel rule is now
stated, and the §0.3 table's uniform "@ 3 cp/tok" point estimates are bands
with their unit named. skill_listing is relabelled MEASURED, not converted.

C3 — every "@ 4 B/t" figure re-derived as a band (bytes / 3.416 floor to
bytes / 1.835 ceiling): the two injectors (~515-959 / ~546-1,017), CLAUDE.md
(~6,617-12,319), and the three Tier-0 rules. Where S-L §1.1 measured the exact
file on a live /context read, the measured value is quoted alongside the band
(build-first-reuse-default 4,800 tok at :55; attention-is-not-a-mechanism
1,100 tok at :54).

C3 (ordering) — §3.1's "the Tier-0 swap is the fourth lever, not the first" is
OVERTURNED by the re-derivation and is withdrawn in place. At the corrected
band build-first-reuse-default.md is the SECOND lever (4,800 tok measured,
band floor 3,708 at or above every harness block's ceiling); only skill_listing
(8,870) is larger. The no-swap outcome is kept, but the ranking is now stated
honestly and carries an explicit DECISION-NEEDED (operator) marker: firing the
Tier-0 swap is a channel re-scope decision reserved to the operator per kickoff
§3a. Reasons (2) and (3) — not the falsified size argument — now carry it.

C2 — "~53 KB per session" (§0.4 and the §2.1 cost cell) resurrected the figure
its own cited source corrected. Replaced with the measured ~17.3 KB/session
(s-h :352-361); the ~53 KB estimate assumed per-turn firing and was overstated
~3×. The "~12× the P5a lever" ratio in the same cell was re-checked and DOES
survive: numerator and denominator are both bytes/4 x residency, so a common
divisor cancels (s-l §1.6 "band-invariant"). Under per-content divisors it
moves upward (~17x), so ~12x is restated as a floor, not a point.

* docs(s-d-prime): 18-file agents census, S-E link repair, reclassification stub

I4 — §4.1 now carries the complete `ls agents/*.md` census (18 files, T10
enumeration before T1 sampling): the 8 in-scope review seats, the 3
maintainer-owned files, and the remaining 7 each with a read-the-header reason
for exclusion. memory-codification-auditor gets an honest classification (it IS
an auditor with a verdict; it is out because its subject is the user-scope
memory store, not a PR/diff, and it is a @dual-pair twin of
.claude/hooks/inject-memory-codification.sh) rather than a wave-off. A boundary
note records that the four largest agent files (16-24 KB) are all out of scope,
so this stage's −21% does not touch the heaviest prompts in the tree.

I5 — §9 links repaired: `../research-patches/…` resolved to nothing from
docs/superpowers/specs/ (correct prefix is `../../meta-factory/research-patches/`),
and `2026-08-07-s-e-*.md` was a literal glob matching no file. S-E (#1237)
shipped no research patch: the §0.2 instrument IS scripts/measure-always-on.sh,
with its overlay/observability semantics in the two 2026-08-06 S-E verdict
patches. All three cited by real path.

I3 — §6 gains the reclassification mechanics the three deleted "Revisit
criterion" blocks used to carry (install.sh SHIPPED_DOCS + principle-09
REQUIRED_HEADER_DOCS, drop the setup.d/20-agents.sh:28-30 skip-loop line, regen
fingerprints), so prior-art-evaluations.md #195's Trigger-to-revisit no longer
dangles.

M1 (spec half) — the adapter-jig-reviewer restoration trigger named "a F1-F11
dimension", an arm set the agent does not have; replaced with its real eight
conformance groups (A1-A2 / B1-B3 / C1-C4 / D1-D3 / E1-E3 / P1 / G1-G3 / H1-H3).

§4.1/§4.2 BEFORE→AFTER byte counts refreshed against the current files after
this review round's agent edits (TOTAL 77,716 → 61,774 B, −15,942 B / −20.5%).

* chore(s-d-prime): regen install fingerprints after the review-round agent edits

Mechanical regen (SNAPSHOT_MODE=capture bash tests/install-sh/snapshot.sh).
The four shipped agents this round touched — capability-reuse-auditor,
compliance-verifier, docplan-auditor, fidelity-auditor — changed content
(section anchors, restored antecedents), so their hashes move in all 8 npm
baselines. No file added or removed; only hash lines change.

* fix(s-d-prime): r2 delta-review — band-floor overclaim, 6903 ceiling, -20.5% residue

Round-2 narrow delta review (cold seat) found the strengthening claim at
§3.1 falsified by the table 12 lines above it: the hook injects' band
ceiling (3,735) exceeds build-first-reuse-default's band floor (3,708),
so '#2 rank' rests on the MEASURED 4,800, not band separation — restated.
Rounding: 12667/1.835 = 6902.997 -> 6,903 (3 sites). Prose residue -21%
aligned to the table's -20.5%.

* fix(s-d-prime): de-link the plugin-context-broken See-also ref + regen fingerprints

From plugin/agents/ the relative link ../.claude/rules/phase-research-coverage.md
resolves to plugin/.claude/rules/ which does not exist; the diff-scoped
dead-link pre-push gate rescans the byte-identical twin on this push and
fails. Converted to a code-span (the same file's lines 44/91 form). Twin
re-copied (principle 24 arm d), 8 npm-stack fingerprints recaptured.

---------

Co-authored-by: Test <test@example.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant