test(docking): prove the keyboard-restore path; the reload clobber is real
All checks were successful
Check / eval (push) Successful in 3m10s

The last unproven half of bec826b, and it needed a keyboard that stays behind
when the dock leaves. The dev box's by-tech hangs off the BenQ's own hub, so
it always walked away with the cable — a Logitech K400 with its receiver in
the laptop is the real case, and Bernardo happened to plug one in.

Both halves measured on hardware (dev box, 2026-07-14):

  - PRIMARY: across a real unplug + the fixed transition, the K400 kept its
    remembered `us`. Panel back, layout intact.
  - CONTROL: a bare `hyprctl reload` with no restore took the same board from
    `us` to the session's `gb`.

The control matters more than the pass. That reload clobbers runtime
`device[<name>]:kb_layout` was an inference from the mechanism when
restore_keyboards was written — reasonable, but unmeasured, and this session
has already shown what unmeasured reasoning about this watcher is worth.
It holds: without that call the undock's escalation would have silently
broken the layout of every keyboard that outlives the cable, trading a black
panel for a keyboard that types the wrong characters at the password prompt.

Verified V2 again after the comment/doc edits: nix flake check --no-build,
checks.docking-ux, shellcheck clean.

Round 8 now asks only for what is still open: relogin (the watcher calls the
transition by baked store path, so exec-once means it runs the old build
until then) and repetition — 5+ unplugs, one with the lid shut.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 12:35:23 +01:00
parent bec826baf0
commit e4404e0162
3 changed files with 28 additions and 20 deletions

View File

@@ -41,16 +41,19 @@ Template:
around it will keep confirming whatever story you bring. The probe cost 10
minutes and killed two rounds of theory.
- **Verified:** V3 (partial) — the fixed `nomarchy-display-transition undock
eDP-1` driven through a real unplug on the dev box: panel on, workspaces
eDP-1` driven through two real unplugs on the dev box: panel on, workspaces
13 home, 1.8s, `keyword=inert escalate=reload` → `enable=via-reload` →
`result=ok`. Plus V2: `nix flake check --no-build` all pass;
`checks.docking-ux` + `checks.dock-audio` pass; shellcheck clean on
`result=ok`. Keyboard-restore proven too, on a K400 whose receiver is in the
laptop (so it survives the cable): kept its remembered `us`, while a control
bare `hyprctl reload` dropped it to the session `gb` — the clobber was an
inference until measured, and it makes `restore_keyboards` load-bearing.
Plus V2: `nix flake check --no-build` all pass; `checks.docking-ux` +
`checks.dock-audio` + `monitor-fallback.nix` pass; shellcheck clean on
display-transition (profile-watch's lone SC2125 is pre-existing).
- **Pending:** HARDWARE-QUEUE round 8 — the *watcher-driven* path needs a
relogin (exec-once, baked store path) and repetition; the keyboard-restore
path is entirely untested (dev box's keyboard hangs off the dock hub, so it
leaves with the cable). New BACKLOG #114 (PROPOSED): tuigreet ignores
per-device layouts.
relogin (exec-once, baked store path) and repetition (5+ unplugs, one with
the lid shut). New BACKLOG #114 (PROPOSED): tuigreet ignores per-device
layouts.
- **Next suggestion:** #114, or the dock direction's unverified panel-off
(it disables the panel trusting hyprctl's exit code — same class, latent).