evaluate
CB-EV-0027.
The supply is never exceeded, and the link row explains why: GR-L01's two
slots per seat ARE the twelve link tokens, the same constraint written
twice. Nothing was designed to make that true; it fell out.
The Focus/Blame check was wrong and I caught it -- fifth instance of the
family CB-EV-0019 named (a number computed correctly about the wrong
subject) and the FIRST caught before leaving the repo, rather than by an
adversarial reviewer or the maintainer. That is one data point, not a
trend. What differed is that this pass read its own output and asked what
exactly it had compared. The family still has no control: facts-check
catches copies that disagree and nothing catches a correct computation
over the wrong subject.
The height limit went 460 -> 500, and the evidence argues why that is a
correction and not a concession. 460 was a number picked while fixing the
unplayable table -- no derivation. 500 has one: ~800px viewport less ~120
header and ~150 controls leaves ~530, and the version that broke dragging
declared 620. An underived limit is a measurement defect; replacing it
with a derived one is CB-WP-0021 T06's rule applied rather than evaded. A
later pass wanting 560 has to move the viewport budget, not the number.
CHAOS WINDOW 2 IS CLOSED. Twelve declarations, zero 8s, zero overrides.
Its retirement condition -- retire if an override changes nothing twice
running -- was untestable from the first declaration to the last, and
CB-EV-0024, 0025 and 0026 each said so; this is the fourth and final.
Window 1 at d4: 12 declarations, 2 overrides, both changed the outcome.
Window 2 at d8: 12, 0, none.
The verdict this supports is that d8 bought rarity by spending evidence --
stronger than "the rate is too low", because the rate was chosen without
asking what sample size the retirement condition needs. Recording that
changes how the loop constrains its own operation, which is a tier-M
trigger in its own right, so it is OUTSTANDING and named rather than
bundled here. Leaving it implicit is exactly how ground-game's ten rulings
went uncollected.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ADR-0016, Tokens.csv vendored, tracks and discs on the table, and a supply
audit that found nothing and says so.
T03 MEASURED BEFORE T01 DECIDED. 750 games, 2-6 seats, greedy and random:
Protection reaches 1 per seat and 2 on the table against a supply of 6;
Denied 3 of 5; relation links EXACTLY 12 OF 12 and never more; Focus/Blame
0 conflicts. The link row is the interesting one -- GR-L01's two-slot rule
IS the twelve-token supply written twice, which is the shape of a supply
needing no separate enforcement.
AND THE FIRST VERSION OF THE FOCUS/BLAME CHECK WAS WRONG. It compared a
seat's own placed Focus against its OWN blame_from -- but that list holds
OTHER players' discs, so they are different tokens. It reported 2
conflicts; corrected, it reports 0. Fifth instance of this project's
recurring defect, a number computed correctly about the wrong subject, and
the first caught before it left the repo rather than by a reviewer.
D2: a token is a VIEW, not a type. The aggregate gains no `Token` --
adding one would create a second source of truth for Stress, and the first
time they disagreed the bug would be invisible because both would look
internally consistent.
D3: quantity does NOT bind, and the reason is not the measurement. A
component limit the rules do not state is not a rule. Refusing a seventh
Protection token would enforce something nobody ruled -- CB-WP-0023's
error inverted: SOLVE was OFFERED where it could not act; this would
REFUSE where the rules allow. The check ships as a standing control, so a
future violation becomes a question for ground-game (does the box bound
the game, or do the rules?) rather than a bound the engine invented.
Registered as F22, withdrawn: a stated negative, because a survey that
finds nothing and leaves no trace cannot be told from one never run.
D4: Stress on a 0-5 track that turns red at 5 where DARVO arms, DARVO on
OFF/DENY/ATTACK/REVERSE, Freedom as the two-sided disc the edition says it
is, Protection and Blame counted, Lead and Round on the table.
Two tests broke on token discs and both were FIXTURE defects:
seat_centres matched every <circle> and track stops are circles. Seats now
carry class="seat".
The table height limit went 460 -> 500 as a CORRECTION, not a concession.
460 had no derivation; 500 does -- ~800px viewport less ~120 header and
~150 controls leaves ~530, and the version that broke dragging was 620.
CB-WP-0021 T06's rule is to fix the measurement rather than lower the
floor, and an underived number is a measurement defect.
make all: exit 0. 66 render tests, 26 cb-play.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Declaration 12 of chaos window 2, which CLOSES IT. Structural M (imports
another edition file under AM-4's budgets), chaos d8=4, no override.
Tokens.csv turns out to carry more than names. Every token has a
`quantity` -- 6 Protection, 5 Denied, 12 relation links -- and a component
count is a limit a simulation does not have unless it is told. protection
is saturating_add(1) at lib.rs:986 with no upper bound, against an edition
that ships six tokens for six players. T03 measures whether that matters
rather than assuming either way.
And `sides` is the second interesting column: Freedom and Focus/Blame are
each ONE DOUBLE-SIDED TOKEN, not two states. The engine holds Focus in a
map and Blame in a list; whether those can disagree with a single physical
token is worth checking.
T03 is shaped against a specific error: whatever it finds is a FINDING,
not a fix. A component limit the rules do not state is underdetermined and
belongs to ground-game, and the engine must not start enforcing a bound
nobody ruled. CB-WP-0023 exists because SOLVE was offered where it could
not act; inventing a limit is the same error in the other direction.
The workplan also names the window-2 verdict as DUE. Its retirement
condition was untestable throughout -- eleven declarations, zero 8s, zero
overrides -- and recording that is a change to how the loop constrains
itself, so it is its own tier-M pass rather than a task here. Named so it
is not lost between passes, which is how the ten rulings went uncollected.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>