# CB-EV-0007 — INTENT stage 0, and whether the loop earns its keep CB-WP-0008 T04. Measured 2026-08-01, at `HEAD` after T03. --- ## 1. Is stage 0 shipped? > **INTENT 0. Headless GROUND** — *full authoritative state, 2–6 players, > commit/reveal, relationships, DARVO, GROUND practice, CLI player, replay > and scenario tests, simple bots. No rendering, no physics.* | item | state | where | |---|---|---| | full authoritative state | **met** | event-sourced aggregate, K1–K3; `state_hash_hex` | | 2–6 players | **met, with a caveat below** | CB-WP-0008 T03: all five counts play out, both policies, reproducible | | commit/reveal | **met** | GR-R02/R04 face-down selections; hidden in the projection | | relationships | **met** | Bond/Rivalry, GR-L01..L05, slots enforced | | DARVO | **met** | GR-D02..D07 resolve; `gr-d01`…`gr-d06` | | GROUND practice | **met** | GR/OU/ND with sub-choices, GR-A10..A12 | | **CLI player** | **met (new)** | `tools/cb-play`, `make play` | | replay and scenario tests | **met** | 24 scenarios, K10 `.cbreplay`, `make replay-test` | | **simple bots** | **met (new)** | `games/ground/src/bot.rs`, random + greedy | | no rendering, no physics | **met** | nothing in the tree draws | **Stage 0 is shipped.** The two items that were missing at the start of this pass — the CLI player and the bots — are the two the workplan was opened for. Three qualifications, none of which I will hide behind a checkmark: 1. **GR-E01's threshold is unreachable below five seats** with the standard preset's placeholder Problem values. Best possible total is 3 / 6 / 6 / 10 / 10 against thresholds 5 / 7 / 7 / 9 / 9. The rules work at every count; the *fixture* cannot be won at 2–4 players. Pinned by `gr-e01-threshold-unreachable-2p`, an arithmetic test, and a provisional marker owned by `ground-game`. 2. **GR-A13 admits SOLVE against an already-claimed Problem**, which then resolves to nothing — a silently wasted action. Found by the greedy bot in its first game. 3. **The scoring modes are not equally exercised.** Every full game ever played — scenario, bot or CLI — scored under **SHARED GROUND**. GR-E04 is reached only from a patched round-5 state, and **GR-E03 (COMMON PROBLEM) has no scenario at all**: it is implemented, unreferenced by any test, and would not fail if deleted. ## 2. What did the second consumer reveal? INTENT: *"No concept becomes canonical merely because it looks general. It becomes canonical after surviving a second concrete use."* Before this pass every abstraction here had survived exactly one use — the scenario runner. The bots and the CLI are the second. | abstraction | verdict from the second use | |---|---| | `Aggregate` (validate → fold) | **fits.** Bots drive it unchanged; nothing needed widening. | | `Project` / K13 | **fits, and was untested.** Six passes with zero implementors; `GroundView` is the first. Writing it is what exposed that `seed` must not project — it is not secret content, but a seat holding it can compute the deck. | | `ScenarioGame::parse_command` | **fits, and gained an inverse.** `record::to_step` round-trips every command shape, so a played session becomes a scenario. | | K10 replay bundles | **fits.** `cb-play --replay` writes one with no change to the writer. | | `Policy` (new) | one use each by bots and by the CLI's human seat — a human and a bot are the same interface, which is the strongest evidence in this table that the seam is in the right place. | | **`CommitWindow`** | **still zero non-test users.** The bot pass was its best chance to acquire a second one and did not: GROUND implements the same contract inline. Delete-by 2026-12-31 stands. | | `LogStore` | unchanged by this pass; still one real consumer. | The load-bearing finding: **the abstractions that had a consumer fit; the one that had none is still unused.** `CommitWindow` was extracted because it looked general. It has now survived two passes that could have used it and did not. ## 3. Meta share under InnerLoop v1.5 This pass is `kind: product` and is the first run under the soft 25% cap. ``` meta budget [OVER] 61% of $92.32 attributed (soft 25%, InnerLoop v1.5) product $12.02 meta $32.85 mixed $47.46 (split 50/50) ``` **This pass alone is 100% product** — every dollar in it closed a stage-0 item. The 61% is cumulative and falling (68% → 61%). > **And that is a defect in the instrument I built two tasks ago.** The > meta budget aggregates over *every attributed task ever closed*, which > is exactly the disease CB-RES-0005 §1 named for SH-1/SH-2: **a > cumulative mean cannot detect the present, because the history outvotes > it.** A pass that is 100% product reads `OVER`. A pass that is 100% meta > would also read `OVER` and look no different. The fix is the same one T01 of CB-WP-0007 applied to session shape: window it. **It is not built here**, because meta is at 61% and v1.5 forbids opening new meta work above the line — the budget's first real act was to stop me from improving the budget. Recorded as the top candidate for the next meta pass. ## 4. Cost per unit of product Per-window, measured with `cb-cost --since `: | pass | kind | responses | cost | $/response | |---|---|---|---|---| | CB-WP-0004 | meta | 165 | $20.28 | **0.123** | | CB-WP-0005 | meta | 98 | $22.32 | 0.228 | | CB-WP-0006 | meta | 158 | $57.22 | **0.362** | | CB-WP-0007 | meta | 31 | $9.24 | 0.298 | | **CB-WP-0008** | **product** | **103** | **$12.66** | **0.123** | Per task, as `task-done` measured them: T01 **$4.29**, T02 **$5.60**; T03 and this file make up the balance. **Three stage-0 deliverables and 22 new tests for $12.66** — less than any single task in CB-WP-0006, whose T04 alone cost $10.06. The window is measured at `HEAD` after T03, so T04's own cost is not in it. Session shape, same window, the first pass to satisfy both context targets since they were written: | metric | this pass | target | previous pass | |---|---|---|---| | SH-1 mean context | **161,994** | ≤ 200,000 | 503,464 | | SH-2 p90 context | **215,664** | ≤ 300,000 | 607,105 | | SH-3 batching | 6.9% | ≥ 20% | 0.0% | ## 5. The retrospective: six passes in, is the loop earning its keep? **Answer with the spend curve.** It is a V, and both arms are informative. ``` $/response 0.123 ── 0.228 ── 0.362 ── 0.298 ── 0.123 pass 0004 0005 0006 0007 0008 kind meta meta meta meta PRODUCT ``` Three readings, and only the third survives: 1. *"Meta work is expensive, product work is cheap."* Tempting and wrong: CB-WP-0004 was meta and matched this pass exactly. 2. *"Compaction did it."* Partly true and not sufficient. Context fell 3.1× (503,464 → 161,994) and cost fell 2.9× (0.362 → 0.123), so the two move together here. But CB-WP-0004 reached the same $0.123 in a stretch running at **≈209,000** mean context — derived from CB-RES-0005 §1's cumulative rows, not measured directly — which is above this pass and well above the target. Cost and context are correlated, not locked. 3. **"Cost per response tracks how far the work is from a runnable check."** CB-WP-0004 (tooling with self-tests) and CB-WP-0008 (code with tests) both had a green/red answer within seconds of each edit. CB-WP-0005 through CB-WP-0007 were arguing about what a number *means* — whether a mutation is strong, whether a window is the right window, whether a target should move — and every one of those questions is settled by prose, in context, at the top of the price curve. That is the honest general finding, and it is not "stop doing meta work". The meta passes produced the mutation harness that caught six real defects, the windowed metric, and the budget that stopped me in §3. It is: > **Loop work should be cashed out into something runnable in the same > pass that invents it, or it will be paid for in context.** > `mutation-check` did this (a command, five controls, verdicts) and cost > $0.228/response. The taxonomy of instrument failures around it did not, > and cost $0.362. **Is the loop earning its keep?** On this evidence, yes — but its return is *lumpy and lagging*. CB-WP-0004's tooling is used in every pass since. CB-WP-0005's mutation harness caught six defects in CB-WP-0006. CB-WP-0006 corrected five published verdicts. CB-WP-0007's window and budget both fired within one pass. None of that appeared as a cost saving in the pass that produced it, and the spend review at the start of this pass — which scored CB-WP-0005 and CB-WP-0006 at "$74 for zero measured efficiency gain" — was measuring too early with too narrow a definition of gain. The correction to that review is this pass itself: the same loop, pointed at product, ran at its best recorded cost per response and its lowest recorded context, and shipped a stage. ## 6. Prediction discipline, fourth outing | pass | prediction | measured | error | |---|---|---|---| | CB-WP-0004 | 25–30 points recovered | 6 | 4–5× | | CB-WP-0005 | ≥10 of 14 rows | 4 | 2.5× | | CB-WP-0006 | 9 per-task outcomes | 7 met, 2 restated | small | | **CB-WP-0008** | *stage 0 ships; meta reads under 25%* | **stage 0 shipped; meta reads 61%** | **half right, and the miss is the finding in §3** | The workplan said: *"the budget should read comfortably under the line; if it does not, the evidence file says so and names what was displaced."* Nothing was displaced. The budget is measuring the wrong window. ## 7. Open, carried forward - **`CommitWindow`** — still zero non-test users; delete-by 2026-12-31. - **The meta budget is cumulative** and cannot see the present (§3). - **GR-E01 unreachable below 5 seats**; **GR-A13 wasted SOLVE** — both need a ground-game ruling, not a kernel change. - **GR-E03 / GR-E04 have never been played to the end.** - **AM-3 blocked**; **AM-7/AM-8 PARTIAL**; kernel gate binds 2026-08-31 at 18/18 green. - **SH-3 at 6.9%** against a 20% floor, unfalsified — nobody has yet tried to hit it (CB-WP-0007 T04, cancelled). - **A stale doc comment** claimed DARVO was unimplemented for weeks after it shipped. `make facts-check` gates duplicated *numbers*; nothing gates a prose claim about code. Fixed in place; the class is open.