0.41.0
A UX pass over the interface, driven by an audit of six dimensions - spatial model, typography, interaction, accessibility, visual hierarchy, first run and failure states - with every finding verified against the code before it was acted on, and every change checked in a real browser afterwards.
The owner's complaint first. The sessions panel covered half the conversation and left it looking readable: measured 240px off the front of every line at every desktop width, 48% of the measure at 1440px, 61% at 960. It is a modal now - the page behind it goes inert and dims, Escape closes it, a click outside closes it, choosing a conversation closes it - and inert has one owner because two reasons can hold the same pane.
The transcript stops saying things that are not true. A step nobody landed breathed for ever; Stop was reported as an error; a failed step was marked by colour alone with the same verb as one still running; tool output was cut in silence for the watcher and the model; a dead stream left the clock counting; the queued sentence was never on screen and a second Enter destroyed it; the most frequent row said the same four words twice.
Nobody is locked out by how they use it. The live region was rewritten 25 times a second; a reconnect read the whole conversation aloud; the one input had no focus ring, then two; every finished step was a tab stop that opened nothing; screens and chips were named by their contents.
Every control says what it does. Enter looks different when it will queue; Clear explains itself instead of going dead; the first-run example fills the box; a failed load of the session list is told from an empty one; one rule says "cannot be used"; pressed is one rung above hovered; the panel's icon sits on the line everything else shares.
Found only by screenshots, and recorded as such: a comment inside a start tag that printed attributes down the seam between the panes; two backspace bytes that had blinded two gates; two nested focus rectangles on the composer. Each has a gate now, including one that reads the bytes of every tracked file and one that reads the served page with an HTML parser.
Measured and rejected, so nobody re-derives it: widening the conversation when the browser pane is empty (it already opens at 70 characters a line), and centring the two panes (ragged bands at both edges).
579 passed. Fifty-one known-bad mutations run against the new and rewritten gates, fifty-one killed. One commit landed with a red test because the suite's verdict was read through a word filter; the next commit says so and fixes it.