v0.41.0

feder-cr/invisible_dotsv0.41.0Sep 12, 2026by github-actions[bot]

Upgrading?

AI Summary

A comprehensive UX overhaul driven by a six-dimensional audit, featuring a redesigned sessions panel as a modal, fixes for confusing transcript states, and significant accessibility improvements.

Key Highlights

  • Sessions panel converted to a modal with an inert background, allowing users to close it via Escape, clicking outside, or selecting a conversation.
  • Transcript accuracy improved by fixing logical bugs such as 'breathe for ever' steps, incorrect 'Stop' error reporting, and dead stream clocks.
  • Accessibility enhanced with live region updates, focus ring fixes, and screen reader compatibility improvements.
  • Control behaviors clarified with visual cues for queuing, explanatory text for the Clear button, and proper naming of screens and chips.
  • New validation gates added to detect hidden rendering bugs by reading the bytes of tracked files and parsing the served page with an HTML parser.

New Features

  • Live region rewritten 25 times per second to provide real-time feedback.
  • Tab stops added for finished steps to improve keyboard navigation.
  • Explanatory text added to the Clear button to clarify its function.
  • Validation gates for tracked file bytes and HTML parser to catch rendering issues.

Full Release Notes

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.

Related Repositories