aboutsummaryrefslogtreecommitdiffstats
path: root/sb_builder
AgeCommit message (Collapse)AuthorFilesLines
21 hoursDashboard: visible neutral swatch, note tiles as future entry pointsDanilo M.1-1/+1
The neutral result color came from QPalette.Mid, which in a dark theme can equal the card background and hid the "removed" swatch; use the muted text color instead. Record in the spec that the dashboard tiles should open their screens once those exist. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 hoursRedesign the Dashboard as cards with stat tilesDanilo M.1-37/+178
The tiles were plain group boxes of key: value text and read as text scattered on a page. Now a KPI row (packages, built, last pull, VM load) with large values and muted details, a slackrepo results stacked bar in the reserved status colors with hover counts and a labelled legend, and a recent jobs card. Colors come from the Qt palette, so the user's theme applies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 hoursFix crash when closing the Jobs tab during a running jobDanilo M.2-0/+7
Closing the tab killed the job-follow process, whose finished signal arrived after the tab was deleted; the slot touched dead widgets and PyQt6 aborted the whole application on the unhandled exception. stop() now disconnects the process before killing it. A sys.excepthook logs any future slot exception to stderr instead of aborting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 hoursAdd the PyQt6 GUI: Dashboard, Jobs, VM control, notificationsDanilo M.8-0/+807
All VM access goes through remote.py (ssh with a shared ControlMaster, local virsh). The main window polls jobs, backs off while ssh is down, checks the libvirt domain and offers Start or Resume, and sends freedesktop notifications when a job ends or the VM comes up. The Jobs tab streams a job's log with job-follow and resumes at the last offset after a drop. Config is TOML, validated against built-in defaults. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>