Compare commits

...

3 commits

Author SHA1 Message Date
cdc42afbb6 CB-WP-0010-T03: record CommitWindow's second failed second-use
Some checks failed
ci / check (push) Failing after 3s
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 <noreply@anthropic.com>
2026-08-02 02:19:23 +02:00
82fdb85173 CB-WP-0010-T02: GR-E03 gets a scenario
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 <noreply@anthropic.com>
2026-08-02 02:16:51 +02:00
d07caca22b CB-WP-0010-T01: close CB-WP-0007
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 <noreply@anthropic.com>
2026-08-02 02:15:08 +02:00
6 changed files with 140 additions and 16 deletions

View file

@ -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 |

View file

@ -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<C> {
/// Players who must submit, and their commitment once received.

View file

@ -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"

View file

@ -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: []

View file

@ -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"
```

View file

@ -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: done
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:
@ -46,9 +46,9 @@ 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: ""
state_hub_task_id: "89355b0a-9fc7-4d69-a27e-d3c94ff0730f"
```
CB-EV-0007 §1: **COMMON PROBLEM (GR-E03) is implemented, referenced by no
@ -63,13 +63,19 @@ 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
id: CB-WP-0010-T03
status: todo
status: done
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
@ -82,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.