fix(display): #148 — enforce dock intent without the auto-profiles toggle
All checks were successful
Check / eval (push) Successful in 3m37s
All checks were successful
Check / eval (push) Successful in 3m37s
Every nomarchy-home re-lit eDP-1 inside the shut lid: HM activation fires hyprctl reload, the catch-all monitor rule re-enables the panel, and the tick invariant built for exactly this (#142, enforce_dock_intent) never fired — it was gated on settings.displayProfileAuto, the *named-profile* auto-switch toggle, which is unrelated to dock intent and off unless opted into. Confirmed live on the incident machine: dockMode=true, displayProfileAuto unset, watcher journal empty — every tick returned at that guard. Fix: drop the auto_on gate. settings.display.dockMode alone is the user's recorded intent (written by the menu and the dock transition); the profile-active check remains as the real guard (a named profile outranks the dock heuristic). No fight with the #142 undock hammer: undock clears the intent before its rescue reload, so the enforcer stands down by ordering. tools/monitor-fallback.nix grows the reload-mid-dock scenario: fake lid closed, hyprctl reload, panel re-disabled within ~4s, action=re-dock logged — under displayProfileAuto's default false, i.e. the exact condition the bug shipped under. Verification: V2 — nix flake check --no-build green, checks.docking-ux green, monitor-fallback harness green three times (implementer twice, reviewer once, ~71s VM). V3 pending: relogin + nomarchy-home while docked-clamshell (HARDWARE-QUEUE; the watcher is exec-once, the fix arms at next login). Implementation by a Sonnet subagent; diagnosis, design and review on Fable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -493,6 +493,22 @@ Design/decision records and a running log of shipped work (items marked
|
||||
V2 by render, both heads + the password dialog, via the new
|
||||
`tools/plymouth-preview.sh`. V3 (a real docked boot/shutdown) is queued: the
|
||||
fake heads exist from the start, so the rig cannot resize a canvas.
|
||||
- ✓ **Reload re-lit the panel inside a shut lid (#148, 2026-07-17):** every
|
||||
`nomarchy-home` (HM activation → `hyprctl reload`) re-applied the catch-all
|
||||
monitor rule and left eDP-1 burning in the closed clamshell. The #142 tick
|
||||
invariant `enforce_dock_intent` was built for exactly this and never fired:
|
||||
it was gated on `settings.displayProfileAuto` — the *named-profile*
|
||||
auto-switch toggle, unrelated to dock intent and off for most users.
|
||||
Confirmed on the incident machine: `dockMode=true`, `displayProfileAuto`
|
||||
unset, watcher journal empty — every tick returned at that guard. Fix:
|
||||
drop the gate; `dockMode` alone is the recorded intent, the profile-active
|
||||
check stays as the real guard, and undock's ordering (intent cleared
|
||||
*before* its rescue reload) keeps the enforcer from fighting the #142
|
||||
hammer. V2: `tools/monitor-fallback.nix` grew a reload-mid-dock scenario —
|
||||
fake lid closed → `hyprctl reload` → panel re-disabled in ~4s,
|
||||
`action=re-dock` logged. V3 queued: real relogin + `nomarchy-home` while
|
||||
docked-clamshell (the running watcher is exec-once, so the fix arms at the
|
||||
next login).
|
||||
- ✓ **Machine state the flake can't see (#147, 2026-07-17):** the QA box ran
|
||||
six months with `Linger=yes` from a pre-migration marker in
|
||||
`/var/lib/systemd/linger` — set by nothing in the repo, visible to no flake
|
||||
|
||||
Reference in New Issue
Block a user