feat(theme): capture Boreal picker preview + V2-verify default
All checks were successful
Check / eval (push) Successful in 3m6s

Close the honesty gap on #45. Rendered the full Boreal desktop
headlessly (tools/theme-shot.nix, softGL 1920x1080) and confirmed the
session reads as Boreal — aurora wallpaper, Waybar violet accent
(#B79BE8) workspace pill, GeistMono clock, rofi launcher violet
prompt/selection — not Tokyo Night. Added themes/boreal/preview.png
(480x270, matches the existing 21) so the picker row is no longer
plain-name.

theme-shot: park the cursor bottom-right before the desktop shot so the
frame (which doubles as the preview source) is clean; reusable for the
other two missing previews.

Verified: V0 flake check; V2 theme-shot desktop/menu shots viewed;
contrast 24x7 pass. Preview is a headless bare-desktop capture (not the
floating-terminal composition of the others) — hardware recapture noted.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-07-09 18:28:38 +01:00
parent 7d52d4b5e4
commit 41cd350a52
4 changed files with 50 additions and 26 deletions

View File

@@ -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