fix(idle): #127 — input wakes the screen compositor-side; revert the clamshell skip
All checks were successful
Check / eval (push) Successful in 3m33s
All checks were successful
Check / eval (push) Successful in 3m33s
The idle brick was never DPMS. Hyprland ships misc:key_press_enables_dpms
and misc:mouse_move_enables_dpms OFF, so hypridle's on-resume was the ONLY
caller of `dpms on` in the session — an idle daemon with the display held
hostage behind it. hypridle then deadlocks on an unfixed upstream bug
(hyprwm/hypridle#171, "Disconnected from pollfd id 1", open since 2025-09,
absent from 0.1.7 and main) and hangs WITHOUT exiting, so Restart=always
never fires and systemd still reports it active (running). Blank + deadlock
= a black seat no keypress can escape. That was the brick: two mundane bugs,
not one exotic DRM state. 19 disconnects in 11 days on the dev box, incl.
the incident day; the compositor is healthy through all of them.
Both options on, so the wake lives in the compositor where no daemon can
lose it — a dead hypridle now costs auto-lock, not the machine. The #127
clamshell DPMS-off skip (060bf52) is therefore reverted: idle blanks again
in every dock/lid state, and the 27" panels stop being held lit all night
under a static lock screen. #135 (an option to opt back in) is retired
unbuilt — there is nothing left to opt into.
TEST B's first run was invalid and nearly bought the wrong answer: it ran
`hyprctl dispatch dpms off` by hand, which no wake path watches, so "input
did not wake it" was guaranteed on any hardware. The undocked control
returning the SAME result — where the theory demanded a difference — is what
exposed it. Driven through hypridle instead, input wakes it in all three
configurations, including clamshell-docked on the sole live output.
Filed from the diagnosis: #146 (hypridle dies silently, systemd calls it
healthy — the surviving bug) and #147 (a re-login leaves session units dead;
graphical-session.target never re-enters, which is why Waybar already runs
from exec-once).
V3 on the incident hardware (AMD dev box, clamshell): hypridle deliberately
stopped, `dpms off` -> keypress woke it in 6s; the identical test before the
options stayed black the full 45s. V1: nix flake check, checks.option-docs,
checks.clamshell-logind, checks.docking-ux, checks.display-profiles; read the
emitted hyprland.conf/hypridle.conf rather than the source.
V3 pending: the fix is proven via runtime `hyprctl keyword`, not yet from our
own Nix — HARDWARE-QUEUE re-checks it after nomarchy-home + relogin.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +19,39 @@ Template:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-16 — #127 SOLVED: the brick was never DPMS, and TEST B's first run lied
|
||||
- **Task:** #127 TEST B (Bernardo ran it), then the whole sweep his result forced.
|
||||
- **Read this if nothing else — the test measured nothing, and said so.** His run
|
||||
reported "input never wakes it" **docked *and* undocked alike**, and that tie is
|
||||
the tell: the theory demanded those differ. It ran `dpms off` **by hand**, which
|
||||
no wake path watches, so "input didn't wake it" was guaranteed on any hardware
|
||||
in any dock state. Re-run *through* hypridle so `on-resume` is actually armed:
|
||||
input woke it in all 3 configs, **including clamshell on the sole live output**
|
||||
(`done enabled=1 first=DP-2`) — the incident's exact geometry. Put the mechanism
|
||||
under test inside the circuit, or you are measuring your own scaffolding.
|
||||
- **Real cause:** Hyprland ships `misc:{key_press,mouse_move}_enables_dpms` **off**,
|
||||
so hypridle's `on-resume` was the ONLY caller of `dpms on` anywhere in the session
|
||||
— and hypridle deadlocks (hyprwm/hypridle#171, open since 2025-09, in neither
|
||||
0.1.7 nor main) **without exiting**, so `Restart=always` never fires and systemd
|
||||
still reports it active. Blank + deadlock = a black seat no key escapes. **19× in
|
||||
11 days** on his box, incl. the incident day. Two mundane bugs, not one exotic one.
|
||||
- **Did:** both options on — structural: the wake moves into the compositor where no
|
||||
daemon can lose it, so a dead hypridle costs auto-lock, not the machine. Reverted
|
||||
the clamshell skip; **#135 retired unbuilt**; ROADMAP § "#127 solved"; filed #146
|
||||
(hypridle mortality) + #147 (relogin leaves session units dead) → PROPOSED.
|
||||
- **Verified: V3 on the incident hardware.** Clamshell, hypridle **deliberately
|
||||
stopped** (brick condition on purpose), `dpms off` → keypress woke it in **6s**;
|
||||
the identical test before the options stayed black the full 45s. V1: `flake check`
|
||||
+ `option-docs`/`clamshell-logind`/`docking-ux`/`display-profiles` pass, and I read
|
||||
the **emitted** configs, not the source (`key_press_enables_dpms=true`;
|
||||
`on-timeout=hyprctl dispatch dpms off`, skip script gone).
|
||||
- **Pending:** V3 — proven via runtime `hyprctl keyword`, NOT from our Nix yet;
|
||||
HARDWARE-QUEUE entry re-checks after `nomarchy-home` + relogin. Ctrl+Alt+F3 dead
|
||||
during the incident is still unexplained (upstream co-symptom, hypridle#145).
|
||||
- **Next suggestion:** #147 before #146 — a guard that restarts hypridle into a dead
|
||||
compositor just fail-loops into `start-limit-hit` exactly like cliphist does. Both
|
||||
are PROPOSED; Bernardo triages.
|
||||
|
||||
## 2026-07-16 — #129/#130 buttons; #133; #132; branding; and a latch bug from TEST A
|
||||
- **Task:** Bernardo triaged the queue (#136 settled, #130 decided, #143 → wait,
|
||||
#120 → PROPOSED), then #133, #132, the codename drop, and #129+#130.
|
||||
|
||||
Reference in New Issue
Block a user