Tier 0: render what the services already decided, honestly

Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
Gabriel Brown
2026-08-25 00:24:30 -04:00
parent be0e55214b
commit 8b1205e4b8
38 changed files with 1474 additions and 260 deletions
@@ -0,0 +1,99 @@
# Vision review — synthesis of three lenses
Three parallel read-only reviews of the completed settings redesign (honesty audit,
completeness vs GNOME/macOS/KDE, product coherence), 2026-08-24, HEAD `be0e552`. Full
agent reports live in the session transcript; this file is the ranked synthesis. Companion
to the /code-review ultra run of the same day.
## The one-sentence verdicts
- **Honesty**: clears the bar on breadth and intent; thinnest at the last mile — the honesty
is computed in the services and then dropped by one line of glue at the surface.
- **Completeness**: "has thoroughly won the argument that it is a complete settings app; has
not yet made the argument that it is a *Hyprland* settings app."
- **Coherence**: 8/10 as one product; the deficit is component adoption, not design
disagreement — the phases wrote down every shared abstraction and then copy-pasted it.
## Tier 0 — bugs to fix now (shipped-broken behavior)
1. **DND exceptions are dead**`Toasts.qml:15` re-gates on `!Notifs.doNotDisturb`,
overriding the service's three-way decision. Allowed apps chime + flash and never show.
Fix: `visible: Notifs.popups.length > 0`.
2. **Restore-defaults safety snapshot races the wipe**`takeSafetySnapshot()` returns at
launch; the reset rewrites settings.json before the async helper reads it. The "undoable"
promise records the post-reset defaults. Fix: completion signal, reset inside it, abort on
snapshot failure.
3. **Reset confirm lies about dock pins** — "Pinned applications … are not changed" while
`resetDesktopDefaults` restores the shipped 16-app dock. Fix the sentence.
4. **Manual proxy deadlock** — host and port each refuse to commit until the other is set;
neither can ever be first, and manual mode is already engaged. Fix: page-local drafts,
commit when both present.
5. **"Close the range" closes one of two protocols** — the mutation loop discards every
iteration after the first; Fedora's zone has tcp AND udp ranges. Fix: multi-spec verb or
pending-mutation queue.
6. **Reassurance without measurement** ×3 on Privacy — device-security "everything
recommended" over a parse failure; "No app has asked" over an unread portal; live tiles
"Idle" with pw-dump absent. The `scanned`/`available`/`initialized` flags exist unread.
Same class: failed update check renders "Up to date" (`panama-updates` exit-code
swallow); health sidebar footer green beside a red unavailable hero (flag precedence).
7. **User-deletion consent names a guessed path**`"/home/" + userName` in the armed
confirm; the helper reports the real HomeDirectory unread.
8. **VRR picker snaps back mid-confirmation** — reads the persisted store instead of
`pendingRequestedLayout` during the keep-or-revert window.
9. **Quicksettings scan killed by the settings service**`Connectivity.active` false
re-syncs `scannerEnabled` off under an open panel stuck at "Searching…". Refcount the
hold.
10. **Dictation try-it can type someone else's recording** — "Listening…" set even on
`already-recording`; mic test has no error surface at all.
## Tier 1 — the safety layer (one pass, one file first)
- `SettingsButton` carries the two-press contract in a comment and enforces nothing: add
keyboard focus/keys/ring + make the seven one-press destructive buttons two-stage
(BluetoothPanel Forget, FocusModeRow Delete, ThemeSaveRow Delete, HomeFavoriteCard Remove,
UsersPage avatar Remove, SshKeysPage agent Remove, DisplayPanelHeader Forget) — then the
nine more from the honesty audit's finding 11 (theme cards, override reset, history clear,
RDP creds, BT quicksettings trash glyph, print-job cancel, display Forget, default-zone
change; snapshot-delete and powermenu name their consequence).
- Promote three patterns to components so they can't be forgotten: **ConfirmAction**
(two-stage, one-armed-at-a-time, Keep/Verb…/Verb it), **ErrorRow** (in-card placement,
"<Subject> needs attention"), **"not measured, because—"** state for status surfaces.
Add the idiom contract the coherence review specifies so drift fails the build.
## Tier 2 — identity features (the "Hyprland settings app" argument)
1. **Custom keyboard shortcuts** (schema `customBinds` → keybinds.lua, ShortcutCapture
reused) — build the user-config-through-schema mechanism properly;
2. **Window rules editor** rides the same mechanism (float/workspace/size/opacity scope
first; match captured from the live window);
3. **Gesture bindings** complete the trio.
4. **Search tokenization** + the named holes (log out, wired, metered, gestures…) + route
through `openSettingsSection` so results land on the right tab (mechanism exists, one
caller).
5. **Kill the last dead doors**: GNOME "system" umbrella button on Health (contract can't
see it — add `[system]=about` to OWNED), the Wellbeing handoff (inert without
gnome-shell) → replace with native screen time/break reminders; the phantom "per-device
input stays with GNOME" comment.
6. **Network round-out**: static IP/DNS/metered/saved networks/hidden SSID (new
panama-network verbs).
7. Smaller: DND quick-settings tile, color filters via `decoration:screen_shader`,
Bluetooth device management depth (trust/rename/adapter, D-Bus already exposes it),
keyboard layout list (evdev.lst already parsed), first-run offering import + theme,
Displays rescan row, removable-drive mount, launcher toggle verbs (dark mode first),
per-app hub drill-in, uncapped lists (known_hosts worst; MyHome entities double-render;
quicksettings Wi-Fi/BT lists whose settings twins carry the bounding comments).
## Tier 3 — coherence convergence (four passes, first two ≈ a day)
Pass 1 the safety layer (above). Pass 2 adopt existing components (SectionLabel ×9,
StatusBadge rename + 6 hand-rolls, SettingsChip ×4, chip height 26, guard the 12 unguarded
refresh-on-open). Pass 3 the two extractions + idiom contract. Pass 4 copy & docs: search
section-routing, 12 README errors, 5 manual errors + 14 unmentioned categories, one spelling
each of colour/app, detail-punctuation rule, 29 essay-details into SettingsNote.
## Recorded honest state (not findings)
Tier-2 deferrals all verified recorded in-tree (mono audio, sticky keys, rollback, PPDs,
Samba, hibernate, etc.). All 190 schema keys have genuine readers. Zero dead components,
complete qmldir, uniform disclosure/lede/button conventions. The manual's structure is
contract-pinned; its content is not (that gap is Tier 3 Pass 4).