diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-20 12:13:01 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-20 12:13:01 +0200 |
| commit | aa4d36c541e603ed4d60ee1185806c51818eccc9 (patch) | |
| tree | 2ebec04eef689562c7d50a74249e7990bf8422f7 | |
| parent | d4cae7a87fd30341b5a936aa848e1fdc019a379e (diff) | |
| download | sb-builder-aa4d36c541e603ed4d60ee1185806c51818eccc9.tar.gz sb-builder-aa4d36c541e603ed4d60ee1185806c51818eccc9.zip | |
UI guidelines in AGENTS.md; README for the new frame
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
| -rw-r--r-- | AGENTS.md | 21 | ||||
| -rw-r--r-- | README.md | 83 | ||||
| -rw-r--r-- | docs/superpowers/specs/2026-10-20-sb-builder-phase4-design.md | 3 | ||||
| -rw-r--r-- | docs/superpowers/specs/2026-10-20-sb-builder-ui-design.md | 5 |
4 files changed, 72 insertions, 40 deletions
@@ -44,6 +44,27 @@ Design and phasing: `docs/superpowers/specs/`. Phase 1 (core) is that tool's own repo (e.g. `slackrepo_setup` for sbshadow) rather than working around it here. +## UI guidelines + +Every tab follows these (design: `docs/superpowers/specs/2026-10-20-sb-builder-ui-design.md`). + +1. Tabs are permanent and load their data lazily on first show (`loaded`, + `reload()`); the ribbon never opens or closes tabs. +2. Main ribbon: the tab's actions (`tab.actions`) in workflow order. Small + ribbon: view controls (`tab.view_actions`). Build them with + `sb_builder/ui.py` `action()`. Nothing actionable lives inside a view + except navigation links. +3. Change actions act on ticked rows, view actions on the highlighted row. A + row click toggles its tick; Ctrl+A / Ctrl+Shift+A select visible / clear. +4. An inapplicable action is disabled with `ui.enable(action, reason)`, the + reason in its tooltip; never hidden. +5. When a job this session started ends, its next step opens as a non-modal + dialog where the user is (`MainWindow.mine`, `NextStep`, + `HintResultDialog`); starting a job never switches tab; the Jobs tab shows + activity; a dismissed step can be taken again from the ribbon. +6. A modal confirm only for destructive or outward steps (delete hint, + publish, apply shadowing). + ## Conventions - GUI config: `$XDG_CONFIG_HOME/sb-builder/config.toml`. Helper config: @@ -33,45 +33,54 @@ Every key is optional. `File > Reload config` rereads the GUI config. sb-builder +The window has five tabs, always open: Dashboard, Packages, Hints, Results, +Jobs (Ctrl+PgUp/PgDn cycle them). The ribbon at the top holds the current +tab's actions, in the order a task uses them; the smaller bar under it holds +its view controls (select, clear, refresh). An action that does not apply is +greyed out, its tooltip says why. Actions act on the **ticked** rows: a click +anywhere on a row ticks or unticks it, Ctrl+A ticks every visible row, +Ctrl+Shift+A unticks all. + +Starting a job keeps you where you are; the Jobs tab shows "(running)" and +then the end status. When a job you started ends, its next step comes to you +as a dialog: after a preview, its log with **Run it** (and a **publish** box); +after a hint change, the diff with **Revert** and **Build these**. **Not +now** loses nothing: **Run it** in the Jobs tab, on a finished preview, +reopens it. + - **Dashboard**: VM load, uptime and free disk, package counts, slackrepo build results, last overlay pull, recent jobs. Refreshes while visible. -- **Open > Jobs**: start a job from the Start menu (`sbpull <overlay>` - preview, `sbshadow` preview or apply), follow its log live, kill it. After a - preview that lists `shadow:` or `unshadow:` lines, "Apply shadowing" runs - `sbshadow --yes`. - -- **Open > Packages** (or click the Packages tile): every package of the - repository, with built version and status (`ok`, `failed`, `never`, - `outdated`). Search by name or summary, or with `cat:`, `maint:`, `req:`, - `status:`; toggle the overlay and status chips. Ctrl+A ticks every visible - package, Ctrl+Shift+A unticks all (here and in Hints). The detail pane shows the - package's versions, its dependencies after hints (dropped ones struck - through), and what its hint file does, section by section. -- Tick packages and press Build, Update, Rebuild or Remove (they act on the - ticked packages only); Update all updates everything. Each first runs a slackrepo - `--preview` job. When the preview is fine, **Run it** in the Jobs tab starts - the real run; untick **publish** to keep the packages local and press - **Publish** later to push them. -- **Results** (ribbon, or click a result in the Dashboard's slackrepo bar or - legend): slackrepo's last build attempt per package, newest first, filterable - by result. **Show build log** (or double-click) opens the end of the log of - the package's last attempt (slackrepo keeps one per command: `build.log`, - `update.log`, `rebuild.log`, `remove.log`), where it reports the failure, - with its `resource.log` (load, memory, tmp over the build). -- **Hints** (ribbon): every package with a hint or an nvchecker stanza, with - hint, `.info` and upstream version. **Check upstream** runs nvchecker on the - desktop over `nvchecker.toml` in this repo (stanza name = package name, edit - it by hand to track a package; `hints.nvchecker_keyfile` gives it a GitHub - token) and ticks the outdated packages. **Update selected** rewrites their - hints on the VM (version, URLs, md5 of the downloaded source; **no download** - writes `DOWNLOAD="no"` instead; a hint sbshadow wrote, `DELREQUIRES` only, - gets the `.info` version lines added). **Delete hint** removes the ticked - packages' hints, each kept as a `.bak`. The Packages detail pane has **New hint** for a package - without one. -- After a hint job or a delete a dialog shows the diff of each changed hint, with - **Revert** per package and **Build these** (a slackrepo update preview). - neovim and openvino are refused for now: their bundled deps still need - mkhint on the VM. + The tiles open Packages, Results (one result kind) and Jobs. +- **Packages**: every package of the repository, with built version and + status (`ok`, `failed`, `never`, `outdated`). Search by name or summary, or + with `cat:`, `maint:`, `req:`, `status:`; toggle the overlay and status + chips. The detail pane shows the package's versions, its dependencies after + hints (dropped ones struck through), what its hint file does, and a link + to it in Hints. **Build**, **Update**, **Rebuild**, **Remove** and **Update + all** run a slackrepo `--preview` first; **New hint** creates hints, pinned + at the `.info` version, for the ticked packages without one; **Publish** + pushes the package repository (untick **publish** at Run it to hold a run + back and publish later). +- **Hints**: every package with a hint or an nvchecker stanza, with hint, + `.info` and upstream version. **Check upstream** runs nvchecker on the + desktop over `nvchecker.toml` in this repo (stanza name = package name, + edit it by hand to track a package; `hints.nvchecker_keyfile` gives it a + GitHub token) and ticks the outdated packages. **Update selected** rewrites + their hints on the VM (version, URLs, md5 of the downloaded source; with + **No download** on, `DOWNLOAD="no"` instead; a hint sbshadow wrote, + `DELREQUIRES` only, gets the `.info` version lines added). **Delete hint** + removes the ticked packages' hints, each kept as a `.bak`, revertable from + the dialog that follows. neovim and openvino are refused for now: their + bundled deps still need mkhint on the VM. +- **Results**: slackrepo's last build attempt per package, newest first, + filterable by result. **Show build log** (or double-click) opens the end of + the log of the package's last attempt (slackrepo keeps one per command: + `build.log`, `update.log`, `rebuild.log`, `remove.log`), where it reports + the failure, with its `resource.log` (load, memory, tmp over the build). +- **Jobs**: every job with its live log. **Pull overlay** (`sbpull <overlay>`) + and **Check shadowing** (`sbshadow`) run as previews; when one finds + `shadow:` or `unshadow:` lines, its dialog offers **Apply shadowing**. + **Kill** stops the selected running job. - Real runs sign the repository. When the package signing key is locked (status bar 🔒), the GUI asks for its passphrase first and hands it to the VM's gpg-agent; it is never stored. diff --git a/docs/superpowers/specs/2026-10-20-sb-builder-phase4-design.md b/docs/superpowers/specs/2026-10-20-sb-builder-phase4-design.md index 775b0c4..b746044 100644 --- a/docs/superpowers/specs/2026-10-20-sb-builder-phase4-design.md +++ b/docs/superpowers/specs/2026-10-20-sb-builder-phase4-design.md @@ -136,7 +136,8 @@ New key `manifest_packages` (below). `remote/config.example.toml` shows it. built as `hint-new` does. The last log line is `SBB-RESULT {"ok": [pkg...], "failed": [[pkg, why]...]}`. Exit status 1 when any package failed. -- `hint-new <pkg> [<ver>] [--no-dl]`: refuses when the hint exists. Builds +- `hint-new <pkg> [<ver>] [--no-dl]` (since 0.6.0 `hint-new <pkg>... [--no-dl]`, + no version, see the UI design): refuses when the hint exists. Builds the hint from the `.info` as mkhint does, without phantom deps (see the facts), then applies the version when given. No `.bak` (a stale one is removed); revert means delete. diff --git a/docs/superpowers/specs/2026-10-20-sb-builder-ui-design.md b/docs/superpowers/specs/2026-10-20-sb-builder-ui-design.md index 7c7b254..8a6844d 100644 --- a/docs/superpowers/specs/2026-10-20-sb-builder-ui-design.md +++ b/docs/superpowers/specs/2026-10-20-sb-builder-ui-design.md @@ -70,7 +70,7 @@ Disabled reasons (tooltips): - Delete hint: "none of the ticked packages has a hint". - Show build log: "select a result with a log". - Run it: "select a finished preview". -- Kill: "no job running". +- Kill: "select a running job". - Check upstream while running: "checking…". Update all, Publish, Pull overlay and Check shadowing are always enabled @@ -120,7 +120,8 @@ dialog, Build these -> preview dialog, Run it. No tab switch. - Starting a job no longer switches to Jobs; the user stays on the tab. - While a job runs, the Jobs tab shows a running icon (`system-run`) and - accent-colored text (palette highlight). + reads "Jobs (running)": the tab style sheet's text color would override a + per-tab color. - When it ends, the icon becomes the end status (`✔` ok, `✘` failed, killed, lost) and stays until the Jobs tab is shown, then clears. - The status bar job button stays. |
