diff options
| author | Danilo M. <danix@danix.xyz> | 2026-09-15 10:58:49 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-09-15 10:58:49 +0200 |
| commit | 6f95190e47bafa0e8e70fdd78aa8fdb26a0c248d (patch) | |
| tree | 5b0b498441cf67f1d074831bc15b6f088afc00ac /AGENTS.md | |
| parent | f6143e312cf9f20bc2b9be126eaa583f638538e0 (diff) | |
| download | quickshell-6f95190e47bafa0e8e70fdd78aa8fdb26a0c248d.tar.gz quickshell-6f95190e47bafa0e8e70fdd78aa8fdb26a0c248d.zip | |
docs: record the scan, logind and idle-inhibit traps
Four findings from designing the status registry, all runtime-verified.
The scan one shipped as a fix in f43f31a: neither BluetoothAdapter.discovering
nor WifiDevice.scannerEnabled self-terminates, and closing the drawer destroys
the page without stopping them, so a forgotten scan held the radio for the
session.
The logind one corrects an assumption that reached a committed spec before it
was caught. elogind does run here, with pam_elogind in the PAM stack and a
tracked session on seat0. The narrower true caveat is that pam_elogind no-ops
when the system was not booted with elogind as init, so its documented removal
of XDG_RUNTIME_DIR at last logout is not guaranteed on Slackware; a reboot
clears it anyway because /run/user/1000 is tmpfs.
The two idle-inhibit entries record that the compositor advertises
zwp_idle_inhibit_manager_v1 and hypridle honours it, so an inhibitor goes over
Wayland rather than D-Bus, and that waybar's built-in idle_inhibitor owns its
own inhibitor object and therefore cannot be demoted to an indicator for a mode
owned elsewhere.
Held back deliberately: FileView firing its own onFileChanged on setText, and
IdleInhibitor requiring a non-null window. Both are read from the documentation
and neither has been observed running, so they wait for the registry
implementation to confirm them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A7ThHHh5iTYbVfp3rNAkw2
Diffstat (limited to 'AGENTS.md')
| -rw-r--r-- | AGENTS.md | 31 |
1 files changed, 31 insertions, 0 deletions
@@ -181,6 +181,37 @@ changing that component. The ones that generalise: only a runtime `TypeError` in the log and a clean smoke check (the drawer was closed, so nothing was instantiated). Inject an id under a different name: `net`, `bt`, `kc`. +- **Neither scan property self-terminates, and closing the drawer does not stop + them.** `BluetoothAdapter.discovering` is plain BlueZ discovery and + `WifiDevice.scannerEnabled` is a repeating scanner; only `discoverable` and + `pairable` have timeout properties, and the scan ones have none. The scan + button was the sole writer of each, and a drawer close destroys the page + without touching them, so a scan started and forgotten kept the radio busy + for the rest of the session. Both pages now carry a `Timer` bound to the scan + property rather than started by the button, so a manual stop cancels the + clock and reopening the page re-arms a fresh 60s. +- **This machine does run a logind.** `elogind` is running, `pam_elogind.so` is + in the PAM stack for `login`, `sddm`, `xdm` and `kde`, and `loginctl + list-sessions` reports a tracked session on seat0. "Slackware has no logind" + is the obvious assumption and it is wrong; it reached a committed spec once. + The real caveat is narrower: `man 8 pam_elogind` says the module does nothing + if the system was not booted with elogind as its init, which here it is not, + so its documented removal of `$XDG_RUNTIME_DIR` at last logout is not + guaranteed for this configuration. A reboot clears it regardless, because + `/run/user/1000` is tmpfs. +- **hypridle honours the Wayland idle-inhibit protocol here.** The compositor + advertises `zwp_idle_inhibit_manager_v1` (version 1), confirmed with + `wayland-info`, and waybar's built-in `idle_inhibitor` already drives it. So + an idle inhibitor is asserted over Wayland, not D-Bus, and needs no extra + service. `hypridle` has `ignore_dbus_inhibit` and `ignore_systemd_inhibit` + knobs; neither is set in the live config. +- **waybar's built-in `idle_inhibitor` cannot indicate state it does not own.** + It holds its own inhibitor object, and its `activated`/`deactivated` classes + are that object's state, with no input path. It cannot be demoted to an + indicator for a mode owned elsewhere, and left running alongside another + inhibitor it asserts a second, independent one, so idle resumes only when + both release. Replace it with a `custom/` module reading the owning + component's state. ## Theme |
