Skip to content

v0.22.1 — status dashboard: action keys, empty states and exit key

Choose a tag to compare

@wfukatsu wfukatsu released this 08 Aug 07:33
· 188 commits to main since this release

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

  • c opened a browser instead of copying. c is documented as "copy the default command for the selected row", but the default action for a finished row is an open (open URL on a merged Issue, open output on a completed phase) and the shell dispatched on the label alone — so c launched a browser tab or an editor and reported it as command <url>, having copied nothing. c now always copies; o remains the key that opens, and choosing open output from the action menu still opens it.
  • A filtered-empty tree claimed the pipeline had never run. With f cycled to a status nothing matched, or --group/--epic narrowing 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 offers f only when f is what would clear it.
  • Esc quit 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 leading 27 as a bare keypress, which was bound to quit. Esc now only closes a menu or the help panel; q is the only key that quits, and ? help | q quit is 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 dropped Esc close along with the run key. Pressing e on an open output entry with --exec enabled also answered "run with --exec…"; it now opens the entry, and e without --exec no 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 failed phase 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