Skip to content

docs(readme): the fee-reality benchmark as a terminal capture, generated from a real run (#646) - #749

Merged
eaitbrahim merged 1 commit into
mainfrom
feat-646-fee-reality-capture
Sep 7, 2026
Merged

docs(readme): the fee-reality benchmark as a terminal capture, generated from a real run (#646)#749
eaitbrahim merged 1 commit into
mainfrom
feat-646-fee-reality-capture

Conversation

@eaitbrahim

Copy link
Copy Markdown
Contributor

Closes #646 — the last deliverable. The README hook, the priced-twice table, the reproducible figures and scripts/render_fee_reality.py all shipped earlier; what was missing was the terminal capture.

One constraint decided the shape

"Generation tooling committed … so the GIF regenerates when the measurement does."

A hand-recorded screencast can't satisfy that. It's a binary blob whose numbers freeze the moment somebody hits record, and the first time the ledger moves it becomes a picture of a measurement that is no longer true — a marketing asset wearing a measurement's clothes, which is the exact thing this README argues against.

What is real, and what is not — said in the caption

render_fee_reality_cast.py runs render_fee_reality.py as a subprocess and captures its actual stdout. That command really reads docs/experiments/trials-ledger.jsonl, really parses the recorded fee curve, really prints those figures. No number is retyped and there's no fixture — a test asserts the committed asset carries the same cells the renderer emits today, and swapping the capture for a fixture kills it.

The pacing is composed. Nobody types at a uniform 55 ms per character. The README caption says so in a sentence — "The pacing is composed; the output is not" — because a capture presented as an unedited recording would be a small lie in service of a page about not telling them.

Two formats, one recording

file why
docs/assets/fee-reality.cast asciinema v2 — plain JSON lines a reviewer can read; any asciinema tool plays it
docs/assets/fee-reality.svg what the README embeds: renders inline on GitHub, no player, no CDN, no JavaScript — and it's text, so a regenerated capture arrives in review as a legible diff

The SVG is hand-built rather than shelled out to agg or svg-term-cli, for the same reason the asset is generated at all: a capture produced by a toolchain this repo doesn't have can't be regenerated by someone who clones it.

Deterministic, so its diff means something

No timestamp in the cast header — that's where asciinema puts the wall clock, and with one every regeneration would be a diff even when the measurement hadn't moved. Verified byte-identical across runs.

#646's other constraints

  • ✅ Every number reproducible from a recorded run — a test compares the capture against the renderer's live output
  • ✅ No competitor naming — swept for five product names across both assets
  • ✅ Dated caption with the per-venue fee basis in frame — Coinbase taker 1.2% · rendered from the trials ledger
  • ✅ Generation tooling committed, with a check mode wired into the suite

Gates

6,300 passed / 3 skipped; ruff clean (the one E501 is pre-existing). 7 mutants killed: the capture drifting from the ledger · the caption losing its fee basis · a wall clock in the header · the SVG losing its accessible title · unescaped output breaking the XML silently · the README dropping the honesty caption · the capture built from a fixture rather than a real run.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KZZxmspQXe5qJ9FAsG13s6

…ted from a real run (#646)

The README block has carried the benchmark as a table since #646 opened, rendered
from the hash-chained trials ledger. The last deliverable was the ~10-second
terminal capture, and one constraint decided its whole shape:

    "Generation tooling committed ... so the GIF regenerates when the
     measurement does."

A hand-recorded screencast cannot satisfy that. It is a binary blob whose numbers
freeze the moment somebody hits record, and the first time the ledger moves it
becomes a picture of a measurement that is no longer true -- a marketing asset
wearing a measurement's clothes, which is the exact thing the README argues
against.

WHAT IS REAL, AND WHAT IS NOT, SAID IN THE CAPTION

`render_fee_reality_cast.py` runs `render_fee_reality.py` AS A SUBPROCESS and
captures its actual stdout. That command really reads the ledger, really parses
the recorded fee curve, and really prints those figures. Nothing retypes a
number and there is no fixture -- a test asserts the committed asset carries the
same cells the renderer emits today, and swapping the capture for a fixture kills
it.

The PACING is composed. Nobody types at a uniform 55 ms per character and no
command returns on the beat that reads well, so the rhythm is arranged the way any
screencast's is. The README caption says so in a sentence -- "The pacing is
composed; the output is not" -- because a capture presented as an unedited
recording would be a small lie in service of a page about not telling them.

TWO FORMATS, ONE RECORDING

`fee-reality.cast` is asciinema v2: plain JSON lines a reviewer can read.
`fee-reality.svg` is what the README embeds -- it renders inline on GitHub, needs
no player, no CDN and no JavaScript, and it is TEXT, so a regenerated capture
arrives in review as a legible diff. A GIF would be none of those.

The SVG is hand-built rather than shelled out to `agg` or `svg-term-cli`, for the
same reason the whole asset is generated: a capture produced by a toolchain this
repository does not have cannot be regenerated by someone who clones it.

DETERMINISTIC, SO ITS DIFF MEANS SOMETHING

No `timestamp` in the cast header, which is where asciinema puts the wall clock.
With one, every regeneration would be a diff even when the measurement had not
moved -- and an asset whose diff is always noise is one nobody reads. Verified
byte-identical across runs.

Seven mutants killed: the capture drifting from the ledger, the caption losing
its fee basis, a wall clock in the header, the SVG losing its accessible title,
unescaped output breaking the XML silently, the README dropping the honesty
caption, and the capture built from a fixture rather than a real run.

Closes the last deliverable of #646.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KZZxmspQXe5qJ9FAsG13s6
@eaitbrahim
eaitbrahim merged commit 94ed751 into main Sep 7, 2026
4 checks passed
@eaitbrahim
eaitbrahim deleted the feat-646-fee-reality-capture branch September 7, 2026 12:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Lead GitHub discovery with the Fee Reality benchmark — the negative result, reproducible, as the README's opening hook

1 participant