Files
Panama/tests/quickshell/focus-session-expiry.sh
T
Gabriel Brown 1a91d00f2c Stop two contracts from latching a broken desktop state
Both tests run against the live session and capture "what it was before"
so they can put it back. Neither checked that what they found was sane,
so one interrupted run poisoned every run after it -- and because each
subsequent run faithfully restored the bad value, the desktop stayed
broken while the failure looked like an ordinary flake.

displays-contract left the monitor at scale 1.25 after a failed revert.
The next run recorded 1.25 as the original and restored the desktop to
it. It now reads the shipped scale out of monitors.lua and refuses to
run when the live display disagrees. A failure to parse that value is
fatal rather than skipped, because silently skipping the check is how
the laundering happened in the first place.

focus-session-expiry kills and restarts the shell mid-session, so an
interrupted run leaves caffeine on with nothing left to turn it off. The
next `focus start` recorded "previously on", handed it back on expiry,
and failed the assertion that caffeine ends off -- identically, forever,
with the desktop unable to idle or lock the entire time. It now refuses
to start unless caffeine is already off, which is the only state in
which the test can tell "restored correctly" from "never released".

Both guards name the exact command to recover with. Verified each fires
on a dirty state and passes on a clean one; caffeine was found latched
on this machine and has been released.

Claude-Session: https://claude.ai/code/session_01BRvzt4H8XXLPVH5MyYdk9L
2026-08-18 07:48:02 -04:00

63 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
fail() {
printf 'focus-session expiry: %s\n' "$1" >&2
exit 1
}
cleanup() {
qs ipc call focus end >/dev/null 2>&1 || true
}
trap cleanup EXIT
qs ipc call focus end >/dev/null 2>&1 || true
# focus start records the caffeine state it found so end() can hand it back, and
# the assertion below requires caffeine to finish off. Both are only true if
# caffeine starts off.
#
# This test kills and restarts the live shell, so an interrupted run leaves
# caffeine on with nothing to turn it back off. The next run then records
# "previously on", faithfully restores it, and fails -- and every run after
# that fails identically, with the desktop quietly unable to idle or lock the
# whole time. Refuse to start from that state rather than latching it in.
if [[ "$(qs ipc call caffeine status 2>/dev/null)" != "false" ]]; then
fail 'caffeine is on before the session starts -- this test cannot distinguish "restored correctly" from "never released". Turn it off first: qs ipc call caffeine toggle'
fi
qs ipc call focus start >/dev/null
state_file=$(find "${XDG_STATE_HOME:-$HOME/.local/state}/quickshell/by-shell" -name focus-session.json -print -quit)
[[ -n "$state_file" ]] || fail 'persistent state file was not created'
expired=$(mktemp "${state_file}.expired.XXXXXX")
jq '.paused = false | .deadlineMs = 1' "$state_file" >"$expired"
chmod --reference="$state_file" "$expired"
mv "$expired" "$state_file"
qs kill >/dev/null
for _ in $(seq 1 50); do
qs list 2>&1 | rg -q '^Instance ' || break
sleep 0.1
done
if qs list 2>&1 | rg -q '^Instance '; then
fail 'shell did not stop before restart'
fi
quickshell --daemonize >/dev/null
status=""
for _ in $(seq 1 60); do
status=$(qs ipc call focus status 2>/dev/null || true)
if jq -e '.active == false' <<<"$status" >/dev/null 2>&1; then
break
fi
sleep 0.2
done
jq -e '.active == false and .caffeine == false and .doNotDisturb == false' <<<"$status" >/dev/null || fail 'expired session was not completed and released'
trap - EXIT
printf 'focus-session expiry: PASS\n'