CB-WP-0008: ship stage 0 — a GROUND game you can actually play
Some checks failed
ci / check (push) Failing after 4s
Some checks failed
ci / check (push) Failing after 4s
INTENT stage 0 lists CLI player and simple bots. Everything else on that list exists: the engine is correct, measured and replayable, and nothing can play it. Six passes and $236 in, GROUND has never been played end to end by a human or a machine. kind: product — the first pass under InnerLoop v1.5's soft 25% meta budget, which should read comfortably under the line. Worth more than stage 0: a bot is the kernel's first SECOND consumer. INTENT says a concept becomes canonical only after surviving a second concrete use, and every abstraction here has survived exactly one. A bot driving the same aggregate through the same validate/fold path is the cheapest second use available, and it is what would tell us whether CommitWindow (provisional, delete-by 2026-12-31) and the LogStore port are the right shapes. T02 makes the per-player projection (K13) its first real consumer — the rule is implemented and used by nothing. T03 tests the 2-6 player range GR-O01 states, where every scenario in the corpus is 3-player: a rule stated for a range and tested at one point is the shape this project keeps finding, and discovering that 2p or 6p does not work is a legitimate outcome rather than a reason to narrow the rule. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
d704c61cdd
commit
63046ec22f
1 changed files with 122 additions and 0 deletions
122
workplans/CB-WP-0008-ship-stage-0.md
Normal file
122
workplans/CB-WP-0008-ship-stage-0.md
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
---
|
||||
id: CB-WP-0008
|
||||
kind: product
|
||||
title: "Ship INTENT stage 0: a GROUND game you can actually play"
|
||||
status: proposed
|
||||
---
|
||||
|
||||
# Purpose
|
||||
|
||||
INTENT stage 0 is *"Headless GROUND — full authoritative state, 2–6
|
||||
players, commit/reveal, relationships, DARVO, GROUND practice, **CLI
|
||||
player**, replay and scenario tests, **simple bots**."*
|
||||
|
||||
Everything on that list exists except the two in bold. The engine is
|
||||
correct, measured, replayable — and **nothing can play it**. Six passes
|
||||
and $236 in, GROUND has never been played end to end by a human or a
|
||||
machine.
|
||||
|
||||
This workplan is **`kind: product`** and is the first pass under
|
||||
InnerLoop v1.5's soft 25% meta budget. The budget should read comfortably
|
||||
under the line; if it does not, the evidence file says so and names what
|
||||
was displaced.
|
||||
|
||||
**A note on what this is worth beyond stage 0.** A bot is the loop's first
|
||||
*second consumer* of the kernel. INTENT says a concept becomes canonical
|
||||
only after surviving a second concrete use — every abstraction here has
|
||||
survived exactly one. A bot driving the same aggregate through the same
|
||||
commands is the cheapest second use available, and it is the thing that
|
||||
would tell us whether `CommitWindow` (provisional, delete-by 2026-12-31)
|
||||
and the `LogStore` port are the right shapes.
|
||||
|
||||
## Task: a bot that can finish a game
|
||||
|
||||
```task
|
||||
id: CB-WP-0008-T01
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
Deliver a `Policy` trait in `games/ground` and at least two impls — a
|
||||
**random** policy (seeded, so games stay deterministic and replayable) and
|
||||
a **greedy** one that prefers a stated heuristic. Both drive `GroundState`
|
||||
through the ordinary `validate`/`fold` path; a bot that reaches into state
|
||||
directly would prove nothing about the kernel.
|
||||
|
||||
**The positive control this needs:** a bot that cannot find a legal move
|
||||
must **fail loudly**, not stall or pass. The synthetic bench already
|
||||
carries this shape after an earlier harness spun forever on the GR-R03
|
||||
stress gate — the same failure is available here and would be worse,
|
||||
because a stalled bot looks like a finished game.
|
||||
|
||||
**Acceptance:** a 3-player all-bot game runs to `GameEnded` (GR-R09, five
|
||||
rounds) with every command legal, and two runs at the same seed produce
|
||||
identical state hashes (K8).
|
||||
|
||||
## Task: `cb-play` — the CLI player
|
||||
|
||||
```task
|
||||
id: CB-WP-0008-T02
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
A binary that lets a human play GROUND against bots, headless.
|
||||
|
||||
- renders the **per-player projection** (K13) for the seat to move —
|
||||
which is the first real consumer of that rule, currently implemented and
|
||||
used by nothing;
|
||||
- lists the legal commands for that seat and reads one from stdin;
|
||||
- fills remaining seats from `--bot <policy>`;
|
||||
- `--seed` for reproducibility, and writes a `.cbreplay` bundle on demand
|
||||
so any game becomes an artifact (K10, shipped in CB-WP-0006 T06).
|
||||
|
||||
**Stated non-goal:** no TUI, no colour, no interactive niceties. Stage 1
|
||||
is the inspectable 2D table; this is the smallest thing that makes the
|
||||
rules playable, and dressing it up now would be inventing a UI before a
|
||||
player has used one.
|
||||
|
||||
**Acceptance:** a scripted stdin transcript plays a full 3-player game to
|
||||
`GameEnded`; the same transcript replays identically; and a seat's
|
||||
projection never contains another seat's hidden selection.
|
||||
|
||||
## Task: prove the 2–6 player range
|
||||
|
||||
```task
|
||||
id: CB-WP-0008-T03
|
||||
status: todo
|
||||
priority: medium
|
||||
```
|
||||
|
||||
GR-O01 says 2–6 players. `setup` derives its preset from the seat count
|
||||
and looks generic, but **every scenario in the corpus is 3-player** and
|
||||
the only presets exercised are `standard-3p`. A rule stated for a range
|
||||
and tested at one point is the shape this project keeps finding.
|
||||
|
||||
Deliver scenarios at the **2-player and 6-player** boundaries, plus an
|
||||
all-bot game at each, and report what breaks. Finding that 2p or 6p does
|
||||
*not* work is a legitimate and likely outcome — record it rather than
|
||||
quietly narrowing GR-O01.
|
||||
|
||||
## Task: evidence and retrospective
|
||||
|
||||
```task
|
||||
id: CB-WP-0008-T04
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
Commit `evidence/CB-EV-0007-stage-0.md`:
|
||||
|
||||
1. **Is stage 0 shipped?** Each INTENT stage-0 item, met or not.
|
||||
2. **What did the second consumer reveal?** The bot is the kernel's first
|
||||
non-scenario user. Name every abstraction it had to work around, and
|
||||
every one that fitted — that is the evidence INTENT's second-use rule
|
||||
was waiting for.
|
||||
3. **Meta share** under InnerLoop v1.5, and whether a product pass
|
||||
actually reads under 25%.
|
||||
4. **Cost per unit of product**, against the $0.122–$0.359 per-response
|
||||
range the spend review established.
|
||||
|
||||
Then the retrospective the maintainer asked for: **six passes in, is the
|
||||
loop earning its keep?** Answer with the spend curve, not with argument.
|
||||
Loading…
Add table
Add a link
Reference in a new issue