v0.22.1 — status dashboard: action keys, empty states and exit key
Patch release. Fixes to the live status dashboard (/architect:report-status, /product:report-status, /architect:report-backlog-status), found by reviewing the TUI against a real PTY. All six were in the curses shell — the one layer that had no test coverage.
Fixed
copened a browser instead of copying.cis documented as "copy the default command for the selected row", but the default action for a finished row is an open (open URLon a merged Issue,open outputon a completed phase) and the shell dispatched on the label alone — soclaunched a browser tab or an editor and reported it ascommand <url>, having copied nothing.cnow always copies;oremains the key that opens, and choosingopen outputfrom the action menu still opens it.- A filtered-empty tree claimed the pipeline had never run. With
fcycled to a status nothing matched, or--group/--epicnarrowing to nothing, the dashboard printed "the product pipeline has not run in this project" directly beneath a header summarizing the phases it had just counted. The empty state now names the filter responsible, and offersfonly whenfis what would clear it. Escquit the dashboard on a stray escape sequence. A terminal emitting a sequence ncurses cannot map — application-cursor-mode off, a mouse report, a bracketed-paste or focus-change marker, an unknown$TERM— delivers the leading27as a bare keypress, which was bound to quit.Escnow only closes a menu or the help panel;qis the only key that quits, and? help | q quitis pinned to the bottom bar so it survives a key legend too long for the terminal.- The action menu never said how to close itself without
--exec. The hint was built by slicing the legend at its first separator, which droppedEsc closealong with the run key. Pressingeon anopen outputentry with--execenabled also answered "run with--exec…"; it now opens the entry, andewithout--execno longer closes the menu. - The help panel repeated its legend and overflowed small terminals. The three pipeline tabs are one class returning one glyph legend, so it appeared two or three times; the panel had no height bound either, and below ~30 rows its closing border and its own "how to close this" hint were clipped away with no way to scroll. De-duplicated, and it scrolls (
^v/PgUp/PgDn/g/G) when it does not fit. - A
failedphase could be invisible. The progress fraction is measured over the required path, so a phase that failed in the manual extension tier — or one recorded outside the manifest — was absent from the header's status counts while its row sat below the fold. The header now names every failed phase, as the one-shot renderer always did.
Changed
- Live mode rejects an unknown
--phase/--epic(exit 2) like the one-shot renderers, instead of ignoring it. - The 10-second poll walks the output tree once per poll rather than once per pipeline tab.
- The pipeline header's filter label is localized.
Added
tools/lib/status_tui.test.py— 48 assertions over the curses shell, no terminal required.
All three plugins (product, architect, scalardb) share this version number.
🤖 Generated with Claude Code