Files
Panama/docs/superpowers/reviews/2026-08-24-vision-review.md
T

100 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).