Expand description
The run-quality corpus: every recorded outcome, across every session.
crate::session::RunStats is written one row per finished run. This is
the reader that puts them side by side, which is the whole point of having
recorded them: one run’s counters say almost nothing, and a thousand runs’
counters say what normal looks like and when it stopped.
§Why this reads the transcripts instead of keeping a ledger
A second file would be faster and would be a second source of truth. The transcript already holds the rows, written by the process that produced them; a ledger beside it can disagree with it, and then someone has to decide which is right. Same reasoning as the TUI reading a trigger’s last answer back from the session record rather than caching it.
The cost is that a scan reads files, so every scan is bounded — newest-first, with a session cap and an optional cutoff. A corpus reader that must read everything before it answers is one nobody runs interactively, and doctor runs in one pass with no network and no model.
§What it deliberately does not do
No judgement. Nothing here decides that a rate is bad, because “bad” depends on what a run was for, and the thresholds belong with the reader that acts on them. This module counts.