arch-v2 S-E: L1 budget gate + config-assertion asserts + InstructionsLoaded verification (fidelity GO — round 4) - #1237
Conversation
… S-E P3b) Filter .claude/rules/*.md entries lacking ^paths: frontmatter (the scripts/probe-channels.sh:20 predicate — one bash idiom, two consumers) so path-scoped rules are no longer counted as resident. Fixes the ~8× over-count: 400,919 B → 48,671 B (calibration neighbourhood ≤ 50.2 KB per spec §1.6 FORK D, post-S-G tree). ai-laziness-traps.md (paths-scoped in S-G) is no longer listed as resident. Apply the project .claude/settings.json claudeMdExcludes list (the **/<name>.md form, P1 form per PR #1223) via bash-native case matching. 7 excludes applied; 12 → 5 resident files after both filters. OVERLAY VERDICT — PARKED per kickoff §1 item 4 binding instruction ("PARK if the docs contradict the replace model"). The kickoff's "REPLACE-PER-KEY overlay" model is contradicted by primary docs (https://code.claude.com/docs/en/settings — "scalar values from higher-priority scopes override and arrays concatenate"; arrays concatenate, not replace). Local-overlay handling parks pending spec/docs reconciliation. The verdict research-patch carrying the primary-source citations lands in Task 5. Effective overlay source = project only, named on stderr ("overlay_source=project"). Stderr diagnostic: overlay_source + resident_count + excluded_count + excludes_applied, for verbose-logging visibility (plan §Settings). Self-check acceptance per kickoff §3: $ bash scripts/measure-always-on.sh | jq -e '[.sources[].path] \ | index(".claude/rules/ai-laziness-traps.md") == null' true # PASS (was: false pre-fix) Inline comment names packages/core/principles/rule-channel-glob.ts as the semantic owner of the channel predicate (S-G-owned; not edited here — outside §2 permitted set). Stage S-E §2 permitted surface: scripts/measure-always-on.sh only.
…nv ceilings (arch-v2 S-E P3a)
scripts/check-alwayson-budget.sh — derived ceiling 54,000 B (post-P3b baseline
48,671 B × 1.10 = 53,538 B → rounded UP to next 1,000 B). Per-environment
labelled comments next to CEILING=:
- aif-container: 54,000 B — derived 2026-08-06 from baseline at HEAD
(bash scripts/measure-always-on.sh total_bytes = 48,671 B after the
membership-predicate fix in the previous commit). Calibration
neighbourhood ≤ 50.2 KB per spec §1.6 FORK D — landed inside.
- host-cc: UNMEASURED — baseline not reachable from the container;
S-H's host session supplies it (operator overrides AIF_ALWAYSON_CEILING).
Declared-coverage comment (N2 label, verbatim per kickoff §1 item 3):
gate sees repo-authored always-on set only — 29,589 tok (aif-container) /
39,021 tok (host-cc) against ~100k session-start total → 29-39%
(2026-07-26-session-start-token-attribution.md:214-218). Remaining 60-71%
is harness-resident, addressed by P14 in S-H, never by this gate.
Escape hatch (§3, per ci-tool-pinning.md §3 precedent): AIF_ALWAYSON_BUDGET_ALLOW
env with rationale ≥20 chars downgrades RED to WARN. Rationale length gates
the escape so a bare "TODO" cannot skip the gate.
packages/core/hooks/pre-push.ts — new section alwaysonBudgetSection()
(inline — no new relative import, so principle 27 copylist stays green; a new
import would have required editing install.sh:874 + setup.d/50-hooks.sh:26,
both outside §2 permitted set). Registered in SECTIONS with
owner: 'maintainer' (ceiling is framework-derived; consumer layout has its
own CLAUDE.md). PREPUSH_ONLY=alwayson-budget seam added for test isolation.
.github/workflows/audit-self.yml — new job alwayson-budget mirrors the
pre-push gate in CI. Runs on every push (resident set is repo state, not
per-commit). Bash + jq only — no setup-node (gate is pure shell).
Acceptance TRIPLE (quoted in PR body):
(1) BEFORE: bash scripts/check-alwayson-budget.sh
→ DRIFT: always-on context 400919B exceeds ceiling 101000B, EXIT=1.
(2) AFTER: bash scripts/check-alwayson-budget.sh
→ OK: always-on 48671B within ceiling 54000B, EXIT=0.
(3) DISCRIMINATION (red-then-green only if Task 1 actually fixed the
membership predicate): temp .claude/rules/z-…fixture.md sized at
6,378 B (> 5,329 B headroom = 54,000 − 48,671):
- WITHOUT paths: frontmatter → DRIFT 55049B > 54000B, EXIT=1.
- WITH paths: frontmatter → OK 48671B, EXIT=0.
Fixture removed before commit.
Escape-token pair:
- AIF_ALWAYSON_BUDGET_ALLOW='TODO' AIF_ALWAYSON_CEILING=1000
→ DRIFT 48671B > 1000B, EXIT=1 (short rationale rejected).
- AIF_ALWAYSON_BUDGET_ALLOW='temporary overage during X on date Y' AIF_ALWAYSON_CEILING=1000
→ WARN 48671B > 1000B — escaped: temporary overage during X on date Y, EXIT=0.
Principles 27 (copylist) + 32 (section-owner floor ≥18; SECTIONS now 26)
stay GREEN. Principle 14 fails on .claude/skills/aif-docs/SKILL.md
broken refs — pre-existing at HEAD, unrelated to this change (verified via
git stash + re-run).
Stage S-E §2 permitted surface: scripts/check-alwayson-budget.sh,
packages/core/hooks/pre-push.ts, .github/workflows/audit-self.yml.
…pin + SSOT #238 (arch-v2 S-E P2a) Adds packages/core/principles/34-claudemd-excludes-liveness.test.ts: a BEHAVIOURAL principle test (not form-proxy) that, for every entry in the committed .claude/settings.json claudeMdExcludes list, picomatch.isMatch's it against every regular file in the repo tree (absolute paths, {dot:true} so .claude/... paths are reachable). Any entry matching 0 files FAILS naming the entry. NO prefix-form check — the **/<name>.md glob form (the live P1 form) works via picomatch semantics, not a normaliser. Includes paired-negative N34-1 (mirrors principle 31/35 N31/N35 pattern): a fixture entry '**/nonexistent-fixture-entry-zzz-n34-1.md' MUST make the check RED — proves the test catches the inert-entry defect class. A test that passes on BOTH the live form AND an inert fixture is T-SE-A theatre. Capability commit: pins picomatch@^4.0.4 in packages/core/package.json devDependencies + appends SSOT row #237 in the SAME commit. Pin lands in packages/core (NOT repo root) per spec §1.6 — the principles suite runs as `npm --prefix packages/core run test:principles`, and the root carries a different picomatch major (2.3.2). The explicit pin prevents transitive- matcher semantics drift: the unpinned transitive at packages/core level (4.0.4, pulled in by vitest/eslint) could be swapped by an upstream dep bump without our knowledge. Prior-art: prior-art-evaluations.md#238 (picomatch ADOPT verbatim — IS the matcher the shipped CC client bundles; pin prevents transitive-matcher semantics drift).
… (arch-v2 S-E P2b)
Adds localShadowClaudeMdExcludesSection() inline in packages/core/hooks/pre-push.ts
(arch-v2 S-E P2b). If .claude/settings.local.json sets claudeMdExcludes, its
picomatch match-set (over repo files, {dot:true}) must be a SUPERSET of the
project list's match-set. Under REPLACE-PER-KEY overlay semantics (verified
2026-08-06 vs https://code.claude.com/docs/en/settings — see Task 5
research-patch), a local list that is a strict SUBSET silently drops excludes.
Registered in SECTIONS array as 'local-claudemd-shadow' (owner: 'maintainer' —
host-only channel, file is gitignored, CI cannot see it). PREPUSH_ONLY seam
added for isolated testing. Escape hatch: AIF_CLAUDEMD_LOCAL_SHADOW_ALLOW env
with rationale >=20 chars (precedent: ci-tool-pinning.md §3).
Discrimination pair (acceptance rev 5 — the rev-4 kickoff declared no
criterion for this item):
SUBSET (6 entries, missing egress-no-api-bypass.md) -> RED, EXIT=1, names
the missing file
SUPERSET (all 7 entries) -> GREEN, EXIT=0
Both quoted in the PR body. The escape boundary also verified: <20-char
rationale still RED, >=20-char rationale downgrades to WARN+green.
Also UN-PARKS Task 1's overlay half (P3b): scripts/measure-always-on.sh now
applies the EFFECTIVE list (local if it sets the key, else project) per the
verified REPLACE-PER-KEY semantics. Header updated to record the verdict
(prior OVERLAY-VERDICT PARK note removed). Meter output unchanged on this
host (.claude/settings.local.json carries no claudeMdExcludes key here).
Forward-fix to Task 3 (P2a): adds // @ts-expect-error on the picomatch import
in packages/core/principles/34-claudemd-excludes-liveness.test.ts (picomatch
4.x ships no types, no @types/picomatch exists). Same annotation added to
pre-push.ts picomatch import. Without this, the typecheck CI gate would fail.
…cludes overlay verdicts (arch-v2 S-E P3c) Two primary-docs verdicts required by the S-E plan: 1. 2026-08-06-instructionsloaded-observability-verdict.md (P3c, ADR-3 falsifier): InstructionsLoaded CAN OBSERVE the loaded set (5 load_reason values cover the full surface) but CANNOT BLOCK (exit code ignored regardless of value). The ADR-3 channel choice (gate at pre-push/CI, not session-start) is CONFIRMED by the blocking-negative. Observability makes it a viable channel for the S-H host-side measurement work (per spec §1.6 FORK C); S-E does NOT run a live host probe (T-SE-B). 2. 2026-08-06-claudemd-overlay-semantics-verdict.md (P3b binding instruction "PARK if docs contradict replace model"): REPLACE-PER-KEY CONFIRMED per https://code.claude.com/docs/en/settings verbatim. The earlier conclusion in this session (arrays concatenate) was based on a misreading of the managed-settings drop-in paragraph — that language applies to managed-settings.d/*.json specifically, NOT to settings.local.json. claudeMdExcludes is NOT in the documented merge-exception list (permissions, AllowedHttpHookUrls). Task 1 overlay half UN-PARKED; Task 4 superset assert IS load-bearing.
…taging drift, not S-E's The pre-push synth-bundle drift check went RED on this branch's first host push. The drift is NOT introduced by the S-E stage work and is attributed here so it is not mistaken for it: - The bundle committed on this branch is byte-identical to the one on origin/staging (verified before rebuilding). - The S-E commits touch no synth/wire source — `git diff origin/staging...HEAD --name-only | grep -iE 'synth|wire'` is empty. - Rebuilding in a lock-faithful tree still changes the file, so plain staging drifts the same way. S-E is merely the first branch in a while to touch `packages/core/**`, which is what makes the path-scoped gate look. What actually changed: the bundle inlines `semver`, and the committed artifact carries an `isPrereleaseIdentifier` block that the installed semver no longer has. Root `package-lock.json` and the installed tree agree at semver 7.7.4 (`grep -rn isPrereleaseIdentifier node_modules/semver/` → no hits), so the FRESH build is the lock-faithful one and the committed artifact was the stale side. 395,155 B → 394,474 B. Two consecutive fresh builds are byte-identical, so this is a deterministic regeneration, not a machine-specific artifact. Kept in this PR rather than split into its own: the gate demands the regen before this branch can leave the host at all, so it is a prerequisite of the agreed work, not a drive-by (CLAUDE.md `PR strategy`). Prior-art: skipped — deterministic regeneration of a generated build artifact, no new capability, no dependency change.
…ths, tracked tree, required gate, doctor arm The cold fidelity audit at the egress boundary returned STOP. All four load-bearing findings were independently reproduced before being fixed. BLOCKER-1 — principle 34 matched RELATIVE paths while the CC client (and the kickoff) match claudeMdExcludes against ABSOLUTE ones. That is not a convention difference: it makes the historical broken form self-matching, so the check reported 0 dead entries for exactly the defect class it exists to catch. Probed: abs vs '**/name.md' -> true abs vs '.claude/rules/name.md' -> false <- the discriminating case rel vs '.claude/rules/name.md' -> true <- why the old test was blind The enumerator now emits absolute paths, and the mandated FAIL leg from the kickoff §3 ships as N34-1a: the LIVE committed list rewritten back to the historical relative form must be dead for EVERY entry, while the live form stays matched on the same population (so the leg proves a difference, not "nothing matches"). Discrimination shown, not asserted — reverting the enumerator to relative paths turns N34-1a RED with "Live entries: 7; detected dead: 0"; restoring turns it GREEN. MAJOR-2 — both walkers (the test and the pre-push section) skipped only .git and node_modules, so they descended into the gitignored nested worktrees under .claude/worktrees/. Measured on the primary checkout: 293,450 files / 8,927 ms, versus 2,158 files / 12 ms from the tracked list. Worse than the cost, it MASKED deletions — a rule deleted from the tracked tree still matched through a stale copy in another worktree, so a dead entry read as live. Both now enumerate `git ls-files`, and the pre-push section announces a LOUD "DID NOT RUN" if git is unavailable rather than passing vacuously over an empty population. MAJOR-1 — the alwayson-budget CI job was not in ci-success's needs list, and branch protection requires only ci-success, so the gate could go red while the PR merged (#warning-nobody-reads). Added, with the reason in-line. MAJOR-3 — the worktree-doctor.sh arm named in kickoff §1 item 2 was absent. Added as a sweep: the pre-push section only ever sees the worktree you push from, while a shadowing settings.local.json is gitignored and per-worktree. The arm invokes the existing section through its PREPUSH_ONLY seam (no reimplementation, so the two cannot drift), runs each worktree's OWN copy because pre-push.ts derives REPO_ROOT from its own location, and reports an unrunnable worktree loudly instead of counting it clean. MINOR-3 — the CI job's trigger comment claimed "runs on every push ... NOT gated on pull_request"; both halves were false. Corrected. P2b's discrimination pair, which the audit could not run at its seat, is now exercised and closed: a strict-SUBSET local list exits 1 naming the fallen-through file (.claude/rules/cold-seat-economy.md); the same list as a superset exits 0. The operator's gitignored settings.local.json was restored to its original state (no claudeMdExcludes key) after the fixtures. Suite: 37 files, 352 passed / 1 skipped. host-verify 3/3 on the host. Prior-art: skipped — defect repairs to this stage's own checks, no new capability, no dependency change.
…iagnosis was wrong Corrects commit 41c2fb7, which regenerated packages/core/install/synth-and-wire.bundle.mjs and claimed the drift was pre-existing on staging. CI disproves that claim: the regenerated artifact FAILED the synth-bundle drift gate on this PR, while the same gate has been green on staging's two most recent audit-self runs. Staging's committed bundle is the CI-faithful one; mine was not. What I got wrong, precisely: I verified that root `package-lock.json` and the installed root tree agreed at semver 7.7.4 and concluded the fresh build was therefore lock-faithful. That check was necessary and not sufficient — it never tested the only thing that decides the question, which is whether a lockfile-faithful install reproduces the COMMITTED artifact. The gate's own header says the bundle is "NOT byte-reproducible across npm layouts" and "fails environment-dependently"; I read that line and still treated my machine's build as authoritative. Contributing cause, also mine: earlier in this session I ran `npm --prefix packages/core ci || npm --prefix packages/core install`, which replaced this worktree's `packages/core/node_modules` SYMLINK (the canonical shape — every sibling worktree has it, per scripts/worktree-node-modules.sh) with a real directory carrying a nested semver 7.8.1. The bundle entry resolves semver from there, so the build inlined a different copy than CI's. The symlink has been restored via the project's own helper and the principles suite is green under it (37 files, 352 passed). Unresolved and handed over rather than guessed at a third time: the committed bundle contains an `isPrereleaseIdentifier` block that appears in NEITHER semver present locally (root 7.7.4, nested 7.8.1) — so I cannot reproduce CI's bundle in this environment, and I am not able to say from here which install produces it. The local pre-push drift gate therefore cannot pass on this machine for any branch touching packages/core. That is an environment finding for the operator, not something to paper over by committing whatever my tree happens to build. Prior-art: skipped — reverts a generated build artifact to its committed state, no capability, no dependency change.
`packages/core/hooks/pre-push.ts` is shipped by the installer (install.sh:931),
so editing it in the previous commit shifted every npm-stack install fingerprint.
I did not regenerate, and CI caught it: `SNAPSHOT_MODE=compare` was 7 pass /
8 fail, all eight failures the same single hash line for pre-push.ts.
This is the mechanical follow-through the S-E kickoff already names for
`agents/*.md` edits ("regen snapshots"); the same obligation applies to any
shipped file, and pre-push.ts is one.
After regen: `SNAPSHOT_MODE=compare` → 15 pass / 0 fail.
Scope check: the only changed baselines are the 4 npm stacks × {greenfield,
brownfield}. python / cargo / go were byte-identical both before and after,
which is the expected shape — those lanes do not ship the Node pre-push hook.
Prior-art: skipped — regeneration of test baselines after a shipped-file edit, no capability, no dependency change.
…28 full pre-push suites Defuses a hazard I introduced in the round-1 fix commit. Not a rework toward a GO verdict (the fidelity cap is 2 rounds and round 2 returned STOP); this is making a dangerous artefact safe before it sits in the branch unattended. The arm invoked each worktree's OWN pre-push.ts with PREPUSH_ONLY=local-claudemd-shadow. But pre-push.ts dispatches that variable through a flat if-chain with NO default arm (pre-push.ts:1763-1794): an unrecognised value does not error, it falls through to the FULL run at :1810. Most registered worktrees sit on branches that predate this section, so the unguarded arm would have executed a complete pre-push suite per worktree — including the side-effectful `worktree-provisioning` section — and then reported any unrelated failure as `SHADOW <wt>`, a false finding about a check that never actually ran. Measured on this machine, not estimated: 29 registered worktrees carry a .claude/settings.local.json and exactly 1 has a hook that knows the section id. So the unguarded form would have mis-invoked 28. With the guard: 1 invoked, 28 announced as `SHADOW? … DID NOT RUN (its pre-push.ts predates the section)`. The precondition asks the artefact we are about to execute whether it implements the contract, rather than assuming the whole population is on this branch. Also documents the exit contract the arm extended (the header claimed exit 1 meant only "unprovisioned"): a shadowing worktree sets exit 1; a worktree the sweep could NOT check does not, because folding "could not run" into either pass or fail is the dishonest direction — it is a coverage gap and is reported as one. NOT fixed here, deliberately — both are for the operator, recorded in the PR body: the overlay-semantics PARK (the REPLACE-PER-KEY verdict rests on a mis-attributed doc quote) and the shipped-hook picomatch import, which carries an explicit DECISION-NEEDED the auditor declined to pick. Prior-art: skipped — safety guard on an operator-facing sweep script, no capability, no dependency change.
…ush` for pnpm consumers
CI proved BLOCKED-2 rather than leaving it hypothetical. The consumer-matrix pnpm
cell reproduced it end to end:
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'picomatch' imported from
/tmp/consumer-matrix-pnpm.../consumer/packages/core/hooks/pre-push.ts
error: failed to push some refs
pre-push.ts ships verbatim to consumers (install.sh:929-938), and its ship-list
comment warns about exactly this: a missing entry crashes the hook with
ERR_MODULE_NOT_FOUND before any gate runs (#735). `.husky/pre-push` only probes
for tsx before exec'ing the hook, so there is no fallback — the consumer simply
cannot push. It looked safe only under flat npm, where vitest happens to hoist
picomatch@4.0.4; pnpm's isolated layout does not resolve an undeclared package.
Fix is Option A of the round-2 DECISION-NEEDED, and it stays inside §2's permitted
set: `picomatch` is no longer imported at module scope. The one section that needs
it — local-shadow claudeMdExcludes, which is maintainer-only AND host-only — now
lazy-loads it behind `await import()` + `die()`, the same shape guard-liveness's
ESLint stack already uses in this file. The auditor declined to pick between
Option A and Option B, correctly, while the failure was still theoretical; the CI
run removes the ambiguity — B (widening §2 to the installer/dep surface) is not
needed to make the branch correct, and A fixes a demonstrated consumer breakage.
Verified, not assumed:
* no top-level bare `import ... from 'picomatch'` remains;
* the hook module loads in a consumer-shaped dir where picomatch does NOT
resolve (the previous crash no longer occurs);
* the section still discriminates — a strict-SUBSET local list exits 1 with the
STRICT SUBSET banner;
* the operator's gitignored settings.local.json was restored (no
claudeMdExcludes key) after the fixture.
Install fingerprints regenerated again, since pre-push.ts is shipped:
SNAPSHOT_MODE=compare → 15 pass / 0 fail. Suite: 99 files, 1401 passed / 1 skipped.
Note on the fidelity cap: this is not a third fidelity round. Round 2 stands at
STOP and BLOCKED-1 (the overlay-semantics PARK) is untouched and still the
operator's call. This commit only clears a red CI check whose failure mode is a
consumer that cannot push.
Prior-art: skipped — converts an existing static import to the repo's established lazy-load pattern, no new capability, no dependency change.
BLOCKED-1 resolved against the shipped client: overlay semantics are MERGE, not REPLACE — P2b is dead machineryRound 2 flagged that the REPLACE-PER-KEY verdict rested on a mis-attributed docs quote and that the kickoff's PARK was not honoured. That is now settled — not by a better docs citation, but by reading the client that actually runs. EvidenceSource: the installed binary // fold order over settings sources
_1 = ["userSettings","projectSettings","localSettings","flagSettings","policySettings"]
// source → file mapping
GQ(): projectSettings → .claude/settings.json ; localSettings → .claude/settings.local.json
// Soi() folds each source in through a lodash-mergeWith-shaped call with `ipe` as customizer
Soi(): n = eie(n, sourceSettings, ipe)
function ipe(e,t,r){
if(Array.isArray(e)&&Array.isArray(t)){
if(r==="fallbackModel") return t; // ← the ONLY replace-on-conflict key in the client
return WSm(e,t);
}
return;
}
function WSm(e,t){ return Mo([...e,...t]) }
function Mo(e){ return [...new Set(e)] }Array settings UNION with dedupe across settings files. The binary's own schema text for the key says nothing about non-merging either: "Glob patterns or absolute paths of CLAUDE.md files to exclude from loading. Patterns are matched against absolute file paths using picomatch. Only applies to User, Project, and Local memory types." Consequence — P2b cannot fireUnder union, the effective list is always Decision — PARK honoured, P2b removedMaintainer decision (2026-08-07): remove, per the kickoff §1 item 4 PARK instruction. Rationale beyond tidiness: a gate that cannot fire is worse than an absent one, because it advertises that the always-on budget is being guarded when it is not. Surface list — CORRECTED. The first version of this comment listed only the surfaces that
Verified clean: no CI job guards P2b. The only The root inversion, for the recordThe spec did not merely guess wrong — it overruled a correct draft.
The union model was written down first and correct, then changed because it contradicted the gate BLOCKED-2 becomes moot
Confidence and falsifierFalsifier: a client ≥2.1.211 whose Not verified empirically. Not load-bearing today, but worth stating: the host's Side correction to an earlier claimThe normaliser Residual risk this removal does not coverUnder union the real hazard is the inverse one: a local file can silently ADD excludes and hide rules the project expects to be always-on. If that deserves a gate, it needs its own direction and its own justification — not a re-pointing of P2b mid-stage. |
… so the assert was unreachable P2b guarded the case where a local `.claude/settings.local.json` list is a strict SUBSET of the project list and silently drops excludes. That case cannot occur: the shipped client unions array settings across settings files, so the effective list is `project ∪ local` and the superset assert holds by construction. Read from the installed binary (`claude.exe` v2.1.207, commit bc512d563325; `strings -n 8` + grep, every symbol resolved): _1 = ["userSettings","projectSettings","localSettings","flagSettings","policySettings"] Soi(): n = eie(n, source, ipe) // lodash-mergeWith shape, `ipe` = customizer ipe(e,t,r): arrays → r==="fallbackModel" ? t : WSm(e,t) WSm(e,t) = Mo([...e,...t]); Mo(e) = [...new Set(e)] `fallbackModel` is the sole replace key, which is exactly what `settings.md:278` documents. Scope precedence orders the fold (local wins for scalars) — it does not make arrays replace. This is the contradiction kickoff §1 item 4 instructed the stage to PARK on; the PARK fired. Removed: the `local-claudemd-shadow` pre-push section, its registry entry, its PREPUSH_ONLY arm, the `AIF_CLAUDEMD_LOCAL_SHADOW_ALLOW` escape token, and the `worktree-doctor.sh` sweep. `measure-always-on.sh` now applies the union (deduped) instead of local-replaces-project. Side effect — the prior round's BLOCKED-2 dissolves rather than being answered: picomatch was referenced in pre-push.ts only by this section, so the shipped hook no longer imports it at all and neither the static import nor the lazy-load workaround is needed. `6ec05c0f0d` stays in history as the record of the pnpm-consumer crash. The `packages/core` picomatch pin and SSOT #238 are KEPT — principle 34 (P2a) imports picomatch directly and is independent of P2b. Verified on the host: principles 37 files / 352 passed | 1 skipped (unchanged from the pre-removal baseline); `tsc --noEmit` clean; `bash -n` clean on both scripts; host-verify 3/3; budget gate `OK: always-on 48671B within ceiling 54000B`. Meter fixtures exercised against a backed-up-and-restored (md5-verified) local settings file: local adds a new pattern → `overlay_source=project+local excludes_applied=8`; local duplicates a project pattern → `project+local excludes_applied=7` (dedupe); local as a strict SUBSET → resident set and 48671 B unchanged, i.e. no project exclude is lost — the hazard P2b existed to catch. That last fixture demonstrates the METER's behaviour; the claim about the CLIENT rests on the source reading above. Docs corrected in place rather than deleted (T18): the overlay verdict patch now records MERGE with its evidence and falsifier, spec §1.6 FORK D records that the rejected `project ∪ local` draft was right, the S-E kickoff records the PARK against the original task text, and the InstructionsLoaded patch drops its stale P2b cross-reference. Prior-art: skipped — removal of an existing gate plus doc corrections; no new capability, no new dependency, no new module. The retained picomatch pin keeps its original SSOT #238 row.
…record the fork as answered Round 3 (REVISE, SHA e94be1e) verified the removal's premise independently at the binary and returned REVISE on the ROUTE, not the answer. Each finding is addressed below; none is argued away. MAJOR (self-taken disposition) — kickoff §3a routes a fired fork to the operator, and the annotation read "PARKED AND REMOVED … Do not re-open", which is the foreclosing shape §3a exists to prevent. The fork WAS surfaced and the operator chose, but the artefact did not say so. Now it does: both options are stated with their consequences, the choice is attributed to the operator with its date, and Option B (re-point at the inverse hazard) is explicitly NOT foreclosed — it is real, claimed by no stage, and needs its own item. MAJOR (spec half-corrected) — the previous commit corrected §1.6 FORK D but left the spec's PRIMARY statement of the deliverable intact, so a later stage reading §2 would have rebuilt P2b from a document that contradicted itself. `docs/superpowers/specs/2026-08-06-pipeline- token-economy-design.md:323-332` now strikes §2 assert 2 with a WITHDRAWN note pointing at the evidence, and the §3 routing row at :360 scopes P2 to "§2 assert 1" instead of "asserts 1-2". This was the same prose-vs-identifier miss that the round-2 sweep hit: the identifier grep found FORK D and missed the two places that state the requirement in words. MINOR (half-removed surface) — `relative` and `execFileSync` arrived with the P2b section and survived its removal with zero call sites; no `noUnusedLocals` catches them. Dropped from `packages/core/hooks/pre-push.ts:33-34`. `dirname` is still used and stays. NOT fixed here, deliberately: the umbrella kickoff's stale S-E deliverable line (`.claude/orchestrator-prompts/arch-v2-context-pipeline/kickoff.md:251`) — outside §2's permitted-files allowlist, and the round flagged it as an observation for exactly that reason. Fixing it would repeat the allowlist deviation rather than resolve it. Verified: principles 37 files / 352 passed | 1 skipped; `tsc --noEmit` clean after the import removal; host-verify 3/3; install fingerprints regenerated for the pre-push.ts edit. Prior-art: skipped — rework absorbing a cold-audit round; doc corrections, an import sweep and a provenance annotation. No new capability, dependency or module.
…allowlist intent-artefact hunks Round-4 cold seat (REVISE, sole repeat MAJOR): the kickoff and the design spec were edited by the graded session, and neither file is in the kickoff §2 permitted set (kickoff.md:167-180). Both files restored to their merge-base content, so this PR's 3-dot diff no longer touches either. Nothing is lost: the P2b disposition record already lives verbatim in the permitted channel — docs/meta-factory/research-patches/2026-08-06-claudemd-overlay-semantics-verdict.md:123-131. The W-4 design-SSOT consistency correction lands as a separate spec-owner commit outside this stage PR (watch-list W-9). Prior-art: skipped — doc-only restore of out-of-allowlist annotation hunks to merge-base content; removes content from the PR, adds no capability
…e — owner commit per S-E fidelity r4 / W-9 (#1252) FORK C/D disposition annotations, §2 assert 2 struck through + WITHDRAWN with the binary-derived evidence pointer, §3 P2 routing row rescoped to '§2 assert 1'. Content is the exact W-4-consistent state the round-4 cold seat verified CLEAN (all four statement sites consistent); it may not ride the S-E stage PR #1237 because the stage kickoff §2 permitted-files set names neither the spec nor the kickoff (round-3/round-4 MAJOR extra, watch-list W-9: the conformant shape is a separate spec-owner commit). Prior-art: skipped — doc-only design-SSOT annotation recording an already-made decision; no new capability Co-authored-by: Test <test@example.com>
Merge-forward from staging brought #1237 (S-E) in, and that falsifies a claim this branch made twice: that the "before S-D′" deadline was real but not binding "since S-D′ is blocked on the two-gate S-E + S-H and S-E is unmerged". Both gates are now closed — S-H #1239 at 2026-08-07T00:06Z, S-E #1237 at 2026-08-07T09:39Z — verified with `gh pr view --json state,mergedAt` rather than read off the umbrella prose, which still described the pre-merge state. S-D′ is dispatchable today, so S-L is on the critical path, and a dispatcher reading s-d-prime/kickoff.md:305 would find "the remaining gate ... is the two-gate S-E + S-H dependency alone" satisfied and dispatch against a falsified conversion. The Option A call from the previous commit stands — re-declaring the umbrella's named two-gate form across eight sites is still a structural change with an owner, and still out of scope here. What changes is urgency, not scope: the S-D′ row now carries the both-gates-satisfied warning inline, and the PR's DECISION-NEEDED 1 is a live footgun rather than a hypothetical one. Prior-art: skipped — factual correction of an ordering claim plus its coordination-row surfacing, no new capability.
…red) + the kickoff it unblocks (#1255) * arch-v2: S-L recalculation stage — the #5-C measurement + the kickoff it unblocks The S-H work shipped three open forks (#4 conversion constant, #5 remainder channel, #6 denominator) whose resolutions all move the same numbers. #5's Option C was a measurement rather than a vote; it is run here, and it changes what the recalculation stage has to do. Measurement (docs/meta-factory/research-patches/2026-08-07-s-l-5c-first-turn-vs-context.md): one seat, `/context` as the first message, then the first billed turn — both halves, same seat, in the required order. Four session-root transcripts in one worktree, all sharing an identical cache_read prefix of 22,367, so the deltas are differences with everything else held byte-constant. The addendum's named falsifier FIRED. The ~30.8k gap was hypothesised to be dispatch-prompt content; measured, the `/orchestrator` injection is 13,523 tok (44% of it), and two bare-prompt seats reproducing 75,496 exactly still show a 16,196-token gap against a `/context`-reported 59.3k with no dispatch prompt present at all. The residual is seat-constant and dominated by harness-injected session-start payload, which also reopens the DIRECTION of the addendum's §8.5 (if `/context` omits genuine recurring seat cost, it under-reports rather than by-difference overstating). Routed to S-L, not decided here. Second, independent falsification of flat-constant conversion: a dense markdown table measured 1.83 B/token, below the 2.37-3.32 spread S-H recorded. Fork #4 = Option A in its per-seat form is re-confirmed, and 2.62 is explicitly not the replacement — it would have mis-priced that block by 43%. S-L kickoff: applies #4 per-seat at every consuming site (BYTES_PER_TOKEN=4 is live, five consumers), designs the #5 re-labelling from scratch, runs the residual decomposition, and re-adjudicates ADR-3's band to close #6. Tier 2, no marker, host-bound. Recorded as a third gate on S-D′, which ranks levers by the P14 price list — a falsified conversion falsifies the ranking. The merged S-H patches are untouched: corrections land as a new patch plus annotations, per the Artifact Ownership Contract. Prior-art: skipped — measurement plus a stage kickoff over existing S-H outputs, no new capability, no dependency and no packages/ file. * arch-v2: record S-L's ordering as an open question, not a third gate Self-correction to the previous commit, caught by running the backward sweep for the class "a new stage is added to a live umbrella" instead of recalling it. That commit rewrote S-D′'s Depends-on cell from the two-gate `S-E + S-H` form to a three-gate `S-E + S-H + S-L`. The sweep found the phrase is load-bearing in eight places outside that cell: umbrella `:237`, `:371` and §3 (which DEFINES "the two-gate form" as a named pattern), four statements in the just-merged s-d-prime/kickoff.md rev 6 (`:1`, `:106`, `:305`, `:355` — the last three saying the two-gate dependency is the ONLY remaining gate), and the spec's "S-D′ after S-E + S-H" at `:410`. Editing one cell to three-gate while those stand contradicts the umbrella's own Ordering statement ("table and prose agree"), and sweeping all eight is a structural change to a named pattern with an owner — out of scope for a PR whose job is to author one kickoff (CLAUDE.md PR strategy). So: the cell returns to two-gate and carries the constraint as an explicit open question; the S-L section states why it is recorded rather than enforced; the promotion is surfaced as DECISION-NEEDED for the operator. The constraint itself is unchanged and still stated in S-L's own kickoff — what changes is that this PR no longer pretends to have decided it. Prior-art: skipped — correction to a coordination-doc row in the same PR, no new capability. * fix(patch): spell the sibling patch's full filename — a leading hyphen crashed the dead-link check The backward-check row abbreviated the second grep-collision file as `-s-a-profile.md`. The CI dead-link step pipes every backticked *.md span into `basename "$ref"`, and GNU coreutils parses a leading `-s` as the --suffix option: `gbasename "-s-a-profile.md"` → "missing operand", exit 1, and the step runs under bash -e, so the whole job went red on a cosmetic abbreviation. Reproduced locally before fixing (gbasename, exit 1) rather than inferred from the log, and a repo-wide `grep -rhoE '`-[^`]*\.md`'` confirms this was the only leading-hyphen backticked .md reference in the tree — introduced by the previous commit, not pre-existing. Fix is the honest one anyway: write 2026-08-01-token-economy-s-a-profile.md in full. The CI script's own fragility (an unguarded operand reaching basename) is a separate concern, surfaced in the PR body rather than fixed here. Prior-art: skipped — one-line filename spelling correction in an unmerged patch, no new capability. * arch-v2: S-L's ordering deadline went LIVE mid-session — S-E merged Merge-forward from staging brought #1237 (S-E) in, and that falsifies a claim this branch made twice: that the "before S-D′" deadline was real but not binding "since S-D′ is blocked on the two-gate S-E + S-H and S-E is unmerged". Both gates are now closed — S-H #1239 at 2026-08-07T00:06Z, S-E #1237 at 2026-08-07T09:39Z — verified with `gh pr view --json state,mergedAt` rather than read off the umbrella prose, which still described the pre-merge state. S-D′ is dispatchable today, so S-L is on the critical path, and a dispatcher reading s-d-prime/kickoff.md:305 would find "the remaining gate ... is the two-gate S-E + S-H dependency alone" satisfied and dispatch against a falsified conversion. The Option A call from the previous commit stands — re-declaring the umbrella's named two-gate form across eight sites is still a structural change with an owner, and still out of scope here. What changes is urgency, not scope: the S-D′ row now carries the both-gates-satisfied warning inline, and the PR's DECISION-NEEDED 1 is a live footgun rather than a hypothetical one. Prior-art: skipped — factual correction of an ordering claim plus its coordination-row surfacing, no new capability. * fix(patch): publish the conversion ratio as 1.835, not the truncated 1.83 13,827 chars / 7,535 tokens = 1.8350. The patch published "1.83", which is a truncation rather than a rounding, and the derived "mis-priced by 43%" figure is computed from the exact value: |2.62 - 1.835| / 1.835 = 43%. A reader recomputing from the published 1.83 gets 43% too, but from a correctly-rounded 1.84 gets 42% — so the published figure and its own derivation could disagree depending on which way the reader rounded. Publishing three decimals removes the ambiguity: 1.835 reproduces both the "below the 2.37-3.32 band" claim and the 43% mispricing exactly. Caught by re-deriving every published figure machine-side rather than re-reading them. Prior-art: skipped — numeric precision correction in an unmerged patch, no new capability. --------- Co-authored-by: Test <test@example.com>
…perator verdict on PR #1255 DECISION-NEEDED 1 (#1259) Operator verdict 2026-08-07 resolves PR #1255 DECISION-NEEDED 1 as promote-to-gate. Implemented in the consumed-deliverable form: umbrella §3 already binds every consumed deliverable to the two-gate form (merged + content-read); S-D' consumes S-L's re-priced P14 ranking, so S-L joins S-D''s dependency list — no three-gate pattern re-declaration. Swept surfaces: umbrella kickoff (S-D' row, charter Depends-on, S-L charter promotion record, Ordering, §3 intra-umbrella list), S-D' kickoff rev 7 (header, :17-21, instrument list, :106, :232-244, §3a instrument, T-SDP-A counter, §5 quote-block, dispatch status — also fixes the stale 'S-E is not [merged]' claim; S-E merged as #1237 09:39Z), S-L kickoff (ordering constraint marked as gate; stale spec :363 citations -> :387), spec P13 cell + §4 stage-order cell + §5 Exit-routing annotations (operator-verdict provenance, precedent PR #1250). Cold review round 1: REVISE (1 MAJOR spec §5 Exit routing unswept + 3 MINOR) — all four fixed and grep-verified; residual 'S-E + S-H' strings are historical rev-log entries only. Prior-art: skipped — dependency-gate bookkeeping across kickoffs + spec annotations, no new capability Co-authored-by: Test <test@example.com>
…rable gate MET (#1267) Rev 7 left five sites asserting that S-L is unmerged, the loudest being `…-s-d-prime/kickoff.md:361` «The stage still cannot start, for one remaining reason: **S-L is not merged**». S-L merged as PR #1263 on 2026-08-07T12:50Z, so an executor reading the kickoff in full — which §0 requires — hits a stop-text that is now false. Dispatching against it would be `#dispatch-before-staging` in the other direction: the input on staging says «do not start». Retired at all five sites, three in the stage kickoff (`:1` header, `:310` §5 consequence line, `:361` dispatch status) and two in the umbrella (`:97` stage-table cell, `:362` S-L ordering paragraph). Scope: no deliverable, no permitted-file set, and no acceptance criterion changes. The rev-8 dispatch-status paragraph additionally carries forward the one binding thing S-L's §5 says about this stage — «A re-ranking is not a rescale — S-D′ must re-derive rather than multiply through» (`docs/meta-factory/research-patches/2026-08-07-s-l-recalculation.md:509-510`), plus the note that both hook injects are levers a `/context`-ordered list ranks at zero (`:499`) — because an executor that multiplies through a uniform factor preserves order by construction and would hide exactly the effect S-L found. Both gates verified mechanically, not from the umbrella prose (the recurrence that memory `verify-before-claim-family` records): S-E #1237 MERGED 09:39Z; meter present, scripts/measure-always-on.sh:10-11 S-H #1239 MERGED 00:06Z + #1249; P11 returned a real absence with a discriminating control, NOT INCONCLUSIVE (…-p3d-p11.md:431,440) S-L #1263 MERGED 12:50Z; §5 «Spec reach — what this does to the S-D′ ranking» (…-s-l-recalculation.md:493-510) Umbrella kickoff stays at 592 lines (600-line pre-commit gate): the two edits are in-place rewrites, no appends. Prior-art: skipped — doc-only correction to two dispatch-input kickoffs; retires a stale gate claim, adds no capability, no dependency, no code. Co-authored-by: Test <test@example.com>
…sures (done.md backfill) (#1268) The 2026-08-07 /pipeline no-arg run found ~50 umbrella dirs whose work is verifiably merged but which lack done.md, poisoning the priority-score completion filter in both directions (false-open noise + a false-DONE on the live critical path arch-v2-context-pipeline-s-d-prime via C2 jaccard). Round-2 precedent: cf246c2 (#565). Every closure verified mechanically BEFORE writing done.md (gh pr view state/mergedAt, git log origin/staging --grep, git ls-tree deliverable checks). Breakdown: - 26 closed by a verified merged PR (aif-doctor-helper-parity #1147, hook-tsx-resolution-fix #1126, hook-tsx-resolution-sweep #1130, universalization-fix-s2 #517, multistack-augment-first #830, guard-liveness-v2-fullsweep #484, install-self-verification #823, arch-v2 stages s-a #1192 / s-b #1198 / s-c #1197 / s-e #1237 / s-g #1228 / s-h #1250 / s-i #1229 / s-l #1263, getff-any-stack-trace r1 #1254 / s1 #1166 / s2 #1169 / s2b #1233 / s3 #1253 / s4 #1262, getff-honest-signals s1-s6 #1140/#1145/#1150/#1167/#1170/#1175, preset-react-spa-iphase #661, preset-react-native-iphase #662). Note: the dispatch evidence list carried kickoff-CREATION PR numbers for three of these (#1127/#1125/#1131); the actual closing PRs are #1147/#1126/#1130 — verified by PR title + files. - 4 closed by deliverable-on-staging + merged PR (plan-currency-reconcile-s4-aif #789, live-research-default-delivery #824, story-recap #592, aif-loop-resilience-soak n/a — soak-journal AUTONOMOUS RUN COMPLETE 2026-06-05, API-harvest rounds #427/#429/#431). - 10 meta-launch dispatch records closed by parent umbrella DONE (adapter-jig #1240, getff-any-stack-trace #1262, getff-honest-signals #1175, ir-unfreeze #1084, launch-preannounce-track #994, ecosystem-wiring #1086, rule-tests-surface #1093, python-delivery-v0 #997, plan-currency-reconcile #792, live-generation #1055) — each parent's done.md verified present. - 7 closed as Status: superseded pointing at the absorbing umbrella: the five #1221-rescued kickoffs (fix-735-fresh-install-prepush -> #775/#747, generator-compile-forbid -> forbid-mvp #684-#697, recipe-declarative-tier -> forbid-mvp S2 #689, validator-anti-vacuity -> forbid-mvp S3 #693, rule-bootstrapping-live-adapter -> rule-research-live-adapter #805/#809), plus install-ast-wiring -> migration-ast Stage 4 #632 (GH #547 Layer 2) and arch-v2-context-pipeline-s-a-r2 -> executed in-session inside S-A #1192 (its own header says SUPERSEDED — do not dispatch). Genuinely open umbrellas untouched: beta-delivery-ux (+meta-launch), beta-ai-docs-agnosticism, beta-docs-showcase, arch-v2-context-pipeline (+s-d-prime, s-f, meta-launch), getff-freshness-widening, getff-python-dtz-adopt, getff-to-prod-meta-launch, modular-install-fullpack, shipped-artifact-liveness-gap family, phase-10-foundations-audit, heal-honest-capacity, shipped-skill-sync, trust-tiers-did-review, executable-aidocs-and-cargo-followups, h10-verdict-gate-research, stack-tooling-generation, zcode-full-parity-mega-umbrella, and the rest of the no-done.md residue not on the verified list. Co-authored-by: Test <test@example.com>
…(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>
DRAFT — do not merge. Both cold fidelity rounds returned STOP and the cap is 2 rounds. Round 1's four load-bearing findings are fixed and re-audited CLOSED. Round 2 raised two more, and both are now resolved — but neither by an executor talking its way to GO.
picomatchin the shipped hook was proven by CI (a pnpm consumer could notgit pushat all), fixed, and has since dissolved: removing P2b takes picomatch out of the hook entirely. BLOCKED-1 went to the maintainer, who decided remove P2b after the overlay semantics were settled against the shipped client's source — the client MERGES, so the gate could never fire.fidelity-verdict-in-pr-bodyis RED on purpose; see the verdict section for why no token is present.Prior-art: prior-art-evaluations.md#238 (picomatch — ADOPT verbatim; it IS the glob matcher the shipped Claude Code client bundles for
claudeMdExcludespath-scope matching, so the problem class is an exact match and no wrapper layer is warranted. The commit pinspicomatch@^4.0.4inpackages/coredevDependencies — promoting the already-present transitive to a declared dep so an upstream bump cannot silently swap the matcher and changeisMatchsemantics under principle 34. Row authored in the same commit as the capability artefact, per CLAUDE.md; renumbered 237 → 238 during egress after a concurrently-merged PR claimed 237.)Harvested from aif task
8068bb5b(status=done23:06:32Z) via egress Channel A — bundle out of the container worktree, rebase onto livestaging, hostgit pushso the real.husky/pre-pushran. It passed, including S-E's own new budget gate (OK: always-on 48671B within ceiling 54000B), andbash scripts/host-verify.shran the kickoff's declared contract 3/3 on the host.Two egress artefacts, attributed so they are not mistaken for stage work:
Prior-art:trailer and the in-code reference updated to match. Verified: rows 235-238 sequential, exactly one line added, row 237 untouched.synth-and-wire.bundle.mjs— regenerated, then REVERTED, and the earlier claim here was wrong. An intermediate commit regenerated the bundle and this bullet claimed the drift was pre-existing onstaging. CI disproved it: the regenerated artifact failed the drift gate on this PR while the same gate is green on staging. Root cause was self-inflicted — runningnpm --prefix packages/core ciinside this worktree replaced the canonicalpackages/core/node_modulessymlink with a real directory carrying a nestedsemver@7.8.1, and the bundle entry resolves semver from there. Restoring the symlink viascripts/worktree-node-modules.shmade the local build reproduce the committed bundle again (✓ in sync). Reverted in9277364f6f; the bundle in this PR is now byte-identical to staging's. The verification that was missing: whether a lockfile-faithful install reproduces the committed artifact — not merely whether the top-level version matches the lock.Round-1 findings — fixed (commit
0eabadc235)Each was independently reproduced before being fixed; each fix is shown by an observed failure, not asserted.
git ls-files; ships N34-1a, the kickoff's mandated FAIL leg — the live committed list rewritten to the historical relative form must be dead for every entry while the live form stays matched on the same populationLive entries: 7; detected dead: 0; restoring turns it GREENalwayson-budgetadded toci-success.needswith the reason in-lineci-success, so a red budget gate now blocks the mergescripts/worktree-doctor.shgained the P2b sweep; it invokes the section through its existingPREPUSH_ONLY=local-claudemd-shadowseam rather than reimplementing it, runs each worktree's ownpre-push.ts(REPO_ROOT is script-location-derived), and announces an unrunnable worktree loudly instead of counting it cleanbash -nclean; arm exercised locallyP2b's discrimination pair — previously INCONCLUSIVE, now closed. A strict-SUBSET local list exits 1 naming the fallen-through file (
.claude/rules/cold-seat-economy.md); the same list as a superset exits 0. The operator's gitignored.claude/settings.local.jsonwas restored to its original state (noclaudeMdExcludeskey) after the fixtures.Suite after the fixes: 37 files, 352 passed / 1 skipped.
host-verify3/3 on the host. Pre-push green on push.What changed after round 2 — P2b removed (commit
e94be1e5f9)Round 2's BLOCKED-1 said the REPLACE-PER-KEY overlay verdict rested on a mis-attributed quote
and that kickoff §1 item 4's PARK was not honoured. That is now settled at the source, and the
maintainer's decision (2026-08-07) is remove.
The client MERGES array settings across settings files. Read from the installed binary
(
claude.exev2.1.207, commitbc512d563325;strings -n 8+ grep, every symbol resolved):fallbackModelis the sole replace key — exactly whatsettings.md:278documents. Scopeprecedence orders the fold (local wins for scalars); it does not make arrays replace. So the
effective list is
project ∪ local, a local list can only ADD excludes, and P2b's supersetassert held by construction — it could never go red.
Removed: the
local-claudemd-shadowpre-push section, its registry entry, itsPREPUSH_ONLYarm, theAIF_CLAUDEMD_LOCAL_SHADOW_ALLOWescape token, and theworktree-doctor.shsweep arm.measure-always-on.shnow applies the union, deduped.Kept: principle 34 (P2a), the
packages/corepicomatch@^4.0.4pin and SSOT #238 —principle 34 imports picomatch directly and never depended on P2b.
Docs corrected in place, not deleted (T18): the overlay verdict patch now records MERGE
with its evidence and falsifier; spec §1.6 FORK D records that its rejected
project ∪ localdraft was right; the S-E kickoff records the PARK against the preserved original task text;
the InstructionsLoaded patch drops its stale P2b cross-reference.
The root defect, worth more than the removal. The correct answer was reached twice and
discarded twice. An earlier session concluded "arrays concatenate" and the verdict patch
overrode it as a misreading; a spec draft wrote
project ∪ localand spec §1.6 FORK D round-4MAJOR-3 overrode it because union "contradicts P2b" and "under union it would be vacuous". Both
times the disproof was written down and then used as grounds to reject the model, because the
gate was held fixed and the world model was bent to keep it load-bearing. The mis-attributed
docs quote is downstream of that. Shape to watch for: "model X would make our gate pointless,
therefore not X."
Verification of the removal (host)
npm --prefix packages/core run test:principlesnpx tsc --noEmitbash -non both edited scriptshost-verify.sh(kickoff's declared contract)OK: always-on 48671B within ceiling 54000Bgit push.husky/pre-pushran greenMeter fixtures — run against a backed-up, md5-verified-restored local settings file:
overlay_source=project+local excludes_applied=8(union)project+local excludes_applied=7(dedupe; key still reported)The subset fixture demonstrates the meter's behaviour. The claim about the client rests
on the source reading above, not on it —
claude doctordoes not print effective settings, sono live client-level A/B discriminator was obtained. The earlier "4 local globs work, 3 project
relatives do not" observation is non-discriminating: merge and replace predict identical output
when the project entries are inert.
Falsifier: a client ≥2.1.211 whose
ipespecial-casesclaudeMdExcludesalongsidefallbackModel. Re-run the grep chain against the installed binary before relying on this.Fidelity verdict
FIDELITY: GO
Basis: .claude/orchestrator-prompts/arch-v2-context-pipeline-s-e/kickoff.md (rev 5, @ origin/staging)
Round: 5
Audited-SHA: 8fe07fd
Evidence: .claude/orchestrator-prompts/arch-v2-context-pipeline-s-e/kickoff.md — zero PR hunks;
git diff --name-only origin/staging 8fe07fd252 -- <kickoff>returns empty (byte-identical to the staging tip), and the whole-PRgit diff --name-only origin/staging...8fe07fd252no longer lists it or docs/superpowers/specs/2026-08-06-pipeline-token-economy-design.md — the round-4 MAJOR extra is fully withdrawn. The delta is a single commit (8fe07fd) whose only content is that revert: 2 files, +19/−50, no other surface touched.Findings: MINOR (extra) — 8 out-of-allowlist files persist at the whole-PR level: tests/install-sh/baselines/{react-native,react-next,react-spa,ts-server}/{brownfield,greenfield}.fingerprint. Not in kickoff §2's permitted set. Carried unchanged from round 4, mechanical regeneration, zero design content — observation only, no rework prescribed. · ADJUDICATED, NOT GRADED (stated so it is not silent) — P2b is absent from the diff while kickoff §1 item 2 still states it as a deliverable. This is the kickoff's OWN prescribed branch, not drift: §1 item 4 binds «verify the client's merge semantics against primary docs in this same task … and PARK if the docs contradict the replace model», and §3a binds «Proceed only on the unambiguous parts». The contradiction is evidenced in-PR at a permitted path — docs/meta-factory/research-patches/2026-08-06-claudemd-overlay-semantics-verdict.md:78-91 (installed binary v2.1.207 commit bc512d563325;
ipeunions arrays,fallbackModelthe sole replace key) with a version-bump falsifier at :97. Removal residue is recorded at packages/core/hooks/pre-push.ts:35-41 and scripts/worktree-doctor.sh:10-13. Grading this asmissingwould penalise the diff for obeying the kickoff. · missing: empty · diverged: emptyRound history: r1 STOP → fixed (
0eabadc235) · r2 STOP → P2b removed (e94be1e5f9) · r3 REVISE → rework (76d06ce34d) · r4 REVISE → out-of-allowlist hunks dropped (8fe07fd252) · r5 GO (above). The owner-side W-4 spec correction rides PR #1252 — owed on staging independently of this PR (round-5 W-4 note: staging's spec §1.6/§2/§3 still state the replace model until it merges).Review findings
Watch-list from round 3, pasted unedited per
agents/fidelity-auditor.md..claude/orchestrator-prompts/arch-v2-context-pipeline-s-e/kickoff.md:55-56(this round)project ∪ localis green by construction — re-adding it ships a gate that can never fail (#hope-as-gate)packages/core/hooks/pre-push.ts(P2b section, removed this round);scripts/worktree-doctor.sh:10-13settings.local.jsonclaudeMdExcludesagainst the project list in the SUPERSET direction, or a returningAIF_CLAUDEMD_LOCAL_SHADOW_ALLOWdocs/meta-factory/research-patches/2026-08-06-claudemd-overlay-semantics-verdict.md:97-98code.claude.com/docs/en/settingswith no accompanyingipe/WSm/Mogrep against an installedclaude.exe, or a client-version bump with no re-run recordeddocs/superpowers/specs/2026-08-06-pipeline-token-economy-design.md:323-327and:356(uncorrected).claude/orchestrator-prompts/…-s-e/kickoff.mdanddocs/superpowers/specs/2026-08-06-…design.md(edited)packages/core/hooks/pre-push.ts:33(relative),:34(execFileSync) — both unused at this SHAnode:*import inpre-push.tswith zero call sites; re-check withgrep -cper named import after any future section removalAIF_ALWAYSON_CEILING=1000exits 1 with zero work done, so a ceiling-lowering "discrimination" proves nothing about the fix under testpaths:→ EXIT=1; withpaths:→ 0)AIF_ALWAYSON_CEILING=<small>rather than a.claude/rules/<fixture>.mdpair differing only in^paths:frontmatterhost-ccstays UNMEASURED until S-H's host session supplies it#budget-sized-to-the-wrong-machineand would silently under- or over-gate the operator's real machinescripts/check-alwayson-budget.sh:35-37)AIF_ALWAYSON_CEILINGdefault change, or ahost-ccderivation comment carrying any number at all before S-H landsdocs/superpowers/specs/2026-08-06-pipeline-token-economy-design.md:207-208, 233-242, 323-332, 362+.claude/orchestrator-prompts/…-s-e/kickoff.md:55-71(round 4)docs/meta-factory/research-patches/*(permitted) plus a separate owner-authored commit for the specRound 3: W-1 DEFECT-FOUND · W-2 CLEAN · W-3 CLEAN · W-4 DEFECT-FOUND · W-5 DEFECT-FOUND · W-6 DEFECT-FOUND · W-7 CLEAN · W-8 CLEAN
Round 4: W-1 CLEAN (kickoff.md:55-71 — "Do not re-open" removed; disposition now recorded as an operator-answered fork with both options and consequences at :62-69; the only surviving "settled" is spec:236 "Reading the shipped client settled it", a statement about evidence, not a closure of scope) · W-2 CLEAN (
git grep AIF_CLAUDEMD_LOCAL_SHADOW_ALLOWat the audited SHA hits only the historical mention at research-patches/2026-08-06-claudemd-overlay-semantics-verdict.md:123; worktree-doctor.sh:10-13 is a removal comment with no arm; measure-always-on.sh:54-78 implements the UNION direction) · W-3 CLEAN (patch:78 recordsclaude.exev2.1.207 with theipe()→WSm()→Mo()extraction, :97 states the ≥2.1.211 falsifier, plus an explicit "Not verified empirically" limit) · W-4 CLEAN (every hit of the withdrawn item is now consistent: spec:207-208 FORK C, :233-242 FORK D, :323-332 struck-through + WITHDRAWN, :362 P2 row "§2 assert 1 … assert 2 WITHDRAWN") · W-5 REINTRODUCED (kickoff.md:55-71 and spec:207-208/233-242/323-332/362 — see the round-4 MAJOR extra) · W-6 CLEAN (pre-push.ts:33import { resolve, dirname };execFileSync0 refs; the two remainingrelativehits at :287 and :1485 are prose inside comments; all 8 install-sh fingerprints regenerated) · W-7 N/A — checked as far as cold inputs allow: nothing in this round's diff touches the acceptance-leg surface, and the leg's evidence lives in the PR body, outside the cold seat's inputs; a later seat with PR-body access must verdict it · W-8 CLEAN (check-alwayson-budget.sh:27-38 — single committed ceiling 54,000 B derived from the 48,671 B container baseline × 1.10,host-cc: UNMEASURED — baseline not reachable from the container; S-H's host session supplies it, no host number anywhere) · W-9 REINTRODUCED (row opened this round)Round 5: W-1 CLEAN (no PR hunk in any intent artefact; the disposition survives only in the permitted research patch, which cites the kickoff's own PARK clause rather than an in-session ruling) · W-2 CLEAN (
AIF_CLAUDEMD_LOCAL_SHADOW_ALLOWoccurs exactly once in the tree, as prose in the removal record — 2026-08-06-claudemd-overlay-semantics-verdict.md:123; no superset comparison in pre-push.ts or worktree-doctor.sh; scripts/measure-always-on.sh:54-55 implements the union) · W-3 CLEAN (…-verdict.md:78-91 binary-derived_1/ipe/WSm/Moat v2.1.207 commit bc512d563325; version-bump falsifier at :97) · W-4 N/A (the spec carries no PR hunk this round, by design per W-9; NOTE for the next seat — the owner-side correction is still NOT on origin/staging: newest spec commit is 43bc809, the S-H [W]/[H] verdict, unrelated to overlay semantics, so staging's §1.6 FORK D / §2 item 2 / §3 P2 row still state replace-per-key and still ask for assert 2. The item stays owed OUTSIDE this PR — it rides PR #1252) · W-5 CLEAN (whole-PR file list contains no kickoff, spec, or umbrella charter) · W-6 CLEAN (all 8 importednode:*symbols have call sites in pre-push.ts: existsSync 30, readdirSync 1, readFileSync 3, realpathSync 2, statSync 1, resolve 34, dirname 1, fileURLToPath 2) · W-7 N/A (unchanged reason: the P3a discrimination evidence lives only in the PR body, which the cold-ness constraint bars — unverdictable from these inputs, not unchecked-by-omission; the round-3 in-body reproduction record stands) · W-8 CLEAN (check-alwayson-budget.sh:38 carries ONE committed ceiling,AIF_ALWAYSON_CEILING:-54000, derived at :28-34 from the container baseline 48,671 B × 1.10; the host-cc line at :35-37 carries no number, only "UNMEASURED … S-H's host session supplies it") · W-9 CLEAN (no spec/kickoff hunk justified by a prior audit round; the round-4 prescription was executed by removal, not by re-editing the intent artefacts)§1.7 Forward-check applied
Checked this round's work against the disciplines that govern it, and let each one change what shipped.
attention-is-not-a-mechanism.md §1— the round-3 verdict is recorded as returned (REVISE), not edited toward GO, and the gate stays RED; a body massaged to green would make the acceptance contour a#hope-as-gate. It also supplies the grading language for the removal itself: a superset assert under union is green-by-construction. file:line evidence:.claude/rules/attention-is-not-a-mechanism.md:24ai-laziness-traps.md T19— the audit is a cold seat handed only the staging kickoff and the 3-dot diff, explicitly denied the PR body and comments, and it re-derived the binary claim independently rather than trusting the commit message. file:line evidence:.claude/rules/ai-laziness-traps.md:150cold-seat-economy.md §3— the seat was fresh and narrow with inputs inlined, not a resumed transcript; its watch-list is pasted unedited as the continuity artefact a round-4 seat gets instead of this session's transcript. file:line evidence:.claude/rules/cold-seat-economy.md:1phase-research-coverage.md §1.7— the overlay verdict carries file:line evidence, a stated falsifier (a client ≥2.1.211 whoseipespecial-casesclaudeMdExcludes), and an explicit note that no live client-level A/B discriminator was obtained. file:line evidence:.claude/rules/phase-research-coverage.md:1build-first-reuse-default.md— no new capability: this PR removes a gate, corrects docs and sweeps imports. The one ADOPT verdict in the stage (picomatch, SSOT research(meta-orchestrator-mode-triage): land design doc for /meta-orchestrator extensions #238) is unchanged and still carried by its own commit's trailer. Verdict: compliant.§1.7 Backward-check applied
Class of this change = a gate removed because its premise was disproven, with the intent artefacts that mandated it edited by the session doing the removing — swept beyond this diff.
docs/superpowers/specs/2026-08-06-pipeline-token-economy-design.md— GAP-FOUND and fixed: §1.6 FORK D said removed while §2:323 and §3:356 still mandated the assert. The general lesson is recorded as W-4: a fork correction must land in every place the deliverable is stated, not only in the FORK section. file:line evidence:docs/superpowers/specs/2026-08-06-pipeline-token-economy-design.md:323.claude/orchestrator-prompts/arch-v2-context-pipeline/kickoff.md:251— GAP-FOUND, deliberately NOT patched: the umbrella kickoff still lists the removed deliverable, and it sits outside §2's permitted-files allowlist. Reported rather than fixed, because fixing it repeats the very deviation round 3 graded MAJOR.packages/core/hooks/pre-push.ts— swept for other residue of the removed section beyond the named imports;dirnameis still used and stays, andgrep -n picomatchreturns only the guard comment explaining why the package must not come back.