The visual report
One self-contained HTML file: a to-scale timeline for every event, analytics on top, the evidence one click below. Zero external requests; it opens offline by double-click. With --embed-audio the scored clip lands inside the file, so share it with the same care as the recording.
# score a recording and render the report uvx hotato report --stereo call.wav --out report.html # the bundled self-test suite, same page uvx hotato report --suite barge-in --out selftest.html # the same content as Markdown tables uvx hotato report --stereo call.wav --format md --out report.md # opt-in: embed the exact scored audio in the file too (HTML only, ~8 MB cap) uvx hotato report --stereo call.wav --embed-audio --out report.html

What the page shows
- A per-event SVG timeline: caller and agent activity to scale, the overlap shaded, the caller-onset and yield markers, the measured talk-over seconds, expected vs actual, and a PASS or FAIL chip. An event whose input cannot be judged gets a NOT SCORABLE chip with its reason instead of a verdict.
- Analytics from the same measurements: a time-to-yield distribution strip (one dot per measured yield, with mean, median, and p90), a talk-over histogram on a fixed grid, and failure clustering by fix class. The rollup renders once a page carries three or more events.
- A collapsible frame inspector per event: the full frame dump as a table (
t_sec, per-channel dBFS, active flags, thresholds), so every pixel on the page is re-derivable by hand. - Thresholds used, once: every scoring threshold and voice-activity (VAD) setting, collapsed into one closed panel at the page end, so the run stays reproducible without repeating that table on every event.

The page renders the envelope, the run’s JSON; it computes nothing new. Counts are fractions like 8 of 8, never a percentage; p90 is linear interpolation; no accuracy score anywhere. Definitions: METHODOLOGY.md.
Regression deltas with --base
Save an envelope, then compare a later run against it. The report renders per-scenario talk-over and time-to-yield deltas with clear worse and better marks.
hotato run --suite barge-in --format json > base.json # ... change a prompt, a config knob, a model ... hotato report --suite barge-in --base base.json --out report.html
The page ships print CSS. Print it from any browser and the interactive parts collapse into a clean paper layout, so print-to-PDF is the PDF export.
One command instead: hotato doctor
The 5-minute path. Pass a recording and it scores it, embeds that recording's audio in the report by default, and opens it in your browser; with no recording it runs the bundled self-test, unembedded. On a headless box it prints the path.
uvx hotato doctor --stereo call.wav # score your call, open the report uvx hotato doctor # self-test fallback, same flow uvx hotato doctor --demo --no-open --out report.html
0 all pass, 1 a regression (--no-fail forces 0), 2 usage or I/O error. The report is a CI artifact that doubles as the gate.