fix(power): coalesce charge-limit reapply events
All checks were successful
Check / eval (push) Successful in 3m16s

USB-C power event bursts could repeatedly restart and SIGTERM the settling oneshot until systemd reached its start limit. Let successful runs return inactive and use coalescing start jobs for immediate and delayed reapplication.

Verified: V0 nix flake check --no-build, module parse, and git diff --check; V2 focused battery-charge-limit KVM test with a 12-event active-run burst. V3 hardware item #101 remains queued.
This commit is contained in:
2026-07-13 14:09:05 +01:00
parent 2a34c7398b
commit 7bfe1af5b1
6 changed files with 102 additions and 19 deletions

View File

@@ -11,6 +11,20 @@ the **T14s** (webcam case).
## Any machine (dev box is fine)
- [ ] **#101 charge-limit service survives USB-C power-event bursts** —
after updating/rebuilding to the commit carrying this entry, clear the
old failure with `sudo systemctl reset-failed
nomarchy-battery-charge-limit.service`. Plug and unplug the powered
USB-C dock twice, allowing five seconds after the last transition.
**Pass:** `systemctl show nomarchy-battery-charge-limit.service -p
ActiveState -p Result` reports `ActiveState=inactive` and
`Result=success`; `systemctl is-failed
nomarchy-battery-charge-limit.service` is false; BAT0's
`charge_control_end_threshold` still matches the configured/live limit;
and `journalctl -b -u nomarchy-battery-charge-limit.service` contains
no new `SIGTERM`, `start-limit-hit`, or `Failed with result` lines after
the rebuild. Capture that journal plus `udevadm monitor
--subsystem-match=power_supply` if it fails.
- [ ] **Docking recovery round 4 (#100, closed-lid BenQ sequence)** — after
updating to the commit carrying this entry, run `nomarchy-home` and
relogin. With the lid open, put visible windows on at least workspaces