aboutsummaryrefslogtreecommitdiffstats
path: root/docs/superpowers
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-15 12:25:21 +0200
committerDanilo M. <danix@danix.xyz>2026-09-15 12:25:21 +0200
commitfceeb5dc23c5e5a951f725e7682eab6814191c47 (patch)
treee18cb3c9a699740922abf92bbdf9670817bda6ed /docs/superpowers
parent180accd0a4dde00a25c1766c6b962809998d2ad7 (diff)
downloadquickshell-fceeb5dc23c5e5a951f725e7682eab6814191c47.tar.gz
quickshell-fceeb5dc23c5e5a951f725e7682eab6814191c47.zip
docs(status): document the module and record its traps
A FileView fires its own fileChanged on setText, so a handler that writes in response to a change loops unless it compares first. IdleInhibitor has no window of its own and does nothing without one, so the singleton is handed the keepalive window by shell.qml. Both were read from the documentation while designing and confirmed while implementing.
Diffstat (limited to 'docs/superpowers')
-rw-r--r--docs/superpowers/plans/2026-09-15-status-registry.md40
1 files changed, 35 insertions, 5 deletions
diff --git a/docs/superpowers/plans/2026-09-15-status-registry.md b/docs/superpowers/plans/2026-09-15-status-registry.md
index 614952c..c98769d 100644
--- a/docs/superpowers/plans/2026-09-15-status-registry.md
+++ b/docs/superpowers/plans/2026-09-15-status-registry.md
@@ -67,7 +67,7 @@ Do not re-probe these; they are measured, not assumed.
Two claims come from the documentation and have not been observed running. Record what actually happens in the task report, and add an `AGENTS.md` trap in Task 8 for whichever bites.
- `FileView` with `watchChanges: true` is documented to fire `fileChanged` on its own `setText()`. If so, the singleton sees its own writes and must not re-enter. Task 1 handles this with a value comparison rather than a re-entrancy flag; confirm the comparison is actually needed.
-- `IdleInhibitor` is documented to need a non-null `window` to do anything. Confirm that assigning the keepalive window is sufficient and that `hyprctl clients` count changes.
+- `IdleInhibitor` is documented to need a non-null `window` to do anything. Confirm that assigning the keepalive window is sufficient. The `hyprctl clients` count does not change: the inhibit lands on a layer surface, which that listing ignores, so check it behaviorally with a throwaway `hypridle -c` (Task 4 Step 4).
---
@@ -709,18 +709,33 @@ This needs the user's running shell, not the transient smoke instance. Ask the u
```bash
statusctl_path=desktop/modules/status/statusctl
+cat > /tmp/hypridle-check.conf <<'EOF'
+listener {
+ timeout = 8
+ on-timeout = touch /tmp/hypridle-fired
+}
+EOF
+rm -f /tmp/hypridle-fired
+hypridle -c /tmp/hypridle-check.conf &
+idle_pid=$!
+
bash "$statusctl_path" presentation set 1
sleep 1
echo "dnd now: $(bash "$statusctl_path" dnd get) (expect 1)"
~/bin/breaktimer.sh status
-hyprctl clients | grep -ci inhibit
+sleep 10
+test -e /tmp/hypridle-fired && echo "inhibitor FAILED: fired while presenting" || echo "inhibitor held"
+
bash "$statusctl_path" presentation set 0
sleep 1
echo "dnd now: $(bash "$statusctl_path" dnd get) (expect 0)"
~/bin/breaktimer.sh status
+sleep 10
+test -e /tmp/hypridle-fired && echo "inhibitor released, idle fired" || echo "inhibitor STUCK"
+kill "$idle_pid"
```
-Expected: `dnd now: 1`, breaktimer reports `paused`, the inhibitor count rises by one, then `dnd now: 0` and breaktimer reports `running`. Record the actual inhibitor counts in the task report; if the count does not change, the `IdleInhibitor` assumption is wrong and Task 8 gets a trap saying so.
+Expected: `dnd now: 1`, breaktimer reports `paused`, `inhibitor held`, then `dnd now: 0`, breaktimer reports `running` and `inhibitor released, idle fired`. The check is behavioral because `hyprctl clients | grep -ci inhibit` counts the per-toplevel `inhibitingIdle` field only; the inhibitor is asserted on the keepalive layer surface, which that listing does not cover, so the count never moves. Record the marker results in the task report.
- [ ] **Step 5: Commit**
@@ -1087,10 +1102,25 @@ Ask the user to click the waybar glyph and confirm the drawer's Status page swit
- [ ] **Step 4: Confirm only one inhibitor is asserted**
```bash
-hyprctl clients | grep -ci inhibit
+cat > /tmp/hypridle-check.conf <<'EOF'
+listener {
+ timeout = 8
+ on-timeout = touch /tmp/hypridle-fired
+}
+EOF
+rm -f /tmp/hypridle-fired
+hypridle -c /tmp/hypridle-check.conf &
+idle_pid=$!
+bash desktop/modules/status/statusctl presentation set 1
+sleep 10
+test -e /tmp/hypridle-fired && echo "inhibitor FAILED: fired while presenting" || echo "inhibitor held"
+bash desktop/modules/status/statusctl presentation set 0
+sleep 10
+test -e /tmp/hypridle-fired && echo "inhibitor released, idle fired" || echo "second inhibitor still held"
+kill "$idle_pid"
```
-Ask the user to run this with presentation mode off, then on. Expected: the count rises by exactly one, not two. Two would mean the built-in waybar module is still running.
+Ask the user to run this. Expected: `inhibitor held` while presentation is on, then `inhibitor released, idle fired` within a few seconds of turning it off. `second inhibitor still held` would mean the built-in waybar module is still running. `hyprctl clients | grep -ci inhibit` is not the check: a layer-surface inhibitor does not appear in that listing.
---