QA - Desktop UX (Safe desktop, Wails shell, HITL, profiles)¶
Normative surface inventory: 07-desktop-ux.md.
Success sentence:
Everyday Safe use stays calm; window opens when needed; My agents naming is consistent; Advanced holds dangerous/power tools; tips appear one layer at a time.
Automated¶
go test ./internal/desktop/ ./internal/run/ ./internal/notify/
cd cmd/denyout-desktop/frontend && npm ci && npm run build
CGO_ENABLED=1 go build -tags 'wails webkit2_41' -o denyout-desktop ./cmd/denyout-desktop
Last run (2026-11-14 evening): go test ./internal/desktop/ ./internal/notify/ ./internal/run/ PASS - frontend build PASS - Wails binary -> ~/.local/bin/denyout-desktop.
Threat lists / packs (TL)¶
Normative: ux-iters/threat-lists-plan.md.
Evidence matrix (TL1-TL8, M1-M8): ux-iters/threat-lists-qa.md.
go test ./internal/threatlists/ ./internal/policy/ ./internal/desktop/ ./internal/notify/
Last run (2026-11-14): TL1-TL8 unit PASS; M1-M8 code PASS; live Protect dogfood PENDING user.
Notifications / HITL rework (NF)¶
Normative: ux-iters/notifications-rework-plan.md.
| ID | Check | Result (2026-11-14) |
|---|---|---|
| T1 | Timeout / Decide later ≠ Keep | PASS unit TestTimeoutDoesNotRememberKeep / TestNF_* |
| T2-T3 | Keep + Quiet suppress keep-repeat | PASS code + TestQuietBlocksKeepRepeat |
| T4-T5 | Timed allow/deny + pause resume EmitAction | PASS unit + timed.go / EmitAction |
| T6-T8 | Whitelist / Ask no teaser / batch ≥2 | PASS unit + Ask dialog-only |
| M1-M2 | Compact dialog / in-app modal | PASS code (PresentDecisionNative / Wails decision event). DE: zenity+notify-send present; live Protect block not exercised in agent |
| M3-M8 | later / Keep / Allow / timed | PASS unit applyHardBlockDecision |
| M9-M11 | Agents secret + Ask | PASS code (handlePostBlockDeny; no Ask teaser) |
| M12-M14 | Pause Off / resume Undo / fail | PASS code (chooseProtectPause, EmitAction Undo, KindProtectFailed) |
| M15-M18 | Quiet / interval / tray / Open | PASS code (Settings levels, tray labels, DecisionOpen->activity) |
| Live DE click-through | Full Protect On -> real secret URL | PENDING user dogfood (agent has no elevated Protect session) |
Manual / evidence matrix¶
| # | Path | Expect | Result (2026-11-14) |
|---|---|---|---|
| 1 | Silent install -> Your setup | Open DenyOut + Got it; window not forced every login | PASS (code: Wails modal + native Open DenyOut/Got it; SkipNativeYourSetup on desktop) |
| 2 | Left-click tray | Activity; right-click ≤6 menu items | PASS code (OnClick->activity; compact menu). DE re-check: some Linux trays may open menu on left-click (documented caveat) |
| 3 | Tray My agents... (Wails) | Opens My agents screen | PASS (RequestOpenUI("profiles")) |
| 4 | Nav label | My agents | PASS |
| 5 | Onboarding | Checklist -> glossary -> screen tip; never stacked with Your setup | PASS (showChecklist / showGlossary / tipsEnabled) |
| 6 | Activity | No checkboxes until Select...; Group by host under Filters; human reason labels | PASS |
| 7 | Settings Basic | No Agents only; Protect / Off / notify / autostart | PASS |
| 8 | Settings Advanced | Agents only warn + lists + Test; Find a setting... | PASS |
| 9 | Unhealthy | Top bar "Needs attention - open Problems" + badge | PASS |
| 10 | Empty Activity | "Nothing blocked yet" + Test protection CTA | PASS |
| 11 | Drawer | Allow this site | PASS |
| 12 | Ctrl+K | Always allow / Keeps / Agents only jumps | PASS |
Static evidence script: 18/18 checks against source. Interactive toast/elevation/live tray click on a physical DE was not exercised in this agent environment - re-verify #2 left-click on target desktop if needed.
Cut order¶
- UX2-A...C - done
- UX3-A docs sync - done
- UX3-B reason labels - done
- UX3-C QA evidence - this file