| Age | Commit message (Collapse) | Author | Files | Lines |
|
Chips get a button background and border, a dot in the color the table
uses for that status, and a muted label per group (overlay, status,
state, result). Search fields get a search icon and a clear button.
Phase 2 spec: why the signing key locks after the GUI quits.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Tabs are permanent and load on first show. The ribbon shows the current
tab's actions in workflow order, a small ribbon under it the view
controls; inapplicable actions are disabled with the reason as tooltip.
Starting a job stays on the tab; the Jobs tab reads (running), then shows
the end status. When a preview this session started ends, its log opens
with Run it (publish box) or Apply shadowing; Not now loses nothing, Run
it in Jobs reopens it. New hint moves to the Packages ribbon and acts on
the ticked packages without a hint.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Each gets the .info pin; Update selected sets a version later. One
package that already has a hint refuses the whole job before it starts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Rows with only a stanza have no hint and are skipped. The deletes open
the same dialog as a hint job: each removed hint's diff and Revert, which
had no place in the GUI before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The highlighted row used to stand in when nothing was ticked; with row
clicks toggling the tick, that ran an action on a row just unticked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Same as the Hints tab: the box is no longer user-checkable on its own and
one clicked handler toggles the row, so no click counts twice.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The box is no longer user-checkable on its own, so a click on it is not
counted twice; one cellClicked handler toggles every row click.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The search field keeps Ctrl+A for its own text.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Same pair as the Packages tab: tick every row the chips and search leave
visible, untick every row.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
'-' is illegal in a SlackBuild version, so dated tags like exploitdb's
2026-10-14 are packaged 2026_10_14 and showed as outdated forever.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Check upstream fills the upstream column and ticks the outdated hints,
Update selected starts hint-update, Delete hint acts on the VM. When a
hint job ends its SBB-RESULT opens a dialog with each changed hint's
diff, Revert per package (once) and Build these. The Packages detail
pane gets New hint and Open in Hints.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
nvchecker.toml moves from the VM into the repo. The GUI runs nvchecker
with its own [__config__] (the keyfile from [hints]) and reads versions
and per-package errors from --logger json; outdated is decided against
the hints, so no oldver, newver or nvtake.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
hint-update and hint-new run the helper's own _hint command: version
bumps as mkhint does them (also '-' and dotless URL forms, never inside
MD5SUM values), a DELREQUIRES-only hint pinned from the .info first, md5
of the first URL of each DOWNLOAD pair, --no-dl as DOWNLOAD="no", .bak
before each write and a final SBB-RESULT line that job-result returns.
hint-diff, hint-revert and hint-delete answer at once. neovim and
openvino are refused until phase 4b. Job ids accept hyphenated kinds.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
All GUI dates go through fmt_time; switch it to the Italian order with
the year, and use it for the Dashboard's "stale since" too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
slackrepo writes one log per command (build, rebuild, update,
remove). A failed update left build.log from an older successful
build, so the viewer showed a success next to a failed result. The
helper (0.4.1) now returns the newest command log and its name, which
the viewer shows in the title and header.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
sbb-remote 0.4.0: results lists slackrepo's last attempt per package
(newest first, with built version and whether a log dir exists), and
build-log returns the end of a package's build.log (512 KB) plus its
resource.log, accepting only category/pkg paths. Result counts skip
the legacy buildresults rows keyed by package file name: the 213
"bad" on the Dashboard matched no package.
GUI: a Results tab (chips per result, table sorted by attempt time,
detail pane, log viewer window that keeps the failure at the end),
opened from the ribbon or by clicking a result in the Dashboard bar or
legend, filtered to it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Green when the last upgrade is within a day, yellow after one day,
red after two; the age text beside it carries the meaning too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
sbb-remote 0.3.0 adds CPU busy % (two /proc/stat samples), RAM total
and available, disk / total and free, and the last slackpkg update
(LASTUPDATE) and package change (/var/log/packages), replacing
disk_free. The Dashboard shows a VM card with meters for CPU, RAM and
disk / (accent, warning from 80%, critical from 90%, value always
printed) and CPU/RAM sparklines from this session's polls, and a
slackpkg tile in place of VM load.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
The Open menu becomes a toolbar ribbon (icon over label: Dashboard,
Packages, Jobs) using the desktop icon theme with Qt fallbacks. Tabs
are centered with a bordered, rounded shape, the selected one filled
with the highlight color and joined to a highlight line over the pane,
so the bar reads as its own control. Colors come from the palette.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
QTabWidget's built-in binding only works with focus on the tab bar,
and the table views take page keys. Window-level shortcuts, wrapping.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Packages tab over the helper inventory: query bar with cat:/maint:/
req:/status: prefixes, overlay and status chips, check column, and a
detail pane with versions, dependencies after hints and a structured
read-only view of the hint (hints.py mirrors slackrepo's parser).
Actions start slackrepo previews; the Jobs tab offers Run it with a
publish box (default from [builds] publish), asking for the signing
key passphrase first when the key is locked. Status bar shows the key
state; Dashboard tiles open their tabs; inventory reloads after
slackrepo and publish jobs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
inventory lists every package with its effective version (hint over
.info), build state from the slackrepo DB, summary, and the parsed
hint found by slackrepo's search order; hints are parsed with shlex,
never sourced. Job kinds now return argv plus env: slackrepo
build/rebuild/update/remove (packages validated against the tree,
--preview, --no-publish sets SBB_PUBLISH=n) and publish (sb-publish).
gpg-status and gpg-unlock let the GUI unlock the package signing key
in gpg-agent; the passphrase comes on stdin only, every other
subprocess gets stdin=DEVNULL. A real slackrepo run is refused while
the key is locked.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
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>
|