D041 - The report is drawn as well as written
Status: decided.
The text stream stays the contract - it is what verify
and diff read. But it has two failure modes that leave a
run saying nothing: an emulator with no working write path discards
every byte, and a person watching a run sees a black window and cannot
tell a working probe from a hung one. Both happened during this
work.
A framebuffer answers both, and it needs no output function to work at all. Text for machines, pixels for people; either surviving alone beats the current all-or-nothing.
Redrawn after every section, not once at the end, so a run that dies partway leaves the screen showing how far it got. That is the thing a black window cannot say.
It shows sections, not checks. Seventy-nine identifiers at a readable size does not fit, and a screen that has to be squinted at has lost its only advantage over the text. The stream keeps individual verdicts; the screen carries the shape of the run.
The stream says whether the screen can be believed.
OBS|display|<state>|<detail> is emitted before
any check. A photograph of a screen cannot distinguish "these are the
results" from "the display never came up and this is a stale frame";
that record can.
Verified on the host before it was trusted anywhere. The host build draws through the identical clear, rect and text code and writes a PNG, so a glyph that is upside down is obvious in a file rather than invisible in a black window (D001). The font was checked the same way before a single pixel reached an emulator.