diff --git a/evidence/CB-EV-0033-boards-and-modes.md b/evidence/CB-EV-0033-boards-and-modes.md new file mode 100644 index 0000000..93670ba --- /dev/null +++ b/evidence/CB-EV-0033-boards-and-modes.md @@ -0,0 +1,123 @@ +# CB-EV-0033 — the four boards and the three modes, measured + +date: 2026-08-08 +produced by: [CB-WP-0047](../workplans/CB-WP-0047-all-four-boards-and-all-three-modes.md), +[CB-WP-0049](../workplans/CB-WP-0049-a-seat-that-plays-its-own-objective.md) +instrument: `games/ground/examples/scenario-panel.rs` (`make panels`) +reported to ground-game as: `reports/260808-clay-borg-boards-and-modes.md` + +## What was run + +4 scenarios × 3 modes × 3 seat bands × 2 policies, **100 games per cell**, +seeds 0..100, every seat filled by the same bot. + +| policy | what it is | +|---|---| +| `greedy` | `GreedyPolicy`, which **never reads `state.mode`** | +| `objective` | `ObjectivePolicy`, which plays its seat's own objective, read off `GroundState::score` | + +**Every cell asserts `games == 100` and `played == 100`** — a game that +ran is not a game that was played (CB-REV-0003 #2), and a short column is +a sample nobody chose (CB-REV-0002 #1). + +**Both policies are proven blind** to what their seat cannot see +([ADR-0023](../decisions/ADR-0023-a-policy-is-bound-by-what-its-seat-can-see.md)): +vary only face-down Problems and other seats' hands, and neither changes +its move. The control is proven against a deliberate peeker first. + +## 1 — SCN_01 and SCN_02 are the same board + +Identical suit and value at **every** priority. Every cell matches +exactly, in both policies, at all three seat bands. + +Not a defect — a reskin is a legitimate design choice — but **"four +scenarios" buys three boards**, and a panel that treated them as four +independent samples would be counting one of them twice. Pinned by +`which_scenarios_are_mechanically_distinct`, so a future divergence is a +decision rather than a drift. + +## 2 — SCN_04 is the hard board at 2 players + +| board | 2p group success (greedy, /100) | +|---|---| +| SCN_01 / SCN_02 | 67 | +| SCN_03 | 73 | +| **SCN_04** | **52** | + +**The 2p deals are identical in every respect except one.** All four +scenarios deal Surface + priorities 1–2, all four give values 2+2+2 = 6 +available against a threshold of 5, and all four start at Stress 2 over +five rounds. The single difference is the **suit multiset**: + +| board | 2p suits | +|---|---| +| SCN_01 / SCN_02 | Repair, Clarify, Boundary | +| SCN_03 | Boundary, Clarify, Repair | +| **SCN_04** | **Repair, Clarify, Repair** | + +SCN_04 is the only deck that needs **two of one suit** in the 2p deal. +Because every other parameter is held fixed by the edition itself, this +is close to a controlled comparison — but **the causal claim is not +measured**: nothing here demonstrates that the second Repair is what +costs the 15 points. The falsifier is a deck with a doubled suit that +does *not* lose group success. + +## 3 — every board is a formality at 6 players + +100/100 group success in all twelve 6p cells, both policies, every mode. +Consistent with F17's shape. Reported, not acted on. + +## 4 — the modes change who wins, not whether the group succeeds + +`greedy` vs `objective`, group success: + +**Unchanged in 34 of 36 cells.** SCN_03 at 4p moves 99 → 100 in all three +modes, which is the SOLVE-by-card-value refinement and not a mode effect +(it moves under SHARED GROUND too). + +Winning **seats** per game, BONDED COALITIONS: + +| board | 4p greedy | 4p objective | +|---|---|---| +| SCN_01 / SCN_02 | 2.04 | **2.98** | +| SCN_03 | 2.12 | **3.29** | +| SCN_04 | 2.05 | **3.01** | + +COMMON PROBLEM at 6p: 1.10 → 1.17. Everything else flat. + +**The control that makes this mean anything:** under SHARED GROUND the +two policies agree at all but ≤2 decision points across twelve boards. A +moving column is therefore mode-awareness and not simply a different bot. + +### Where the modes *can* differ + +**SOLVE always claims for the actor**, so a seat maximising its own score +and one maximising the group's want the same SOLVE in nearly every +position. That is a fact about GROUND's action set and it bounds how far +apart any two policies can get. The two real divergences: + +- **SUPPORT regulates someone else** — worth less when the beneficiary is + a rival, worth *more* when a Bond merges them into my coalition and my + score is the coalition's sum; +- **SOLVE's value is the card's value**, which greedy ignores entirely. + +### The seat-band pattern, and one untested explanation + +2p: nothing moves in any mode. 4p: the largest effect. 6p: **nothing** +under BONDED COALITIONS. + +**Sensitivity:** vary only the seat band and the effect appears and +disappears with every other parameter held. A candidate explanation is +that **two relation slots per seat cap network growth**, so at 6p the +incentive exists and cannot be acted on. **Untested.** The falsifier is a +run with a third relation slot: if coalition size at 6p then moves the +way it does at 4p, the cap is the cause. + +## What this does not establish + +- **No policy models a rival playing their objective.** A competitive + mode in which nobody anticipates an opponent is a weak test of that + mode. F27 stays `reported`, not resolved. +- **No felt play.** Every number here is bots. +- **Bond-scoped joint SOLVE remains untested** (CB-EV-0032 criterion 4, + unchanged): these policies read the mode, not the module. diff --git a/specs/FindingRegister-closed.md b/specs/FindingRegister-closed.md new file mode 100644 index 0000000..c6b77c7 --- /dev/null +++ b/specs/FindingRegister-closed.md @@ -0,0 +1,198 @@ +# Finding register — closed findings + +The prose for findings that are **withdrawn** or **applied**. Split out of +[`FindingRegister.md`](FindingRegister.md) when it crossed the ~400-line +loadability limit (CB-WP-0049). + +**The register itself is unchanged.** Every row still lives in the +machine-readable block there, and `make design` still reads exactly one +file. What moved is the *history* — ADR-0012 D5's reasoning applies: a +default view that mixes open and closed loses the queue property, and the +same is true of a file. + +A closed finding is not deleted, because the account of why something was +withdrawn is often the more useful half. + +- **F11 — SOLVE offered where it cannot act.** Offered on a face-down + Problem, or with no matching suit in hand; inert every time. Ruled + GROUND-WP-0002 T02, implemented CB-WP-0023 as GR-P05. `applied` — the + rule changed, not just the annotation. **The case we reported was not the + case that fired**: `validate` already rejected face-down, and the + maintainer's three inert SOLVEs were the *hand* case. + +- **F12 — GR-A13 "wasted SOLVE" on an already-claimed Problem.** A + scenario had to pick a default and did. `note`: no artifact isolates the + degenerate line, so under GameDesign §3.1 it may not be reported until + one exists. + +- **F13 — GR-E01 vs GR-S01, withdrawn 2026-08-05.** Raised as *"4/6/9 + against 5/7/9, no dataset reconciles them."* `2da19a4` measured **6/9/12 + against 5/7/9** and the scenario was renamed `-unreachable-` → + `-reachable-`. **Its reproduction is green**, which under GameDesign §1.3 + is the alarm that forced the resolution. Withdrawn rather than deleted, + and the withdrawal is reported (ADR-0012 D5). + +- **F16 — "the game is too easy at 5–6 seats", withdrawn the day it was + raised.** Claimed from `GreedyPolicy` winning 200/200 at those seat + counts. A `FirstLegal` policy scores **0%** on the identical deals, and + at two seats it *beats* greedy — two unsophisticated agents span the + whole range, so the measurement was about the policy. Caught by the + CB-WP-0025 adversarial review (C4) **before transmission**; it would + have been the fifth wrong premise sent to ground-game and the worst, + since GROUND-WP-0005 is blocked on exactly this number. The withdrawal + was reported (ADR-0012 D5). Its reproduction is `difficulty.rs`, whose + policy panel is plural *because of this finding*. + +- **F23 — a false claim propagated five times by citation instead of + measurement.** CB-EV-0024 §6 stated that chaos window 2 produced **zero + overrides** and that its retirement condition was untestable. CB-EV-0025, + CB-EV-0026, CB-EV-0027 and CB-WP-0029 each repeated it, citing the one + before. + + **It was false.** Declaration 3 (CB-WP-0020) rolled d8 = 8 and overrode — + and **CB-WP-0020 recorded it correctly at the time**, in those words: + *"the first override at d8… It changed nothing… **One.**"* Counting the + workplans takes one command. + + **The subject makes it worse.** Three of those four files were arguing + that this project's defect is claims asserted without their + reproduction — while carrying one. `facts-check` catches a copied number + that disagrees with its source; nothing catches a number with **no + source**, asserted once and cited thereafter. + + **`applied`** — ADR-0017 corrects it, and each of the four files carries + an in-place correction rather than a silent edit (ADR-0012 D5). **The + general defect is not fixed**: it is the same family as the five + wrong-subject instances, and still has no control. + +- **F22 — does the component supply bind the game? Asked, measured, and + withdrawn.** `Tokens.csv` gives every component a `quantity` — 6 + Protection, 5 Denied, 12 relation links — and **no numbered rule + mentions a supply**, so the engine could in principle mint a seventh + Protection token (`saturating_add`, no bound, `lib.rs:986`). Measured + over **750 games**, 2–6 seats, greedy and random: Protection reaches 1 + per seat and 2 on the table; Denied 3 of 5; links **exactly 12 of 12**, + never over, because GR-L01's two-slot rule *is* the twelve-token supply + written twice. Focus/Blame: 0 conflicts. **Withdrawn — nothing to + report.** Registered as a stated negative because a survey that finds + nothing and leaves no trace cannot be told from one that was never run. + The check ships as a standing control (ADR-0016 D3): if play ever does + exceed a quantity, that is a **finding for ground-game** — *does the box + bound the game, or do the rules?* — and **not** a bound for the engine to + invent. + +- **F21 — dragging did not work until after the first note was saved.** + Reported 2026-08-06: *"I could not drag and drop at the beginning but + after I added the first comment it worked."* **`note`, and I could not + reproduce it.** The gesture logic is correct against the served page + (the JS harness posts properly), the ghost carries `pointer-events:none` + so it cannot intercept the drop, and the markup is identical before and + after the note — the 303 re-renders the same page from the same state. + **Candidates, none confirmed:** a `
` toggle inside an action + card shifting the layout mid-drag; a first-load timing difference; or a + browser-level pointer capture. **Reproducing it needs a browser, which + no test here has** — the same gap F19 named. Recorded rather than + guessed at. + +- **F20 — a click target wearing a drag affordance made the ending + controls look dead.** `play again`, `end session`, `pass` and the move + buttons carried `.pick`, which is `cursor:grab`. A grab cursor invites a + **drag**, and a drag released over nothing posts nothing — so the button + did nothing and appeared broken. Reported as two separate observations + (*"the button shows a hand to pick up that it probably shouldn't"* and + *"I can't start another game or stop the server"*) which are one defect. + **`applied`**: click targets now carry `.tap`. **This extends CB-WP-0017's + rule** — interactive and inert must not look identical — to *click and + drag must not look identical either*. + +- **F19 — the engine shipped a table nobody could play on, and every gate + was green.** CB-WP-0028's overhead view was 620px tall, so the action + cards sat a screen below the Problems; dragging between them was + physically impossible. Seats were drawn *inside* the table, and the + `table` drop target was a card among the buttons rather than the drawn + surface. **`make all` passed throughout**, because every test asserted + the DOM was correct — which it was. The JS harness even posts a correct + gesture against a page a human cannot drag on. `degenerate`: the feature + fires and collapses play. **`applied`** — fixed 2026-08-06, with height, + seat-position and single-drop-zone proxies added. **They are proxies.** + Nothing here lays out a browser, and the gap CB-EV-0026 named — that no + gate measures whether a player can play — is unclosed. + +- **F14 — GR-E03/GR-E04 never played to the end. Closed 2026-08-07, and + the reason they were unplayed was ours.** `cb-play` built every game with + `ScoringMode::SharedGround` and passed an **empty patch**, so two of the + three shipped modes were unreachable from the only way anyone plays. The + mode was patchable in *scenarios* and not from the *driver*. `--mode` + added; all three now play to the end and give **different winners from + identical play**: shared → all four seats, common → P3 alone, coalitions + → P1+P2. **`applied`** — 800 games per mode in the reproduction. + +### The register's first run found ten answers nobody had collected + +**U1–U10 are `ruled`, not `reported`.** GROUND-WP-0002 T05 answered all +ten on **2026-08-03** — every one **confirmed** as the default clay-borg +already simulates — and GROUND-WP-0002 T03 confirmed five of the six +provisional scenarios, voiding `gr-e01` as a rules gap. The workplan is +`finished`. + +CB-RES-0007 reported *"0 of 10 ruled"* and this register was built saying +`reported`. **Both were two days stale on the day they were written.** The +answers had arrived and nothing propagated them — the same failure as the +unread inbox, in the opposite direction. + +**They are `ruled`, not `applied`, and the difference is work we owe.** +Per ADR-0012 D5, `applied` means the source changed and the provisional +default was deleted. The rulings *confirmed* our defaults, so the rules did +not move — but the scenarios still carry `provisional: true` for choices +that are now settled. **Lifting those flags and recording each ruling is +what closes U1–U10**, and it is not done. `make design` shows them open +until it is. + +### The U-item ↔ scenario mapping, measured twice + +**One U-item has a scenario that names it: U2.** CB-RES-0007 asserted six +of ten did. + +CB-WP-0026 T03 tried to write the other mappings and **produced two wrong +ones before checking them**: + +| claimed | why it was withdrawn | +|---|---| +| `gr-a04-bond-support` → U1 | it asserts consent is **required**; U1 asks **when** the target accepts. Different question. | +| `gr-d05-darvo-reverse` → U5 | it exercises the **unrejected** REVERSE; U5 is the **rejected** one (GROUND—ND). Different stage. | + +Both were plausible from the `covers:` list and both were wrong on +reading the description. **That is the third and fourth instance of this +exact defect** — a link that looks right, asserted without checking what +the artifact actually exercises — and the first two reached ground-game. + +So a scenario now declares `encodes_u_item` explicitly or claims nothing. +**Nine U-items have no reproduction and are recorded as having none.** +They are `applied` because the ruling landed and the provisional flag came +off, not because anything demonstrates them. + +### What the backfill measured, and what it contradicted + +**Only U2 names its U-item in a scenario.** Measured, not estimated: + +``` +for u in U1 .. U10; do grep -lE "\b$u\b" scenarios/ground/*.yaml; done +``` + +CB-RES-0007 asserted *"six of the ten already have provisional +scenarios."* Five provisional scenarios exist and **one** cites the item +it stands for. The other four may well encode U-item defaults — the +mapping is simply **not written down**, so it is not checkable, and an +uncheckable link is the defect this register exists to fix. The register +records what is citable; the rest is debt, visible in `make design`. + +**No sixth kind was needed** — the five kinds absorbed all four non-U +findings. And the survey's *"six provisional defaults"* was **not** entered +as a finding: C3 showed it double-counted GR-E01, and the provisional +scenarios are *reproductions for* underdetermined items, not a finding of +their own. + +**U1–U10 are `reported` while lacking reproductions**, which GameDesign +§3.1 would now forbid. They were reported on 2026-07-30, before the rule +existed. They are grandfathered rather than rewritten, and the debt is a +reported metric with a target of zero. diff --git a/specs/FindingRegister.md b/specs/FindingRegister.md index 041a006..f743180 100644 --- a/specs/FindingRegister.md +++ b/specs/FindingRegister.md @@ -53,12 +53,48 @@ kinds, states and metrics: [`GameDesign.md`](GameDesign.md). Reported by | F21 | degenerate | note | — | — | 2026-08-06 | clay-borg | | F23 | inconsistent | applied | decisions/ADR-0017-chaos-window-2-verdict.md | counterexample | 2026-08-07 | clay-borg | | F22 | underdetermined | withdrawn | games_ground::edition::supply_tests::play_never_exceeds_the_components_the_box_holds | counterexample | 2026-08-07 | clay-borg | -| F26 | inert | raised | `crates/cb-render-html/src/lib.rs::a_scoped_table_says_what_a_scope_does` | counterexample | 2026-08-08 | ground-game | +| F26 | inert | reported | `crates/cb-render-html/src/lib.rs::a_scoped_table_says_what_a_scope_does` | counterexample | 2026-08-08 | ground-game | | F27 | unplayed | reported | `games/ground/examples/scenario-panel.rs` | counterexample | 2026-08-08 | clay-borg | -| F28 | underdetermined | raised | `games_ground::tests::the_mastery_rating_and_the_shared_score_count_different_things` | counterexample | 2026-08-08 | ground-game | +| F29 | inconsistent | reported | `games_ground::edition::card_text_tests::which_scenarios_are_mechanically_distinct` | counterexample | 2026-08-08 | ground-game | +| F30 | degenerate | reported | `games/ground/examples/scenario-panel.rs` | counterexample | 2026-08-08 | ground-game | +| F28 | underdetermined | reported | `games_ground::tests::the_mastery_rating_and_the_shared_score_count_different_things` | counterexample | 2026-08-08 | ground-game | +Prose for **closed** findings (withdrawn or applied) lives in +[`FindingRegister-closed.md`](FindingRegister-closed.md); the rows above +are the whole register and `make design` reads them from here. + + +- **F29 — SCN_01 and SCN_02 are the same board.** Identical suit and + value at every priority; every measured cell matches exactly at every + seat band under both policies. **Not called a defect** — a reskin is a + legitimate design choice — but "four scenarios" is three boards, and a + study treating them as four independent samples double-counts one. + `inconsistent` because two artifacts that present as distinct are not; + the register does not have a kind for "intended duplication", and + inventing one before ground-game rules would be answering for them. + + **Sensitivity:** none — this is an identity, not a measurement. It + holds for every seed and every seat band by construction, and the test + is a characterisation so a future divergence is a decision. + +- **F30 — SCN_04 is materially harder at 2 players.** 52/100 group + success against 67 and 73, with **every other parameter held by the + edition itself**: same deal shape, same 6 available points, same + threshold 5, same starting Stress. The lone difference is that SCN_04 + is the only 2p deal needing **two of one suit** (Repair, Clarify, + Repair). + + **Causation is not established** and the finding does not claim it. The + falsifier is a deck with a doubled suit that does not lose group + success. + + **Sensitivity:** vary only the seat band and the gap closes — at 4p + SCN_04 is 97 against 94/99, so it is *not* the hard board there. The + effect is specific to the 2p deal, which is the band where the deck has + fewest cards to route around a suit it cannot match. + - **F27 — the two competitive modes are scoring lenses over cooperative play.** `scenario-panel` finds group success *exactly* equal across SHARED GROUND, COMMON PROBLEM and BONDED COALITIONS in all 36 cells. @@ -133,102 +169,6 @@ kinds, states and metrics: [`GameDesign.md`](GameDesign.md). Reported by it needed (CB-WP-0046); the other twenty-one remain unread and that is the standing evidence. -- **F11 — SOLVE offered where it cannot act.** Offered on a face-down - Problem, or with no matching suit in hand; inert every time. Ruled - GROUND-WP-0002 T02, implemented CB-WP-0023 as GR-P05. `applied` — the - rule changed, not just the annotation. **The case we reported was not the - case that fired**: `validate` already rejected face-down, and the - maintainer's three inert SOLVEs were the *hand* case. -- **F12 — GR-A13 "wasted SOLVE" on an already-claimed Problem.** A - scenario had to pick a default and did. `note`: no artifact isolates the - degenerate line, so under GameDesign §3.1 it may not be reported until - one exists. -- **F13 — GR-E01 vs GR-S01, withdrawn 2026-08-05.** Raised as *"4/6/9 - against 5/7/9, no dataset reconciles them."* `2da19a4` measured **6/9/12 - against 5/7/9** and the scenario was renamed `-unreachable-` → - `-reachable-`. **Its reproduction is green**, which under GameDesign §1.3 - is the alarm that forced the resolution. Withdrawn rather than deleted, - and the withdrawal is reported (ADR-0012 D5). -- **F16 — "the game is too easy at 5–6 seats", withdrawn the day it was - raised.** Claimed from `GreedyPolicy` winning 200/200 at those seat - counts. A `FirstLegal` policy scores **0%** on the identical deals, and - at two seats it *beats* greedy — two unsophisticated agents span the - whole range, so the measurement was about the policy. Caught by the - CB-WP-0025 adversarial review (C4) **before transmission**; it would - have been the fifth wrong premise sent to ground-game and the worst, - since GROUND-WP-0005 is blocked on exactly this number. The withdrawal - was reported (ADR-0012 D5). Its reproduction is `difficulty.rs`, whose - policy panel is plural *because of this finding*. -- **F23 — a false claim propagated five times by citation instead of - measurement.** CB-EV-0024 §6 stated that chaos window 2 produced **zero - overrides** and that its retirement condition was untestable. CB-EV-0025, - CB-EV-0026, CB-EV-0027 and CB-WP-0029 each repeated it, citing the one - before. - - **It was false.** Declaration 3 (CB-WP-0020) rolled d8 = 8 and overrode — - and **CB-WP-0020 recorded it correctly at the time**, in those words: - *"the first override at d8… It changed nothing… **One.**"* Counting the - workplans takes one command. - - **The subject makes it worse.** Three of those four files were arguing - that this project's defect is claims asserted without their - reproduction — while carrying one. `facts-check` catches a copied number - that disagrees with its source; nothing catches a number with **no - source**, asserted once and cited thereafter. - - **`applied`** — ADR-0017 corrects it, and each of the four files carries - an in-place correction rather than a silent edit (ADR-0012 D5). **The - general defect is not fixed**: it is the same family as the five - wrong-subject instances, and still has no control. -- **F22 — does the component supply bind the game? Asked, measured, and - withdrawn.** `Tokens.csv` gives every component a `quantity` — 6 - Protection, 5 Denied, 12 relation links — and **no numbered rule - mentions a supply**, so the engine could in principle mint a seventh - Protection token (`saturating_add`, no bound, `lib.rs:986`). Measured - over **750 games**, 2–6 seats, greedy and random: Protection reaches 1 - per seat and 2 on the table; Denied 3 of 5; links **exactly 12 of 12**, - never over, because GR-L01's two-slot rule *is* the twelve-token supply - written twice. Focus/Blame: 0 conflicts. **Withdrawn — nothing to - report.** Registered as a stated negative because a survey that finds - nothing and leaves no trace cannot be told from one that was never run. - The check ships as a standing control (ADR-0016 D3): if play ever does - exceed a quantity, that is a **finding for ground-game** — *does the box - bound the game, or do the rules?* — and **not** a bound for the engine to - invent. -- **F21 — dragging did not work until after the first note was saved.** - Reported 2026-08-06: *"I could not drag and drop at the beginning but - after I added the first comment it worked."* **`note`, and I could not - reproduce it.** The gesture logic is correct against the served page - (the JS harness posts properly), the ghost carries `pointer-events:none` - so it cannot intercept the drop, and the markup is identical before and - after the note — the 303 re-renders the same page from the same state. - **Candidates, none confirmed:** a `
` toggle inside an action - card shifting the layout mid-drag; a first-load timing difference; or a - browser-level pointer capture. **Reproducing it needs a browser, which - no test here has** — the same gap F19 named. Recorded rather than - guessed at. -- **F20 — a click target wearing a drag affordance made the ending - controls look dead.** `play again`, `end session`, `pass` and the move - buttons carried `.pick`, which is `cursor:grab`. A grab cursor invites a - **drag**, and a drag released over nothing posts nothing — so the button - did nothing and appeared broken. Reported as two separate observations - (*"the button shows a hand to pick up that it probably shouldn't"* and - *"I can't start another game or stop the server"*) which are one defect. - **`applied`**: click targets now carry `.tap`. **This extends CB-WP-0017's - rule** — interactive and inert must not look identical — to *click and - drag must not look identical either*. -- **F19 — the engine shipped a table nobody could play on, and every gate - was green.** CB-WP-0028's overhead view was 620px tall, so the action - cards sat a screen below the Problems; dragging between them was - physically impossible. Seats were drawn *inside* the table, and the - `table` drop target was a card among the buttons rather than the drawn - surface. **`make all` passed throughout**, because every test asserted - the DOM was correct — which it was. The JS harness even posts a correct - gesture against a page a human cannot drag on. `degenerate`: the feature - fires and collapses play. **`applied`** — fixed 2026-08-06, with height, - seat-position and single-drop-zone proxies added. **They are proxies.** - Nothing here lays out a browser, and the gap CB-EV-0026 named — that no - gate measures whether a player can play — is unclosed. - **F17 — ATTACK cannot affect whether the table succeeds.** Reported from play as *"there is no incentive to play attacks as long as I have positive cards"*, and **the artifact now exists**: @@ -313,82 +253,3 @@ kinds, states and metrics: [`GameDesign.md`](GameDesign.md). Reported by play — a unit test showing the two tallies point at different seats demonstrates only that they can differ, which is arithmetic, not a design defect. Under GameDesign §3.1 it may not be reported until one exists. -- **F14 — GR-E03/GR-E04 never played to the end. Closed 2026-08-07, and - the reason they were unplayed was ours.** `cb-play` built every game with - `ScoringMode::SharedGround` and passed an **empty patch**, so two of the - three shipped modes were unreachable from the only way anyone plays. The - mode was patchable in *scenarios* and not from the *driver*. `--mode` - added; all three now play to the end and give **different winners from - identical play**: shared → all four seats, common → P3 alone, coalitions - → P1+P2. **`applied`** — 800 games per mode in the reproduction. - -### The register's first run found ten answers nobody had collected - -**U1–U10 are `ruled`, not `reported`.** GROUND-WP-0002 T05 answered all -ten on **2026-08-03** — every one **confirmed** as the default clay-borg -already simulates — and GROUND-WP-0002 T03 confirmed five of the six -provisional scenarios, voiding `gr-e01` as a rules gap. The workplan is -`finished`. - -CB-RES-0007 reported *"0 of 10 ruled"* and this register was built saying -`reported`. **Both were two days stale on the day they were written.** The -answers had arrived and nothing propagated them — the same failure as the -unread inbox, in the opposite direction. - -**They are `ruled`, not `applied`, and the difference is work we owe.** -Per ADR-0012 D5, `applied` means the source changed and the provisional -default was deleted. The rulings *confirmed* our defaults, so the rules did -not move — but the scenarios still carry `provisional: true` for choices -that are now settled. **Lifting those flags and recording each ruling is -what closes U1–U10**, and it is not done. `make design` shows them open -until it is. - -### The U-item ↔ scenario mapping, measured twice - -**One U-item has a scenario that names it: U2.** CB-RES-0007 asserted six -of ten did. - -CB-WP-0026 T03 tried to write the other mappings and **produced two wrong -ones before checking them**: - -| claimed | why it was withdrawn | -|---|---| -| `gr-a04-bond-support` → U1 | it asserts consent is **required**; U1 asks **when** the target accepts. Different question. | -| `gr-d05-darvo-reverse` → U5 | it exercises the **unrejected** REVERSE; U5 is the **rejected** one (GROUND—ND). Different stage. | - -Both were plausible from the `covers:` list and both were wrong on -reading the description. **That is the third and fourth instance of this -exact defect** — a link that looks right, asserted without checking what -the artifact actually exercises — and the first two reached ground-game. - -So a scenario now declares `encodes_u_item` explicitly or claims nothing. -**Nine U-items have no reproduction and are recorded as having none.** -They are `applied` because the ruling landed and the provisional flag came -off, not because anything demonstrates them. - -### What the backfill measured, and what it contradicted - -**Only U2 names its U-item in a scenario.** Measured, not estimated: - -``` -for u in U1 .. U10; do grep -lE "\b$u\b" scenarios/ground/*.yaml; done -``` - -CB-RES-0007 asserted *"six of the ten already have provisional -scenarios."* Five provisional scenarios exist and **one** cites the item -it stands for. The other four may well encode U-item defaults — the -mapping is simply **not written down**, so it is not checkable, and an -uncheckable link is the defect this register exists to fix. The register -records what is citable; the rest is debt, visible in `make design`. - -**No sixth kind was needed** — the five kinds absorbed all four non-U -findings. And the survey's *"six provisional defaults"* was **not** entered -as a finding: C3 showed it double-counted GR-E01, and the provisional -scenarios are *reproductions for* underdetermined items, not a finding of -their own. - -**U1–U10 are `reported` while lacking reproductions**, which GameDesign -§3.1 would now forbid. They were reported on 2026-07-30, before the rule -existed. They are grandfathered rather than rewritten, and the debt is a -reported metric with a target of zero. -