CB-WP-0030: a control for the wrong-subject family
Some checks failed
ci / check (push) Failing after 4s

Seven claims in this project have been wrong the same way — the arithmetic
right, the subject wrong. Four reached a document or another repo.

ADR-0018 states the rule: a measured claim names the variable it depends
on and shows the measurement moving with it. GameDesign §1.4 adds it as a
fourth admissibility clause; the existing three are untouched.

Honest yield is 3 clear + 1 partial of 7. It misses a count never made and
a claim that is not a number, and D3 names those so nobody stops looking.
The tempting fix — closing facts-check's 62 untagged literals — would have
caught 1 of 7 and is deferred as separate work rather than bundled.

loop-lint gains check_sensitivity_stated over arithmetic register rows,
mutation-proven red on F17 and green when restored, with four self-test
controls. It checks presence, never adequacy, and says so in its output.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-07 11:35:41 +02:00
parent ffd2279e16
commit d7279483f6
6 changed files with 503 additions and 6 deletions

View file

@ -81,6 +81,38 @@ admissible, remained in the register, and remained queued for transmission
to `ground-game` for four days, because nothing treated a passing artifact
as a signal. It was stopped by an adversarial review, not by a control.
### 1.4 It must move when its subject moves
> **A measured claim names the variable it depends on, and shows the
> measurement moving with it.** A number that does not move when its
> subject moves is measuring something else.
ADR-0018. This is the fourth clause and the first three are unchanged —
each was bought by an earlier mistake and a rewrite would drop what they
paid for.
**Why it exists.** Seven claims in this project have been wrong the same
way: the arithmetic right, the subject wrong. Two of them were caught only
because someone varied something —
- a per-node cost that **fell** as branching **rose** (no per-node cost
can), and
- a win rate attributed to *the game* that collapsed to 0% under a second
policy on the same deals.
**Both were already printed when they shipped.** Nobody looked at whether
the number moved the way its subject demanded.
**Where it binds:** register findings whose claim is arithmetic, and
anything leaving the repo. **Not every number everywhere** — a rule that
binds everywhere is obeyed nowhere.
**What it does not catch, stated so nobody stops looking:** a count that
was never made (there is no sensitivity to state), and a claim that is not
a number. **No syntactic gate detects a wrong subject in general.** It is
a semantic error; `loop-lint` checks that a sensitivity line is *present*,
never that it is *adequate*.
## 2. Kinds
Five (ADR-0012 D4). **No kind exists without a finding that instantiates