From d07caca22b04b7a01f58ac83ceba4a4664057e07 Mon Sep 17 00:00:00 2001 From: tegwick Date: Sun, 2 Aug 2026 02:15:08 +0200 Subject: [PATCH 1/3] CB-WP-0010-T01: close CB-WP-0007 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both remaining tasks were overtaken and are cancelled with pointers. T05's control loop was answered by CB-EV-0008 §1 and §4, which measured the windowed metric and the budget firing on real passes. T06 asked whether there is a fourth way a number can fail to bind; there is, and CB-EV-0007 §3 recorded it — the meta budget, aggregated over a window that could not move it, two tasks after the same defect was fixed for session shape. The tier-taxonomy gap T06 also carried was closed by ADR-0006 D5. A workplan left in_progress makes `make status` name a stale next task, which it had been doing for two passes. Co-Authored-By: Claude Opus 5 --- WORK-RECORDS.md | 4 ++++ workplans/CB-WP-0007-session-shape.md | 24 +++++++++++++++++++----- workplans/CB-WP-0010-consolidation.md | 12 ++++++------ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/WORK-RECORDS.md b/WORK-RECORDS.md index eff43f6..302b682 100644 --- a/WORK-RECORDS.md +++ b/WORK-RECORDS.md @@ -17,6 +17,7 @@ | workplan | CB-WP-0007 | in_progress | — | 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 | proposed | — | workplans/CB-WP-0010-consolidation.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 | | task | CB-WP-0001-T03 | done | — | workplans/CB-WP-0001-inner-loop.md | @@ -81,3 +82,6 @@ | 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 | todo | — | workplans/CB-WP-0010-consolidation.md | +| task | CB-WP-0010-T02 | todo | — | workplans/CB-WP-0010-consolidation.md | +| task | CB-WP-0010-T03 | todo | — | workplans/CB-WP-0010-consolidation.md | diff --git a/workplans/CB-WP-0007-session-shape.md b/workplans/CB-WP-0007-session-shape.md index a41bd85..8a21c0b 100644 --- a/workplans/CB-WP-0007-session-shape.md +++ b/workplans/CB-WP-0007-session-shape.md @@ -2,7 +2,7 @@ id: CB-WP-0007 kind: meta title: "Make session shape measurable in the window that matters, then enforce it" -status: in_progress +status: done state_hub_workstream_id: "bee19b76-fb60-4dcf-94d0-9242b43e0e42" --- @@ -175,11 +175,18 @@ the pass and report the rate the instrument measures. ## Phase C — measure, and say what it cost -## Task: control loop — did windowing change what fires? +## Task: control loop — did windowing change what fires? (CANCELLED) + +> **Cancelled 2026-08-02 (CB-WP-0010 T01), overtaken.** Both questions +> were answered with measurements two passes later: +> [CB-EV-0008](../evidence/CB-EV-0008-adaptive-gates.md) §1 compares the +> windowed metric against cumulative on real passes, and §4 records the +> shape budget firing. Writing CB-EV-0006 now would re-derive them from +> the same transcripts. ```task id: CB-WP-0007-T05 -status: todo +status: cancel priority: high state_hub_task_id: "2f78b272-e1f9-4530-bc8c-3a9d82833546" ``` @@ -201,11 +208,18 @@ Four tests, all reported: the loop cannot detect this. Record the judgment explicitly rather than letting the cost number imply it. -## Task: retrospective +## Task: retrospective (CANCELLED) + +> **Cancelled 2026-08-02 (CB-WP-0010 T01), answered elsewhere.** The +> question was whether there is a *fourth* way a number can fail to bind. +> There is, and it is on record: CB-EV-0007 §3 found a number **aggregated +> over a window that cannot move it** — the meta budget, reintroducing the +> defect two tasks after the same one was fixed for session shape. The +> tier-taxonomy gap this task also carried was closed by ADR-0006 D5. ```task id: CB-WP-0007-T06 -status: todo +status: cancel priority: medium state_hub_task_id: "93fbd2bb-403b-4be9-a5ff-d6142b916aba" ``` diff --git a/workplans/CB-WP-0010-consolidation.md b/workplans/CB-WP-0010-consolidation.md index 494f0ac..3b31d00 100644 --- a/workplans/CB-WP-0010-consolidation.md +++ b/workplans/CB-WP-0010-consolidation.md @@ -2,8 +2,8 @@ id: CB-WP-0010 kind: product title: "Close the open ends before stage 1" -status: proposed -state_hub_workstream_id: "" +status: in_progress +state_hub_workstream_id: "071a2da8-cb95-4dda-a711-7173434bdc3c" --- # Purpose @@ -23,9 +23,9 @@ three against a soft 25%, and this pass is how it comes back down. ```task id: CB-WP-0010-T01 -status: todo +status: done priority: high -state_hub_task_id: "" +state_hub_task_id: "88bafc24-eeac-4aa0-9c40-f15307dee120" ``` CB-WP-0007 sits at 2/6 with T05 and T06 `todo`. Both were overtaken: @@ -48,7 +48,7 @@ is what it has been doing for two passes. id: CB-WP-0010-T02 status: todo priority: high -state_hub_task_id: "" +state_hub_task_id: "89355b0a-9fc7-4d69-a27e-d3c94ff0730f" ``` CB-EV-0007 §1: **COMMON PROBLEM (GR-E03) is implemented, referenced by no @@ -69,7 +69,7 @@ is the first execution of that code path. id: CB-WP-0010-T03 status: todo priority: medium -state_hub_task_id: "" +state_hub_task_id: "1da2c1de-e098-440e-8cff-7c30817d1d2b" ``` `CommitWindow` is PROVISIONAL with a delete-by of 2026-12-31, on the From 82fdb851738d49a2c4c2a3d2b59a1414b3e812ea Mon Sep 17 00:00:00 2001 From: tegwick Date: Sun, 2 Aug 2026 02:16:51 +0200 Subject: [PATCH 2/3] CB-WP-0010-T02: GR-E03 gets a scenario MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit COMMON PROBLEM was the only scoring mode with no scenario — implemented since CB-WP-0001, referenced by nothing, and would not have failed if deleted. Five players, where the threshold is reachable at all: every Problem claimed for a total of 10 against 9, and the winner is decided by Blame rather than by claimed value — P4 claimed the highest Problem and loses to P3 because two Blame tokens sit in front of them. No defect was found on the first execution of that path, which is worth saying plainly rather than implying the scenario was hard-won. The assertions were mutation-checked three ways instead of trusted, because a dot-path expectation that silently fails to resolve would report PASS: a wrong personal score, a wrong mastery, and removing the Blame from the fixture each turn it red. Co-Authored-By: Claude Opus 5 --- facts.toml | 6 +- scenarios/ground/gr-e03-common-problem.yaml | 81 +++++++++++++++++++++ workplans/CB-WP-0010-consolidation.md | 8 +- 3 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 scenarios/ground/gr-e03-common-problem.yaml diff --git a/facts.toml b/facts.toml index fd99502..06a215c 100644 --- a/facts.toml +++ b/facts.toml @@ -6,7 +6,7 @@ # `make facts-check` fails if this file disagrees with the # instruments, or if a tagged artifact disagrees with this file. -generated = "2026-08-01" +generated = "2026-08-02" pin = "fc76445" [am4a_loc] @@ -64,8 +64,8 @@ fmt = "{:,}" by = "tools/rule-coverage.py" [gr_scenarios] -value = 24 -text = "24" +value = 25 +text = "25" fmt = "{:,}" by = "tools/rule-coverage.py" diff --git a/scenarios/ground/gr-e03-common-problem.yaml b/scenarios/ground/gr-e03-common-problem.yaml new file mode 100644 index 0000000..ddf7a08 --- /dev/null +++ b/scenarios/ground/gr-e03-common-problem.yaml @@ -0,0 +1,81 @@ +scenario: ground/gr-e03-common-problem +description: > + COMMON PROBLEM scoring (GR-E03), the only scoring mode with no scenario + until CB-WP-0010 T02 — implemented since CB-WP-0001 and referenced by + nothing. Five players, where the threshold is actually reachable (10 + available against 9). The group qualifies, personal scores are claimed + value −1 per Blame held, and the Blame is what decides the winner: P4 + claimed the highest-value Problem and still loses to P3 because two + Blame tokens sit in front of them. +covers: [GR-E03, GR-E01, GR-R09, GR-T02] +seed: 42 +setup: + players: 5 + preset: standard-5p + patch: + "round": 5 + "mode": CommonProblem + # Every Problem claimed: 1+2+3+4 = 10, over the 5-6p threshold of 9. + "problems.1.claimed_by": 0 + "problems.2.claimed_by": 1 + "problems.3.claimed_by": 2 + "problems.4.claimed_by": 3 + "problems.2.face_up": true + "problems.3.face_up": true + "problems.4.face_up": true + # GR-T02: two Blame tokens in front of P4, −1 each. + "players.3.blame_from": [0, 1] +commands: + - actor: P1 + cmd: select_action + args: { action: GROUND } + - actor: P2 + cmd: select_action + args: { action: GROUND } + - actor: P3 + cmd: select_action + args: { action: GROUND } + - actor: P4 + cmd: select_action + args: { action: GROUND } + - actor: P5 + cmd: select_action + args: { action: GROUND } + - actor: SYSTEM + cmd: reveal + - actor: P1 + cmd: choose_ground_mode + args: { mode: GR } + - actor: P2 + cmd: choose_ground_mode + args: { mode: GR } + - actor: P3 + cmd: choose_ground_mode + args: { mode: GR } + - actor: P4 + cmd: choose_ground_mode + args: { mode: GR } + - actor: P5 + cmd: choose_ground_mode + args: { mode: GR } + - actor: SYSTEM + cmd: resolve + - actor: SYSTEM + cmd: end_round +expect: + events: + - kind: GameEnded + state: + "outcome.total": 10 + "outcome.threshold": 9 + "outcome.group_success": true + # GR-E03: claimed value −1 per Blame held. + "outcome.personal.3": 2 + "outcome.personal.2": 3 + # P4 claimed 4 and still loses: the Blame is load-bearing here. + "outcome.winners": [2] + # GR-E03 has no Mastery rating; that is GR-E02's. + "outcome.mastery": null + "round": 5 + "step": End + rejects: [] diff --git a/workplans/CB-WP-0010-consolidation.md b/workplans/CB-WP-0010-consolidation.md index 3b31d00..02c8a79 100644 --- a/workplans/CB-WP-0010-consolidation.md +++ b/workplans/CB-WP-0010-consolidation.md @@ -46,7 +46,7 @@ is what it has been doing for two passes. ```task id: CB-WP-0010-T02 -status: todo +status: done priority: high state_hub_task_id: "89355b0a-9fc7-4d69-a27e-d3c94ff0730f" ``` @@ -63,6 +63,12 @@ is actually reachable (10 available against 9). **Finding a defect here is the likely outcome and is the point** — this is the first execution of that code path. +**Done 2026-08-02.** `gr-e03-common-problem.yaml` passes, and **no +defect was found** — GR-E03 scored correctly on its first execution. +The assertions were mutation-checked three ways rather than trusted: +a wrong personal score, a wrong `mastery`, and removing the Blame from +the fixture each turn it red. Every scoring mode now has a scenario. + ## Task: record CommitWindow's second failed use ```task From cdc42afbb68831a4e9318ed6c2e27bbe2a973dc5 Mon Sep 17 00:00:00 2001 From: tegwick Date: Sun, 2 Aug 2026 02:19:23 +0200 Subject: [PATCH 3/3] CB-WP-0010-T03: record CommitWindow's second failed second-use MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two passes have now had the opportunity to give this type a second consumer and declined: CB-WP-0008's bots and CLI drive GROUND's inline commit/reveal, and this pass reviewed it and changed nothing. The date is not moved and the type is not deleted early. The stated condition is a second game, and no second game has been attempted, so the test has not run — only the opportunity has passed. Deleting on a test that was never run and extending a date because it is inconvenient are the same error in opposite directions. Co-Authored-By: Claude Opus 5 --- crates/cb-game-runtime/src/lib.rs | 16 ++++++++++++++++ workplans/CB-WP-0010-consolidation.md | 7 +++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/crates/cb-game-runtime/src/lib.rs b/crates/cb-game-runtime/src/lib.rs index 45b5f67..a389294 100644 --- a/crates/cb-game-runtime/src/lib.rs +++ b/crates/cb-game-runtime/src/lib.rs @@ -29,6 +29,22 @@ use std::collections::BTreeMap; /// **Delete it if no second game uses it by 2026-12-31.** A primitive /// with one hypothetical user and a test that exercises only itself is /// the AM-11 shape, and this project has paid for that shape twice. +/// +/// **Second-use log** (CB-WP-0010 T03). Two passes have now had the +/// opportunity and declined: +/// +/// * **CB-WP-0008** — bots and `cb-play` drive GROUND's inline +/// commit/reveal. A second *consumer* of the aggregate did not become +/// a consumer of this type (CB-EV-0007 §2). +/// * **CB-WP-0010** — the consolidation pass reviewed it and changed +/// nothing. +/// +/// **The date is not moved and the type is not deleted early.** The +/// stated condition is a second *game*, and no second game has been +/// attempted, so the test has not run — only the opportunity has passed. +/// Deleting on a test that was never run, or extending the date because +/// it is inconvenient, are the same error in opposite directions, and +/// InnerLoop §Step 4 forbids the second by name. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CommitWindow { /// Players who must submit, and their commitment once received. diff --git a/workplans/CB-WP-0010-consolidation.md b/workplans/CB-WP-0010-consolidation.md index 02c8a79..f4a05b3 100644 --- a/workplans/CB-WP-0010-consolidation.md +++ b/workplans/CB-WP-0010-consolidation.md @@ -2,7 +2,7 @@ id: CB-WP-0010 kind: product title: "Close the open ends before stage 1" -status: in_progress +status: done state_hub_workstream_id: "071a2da8-cb95-4dda-a711-7173434bdc3c" --- @@ -73,7 +73,7 @@ the fixture each turn it red. Every scoring mode now has a scenario. ```task id: CB-WP-0010-T03 -status: todo +status: done priority: medium state_hub_task_id: "1da2c1de-e098-440e-8cff-7c30817d1d2b" ``` @@ -88,3 +88,6 @@ no second game has been attempted, so the test has not run. Record the evidence at the type so the December decision is already argued, and leave the date alone. Moving a delete-by date on the strength of a test that was never run is exactly the retarget InnerLoop §Step 4 forbids. + +**Done 2026-08-02.** A second-use log at the type records both declined +opportunities (CB-WP-0008, CB-WP-0010). Date unchanged, type unchanged.