Fixed — the receipt priced Sonnet at a rate that was never charged
_MODEL_PRICES_USD_PER_MTOK["sonnet"] read 3.0 from 2026-06-24, commented "Sonnet 5 / 4.6". Sonnet 5 has never been $3. It launched at $2 introductory input pricing with the $3 increase scheduled for 2026-09-01, and that increase was cancelled the day before it would have applied. The entry recorded a future price as the current one and was wrong for every one of the 69 days it stood.
If you run jcodemunch-mcp receipt --model sonnet, your dollar figures were overstated by 50%. receipt --rates handed out the same wrong number.
⚠ A rate written for a future date is wrong for the whole interval before it, and nothing distinguishes it from a stale one — both read as a plausible number beside a plausible date, and the date makes it look checked.
⚠ The pin agreed with the defect. The test restated 3.0 and a third assertion was a derived "$0.09" in rendered text that no search for the rate's name can find, so the suite was green against a rate the vendor never charged.
Added — the published counter surface is byte-pinned
tests/test_counter_surface_stability.py pins six tools / 4,184 B by name and order, per-tool sha, total bytes, whitelist membership, and tool_profile independence. That surface sits in the cached prefix, so a reworded description is a full-rate cache write for every user. It also pins the catalog-can-grow property arXiv:2608.22708 is built around, which the Counter had by construction and nothing asserted.
Changed — CLAUDE.md's CLI and env tables moved out of the always-loaded budget
CLI Subcommands + Env Vars were 16.6% of a 140,000-char session budget. 69 derivable rows moved to CLI-AND-ENV.md; 27 rows stating a prohibition, a constraint, or a rationale stayed. Gated by tests/test_cli_env_split.py.
Suite: 9,095 passed, 13 skipped, 0 failed. CI green on all 9 jobs including lint.