Stage 0's ten items are met. Three qualifications are recorded rather than hidden behind checkmarks: GR-E01's threshold is unreachable below five seats with the placeholder fixture, GR-A13 admits a SOLVE that resolves to nothing, and GR-E03 has no scenario at all — implemented, unreferenced, and would not fail if deleted. The second-consumer verdict INTENT was waiting for: every abstraction with a consumer fits, and the one with none is still unused. Bots and the CLI drove Aggregate, Project, parse_command and the replay bundles unchanged. CommitWindow had its best chance at a second user and did not get one; its delete-by date stands. The retrospective answers with the curve: 0.123, 0.228, 0.362, 0.298, 0.123 dollars per response across the last five passes. Neither "meta is expensive" nor "compaction did it" survives the data. What does: cost per response tracks how far the work is from a runnable check. The meta passes that shipped a command were cheap; the ones that argued about what a number means were not. The meta budget reads 61% OVER on a pass that is 100% product, because it aggregates over every task ever closed — the same defect CB-RES-0005 found in SH-1/SH-2 and that CB-WP-0007 T01 fixed for session shape. Not fixed here: v1.5 forbids opening meta work above the line, so the budget's first real act was to stop me from improving the budget. Also fixes a doc comment that claimed DARVO was unimplemented for weeks after it shipped. facts-check gates duplicated numbers; nothing gates a prose claim about code. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
10 KiB
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:
- 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 byground-game. - 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.
- 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 readOVERand 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 boundary>:
| 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:
- "Meta work is expensive, product work is cheap." Tempting and wrong: CB-WP-0004 was meta and matched this pass exactly.
- "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.
- "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-checkdid 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-checkgates duplicated numbers; nothing gates a prose claim about code. Fixed in place; the class is open.