#!/usr/bin/env bash set -euo pipefail fail() { printf 'Panama action IPC contract: %s\n' "$1" >&2 exit 1 } active_target="" original_state="" restore_target() { local target="$1" expected="$2" current current="$(qs ipc call "$target" status 2>/dev/null || true)" if [[ $current != "$expected" && ( $expected == true || $expected == false ) ]]; then qs ipc call "$target" toggle >/dev/null 2>&1 || true fi } cleanup() { if [[ -n $active_target ]]; then restore_target "$active_target" "$original_state" fi } trap cleanup EXIT exercise_toggle() { local target="$1" before after restored before="$(qs ipc call "$target" status)" active_target="$target" original_state="$before" [[ $before == true || $before == false ]] \ || fail "$target returned a non-boolean status: $before" after="$(qs ipc call "$target" toggle)" [[ $after != "$before" ]] \ || fail "$target did not change state: before=$before after=$after" restored="$(qs ipc call "$target" toggle)" [[ $restored == "$before" ]] \ || fail "$target did not restore its original state: before=$before restored=$restored" active_target="" original_state="" } ipc="$(qs ipc show)" rg -q '^target caffeine$' <<<"$ipc" || fail 'caffeine IPC target is missing' rg -q '^target night-light$' <<<"$ipc" || fail 'night-light IPC target is missing' exercise_toggle caffeine exercise_toggle night-light printf 'Panama action IPC contract: PASS\n'