| Age | Commit message (Collapse) | Author | Files | Lines |
|
setdefault kept a QT_QPA_PLATFORM already set by the desktop session
(wayland;xcb here), so the tests drew windows and modal dialogs on the
real display. Force offscreen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|