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

6.4 KiB
Raw Blame History

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 deadToasts.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 wipetakeSafetySnapshot() 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 serviceConnectivity.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, " 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).