clay-borg/WORK-RECORDS.md

197 lines
16 KiB
Markdown
Raw Normal View History

# Work Records — clay-borg
> Generated by `statehub fix-consistency` (CUST-WP-0061-T04, work-record
> stage 3). Do not edit by hand — edit the source file/block listed for
> each record and re-run fix-consistency to refresh this index. Archived
> workplans are omitted; closed decisions/intakes/engagements stay listed
> so recently-resolved work is still visible. [auto]
| Kind | ID | Status | Lane | Source |
| --- | --- | --- | --- | --- |
Amend CB-EV-0001; add CB-WP-0002 for cost accounting AM-4: measured what each remediation option actually buys, rather than leaving one recommendation unquantified. serde_yaml optional removes 6 crates, not 5 — ryu belongs to that group, since serde_json now uses zmij for floats. Full ladder: -6 to 27, serde_json -4 more to 23, inlining SHA-256 -8 to 19, inlining ChaCha12 -4 to 15. Only reimplementing a primitive gets under 20, so the target is unreachable without undoing K5/K7. Also records that crate count compares badly across ecosystems, and offers the alternative the count is a proxy for: 307,317 lines of third-party source under audit against 3,398 of our own. AM-12: corrected from "uncomputable" to measured. The refusal to estimate was right; the claim that no instrument existed was wrong. Session transcripts carry exact per-message usage including the cache breakdown. This session cost $248.46 at Fable 5 rates, of which 53% is cache reads — cost is driven by context size times turn count, not by output volume. What is still missing is per-task attribution, since nothing marks task boundaries in a transcript. CB-WP-0002 makes cost measurable and attributable: survey the instruments, decide the attribution model by ADR, spec metrics that include cost composition rather than a bare total, build a collector whose positive control refuses to emit unreconciled numbers, and prove it by answering a question that could not be answered before. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 03:26:03 +02:00
| workplan | CB-WP-0001 | done | — | workplans/CB-WP-0001-inner-loop.md |
| workplan | CB-WP-0002 | done | — | workplans/CB-WP-0002-cost-accounting.md |
| workplan | CB-WP-0003 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| workplan | CB-WP-0004 | done | — | workplans/CB-WP-0004-mechanical-work.md |
| workplan | CB-WP-0005 | done | — | workplans/CB-WP-0005-assertion-coverage.md |
| workplan | CB-WP-0006 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| workplan | CB-WP-0007 | done | — | workplans/CB-WP-0007-session-shape.md |
| workplan | CB-WP-0008 | done | — | workplans/CB-WP-0008-ship-stage-0.md |
| workplan | CB-WP-0009 | done | — | workplans/CB-WP-0009-adaptive-gates.md |
| workplan | CB-WP-0010 | done | — | workplans/CB-WP-0010-consolidation.md |
| workplan | CB-WP-0011 | done | — | workplans/CB-WP-0011-inspectable-table.md |
| workplan | CB-WP-0012 | done | — | workplans/CB-WP-0012-render-port.md |
| workplan | CB-WP-0013 | done | — | workplans/CB-WP-0013-instrument-corrections.md |
| workplan | CB-WP-0014 | done | — | workplans/CB-WP-0014-execute-the-javascript.md |
| workplan | CB-WP-0015 | done | — | workplans/CB-WP-0015-the-inert-clauses.md |
| workplan | CB-WP-0016 | done | — | workplans/CB-WP-0016-the-drop-target.md |
| workplan | CB-WP-0017 | done | — | workplans/CB-WP-0017-legible-interaction.md |
| workplan | CB-WP-0018 | done | — | workplans/CB-WP-0018-the-browser-is-a-client.md |
| workplan | CB-WP-0019 | done | — | workplans/CB-WP-0019-the-am4-family.md |
| workplan | CB-WP-0020 | done | — | workplans/CB-WP-0020-the-table-you-can-read.md |
| workplan | CB-WP-0021 | done | — | workplans/CB-WP-0021-import-the-edition.md |
| workplan | CB-WP-0022 | done | — | workplans/CB-WP-0022-the-design-instrument.md |
2026-08-04 00:21:21 +02:00
| workplan | CB-WP-0023 | done | — | workplans/CB-WP-0023-solve-legality.md |
| workplan | CB-WP-0024 | done | — | workplans/CB-WP-0024-the-table-you-can-watch.md |
| workplan | CB-WP-0025 | done | — | workplans/CB-WP-0025-could-we-have-won.md |
| workplan | CB-WP-0026 | done | — | workplans/CB-WP-0026-collect-the-rulings.md |
| workplan | CB-WP-0027 | done | — | workplans/CB-WP-0027-the-commentary-track.md |
| workplan | CB-WP-0028 | done | — | workplans/CB-WP-0028-the-table-you-sit-at.md |
CB-WP-0029 T01-T03: components you can count, and a supply that does not bind 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>
2026-08-07 09:54:20 +02:00
| workplan | CB-WP-0029 | ready | — | workplans/CB-WP-0029-the-tokens-on-the-table.md |
| task | CB-WP-0001-T01 | done | — | workplans/CB-WP-0001-inner-loop.md |
| task | CB-WP-0001-T02 | done | — | workplans/CB-WP-0001-inner-loop.md |
Amend CB-EV-0001; add CB-WP-0002 for cost accounting AM-4: measured what each remediation option actually buys, rather than leaving one recommendation unquantified. serde_yaml optional removes 6 crates, not 5 — ryu belongs to that group, since serde_json now uses zmij for floats. Full ladder: -6 to 27, serde_json -4 more to 23, inlining SHA-256 -8 to 19, inlining ChaCha12 -4 to 15. Only reimplementing a primitive gets under 20, so the target is unreachable without undoing K5/K7. Also records that crate count compares badly across ecosystems, and offers the alternative the count is a proxy for: 307,317 lines of third-party source under audit against 3,398 of our own. AM-12: corrected from "uncomputable" to measured. The refusal to estimate was right; the claim that no instrument existed was wrong. Session transcripts carry exact per-message usage including the cache breakdown. This session cost $248.46 at Fable 5 rates, of which 53% is cache reads — cost is driven by context size times turn count, not by output volume. What is still missing is per-task attribution, since nothing marks task boundaries in a transcript. CB-WP-0002 makes cost measurable and attributable: survey the instruments, decide the attribution model by ADR, spec metrics that include cost composition rather than a bare total, build a collector whose positive control refuses to emit unreconciled numbers, and prove it by answering a question that could not be answered before. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 03:26:03 +02:00
| task | CB-WP-0001-T03 | done | — | workplans/CB-WP-0001-inner-loop.md |
| task | CB-WP-0001-T04 | done | — | workplans/CB-WP-0001-inner-loop.md |
| task | CB-WP-0001-T05 | done | — | workplans/CB-WP-0001-inner-loop.md |
| task | CB-WP-0001-T06 | done | — | workplans/CB-WP-0001-inner-loop.md |
| task | CB-WP-0001-T07 | done | — | workplans/CB-WP-0001-inner-loop.md |
| task | CB-WP-0001-T08 | done | — | workplans/CB-WP-0001-inner-loop.md |
| task | CB-WP-0001-T09 | done | — | workplans/CB-WP-0001-inner-loop.md |
| task | CB-WP-0002-T01 | done | — | workplans/CB-WP-0002-cost-accounting.md |
| task | CB-WP-0002-T02 | done | — | workplans/CB-WP-0002-cost-accounting.md |
| task | CB-WP-0002-T03 | done | — | workplans/CB-WP-0002-cost-accounting.md |
| task | CB-WP-0002-T04 | done | — | workplans/CB-WP-0002-cost-accounting.md |
| task | CB-WP-0002-T05 | done | — | workplans/CB-WP-0002-cost-accounting.md |
| task | CB-WP-0002-T06 | done | — | workplans/CB-WP-0002-cost-accounting.md |
| task | CB-WP-0002-T07 | done | — | workplans/CB-WP-0002-cost-accounting.md |
| task | CB-WP-0003-T01 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T02 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T03 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T04 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T05 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T06 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T07 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T08 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T09 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T10 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0003-T11 | done | — | workplans/CB-WP-0003-loop-hardening.md |
| task | CB-WP-0004-T01 | done | — | workplans/CB-WP-0004-mechanical-work.md |
| task | CB-WP-0004-T02 | done | — | workplans/CB-WP-0004-mechanical-work.md |
| task | CB-WP-0004-T03 | done | — | workplans/CB-WP-0004-mechanical-work.md |
| task | CB-WP-0004-T04 | done | — | workplans/CB-WP-0004-mechanical-work.md |
| task | CB-WP-0004-T05 | done | — | workplans/CB-WP-0004-mechanical-work.md |
| task | CB-WP-0004-T06 | done | — | workplans/CB-WP-0004-mechanical-work.md |
| task | CB-WP-0005-T01 | done | — | workplans/CB-WP-0005-assertion-coverage.md |
| task | CB-WP-0005-T02 | done | — | workplans/CB-WP-0005-assertion-coverage.md |
| task | CB-WP-0005-T03 | done | — | workplans/CB-WP-0005-assertion-coverage.md |
| task | CB-WP-0005-T04 | cancel | — | workplans/CB-WP-0005-assertion-coverage.md |
| task | CB-WP-0005-T05 | cancel | — | workplans/CB-WP-0005-assertion-coverage.md |
| task | CB-WP-0005-T06 | cancel | — | workplans/CB-WP-0005-assertion-coverage.md |
| task | CB-WP-0005-T07 | done | — | workplans/CB-WP-0005-assertion-coverage.md |
| task | CB-WP-0005-T08 | done | — | workplans/CB-WP-0005-assertion-coverage.md |
| task | CB-WP-0006-T01 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| task | CB-WP-0006-T02 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| task | CB-WP-0006-T03 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| task | CB-WP-0006-T04 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| task | CB-WP-0006-T05 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| task | CB-WP-0006-T06 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| task | CB-WP-0006-T07 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| task | CB-WP-0006-T08 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| task | CB-WP-0006-T09 | done | — | workplans/CB-WP-0006-instrument-the-table.md |
| task | CB-WP-0007-T01 | done | — | workplans/CB-WP-0007-session-shape.md |
| task | CB-WP-0007-T02 | cancel | — | workplans/CB-WP-0007-session-shape.md |
| task | CB-WP-0007-T03 | done | — | workplans/CB-WP-0007-session-shape.md |
| task | CB-WP-0007-T04 | cancel | — | workplans/CB-WP-0007-session-shape.md |
| task | CB-WP-0007-T05 | cancel | — | workplans/CB-WP-0007-session-shape.md |
| task | CB-WP-0007-T06 | cancel | — | workplans/CB-WP-0007-session-shape.md |
| task | CB-WP-0008-T01 | done | — | workplans/CB-WP-0008-ship-stage-0.md |
| task | CB-WP-0008-T02 | done | — | workplans/CB-WP-0008-ship-stage-0.md |
| task | CB-WP-0008-T03 | done | — | workplans/CB-WP-0008-ship-stage-0.md |
| task | CB-WP-0008-T04 | done | — | workplans/CB-WP-0008-ship-stage-0.md |
| task | CB-WP-0009-T01 | done | — | workplans/CB-WP-0009-adaptive-gates.md |
| task | CB-WP-0009-T02 | done | — | workplans/CB-WP-0009-adaptive-gates.md |
| task | CB-WP-0009-T03 | done | — | workplans/CB-WP-0009-adaptive-gates.md |
| task | CB-WP-0009-T04 | done | — | workplans/CB-WP-0009-adaptive-gates.md |
| task | CB-WP-0010-T01 | done | — | workplans/CB-WP-0010-consolidation.md |
| task | CB-WP-0010-T02 | done | — | workplans/CB-WP-0010-consolidation.md |
| task | CB-WP-0010-T03 | done | — | workplans/CB-WP-0010-consolidation.md |
| task | CB-WP-0011-T01 | done | — | workplans/CB-WP-0011-inspectable-table.md |
| task | CB-WP-0011-T02 | done | — | workplans/CB-WP-0011-inspectable-table.md |
| task | CB-WP-0011-T03 | done | — | workplans/CB-WP-0011-inspectable-table.md |
CB-WP-0012-T05: evidence — tier L deleted its own deliverable CB-EV-0010. The pass's own verdict on the tier it ran at. Full-weight review withdrew the capability port the declaration was made to build. A tier-S pass has no step 2 and would have shipped it, and stage 2 would have found it unimplementable — which is what CommitWindow is already on record in this repo for doing. Two corrections of the survey's own numbers, compounding: AM-4a headroom 3,750 claimed -> 92,798 measured (25x) cheapest windowed 480,501 claimed -> 140,079 measured (3.4x) headline ratio 128x -> 1.5x (85x) The prediction from CB-EV-0009 §4 held: meta budget reads 0%, published in advance and unfalsified. A correction that is now a pattern: CB-EV-0009 reported CB-WP-0011 at 45 responses / $4.23 / 0.094; final is 71 / $7.02 / 0.099. Still the cheapest pass, so the conclusion stands. But that is the second consecutive evidence file to report its own pass's cost low — a pass cannot measure its own cost, and one quoting its own is quoting a floor. First priced tier comparison on a single subject: 0.123 $/response at L against 0.099 at S — 24% more, for a pass that found the two errors above. On one data point, step 2 is cheap. Not shipped, and said plainly: the emitted JavaScript has never been executed. The socket loop is tested end to end with synthetic HTTP and the page is asserted against as a parsed document, but no browser engine has run it. INTENT stage 1 therefore stays open even though all four of its named deliverables now exist. SH-3 reads 0.0% for a sixth consecutive pass and remains the oldest unargued number in the project. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 04:30:10 +02:00
| task | CB-WP-0012-T01 | done | — | workplans/CB-WP-0012-render-port.md |
| task | CB-WP-0012-T02 | done | — | workplans/CB-WP-0012-render-port.md |
| task | CB-WP-0012-T03 | done | — | workplans/CB-WP-0012-render-port.md |
| task | CB-WP-0012-T04 | done | — | workplans/CB-WP-0012-render-port.md |
| task | CB-WP-0012-T05 | done | — | workplans/CB-WP-0012-render-port.md |
CB-WP-0013-T04: evidence — and a rule about quoting your own cost CB-EV-0011. Three instruments were wrong; the pass found the third defect itself and committed the fourth. The rule this pass should leave behind: an evidence file quotes the PREVIOUS pass's final cost, not its own. Three for three, all low by a strikingly consistent ~2/3: CB-WP-0009 $6.73 reported -> $11.31 final CB-WP-0011 $4.23 reported -> $7.02 final CB-WP-0012 $8.82 reported -> $14.52 final And this time it changed a conclusion. CB-EV-0010 reported the first priced tier comparison as "0.123 at L against 0.099 at S — 24% more". The final figures are 0.150 against 0.099 — 51% more. Tier L costs twice what that comparison claimed. It still deleted a port that would have been rewritten and found errors of 25x and 85x, so it still looks worth it, but the price doubled and the file that made the argument could not have known. Also closed rather than deferred again: cb-play's "third mode" never arrived. --serve is a play flag selecting which Policy fills a human seat; the binary still has two modes, and CB-EV-0010 §6 was wrong. Carried for two passes, resolved, stopped. Recorded as a near-miss: an instrument reading that looked impossible (53 tool calls in 53 responses) turned out to be correct. One independent re-derivation before writing anything stopped a false accusation — in the pass whose whole subject is instruments reporting things that are not so. gate-review: 0 due, 0 silent, 0 drifted. Every gate in the registry has a caught entry for the first time. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 07:32:07 +02:00
| task | CB-WP-0013-T01 | done | — | workplans/CB-WP-0013-instrument-corrections.md |
| task | CB-WP-0013-T02 | done | — | workplans/CB-WP-0013-instrument-corrections.md |
| task | CB-WP-0013-T03 | done | — | workplans/CB-WP-0013-instrument-corrections.md |
| task | CB-WP-0013-T04 | done | — | workplans/CB-WP-0013-instrument-corrections.md |
CB-WP-0014-T03: hot-seat evidenced; stage 1 open on one human check CB-EV-0012. Stage 1, deliverable by deliverable: relationship-graph visualization emitted and gated, NEVER SEEN drag-to-propose evidenced end to end debug inspector evidenced (CB-WP-0011) hot-seat play evidenced here Hot-seat was the one closest to being claimed on the strength of the code path existing. SeatPolicy hands every human seat a handle on one shared Server, so turn-taking "obviously" worked — and nothing drove more than one seat until now. The property that matters is not that two turns happen but that the same tab, asked twice, shows two different hands. Mutating the projection to serve P1's view to every seat turns it red. The stage stays open on ONE named blocker rather than a vague reservation: no browser is available to this loop, so the visualization is evidenced only as correctly emitted. Everything testable from here has been tested. What remains is `cb-play --serve 0`, open the URL, confirm the table reads and a drag works. INTENT carries that note now. The self-quoting rule from CB-EV-0011 §4 is ADOPTED: an evidence file quotes the previous pass's final cost and never its own. CB-WP-0013 reported itself at $5.78/34 mid-flight; final is $8.26/47, under by 43%. Four for four, always low. Meta budget 29% [OVER] soft 25%, driven by CB-WP-0013 in a trailing three with two cheap product passes; it was an instrument repair, which ADR-0006 D2 exempts. SH-1 at 347,720 [HARD] against a 300,000 ceiling. Compaction is the remedy and this session cannot do it for itself. CB-EV-0009's standing prediction is now live and testable for the first time in three passes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-02 07:58:59 +02:00
| task | CB-WP-0014-T01 | done | — | workplans/CB-WP-0014-execute-the-javascript.md |
| task | CB-WP-0014-T02 | done | — | workplans/CB-WP-0014-execute-the-javascript.md |
| task | CB-WP-0014-T03 | done | — | workplans/CB-WP-0014-execute-the-javascript.md |
| task | CB-WP-0015-T01 | done | — | workplans/CB-WP-0015-the-inert-clauses.md |
| task | CB-WP-0015-T02 | done | — | workplans/CB-WP-0015-the-inert-clauses.md |
| task | CB-WP-0015-T03 | done | — | workplans/CB-WP-0015-the-inert-clauses.md |
| task | CB-WP-0016-T01 | done | — | workplans/CB-WP-0016-the-drop-target.md |
| task | CB-WP-0016-T02 | done | — | workplans/CB-WP-0016-the-drop-target.md |
| task | CB-WP-0016-T03 | done | — | workplans/CB-WP-0016-the-drop-target.md |
| task | CB-WP-0017-T01 | done | — | workplans/CB-WP-0017-legible-interaction.md |
| task | CB-WP-0017-T02 | done | — | workplans/CB-WP-0017-legible-interaction.md |
| task | CB-WP-0017-T03 | done | — | workplans/CB-WP-0017-legible-interaction.md |
| task | CB-WP-0017-T04 | done | — | workplans/CB-WP-0017-legible-interaction.md |
| task | CB-WP-0018-T01 | done | — | workplans/CB-WP-0018-the-browser-is-a-client.md |
| task | CB-WP-0018-T02 | done | — | workplans/CB-WP-0018-the-browser-is-a-client.md |
| task | CB-WP-0018-T03 | done | — | workplans/CB-WP-0018-the-browser-is-a-client.md |
| task | CB-WP-0018-T04 | done | — | workplans/CB-WP-0018-the-browser-is-a-client.md |
| task | CB-WP-0019-T01 | done | — | workplans/CB-WP-0019-the-am4-family.md |
| task | CB-WP-0019-T02 | done | — | workplans/CB-WP-0019-the-am4-family.md |
| task | CB-WP-0019-T03 | done | — | workplans/CB-WP-0019-the-am4-family.md |
| task | CB-WP-0019-T04 | done | — | workplans/CB-WP-0019-the-am4-family.md |
| task | CB-WP-0019-T05 | done | — | workplans/CB-WP-0019-the-am4-family.md |
| task | CB-WP-0020-T01 | done | — | workplans/CB-WP-0020-the-table-you-can-read.md |
| task | CB-WP-0020-T02 | done | — | workplans/CB-WP-0020-the-table-you-can-read.md |
| task | CB-WP-0020-T03 | done | — | workplans/CB-WP-0020-the-table-you-can-read.md |
| task | CB-WP-0020-T04 | done | — | workplans/CB-WP-0020-the-table-you-can-read.md |
| task | CB-WP-0020-T05 | done | — | workplans/CB-WP-0020-the-table-you-can-read.md |
| task | CB-WP-0020-T06 | done | — | workplans/CB-WP-0020-the-table-you-can-read.md |
| task | CB-WP-0021-T01 | done | — | workplans/CB-WP-0021-import-the-edition.md |
| task | CB-WP-0021-T02 | done | — | workplans/CB-WP-0021-import-the-edition.md |
| task | CB-WP-0021-T03 | done | — | workplans/CB-WP-0021-import-the-edition.md |
| task | CB-WP-0021-T04 | done | — | workplans/CB-WP-0021-import-the-edition.md |
| task | CB-WP-0021-T05 | done | — | workplans/CB-WP-0021-import-the-edition.md |
| task | CB-WP-0021-T06 | done | — | workplans/CB-WP-0021-import-the-edition.md |
2026-08-04 00:21:21 +02:00
| task | CB-WP-0022-T01 | done | — | workplans/CB-WP-0022-the-design-instrument.md |
| task | CB-WP-0022-T02 | done | — | workplans/CB-WP-0022-the-design-instrument.md |
| task | CB-WP-0022-T03 | done | — | workplans/CB-WP-0022-the-design-instrument.md |
| task | CB-WP-0022-T04 | done | — | workplans/CB-WP-0022-the-design-instrument.md |
| task | CB-WP-0022-T05 | done | — | workplans/CB-WP-0022-the-design-instrument.md |
| task | CB-WP-0022-T06 | done | — | workplans/CB-WP-0022-the-design-instrument.md |
| task | CB-WP-0022-T07 | done | — | workplans/CB-WP-0022-the-design-instrument.md |
2026-08-04 00:21:21 +02:00
| task | CB-WP-0023-T01 | done | — | workplans/CB-WP-0023-solve-legality.md |
| task | CB-WP-0023-T02 | done | — | workplans/CB-WP-0023-solve-legality.md |
| task | CB-WP-0023-T03 | done | — | workplans/CB-WP-0023-solve-legality.md |
| task | CB-WP-0024-T01 | done | — | workplans/CB-WP-0024-the-table-you-can-watch.md |
| task | CB-WP-0024-T02 | done | — | workplans/CB-WP-0024-the-table-you-can-watch.md |
| task | CB-WP-0024-T03 | done | — | workplans/CB-WP-0024-the-table-you-can-watch.md |
| task | CB-WP-0024-T04 | done | — | workplans/CB-WP-0024-the-table-you-can-watch.md |
| task | CB-WP-0024-T05 | done | — | workplans/CB-WP-0024-the-table-you-can-watch.md |
| task | CB-WP-0025-T01 | done | — | workplans/CB-WP-0025-could-we-have-won.md |
| task | CB-WP-0025-T02 | done | — | workplans/CB-WP-0025-could-we-have-won.md |
| task | CB-WP-0025-T03 | done | — | workplans/CB-WP-0025-could-we-have-won.md |
| task | CB-WP-0025-T04 | done | — | workplans/CB-WP-0025-could-we-have-won.md |
| task | CB-WP-0025-T05 | done | — | workplans/CB-WP-0025-could-we-have-won.md |
| task | CB-WP-0025-T06 | done | — | workplans/CB-WP-0025-could-we-have-won.md |
| task | CB-WP-0025-T07 | done | — | workplans/CB-WP-0025-could-we-have-won.md |
| task | CB-WP-0026-T01 | done | — | workplans/CB-WP-0026-collect-the-rulings.md |
| task | CB-WP-0026-T02 | done | — | workplans/CB-WP-0026-collect-the-rulings.md |
| task | CB-WP-0026-T03 | done | — | workplans/CB-WP-0026-collect-the-rulings.md |
| task | CB-WP-0026-T04 | done | — | workplans/CB-WP-0026-collect-the-rulings.md |
| task | CB-WP-0026-T05 | done | — | workplans/CB-WP-0026-collect-the-rulings.md |
| task | CB-WP-0027-T01 | done | — | workplans/CB-WP-0027-the-commentary-track.md |
| task | CB-WP-0027-T02 | done | — | workplans/CB-WP-0027-the-commentary-track.md |
| task | CB-WP-0027-T03 | done | — | workplans/CB-WP-0027-the-commentary-track.md |
| task | CB-WP-0027-T04 | done | — | workplans/CB-WP-0027-the-commentary-track.md |
| task | CB-WP-0027-T05 | done | — | workplans/CB-WP-0027-the-commentary-track.md |
| task | CB-WP-0028-T01 | done | — | workplans/CB-WP-0028-the-table-you-sit-at.md |
| task | CB-WP-0028-T02 | done | — | workplans/CB-WP-0028-the-table-you-sit-at.md |
| task | CB-WP-0028-T03 | done | — | workplans/CB-WP-0028-the-table-you-sit-at.md |
| task | CB-WP-0028-T04 | done | — | workplans/CB-WP-0028-the-table-you-sit-at.md |
| task | CB-WP-0028-T05 | done | — | workplans/CB-WP-0028-the-table-you-sit-at.md |
| task | CB-WP-0028-T06 | done | — | workplans/CB-WP-0028-the-table-you-sit-at.md |
| task | CB-WP-0028-T07 | done | — | workplans/CB-WP-0028-the-table-you-sit-at.md |
| task | CB-WP-0028-T08 | done | — | workplans/CB-WP-0028-the-table-you-sit-at.md |
CB-WP-0029 T01-T03: components you can count, and a supply that does not bind 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>
2026-08-07 09:54:20 +02:00
| task | CB-WP-0029-T01 | todo | — | workplans/CB-WP-0029-the-tokens-on-the-table.md |
| task | CB-WP-0029-T02 | todo | — | workplans/CB-WP-0029-the-tokens-on-the-table.md |
| task | CB-WP-0029-T03 | todo | — | workplans/CB-WP-0029-the-tokens-on-the-table.md |
| task | CB-WP-0029-T04 | todo | — | workplans/CB-WP-0029-the-tokens-on-the-table.md |