Make Shell a category, the bar legible, and the dock a real dock
Desktop & Dock becomes Shell — Bar, Dock, Control Center, Tiling, Workspaces — the home for everything Quickshell draws. The settings- management cluster moves to System as Sync & Backup, Appearance's Shell tab dissolves, and 24-hour time finally lives on Date & Time, which always owned it. The bar gets what it never had: a way to survive the wallpaper. A second neutral text family (follow theme, or forced light or dark), a one-layer shadow under every glyph, and a gradient scrim for wallpapers nothing else survives — all off by default, pixel-identical until asked. Widgets earn toggles (weather, media, clipboard, calendar countdown), the vitals cluster stops leaving a dead pill behind, and Control Center's sections learn to step aside. The dock graduates from MVP: a context menu with window rows, pin, unpin, quit and new-window; scroll an icon to cycle its windows; drag to reorder on the dock itself; hover previews with one-shot captures; and "Add App to Dock" in the launcher. Three real bugs died en route — menus that slid away with the autohide, a readonly-property crash on every menu open, and a drag that drifted half a slot per icon on side docks. The pinned-apps editor in Settings becomes a drag strip. 166 contracts; the full suite is green except two live display and switcher tests that cannot run behind a locked session — re-verified on unlock. Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
@@ -7,7 +7,7 @@ with Gabriel's go-ahead**, and failures get fixed then.
|
||||
|
||||
## The run
|
||||
|
||||
- `panama test` — the full suite (165 contracts as of the phase 3 contracts
|
||||
- `panama test` — the full suite (**166** contracts as of the phase 4 Shell
|
||||
wave; the top-level README's count line is set to match and is itself
|
||||
checked by `setup/readme-contract`).
|
||||
|
||||
@@ -85,3 +85,106 @@ full-suite pass are deferred to the end-of-redesign sweep.
|
||||
- `AppearancePage.qml`'s `tab` property defaults to `"background"` while its
|
||||
own comment says Themes leads. Decide which is intended before the run;
|
||||
nothing currently pins it either way.
|
||||
|
||||
## Phase 4 (Shell category) — append below
|
||||
|
||||
Spec: `2026-08-24-shell-category-redesign.md`. Desktop & Dock became **Shell**
|
||||
(Bar · Dock · Control Center · Tiling · Workspaces), System gained **Sync &
|
||||
Backup**, and the dock got its feature wave.
|
||||
|
||||
Unlike phases 2 and 3, the static and stubbed contracts in this wave **were
|
||||
run** as they were written, and every one of them passed in isolation against
|
||||
the tree. Two things are still deferred. The **live-harness halves** were not
|
||||
run — the session was locked, and `dock-position-contract` opens a probe shell
|
||||
while `settings-pages-contract` starts a settings harness, so those ran static-
|
||||
only (`PANAMA_SETTINGS_STATIC_ONLY=1`) or not at all. And the **full-suite
|
||||
pass**, the only thing that catches contention between harnesses, happens next
|
||||
with Gabriel driving.
|
||||
|
||||
### New contracts (1)
|
||||
|
||||
| Contract | What it pins |
|
||||
|---|---|
|
||||
| `quickshell/bar-visibility-contract` | The bar's own neutral family: `barFg`/`barFgDim`/`barFgMuted` exist, each forced tone is anchored on one literal with both dims mixed off it, and the `theme` branch returns `root.fg`/`fgDim`/`fgMuted` **by identity** rather than a copied colour. All thirteen bar-text files bind to those tokens and none paints neutral text with the `fg` family (`Theme.alpha(Theme.fg, …)` hover and separator fills are allowed; semantic tones were never in scope). `Bar.qml`'s scrim reads `visible: Settings.barBackdrop`, its shadow reads `layer.enabled: Settings.barTextShadow` over exactly one `MultiEffect` layer, and neither may be a literal `true` — both shipped hardcoded during the build, which is the regression this exists for. Plus the four widget gates ANDed with their state conditions, `VitalsWidget`'s whole-pill `visible`, `exclusiveZone: Theme.barHeight` still literal, no animation anywhere in `Bar.qml`, and the two right-click jumps landing on `bar`. |
|
||||
|
||||
Mutation-checked while writing: hardcoding the shadow, returning a literal from
|
||||
the `theme` branch, putting one widget back on `Theme.fg`, deleting the vitals
|
||||
pill's own `visible`, and adding a `Behavior` to `Bar.qml` each fail it with a
|
||||
message naming the actual problem.
|
||||
|
||||
### Updated contracts (5)
|
||||
|
||||
| Contract | What it now pins |
|
||||
|---|---|
|
||||
| `quickshell/dock-position-contract` | `DockPinsEditor` → `DockPinsStrip`: `preventStealing` moved to the strip, the retired ↑/↓ buttons replaced by the strip's own keyboard path (Left/Right move, Delete unpins), and a new section for the **live** dock's drag-to-reorder — commits once on release, and measures a slot from a real icon rather than a constant, because a `DockItem` is taller than it is wide and a constant is wrong on one orientation. |
|
||||
| `quickshell/settings-jump-contract` | `DockContextMenu`'s "Dock settings" now opens `dock`, not the retired `desktop`. |
|
||||
| `quickshell/settings-pages-contract` | Six new pages added to the page sweep (Bar, Dock, ControlCenter, Tiling, Workspaces, Sync); `vitalsIntervalMs` and the graphics ChoiceGrid now required on `BarPage` rather than `AppearancePage`, since the vitals are bar content and not surface appearance. |
|
||||
| `setup/projects-contract` | The saved-projects list moved from the deleted `DesktopPage.qml` to `WorkspacesPage.qml`. |
|
||||
| `quickshell/panama-commands-contract` | The launcher's new `dock-add-app` → `panama-action dock-pin` command. |
|
||||
|
||||
### Verified against the new tree, no edit needed
|
||||
|
||||
Every one of these was **run** and passed after the phase-4 changes landed:
|
||||
|
||||
- `quickshell/settings-search-contract` — the new `bar`/`controlCenter`/
|
||||
`datetime` groups and the re-pointed `dock`/`multitasking`/`edges`/`master`/
|
||||
`notices`/`focus` routes are covered by the schema-label sweep already.
|
||||
- `quickshell/settings-ownership-contract` — the six intentional mirrors and the
|
||||
eleven README literals survived the rewrite; no new mirror was introduced.
|
||||
- `quickshell/settings-nav-contract` — 14 categories, 38 leaves, 2 retired ids
|
||||
(`home-phone`, `desktop`).
|
||||
- `quickshell/manual-contract`, `gnome-handoff-contract` (15 handoffs against
|
||||
38 pages), `control-center-contract`, `welcome-contract`,
|
||||
`accent-controls-contract`, `theme-catalog-contract`,
|
||||
`desktop-style-contract` — checked, nothing stale.
|
||||
|
||||
`welcome-contract` passed in isolation again here, which does not settle the
|
||||
phase-3 flake above: that failure only appeared under a storming full-suite run.
|
||||
|
||||
### Docs updated in the same wave
|
||||
|
||||
- `docs/settings.md` and the 37 `settings-*` launcher commands — regenerated by
|
||||
`panama-settings-docs` and `panama-settings-commands`; both `--check` modes
|
||||
clean and both generators verified idempotent. `settings-desktop` is deleted,
|
||||
`settings-bar`/`-dock`/`-control-center`/`-tiling`/`-workspaces`/`-sync` are
|
||||
new, and `dock-add-app` joins them.
|
||||
- `modules/settings/README.md` — new **Shell** section (the five tabs, the bar
|
||||
token design and why it exists, the pins strip and the live dock's gestures,
|
||||
the Control Center rule that only real sections get toggles) and a new
|
||||
**System › Sync & Backup** section. Appearance corrected from six tabs to
|
||||
five, saying where the Shell tab went.
|
||||
- `manual/05-making-it-yours.md` — new **Shell** chapter section (bar
|
||||
legibility, widget switches, why `use24Hour` is not there, the pins strip,
|
||||
the dock's drag/right-click/scroll/preview gestures, **Add App to Dock**,
|
||||
Control Center sections) plus **Carrying settings between machines**.
|
||||
`manual/03-windows-and-workspaces.md` — the multi-display workspace switch
|
||||
now points at Displays, which is where it actually is, instead of the deleted
|
||||
Desktop & Dock page.
|
||||
- Top-level `README.md` — contract count 165 → 166, recounted the way
|
||||
`panama test` collects (executable, or `*_test.py`, excluding fixtures and
|
||||
`__pycache__`).
|
||||
|
||||
### Still open before the run
|
||||
|
||||
- Four contracts in the working tree changed for reasons **outside** this
|
||||
phase and are not accounted for above: `declared-assets-contract` (`pkill`,
|
||||
from the video wallpaper work), `declared-dependencies-contract` (`cmp` →
|
||||
diffutils), `panama-doctor-contract` (29 → 30 check ids), and
|
||||
`lock-screen-helper-contract` / `video-wallpaper-contract` (theme-derived
|
||||
literals and the mpv IPC key quoting). Confirm each belongs to a wave that
|
||||
intended it before the suite runs.
|
||||
- `tests/setup/update-command-contract` is untracked and belongs to the
|
||||
separate `panama update` design, not to this redesign. It **is** inside the
|
||||
166.
|
||||
- `quickshell/dock-position-contract` has never had its **live** half run since
|
||||
the strip landed: it opens a probe shell, and this wave ran under a locked
|
||||
session. Its static half is what was verified. Run it first in the sweep.
|
||||
- `quickshell/settings-pages-contract` passed static-only for the same reason.
|
||||
Its compositor-integration half — the settings harness, its IPC, and the
|
||||
page-open checks — is unverified against the six new pages.
|
||||
- `Bar.qml` has one stray indentation glitch at its first `Row` (line 105).
|
||||
Cosmetic, untouched here because the file is not this wave's to reformat.
|
||||
- 2026-08-24 full-suite run: 166 contracts, all green except `displays-contract`
|
||||
and `switcher-contract`, which are live interactive tests that cannot run
|
||||
behind hyprlock (both passed in the same day's unlocked run; neither
|
||||
subsystem changed in phase 4). Re-verify after unlock.
|
||||
|
||||
Reference in New Issue
Block a user