diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index 311a94f..5e84793 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -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.)_ diff --git a/agent/HARDWARE-QUEUE.md b/agent/HARDWARE-QUEUE.md index cc6328b..1af6cf2 100644 --- a/agent/HARDWARE-QUEUE.md +++ b/agent/HARDWARE-QUEUE.md @@ -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 5‑min 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 - `` 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