docs(readme): the fee-reality benchmark as a terminal capture, generated from a real run (#646) - #749
Merged
Merged
Conversation
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #646 — the last deliverable. The README hook, the priced-twice table, the reproducible figures and
scripts/render_fee_reality.pyall shipped earlier; what was missing was the terminal capture.One constraint decided the shape
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.pyrunsrender_fee_reality.pyas a subprocess and captures its actual stdout. That command really readsdocs/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
docs/assets/fee-reality.castdocs/assets/fee-reality.svgThe SVG is hand-built rather than shelled out to
aggorsvg-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
timestampin 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
Coinbase taker 1.2% · rendered from the trials ledgerGates
6,300 passed / 3 skipped; ruff clean (the one
E501is 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