docs(cost,models): the measurement docs state a figure once, next to what it was measured on (#469)
Iris's measurement docs stated the same figures in three places and disagreed with themselves in two
of them. This is #466: `docs/models.md` 1,311 → 205 lines, `docs/sprint-246.md` deleted (454),
`docs/cost.md` rewritten, README's cost paragraph rewritten, and `test/config-agents.test.ts` −558
lines with every surviving arithmetic guard repointed at the table it now checks.
The sort rule is one job per document. models.md says which model to run and what that suggestion was
measured on; cost.md says what the run cost, with every prose figure read off one table; README says
what an operator decides. A figure appears once, beside its denominator and the round it came from.
Both documents are framed as **suggestions**: every model is named in a deployment's config and never
in Iris's code, so cost.md opens on the range that is true — **$0 self-hosted, about 10.7¢ a page on
the suggested models** — rather than on a number that reads as a property of the software.
Four of #466's asks changed on verification, and the PR body says which and why. The `failed calls
$0.0000 / 0` row is gone: no per-call failure field exists in the records, so the row would publish a
zero meaning "not measured" as if it meant "none happened". Provenance is per row, because `verify` is
a page-side step from the 2026-09-03 round, not the 09-02 one. "Checking costs five times producing"
is now a ratio between two rows of one table (4.7x) instead of two shares from different groupings
divided. And cost.md does not repeat models.md's recommendation table — the two copies had already
drifted inside this PR.
Four review rounds, nine notes, all fixed:
1. Six notes. The 39% page-agent saving read as a cross-round subtraction; it is not one, but two
figures agreeing to the cent made it indistinguishable from one, and the defect underneath was a
wrong denominator in models.md. Seven `§N` citations pointed at nothing, and two of them cited a
measurement this PR had dropped from the repo entirely — a non-Claude `page` model gets no
prompt-cache breakpoint, measured at 84.8% of the incumbent's prompt served from cache — which is
back with its numbers because `test/prompt-cache.test.ts` rests on it. `per_capability` was missing
from the fallback chain that `resolveAgentModel` tries first. And the price-sheet test found its
column by header but still took rows from every table in the file.
2. models.md's model column mixed full Bedrock ids with bare names, so the one row a reader acts on
next named an id the same document says cannot be called.
3. cost.md kept that mixed spelling in the sentence naming the priced models.
4. Clean.
`npm test` 1695 pass / 0 fail, `npm run typecheck` clean, `./test/e2e.sh` all endpoints passed, and the
markdown anchor sweep is 393 links / 0 bad across 10 files.
`docs/sprint-246.md`'s only non-redundant content — the figures it states differently from #370 — is
posted as a comment on #370, which is the report those figures correct.
Refs #466
Co-Authored-By: Blake Bertuccelli-Booth <bbertucc@users.noreply.github.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>