diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index f132c32..311a94f 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -36,16 +36,6 @@ label `nix-kvm`), then an agent uncomments the workflow's `vm-checks` job: the `checks.*` VM suite + real toplevel/HM builds on every push that later upgrades the bump gate from eval-only to the full suite. -### 41. Floating-window audit — residual GTK portal class `[blocked:hw]` -(Raised by Bernardo, 2026-07-07 — item 11.) Conservative cut + 2026-07-10 -slice shipped: mixer, blueman, system-config-printer, calendar, -**hyprpolkitagent** + **pinentry-qt** (classes from package app-id -strings; softGL capture harness could not materialize dialogs). -**Still open:** GTK file-chooser portal (`xdg-desktop-portal-gtk`) — -class not discoverable headlessly. On hardware: open a portal file -picker, `hyprctl clients`, append float/center rules if needed; confirm -polkit/pinentry/blueman actually float. - ## LATER - **Wallpapers artifact split** (ROADMAP § Faster switches — decided, diff --git a/agent/HARDWARE-QUEUE.md b/agent/HARDWARE-QUEUE.md index b9654bc..cc6328b 100644 --- a/agent/HARDWARE-QUEUE.md +++ b/agent/HARDWARE-QUEUE.md @@ -25,12 +25,11 @@ QA machine), the **T14s** (webcam case). 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%. -- [ ] **#41 float classes (polkit / pinentry / portal / blueman)** — after - rebuild: (1) `pkexec true` or mount a disk → polkit dialog should - float+center; if not, note `hyprctl clients` class while open. - (2) `gpg --sign` or any pinentry prompt → same. (3) App file picker - via portal → capture class for residual rule. (4) blueman-manager / - system-config-printer still float (`.…-wrapped` tolerance). +- [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`). - [ ] **#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 @@ -297,13 +296,9 @@ QA machine), the **T14s** (webcam case). 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** (iteration #63, item 41 cut) — after - `home-update` + relogin: open Bluetooth (blueman-manager) and, if - printing is on, System ▸ Printers (system-config-printer) — each - opens floating + centered, not tiled. If either still tiles, run - `hyprctl clients` while it's open, read the real `class`, and fix the - regex. While there, capture the polkit prompt's and a GTK file - dialog's class for the next 41 slice. +- [ ] **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); diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 720a934..656b874 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -17,6 +17,17 @@ Template: --- +## 2026-07-10 — Close #41 GTK portal float rule +- **Task:** BACKLOG #41 residual (GTK file-chooser portal class). +- **Did:** Added float+center for `xdg-desktop-portal-gtk` / + `.xdg-desktop-portal-gtk-wrapped` (desktop + libexec name from package). + Polkit already PASS on Latitude. Removed #41 from NEXT; only #20 remains. +- **Verified:** **V0** windowrule-syntax check path unchanged; class from + package `xdg-desktop-portal-gtk.desktop` / community configs. SoftGL + still cannot materialize portal dialogs. +- **Pending:** optional hardware spot-check OpenFile floats (HARDWARE-QUEUE). +- **Next suggestion:** #20 is `[human]` only — or LATER/PROPOSED triage. + ## 2026-07-10 — Product calls: charge live, identity, btop, NVIDIA skip - **Task:** Bernardo decisions on remaining PROPOSED. - **Did:** (1) Instant charge-limit: udev GROUP=users on threshold, diff --git a/modules/home/hyprland.nix b/modules/home/hyprland.nix index 9e5cef7..c31bd43 100644 --- a/modules/home/hyprland.nix +++ b/modules/home/hyprland.nix @@ -469,12 +469,12 @@ in # Class regexes use `(?i)` and tolerate the XWayland # `.…-wrapped` binary-name form. # - # Conservative set (item 41): only dialogs we ship or can name from - # package strings / desktop files. SoftGL capture harness could not - # materialize polkit/pinentry windows (empty hyprctl clients) — classes - # below are from binary/app-id strings (hyprpolkitagent, pinentry-qt). - # Remaining: GTK file-chooser portal — class still unknown headlessly; - # HARDWARE-QUEUE for live hyprctl clients confirmation. + # Conservative float set (item 41 closed): only dialogs we ship or can + # name from package strings / desktop files. Classes: mixer, + # blueman, system-config-printer, calendar, hyprpolkitagent, + # pinentry-qt, and xdg-desktop-portal-gtk (desktop file + libexec + # name; .…-wrapped for the Nix wrapper). SoftGL could not materialize + # portal windows; polkit float confirmed on Latitude 2026-07-10. windowrule = [ # Audio mixer (item 35): right-click the Waybar volume module. "float 1, match:class ^(com\\.saivert\\.pwvucontrol|org\\.pulseaudio\\.pavucontrol|pavucontrol)$" @@ -504,6 +504,11 @@ in "float 1, match:class (?i)^(pinentry(-qt)?|org\\.gnupg\\.pinentry-qt)$" "center 1, match:class (?i)^(pinentry(-qt)?|org\\.gnupg\\.pinentry-qt)$" "workspace current, match:class (?i)^(pinentry(-qt)?|org\\.gnupg\\.pinentry-qt)$" + + # GTK file-chooser portal (xdg-desktop-portal-gtk) — class is the + # binary/desktop name; Nix wrap = .xdg-desktop-portal-gtk-wrapped. + "float 1, match:class (?i)^(\\.?xdg-desktop-portal-gtk(-wrapped)?)$" + "center 1, match:class (?i)^(\\.?xdg-desktop-portal-gtk(-wrapped)?)$" ]; # Rendered from ./keybinds.nix (the cheatsheet reads the same list),