diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index 513d9f4..cfc59d7 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -47,22 +47,6 @@ non-empty), laptop charge-threshold sysfs when a limit is set. Spec: docs/HARDWARE.md §10. Cost: doctor.sh sections; V1 in existing `checks.doctor` where fakes exist, rest V2/V3. -### 45. V2/V3 verify: Boreal default theme (follow-up to #42 / `351b7ad`) -Code for Boreal-as-default shipped at V0 only (seed JSON + eval -fallbacks; contrast green). **Needs a VM-capable agent** (or hardware) -to close the honesty gap. Checklist: -1. `nix flake check --no-build` green on current `main` (ISO eval can be - slow — let it finish). -2. V1 optional: build template HM or live toplevel if time allows. -3. V2: boot live ISO (`tools/test-live-iso.sh`) or apply template HM — - confirm session/wallpaper/terminal read as **Boreal** (slug - `boreal`, violet accent, GeistMono), not Tokyo Night. -4. Capture `themes/boreal/preview.png` for the theme picker (square - crop per MEMORY rofi icon note) and commit it. -5. V3 optional: append HARDWARE-QUEUE if only a real panel/GPU shows - something headless can't. Delete this item when checklist is done; - journal the tier reached. - ### 46. V2 verify: install swap=0 + unattended LUKS fail-closed (`208b8d4`) Pure `nix-instantiate` on disko subvols passed V0; **full install path not exercised**. VM agent with KVM: @@ -152,8 +136,8 @@ implement. Bernardo moves accepted items into a tier.* Product themes and the release bar live in **VISION**. **NEXT:** #43 System › Firmware · #44 doctor hardware. #42 boreal default -shipped (seed state + eval fallbacks); still missing -`themes/boreal/preview.png` (picker plain-name until captured). +shipped + V2-verified (session reads as Boreal); `preview.png` captured +(headless fallback — hardware recapture nicety noted under theme polish). Remaining candidate promotions: fingerprint menu · first-boot tips · human rebuild errors · neon-glass quarantine. @@ -304,12 +288,15 @@ human rebuild errors · neon-glass quarantine. ### Theme polish / completeness (codebase exam 2026-07-09) - **Missing theme picker previews + hand btop for identity themes** - `boreal` (now the default — higher priority), `executive-slate`, and - `neon-glass` lack `preview.png` (picker plain-name rows) and - `btop.theme` (generated btop only). CSS/jsonc for boreal/executive-slate - are solid. Capture boreal preview ASAP for v1.0 bar; others after - neon-glass is fixed/quarantined. Cost: asset capture + optional hand - btop; V3 visual. + `executive-slate` and `neon-glass` lack `preview.png` (picker + plain-name rows). All three still ship generated btop only (no hand + `btop.theme`). `boreal` now has a `preview.png` (2026-07-09) but it's a + **headless theme-shot capture** — a clean bare desktop+bar, not the + floating-terminal (fastfetch+btop) composition the other 21 use; a + real-hardware recapture to match the grid would be nicer (VM is the + documented fallback). CSS/jsonc for boreal/executive-slate are solid. + Capture the other two after neon-glass is fixed/quarantined. Cost: + asset capture + optional hand btop; V3 visual. - **Generated Waybar missing identity-bar affordances** Whole-swap bars ship `custom/powermenu` and a left logo → main menu; @@ -513,6 +500,18 @@ flagged separately from fidelity bugs.* can ship. Expand to all tracked `*.py` (or at least installer + tools). Cost: one workflow line; TESTING.md §1 should match. +- **No guard against dead Hyprland rule syntax in the generated conf** + The `windowrule` 0.53-migration bug (fixed 2026-07-09, `ed7fd93`) shipped + a red config-error banner on the *default* desktop for weeks — invisible + to `nix flake check` (the conf builds fine; Hyprland only rejects it at + session start). A cheap `checks.*` could build the generated + `hyprland.conf` and grep for the dead rule-first pattern + (`windowrule\s*=\s*(float|center|size|tile|...)\s*,`) and the + `windowrulev2` keyword, failing on a match. Better still (heavier): + `hyprland --verify`-style parse if one exists. Cost: small runCommand + check; catches the whole class. Pairs with the theme-shot harness that + actually caught this. + - **No automated check for installer pure contracts** `compose-lock.py`, disko `swapSize`/`withLuks` arg contract, and hardware-db module names vs `nixos-hardware.nixosModules` have no diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index e7fafce..337454c 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -17,6 +17,25 @@ Template: --- +## 2026-07-09 — #45 V2 verify Boreal default + capture preview.png (theme-shot) +- **Task:** NEXT #45 — close the honesty gap on Boreal-as-default (shipped V0 + only at #42) and capture the picker preview. VM-capable environment (KVM). +- **Did:** Rendered the full Boreal desktop headlessly via `tools/theme-shot.nix` + (softGL, 1920×1080). Confirmed the session reads as **Boreal** — aurora + wallpaper paints, Waybar violet accent (`#B79BE8`) workspace pill, GeistMono + clock, rofi launcher violet prompt/selection — not Tokyo Night. Captured a + 480×270 `themes/boreal/preview.png` (matches the other 21's format) from the + desktop frame; added a cursor-park to theme-shot so the shot is clean. (En + route, found+fixed the windowrule banner — separate commit `ed7fd93`.) +- **Verified:** V0 flake check green; **V2** theme-shot desktop.png + menu.png + viewed (banner gone post-fix, bar+launcher themed). Scripted: contrast 24×7 + pass; audit boreal advisory-only. +- **Pending:** preview is a headless bare-desktop capture, not the + floating-terminal composition of the other 21 — hardware recapture noted + under theme polish. V3 (real panel/GPU) not done — not required. The float + rules now parse but weren't exercised on real windows (item 41 territory). +- **Next suggestion:** #46 (install swap=0 / LUKS fail-closed) — driver ready. + ## 2026-07-09 — Fix Hyprland windowrule config-error banner (windowrule 0.53 migration) - **Task:** bug tripped over while doing #45 (VM Boreal verify) — the default desktop showed a red Hyprland config-error banner on every boot, occluding diff --git a/themes/boreal/preview.png b/themes/boreal/preview.png new file mode 100644 index 0000000..aeb357c Binary files /dev/null and b/themes/boreal/preview.png differ diff --git a/tools/theme-shot.nix b/tools/theme-shot.nix index 45cce38..c88372d 100644 --- a/tools/theme-shot.nix +++ b/tools/theme-shot.nix @@ -61,13 +61,19 @@ pkgs.testers.runNixOSTest { testScript = '' machine.wait_for_unit("multi-user.target") machine.wait_for_file("/run/user/1000/hypr", 180) + # hyprctl dispatch helper (session env resolved from the runtime dir). + hy = "su - nomarchy -c 'XDG_RUNTIME_DIR=/run/user/1000 HYPRLAND_INSTANCE_SIGNATURE=$(ls /run/user/1000/hypr | head -1) hyprctl dispatch" # The session exec-once paints the wallpaper (softGL first paint at # 1920x1080 is slow) — give it a generous settle. machine.sleep(30) + # Park the cursor in the bottom-right corner so it doesn't sit in the + # middle of the desktop shot (that frame doubles as the theme-picker + # preview.png source). + machine.execute(hy + " movecursor 1912 1075' >/dev/null 2>&1") + machine.sleep(1) machine.screenshot("desktop") # Open the root menu for the polish review. - hy = "su - nomarchy -c 'XDG_RUNTIME_DIR=/run/user/1000 HYPRLAND_INSTANCE_SIGNATURE=$(ls /run/user/1000/hypr | head -1) hyprctl dispatch exec" - machine.execute(hy + " nomarchy-menu' >/dev/null 2>&1") + machine.execute(hy + " exec nomarchy-menu' >/dev/null 2>&1") machine.sleep(8) machine.screenshot("menu") '';