aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
10 hoursDashboard: visible neutral swatch, note tiles as future entry pointsDanilo M.2-1/+6
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>
10 hoursRedesign the Dashboard as cards with stat tilesDanilo M.2-40/+192
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>
10 hoursFix crash when closing the Jobs tab during a running jobDanilo M.3-1/+33
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>
11 hoursAdd launcher, install script and usage docsDanilo M.4-4/+110
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 hoursAdd the PyQt6 GUI: Dashboard, Jobs, VM control, notificationsDanilo M.10-0/+993
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>
11 hoursAdd sbb-remote, the VM helperDanilo M.3-0/+645
Single-file stdlib helper the GUI runs over ssh. JSON commands for version, stats and jobs; job-start runs a fixed table of kinds (sbpull, sbshadow, each requiring --yes or --no) detached with setsid and no stdin, one at a time under a flock; job-follow streams a log from a byte offset so the GUI can drop and resume; job-kill sends SIGTERM to the job's process group. A job whose runner died is reported lost. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 hoursAdd phase 1 implementation plan, refine specDanilo M.2-21/+2292
The plan embeds code that was run in a scratch copy before writing it down (38 tests, helper stats against the real VM data). Drafting it settled a few details now reflected in the spec: version also returns the overlays, an upstream_branch helper key, a shared fmt module and a launcher, follow resuming on the next jobs poll instead of its own backoff, and sbpull returning sbshadow's exit status. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
11 hoursInitial commit: sb-builder build VM GUIDanilo M.6-0/+736
Desktop PyQt6 GUI plus a stdlib Python helper on the build VM, to drive slackrepo, mkhint and the overlay sync tools from one interface, with detachable jobs. This commit carries the repo docs and the approved phase 1 (core) design spec. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>