Commit graph

2 commits

Author SHA1 Message Date
d7279483f6 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>
2026-08-07 11:35:41 +02:00
3a47e263df CB-WP-0030: a control for the wrong-subject family — declare and register
Some checks are pending
ci / check (push) Waiting to run
Declaration 1 of chaos window 3 (opened by ADR-0017), tier M, chaos d8=7,
no override.

Seven claims in this project have been wrong the same way, and the
workplan tabulates all seven with what caught each.

MEASURED BEFORE PROPOSING: facts-check reports 62 untagged literal copies
and fails on none, which is a real drift surface it names and does not
close. CLOSING IT WOULD HAVE CAUGHT AT MOST ONE OF THE SEVEN. Instance 1's
denominator WAS a registry fact and WAS correct -- the error was that
AM-4a does not cover the code. Four others were fresh measurements with no
registry key. A tag proves a number came from somewhere; it cannot prove
the somewhere was the right place. Named as separate work rather than
bundled, because bundling would let this pass claim a victory it did not
win.

What did work: every instance was caught when the number was computed a
SECOND TIME by something with a different purpose. Two of them share a
sharper property -- the claim was tested against a variation. #4's cost
FELL as branching ROSE, which no per-node cost can do, and the tell was in
the published output. #5's win rate was attributed to the game, and a
second policy on the same deals gave 0% where the first gave 100%.

So the rule generalises what this project already builds after each
instance (the policy panel, the attack-value sweep) and requires it
before: a measured claim must name the variable it depends on and show the
measurement moving with it. A number that does not move when its subject
moves is measuring something else.

HONEST YIELD: 3 or 4 of 7, and it catches the two that travelled furthest.
It does not catch a count never made, or a claim that is not a number.
Claiming it closes the family would be the family's own error applied to
itself.

T03 requires the lint to fail on a real row by mutation, and to say in its
own output that it checks PRESENCE and not ADEQUACY -- so nobody reads a
green lint as 'the claim was verified'.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 11:27:32 +02:00