docs(agent): tick HARDWARE-QUEUE for Latitude 5310 2026-07-10 QA
All checks were successful
Check / eval (push) Successful in 2m57s

Mark PASSes from the session: charge Custom type, bar/menus/capture,
polkit, combined power, mixer, arrows, SUPER+?, caffeine, doctor,
network blanks, lifecycle CLIs. Leave residual theme/ISO/greeter/etc.
This commit is contained in:
2026-07-10 14:20:30 +01:00
parent c41c8abaa7
commit 8002757ca3
2 changed files with 66 additions and 117 deletions

View File

@@ -64,8 +64,8 @@ high-ROI, etc.) live in the journal + ROADMAP — not here.*
### Product / day-2
_(Battery charge-limit instant → shipped 2026-07-10: udev GROUP=users +
menu live sysfs + oneshot reads live theme-state; V3 confirm on laptop.)_
_(Battery charge-limit instant → shipped 2026-07-10; V3 PASS Latitude
5310: Custom charge type + live menu + unplug re-apply.)_
_(Portal/Flatpak IR camera → **#71** docs (a); (b)/(c) still need T14s.)_

View File

@@ -4,36 +4,30 @@ Everything shipped at V1/V2 whose final verification needs real hardware.
Agents **append** (newest at the bottom of a section) with exact steps;
Bernardo runs them and either checks off (`[x]` + date + verdict) or files
the failure as a NOW bug in BACKLOG.md. Machines: the **AMD dev box**
(Ryzen AI laptop: AMD + fingerprint + NPU), the **Latitude 5410** (Intel
QA machine), the **T14s** (webcam case).
(Ryzen AI laptop: AMD + fingerprint + NPU), the **Latitude 5310/5410**
(Intel QA — 2026-07-10 session on **5310**), the **T14s** (webcam case).
## Any machine (dev box is fine)
*2026-07-10 Latitude 5310 session (Bernardo) — ticks below marked PASS from
that run; leftover open items still need a pass.*
- [x] **Unfree CLI default (2026-07-10)** — PASS (Bernardo, Latitude).
- [ ] **Waybar icon+percentage spacing (2026-07-10, retest)**after
`home-update`: executive-slate (and boreal/summer) — high-volume
glyph + `%`, keyboard layout glyph + code, battery glyph + `%`
each have a clear gap (double-pad + mono face). Unified clock is
one module (`HH:MM · Day DD Mon`). First pass: volume-high and
keyboard still tight → pad doubled.
- [x] **Waybar icon+percentage spacing (2026-07-10)**PASS after double-pad
(volume high / keyboard / battery no longer kiss text; unified clock).
- [x] **Calendar on unified clock (2026-07-10)** — PASS (Bernardo).
- [ ] **Rofi menu case-insensitive filter (2026-07-10)** — SUPER+M root
Menu: type `sys`**System** (dmenu path uses `rofi_menu` = `-i`;
apps/drun already worked via config.rasi). Spot-check System and
Tools filters the same way. Network picker inherits `rofi -i`.
- [ ] **Charge-limit live apply (2026-07-10, retest)** — Latitude first
pass: menu could not leave 80; unplug jumped to 100 until replug.
After fix: System/Power → limit 60 then 90; toast shows “sysfs now
N%”; `cat …/charge_control_end_threshold` matches without rebuild.
Unplug, wait ~3s, still N% (delayed oneshot); plug still N%.
- [x] **#41 float classes** — closed 2026-07-10: polkit float+same-ws PASS
(Latitude); portal class from package desktop/libexec =
`xdg-desktop-portal-gtk` (+ `.…-wrapped`); rules shipped. Spot-check
residual: portal OpenFile floats after `nomarchy-home` (if not, note
class from `hyprctl clients`).
- [x] **Rofi menu case-insensitive filter (2026-07-10)** PASS: SUPER+M
`sys` → System; apps/drun already fine.
- [x] **Charge-limit live apply (2026-07-10)** — PASS after Custom type fix
(`45c584d`): menu 60/90/80 writes sysfs; toast; no rebuild needed.
Adaptive was ignoring the cap while reporting end=80.
- [x] **#41 float classes** — PASS polkit float+same-ws (Latitude); portal
rules shipped (`xdg-desktop-portal-gtk`). Optional residual: OpenFile
class if still tiles.
- [ ] **#55 fingerprint enroll on real reader** — with
`nomarchy.hardware.fingerprint.enable` and a physical reader: System
Fingerprint Enroll a finger; List shows it; Verify succeeds; optional
Use for login (on) → `sys-rebuild` → login/sudo accept fingerprint.
Use for login (on) → `nomarchy-rebuild` → login/sudo accept fingerprint.
Menu surface is V1/V2 without a reader (self-gate + dry paths).
- [ ] **#60 non-BAT* battery name (if available)** — on a machine whose
system battery is **not** named `BAT*` (e.g. `CMB0`): confirm
@@ -49,10 +43,9 @@ QA machine), the **T14s** (webcam case).
confirm backgrounds/text match the theme (esp. rose-pine Dawn light
bg `#faf4ed`, vantablack near-black `#0d0d0d`, catppuccin Mocha
`#1E1E2E`). One pass cycling those five is enough.
- [ ] **Battery charge limit re-apply on unplug**`sudo nixos-rebuild
switch` with `power.batteryChargeLimit = 80`, physically unplug/replug
AC, confirm `charge_control_end_threshold` re-reads 80. (udev trigger
already VM-verified.)
- [x] **Battery charge limit re-apply on unplug**PASS (Latitude
2026-07-10): with limit 80, unplug ~3s + plug; sysfs stays 80
(delayed oneshot + Custom type).
- [ ] **SSH_AUTH_SOCK for GUI clients** — after relogin, launch a GUI git
client (or `rofi`-launched terminal-less app) and confirm it reaches
gpg-agent's SSH socket without an interactive shell parent.
@@ -85,14 +78,8 @@ QA machine), the **T14s** (webcam case).
comma layout + rebuild + relogin. The SUPER+? no-op found en
route IS a real bug → BACKLOG item 26 (fix shipped — see the
dedicated SUPER+? entry below).
- [ ] **SUPER+? opens the cheatsheet** (item 32 re-fix — supersedes the
item 26 attempt) — the bind is now `$mod SHIFT, slash` (the BASE
keysym: Hyprland 0.55 resolves the sym with Shift consumed, so the
old `question` keysym never matched while Shift was down — same
pattern as the working `$mod SHIFT, 1` workspace binds). After
`home-update` + relogin (or `hyprctl reload`), SUPER+? must open the
keybindings cheatsheet, whose row still reads `SUPER + ?` (not
`SUPER + SHIFT + ?`).
- [x] **SUPER+? opens the cheatsheet** (item 32 re-fix)PASS (Latitude
2026-07-10): SUPER+? opens cheatsheet; row shows `SUPER + ?`.
- [ ] **swaync readable on summer-day** (item 25 fix) — on summer-day
after `home-update`: `notify-send "title" "body text"` shows
readable body text; open the control centre (SUPER+N), hover a
@@ -112,13 +99,9 @@ QA machine), the **T14s** (webcam case).
(SUPER+? / root menu Keybindings) now ends in ↩ Back and
returns to the root picker; spot a couple of submenus (Display,
VPN Tailscale) still Back correctly after the audit pass.
- [ ] **Network menu has no blank rows** (item 22 fix, needs Wi-Fi) —
after `home-update`, open Tools Network: no empty separator
rows between the ethernet/wifi/VPN sections (compact = True).
KNOWN RESIDUAL: if exactly one nameless wifi row remains showing
only security+bars, that's a hidden-SSID AP — config can't filter
it; report it and the follow-up is a small source patch skipping
empty-name APs in create_ap_list.
- [x] **Network menu has no blank rows** (item 22 fix) — PASS (Latitude
2026-07-10 Round 4): Tools Network, no empty separator rows.
Residual hidden-SSID nameless row still possible (not a config bug).
- [ ] **Keyboard hotplug picker (re-verify after in-flake graduation)**
plug an external keyboard post-login, pick a layout in rofi, confirm
it applies per-device only, persists in `settings.keyboard.devices`,
@@ -145,23 +128,13 @@ QA machine), the **T14s** (webcam case).
`sudo nomarchy-snapshots`, restore a single file (`undochange`)
and walk a root-config rollback up to (or through) the
typed-`yes` gate.
- [ ] **Caffeine toggle (item 13 slice)** — click 󰾪 in the bar → turns
󰅶 (warm tint on the generated bar) and hypridle must NOT lock /
blank while it's on (wait past the 5-min lock); click again
releases. Also present on both summer bars now.
- [ ] **Screen recording (item 12)** — Tools Capture: Record region
(slurp) and Record screen produce a playable .mp4 in
~/Videos/Recordings; the red ⏺ REC appears in the bar instantly
and CLICKING IT stops + notifies the path; the + audio variants
carry sound. While recording, the Capture menu offers only
"■ Stop recording". On the AMD box wl-screenrec (VAAPI) should
do the work; if it dies at start the wf-recorder fallback kicks
in silently — check the notification says which. Summer bars
have the same ⏺ (parity).
- [ ] **Doctor (item 10)** — menu System Doctor opens the sheet in
a terminal; `nomarchy-doctor` over SSH shows the same minus user
units. On a healthy machine everything is ✔/ (dev-box run
2026-07-04 correctly flagged a genuinely failed user unit).
- [x] **Caffeine toggle (item 13 slice)**PASS (Latitude 2026-07-10):
bar cup toggles 󰾪↔󰅶; idle hold smoke OK (full 5min lock wait not
re-timed this session).
- [x] **Screen recording (item 12)** — PASS (Latitude 2026-07-10 Round 3):
region/screen record → playable mp4; bar ⏺; click ⏺ stops.
- [x] **Doctor (item 10)** — PASS (Latitude 2026-07-10 Round 4): System
Doctor sheet opens; healthy machine mostly ✔/.
- [ ] **Rollback menu (item 9b)** — after a couple of theme changes,
menu System Rollback: recent desktop generations listed
(newest marked current); picking an older one opens a terminal,
@@ -275,73 +248,44 @@ QA machine), the **T14s** (webcam case).
draining. (Crossing logic VM-verified — this checks the real
swaync rendering in a session.)
- [ ] **Battery charge-limit toggle** (iteration #55) — control-center
(menu System Control Center System Toggles Battery Limit):
the preset picker (Off / 80% / 90% / 60% / Custom…) writes the value
(`nomarchy-theme-sync get settings.power.batteryChargeLimit` reflects
the pick); after a `sys-rebuild` the sysfs
`charge_control_end_threshold` reads it. (UX-only over the already
VM-verified writer — a session sanity pass, not a deep check.)
- [ ] **Waybar hides under fullscreen video** (item 30) — after
`home-update` + relogin, put a browser video (YouTube) into
fullscreen (F): the bar is now *covered* by the video, not drawn
on top; exit fullscreen → the bar returns. Normal tiling
unchanged (the bar still reserves its space). Accepted trade-off
of `layer: bottom`: a floating window dragged over the top strip
can now overlap the bar — confirm that's the only regression.
- [ ] **Battery limit in rofi System** (iteration #64, item 36a) — after
`home-update`: menu System shows a "Battery limit" row (this laptop
exposes the threshold node); picking a preset (80/90/60/Off/Custom)
writes it (`nomarchy-theme-sync get settings.power.batteryChargeLimit`
reflects the pick) and after a `sys-rebuild` the sysfs
`charge_control_end_threshold` matches. The gum control-center no
longer lists Battery Limit (moved, not duplicated).
- [ ] **Config dialogs float** (item 41 residual spot-check) — after
`nomarchy-home`: blueman / printers float+center; portal file picker
(e.g. app Open…) floats (class should match xdg-desktop-portal-gtk).
- [ ] **Right-click volume → floating mixer** (iteration #62, item 35) —
after `home-update` + relogin: right-click the Waybar volume module
opens pwvucontrol as a floating, centered window (not tiled);
left-click still mutes. Verify across a whole-swap theme too
(summer/boreal/executive-slate) since the jsoncs got the same wiring.
- [ ] **Window focus on arrows** (iteration #61) — after `home-update` +
relogin: SUPER+←/→/↑/↓ move focus between tiled windows; SUPER+H/J/K/L
no longer move focus; SUPER+? cheatsheet shows the arrow glyphs.
- [x] **Battery charge-limit toggle** (iteration #55 / menu path) — PASS
(Latitude 2026-07-10): Power + System Battery limit presets write
state + sysfs (Custom type). Gum control-center path not re-checked
(limit moved to rofi).
- [x] **Waybar hides under fullscreen video** (item 30) — PASS (Latitude
2026-07-10): fullscreen video covers bar; exit restores.
- [x] **Battery limit in rofi System** (iteration #64, item 36a) — PASS
(Latitude 2026-07-10): presets apply live; sysfs matches.
- [x] **Config dialogs float** (item 41 residual) — PASS (Latitude
2026-07-10 Round 4): polkit + config dialogs float; portal rule
shipped (OpenFile not re-probed this session).
- [x] **Right-click volume → floating mixer** (iteration #62, item 35) —
PASS (Latitude 2026-07-10): pwvucontrol floats+centered after
packaging with waybar.
- [x] **Window focus on arrows** (iteration #61) — PASS (Latitude
2026-07-10): SUPER+arrows move focus; SUPER+? shows them.
- [ ] **Audio opens in Amberol** (iteration #60, item 37) — after
`home-update`: double-click an mp3/flac/ogg (or `xdg-open song.mp3`)
`nomarchy-home`: double-click an mp3/flac/ogg (or `xdg-open song.mp3`)
→ it opens in Amberol, not mpv; video files still open in mpv.
(`xdg-mime query default audio/mpeg` → io.bassi.Amberol.desktop.)
- [ ] **Capture-to-file keybinds** (iteration #59, item 38) — after
`home-update` + relogin: SHIFT+Print prompts a region select then
saves a PNG under ~/Pictures/Screenshots (toast shows the path);
CTRL+Print saves the whole screen the same way; bare Print still
copies a region to the clipboard. Both new rows appear in SUPER+?.
Also (iteration #66): Tools ▸ Capture now shows the matching dim key
hint on the Region → clipboard / Region → file / Full screen → file
rows (Print / SHIFT + Print / CTRL + Print) — pango renders, no raw
`<span>` leaks.
- [x] **Capture-to-file keybinds** (iteration #59, item 38) — PASS
(Latitude 2026-07-10): Print / SHIFT+Print / CTRL+Print + Capture
menu; clipboard path toasts after fix.
- [ ] **rofi menu polish** (iteration #58, item 39 + #56/#57 34/40) —
after `home-update`: (a) menu System Power profile shows a
after `nomarchy-home`: (a) menu System Power profile shows a
colored icon per profile (performance/balanced/power-saver), not
just text — icons *render* (not blank); (b) every submenu's ↩ Back
shows a single arrow, no double; (c) on this single-monitor box,
System Display → pick a resolution → Back returns to System
(not back into the same resolution list).
- [ ] **Combined power menu** (iteration #67, item 36b) — after
`home-update` + relogin: clicking EITHER the Waybar battery icon OR
the power-profile icon opens one "Power" menu listing Profile: rows
+ Charge limit: rows; picking a profile calls `powerprofilesctl set`
(verify `powerprofilesctl get` changes), picking a charge preset
writes `settings.power.batteryChargeLimit` (applies next rebuild).
The prompt shows the current profile + limit. System ▸ Power profile
/ Battery limit still work directly; the whole-swap bars (summer-day/
night, executive-slate, boreal) behave the same and their shutdown
power-button (if present) still opens the lock/logout menu.
- [x] **Combined power menu** (iteration #67, item 36b) — PASS (Latitude
2026-07-10 A1/A2): battery + power-profile icons open same Power
menu; profile switch + charge limit work.
- [x] **Calendar on the unified clock click** (iteration #68 + 2026-07-10
bar polish) — PASS (Bernardo, Latitude 2026-07-10): unified clock,
calcurse floats centered.
- [ ] **Screenshot annotation (satty)** (iteration #73) — after `home-update`:
- [ ] **Screenshot annotation (satty)** (iteration #73) — after `nomarchy-home`:
hit SUPER+SHIFT+Print (or Tools ▸ Capture ▸ Annotate region) → a region
select (slurp) appears, then the `satty` UI opens in fullscreen with the
screenshot loaded. Check that the UI draws on the current theme palette
@@ -362,7 +306,7 @@ QA machine), the **T14s** (webcam case).
proves the menu row + flow renders; a real capsule write is
hardware-only.)
## Latitude 5410 only
## Latitude 5310 / 5410 only
- [x] **Waybar theme-switch resilience** (finding #1 re-test, needs main ≥
the supervisor commit + relogin) — switch themes repeatedly (incl.
summer-day/night whole-swaps): the bar restarts cleanly each time;
@@ -373,8 +317,13 @@ QA machine), the **T14s** (webcam case).
- [x] **Media keys + gestures** (from dccceb4) — volume/brightness keys
drive the OSD; touchpad gestures work. — 2026-07-04 Bernardo:
PASS, volume/brightness keys and touchpad gestures all working.
- [x] **2026-07-10 Latitude 5310 QA batch** — PASS core desktop smoke
(charge Custom type, bar, menus, capture, polkit workspace, lifecycle
CLIs). Not a full v1 promotion gate — residual open items remain
above (themes eyeball, greeter, display profiles, Amberol, satty, …).
- [ ] **v1 QA batch on-hardware pass** (583708d batch was QEMU-verified) —
general smoke before the next `main → v1` promotion.
general smoke before the next `main → v1` promotion (broader than
the 2026-07-10 session; include theme/ISO/greeter leftovers).
## T14s only
- [ ] **Webcam IR-hide end-to-end on Nomarchy** — installer detects the