fix(power): exempt charge-limit oneshot from start rate limiting
All checks were successful
Check / eval (push) Successful in 3m9s

Round 1 of #101's V3 failed on TuringMachine (2026-07-13 18:16): a
SPACED dock/AC event storm — each run finishing before the next event —
never coalesces, so 5 successful sub-second starts inside systemd's
default 10s window tripped start-limit-hit and marked the unit failed
(doctor badge) although every run succeeded. The write is idempotent
and cheap; rate limiting it only manufactures false failures, so the
unit sets StartLimitIntervalSec=0.

checks.battery-charge-limit now asserts the exemption and runs 8
sequential starts expecting a clean, non-failed state; the original
mid-run coalescing phase is unchanged.

Verified: V2 — the check passes under KVM (exit 0). V0 flake check
green. V3 round 2 re-queued in HARDWARE-QUEUE.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-13 18:26:00 +01:00
parent 720d9a38fb
commit f7246941e8
4 changed files with 60 additions and 14 deletions

View File

@@ -11,20 +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.
- [ ] **#101 charge-limit service survives USB-C power-event bursts**
(round 2) — round 1 FAILED on TuringMachine 2026-07-13 18:16: a
*spaced* storm (each run finished before the next AC event) landed 5
successful starts in 10s → `start-limit-hit`, unit marked failed,
doctor badge — although every run succeeded. Fixed by exempting the
unit from start rate limiting (`StartLimitIntervalSec=0`) + a
spaced-storm guard in `checks.battery-charge-limit` (the commit
carrying this entry). **Re-check:** after pulling/rebuilding this
commit, `sudo systemctl reset-failed nomarchy-battery-charge-limit
.service`, then plug/unplug the powered USB-C dock several times in
quick succession. **Pass:** `systemctl is-failed
nomarchy-battery-charge-limit.service` stays false, `Result=success`,
BAT0's `charge_control_end_threshold` still matches the limit, and the
journal has no new `start-limit-hit`/`Failed with result` lines.
- [ ] **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