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
@@ -26,6 +26,23 @@ settings="$repo_dir/config/dot/quickshell/config/Settings.qml"
[[ -f "$schema" ]] || fail 'preference schema is missing'
[[ -f "$settings" ]] || fail 'settings singleton is missing'
# ── The gate is decided once ────────────────────────────────────────────────
#
# handleNotification weighs Do Not Disturb against its two exceptions and puts
# what survives into `popups`. The banner window then re-tested
# !Notifs.doNotDisturb on its `visible` binding, which is not a narrowing of
# that decision -- it is a replacement of it. An application on a focus mode's
# allow list, or a critical notification with breakthrough switched on, was
# admitted by the service, chimed, and then rendered onto a window that was
# hidden. The exceptions existed, were configurable, and did nothing.
toasts="$repo_dir/config/dot/quickshell/modules/notifications/Toasts.qml"
[[ -f "$toasts" ]] || fail 'the banner window is missing'
rg -Fq 'visible: Notifs.popups.length > 0' "$toasts" \
|| fail 'the banner window does not show exactly what the service admitted'
if rg -q 'visible:.*doNotDisturb' "$toasts"; then
fail 'the banner window re-gates on Do Not Disturb, overriding the allow-list and breakthrough exceptions the service already applied'
fi
# The expanded row body lives in its own component now. It is part of the same
# surface as the page, so the per-application assertions read both rather than
# only the file that happens to hold the card today -- otherwise pulling a row