Answers the question the workplan posed: did v1.0's "every metric names
its instrument" rule stop a metric being written without a working
instrument? No. AC-1 named `cb-cost --pin` before that tool existed and
set a hand-computed target of $92.87; the tool returned $93.32. The rule
was satisfied completely and the metric was still wrong.
v1.1 adds:
- the instrument must exist and the target must come out of it;
targets are provisional until the tool emits them
- a number inherited from earlier work is re-derived before use as a
target, or cited as unverified
- every reporting tool exposes --self-test, run before the number
- cost is in the definition of done; M-D2-CST may not be uncomputable
The cost of CB-WP-0001 was stated four times before it was right --
$248.46, $92.21, $92.87, $93.32 -- and each correction came from a
different mechanism: re-derivation, adversarial review, and the positive
control. None found more than one. That is the case for keeping all
three.
CB-WP-0003 T10 predicted the next error would be harness-does-nothing.
It was not, twice. Trusted arithmetic over real data would pass a
positive control; and a property verified on 206/206 groups of the main
transcript is false in the 8-response subagent tree that neither the
survey nor the reviewer examined separately. Review structurally cannot
catch the second -- re-deriving on the same sample reproduces the same
blind spot.
Workplan status: done.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5.5 KiB
2026-07-31 — retrospective: what CB-WP-0002 taught the loop
Pass: CB-WP-0002, cost accounting. Produced tools/cb-cost.py,
specs/CostAccounting.md, ADR-0003, CB-EV-0002, and InnerLoop v1.1.
The question the workplan asked
CB-WP-0001 produced a fully specified metric that could not be computed, and v1.0's "every metric names its instrument" rule was written to stop that. Did it?
No. The rule was satisfied completely and the metric was still wrong.
specs/CostAccounting.md AC-1 named cb-cost --pin fc76445 as its
instrument — a command that did not exist when the row was written — and
set the target to $92.87, computed by hand. When the tool was built one
task later it returned $93.32. The hand computation carried a dedup bug
that the tool's own positive control caught on first contact.
So the v1.0 rule stops "a metric with no instrument named" and does not stop "a metric whose target the instrument never produced". The distinction did not exist when the rule was written because the failure it was written for was the coarser one.
v1.1's answer: the instrument must exist and the target must come out of
it. Where the tool is built later in the pass, the target is provisional:
until the tool emits it, and the spec is amended to whatever it returns —
not the reverse.
The number, and its four corrections
The cost of CB-WP-0001 was stated four times before it was right:
| value | method | what was wrong |
|---|---|---|
| $248.46 | inherited, quoted | per-line summation (~1.9×) + single-model pricing |
| $92.21 | re-derived, deduped, per-model | omitted the subagent tree |
| $92.87 | + subagent at first-wins dedup | output_tokens is a running count |
| $93.32 | emitted by cb-cost |
— |
Each correction was found by a different mechanism, and this is the useful part:
- $248.46 → $92.21 by re-deriving instead of quoting. Now a v1.1 rule.
- $92.21 → $92.87 by adversarial review, which noticed the target contradicted the survey's own blind-spot finding. Cost: $1.11.
- $92.87 → $93.32 by the positive control, which fired on real data and refused to print a number.
No single mechanism found more than one. That is the argument for keeping all three rather than consolidating.
The error class the last pass predicted, and what actually happened
CB-WP-0003 T10 predicted the next error would be the harness-does-nothing class, since four instances had already been seen. It was not — twice.
- The two errors in $248.46 were trusted arithmetic over real data. Both sums ran over data that genuinely existed. A positive control asserting "did this harness do work?" would have answered yes, correctly, and reported a wrong number.
- The error in $92.87 was a property verified on the large sample and assumed on the small one. The dedup invariant was checked on the main transcript (206/206 groups) by the survey, and independently re-checked by the adversarial reviewer, who also used the main transcript. It is false in the 8-response subagent tree that neither examined separately.
The second is the one worth carrying forward, because review structurally
cannot catch it: the reviewer's job is to re-derive the author's claims,
and re-deriving on the same sample reproduces the same blind spot. Only an
assertion running over all the data at execution time catches it. That is
now a v1.1 rule (--self-test on every reporting tool, run before the
number).
What the pass bought, in its own units
The capability measures itself, which is the first time this project has been able to say what a pass cost while the pass was running:
- CB-WP-0001 (measured retroactively): $93.32 pinned at
fc76445. 88.0% cache, 11.9% output, 249:1 context re-read to text written. - Adversarial review, this pass: $1.11 — ~1% of the pass it reviewed — and it found three approval-blocking defects. Second consecutive pass where that trade was decisive. Two data points now support CB-WP-0003 T03.
/compact, measured for the first time: 542,991 → 19,974 tokens, a 27× context reduction. Cost per turn fell 3.1×, from $0.457 across the 136 turns before it to $0.149 across the 202 after.
That last number changes advice this project was about to give itself. CB-WP-0003 T04 was going to prescribe one task per session on the theory that long sessions are quadratic. They are bounded-quadratic: cost grows with context between compactions and resets at each one. The failure mode is a long uncompacted session, and whether a fresh session beats a compaction is now a measurable question rather than a matter of taste. T04 should measure it before prescribing.
Raised, not resolved
- The price sheet cannot express a time-boxed rate. Sonnet's intro price is a TOML comment. Costs $0.17 today (0.19%); becomes a real error on 2026-08-31 when the intro rate expires and the comment and the data disagree in the other direction.
- 32.5% of spend has no task, because 19 of 33 commits carry no
T##tag. Reported as its own line rather than hidden, but the underlying fix is commit hygiene, not tooling. - Outside this repo: the
ralph-workplanskill instructs agents to read token counts from the Claude Code status bar. That is not readable from a tool call, so an agent asked for it estimates instead — the proximate cause of the hub holding 401,100 tokens for a workplan that actually consumed 80.9M. Flagged for the maintainer;make costis the authority in the meantime.