diff --git a/agent/JOURNAL-ARCHIVE.md b/agent/JOURNAL-ARCHIVE.md index 39cbc56..60d324b 100644 --- a/agent/JOURNAL-ARCHIVE.md +++ b/agent/JOURNAL-ARCHIVE.md @@ -6,6 +6,347 @@ JOURNAL.md grows past ~25 entries, move the tail here. --- +## 2026-07-10 — #78 Omarchy migrant doc (docs/OMARCHY.md) +- **Task:** BACKLOG #78 (promoted from PROPOSED) — Omarchy→Nomarchy + one-pager (`VISION § F`). +- **Did:** New `docs/OMARCHY.md`: leads with the config-model shift + (imperative dotfiles → declarative flake + menu, rollback via + generations), then install (ISO/`nomarchy-install` or MIGRATION.md), + a familiar-bindings table, theming (`SUPER+T`/`nomarchy-theme-sync`), + packages (home.packages / `nix shell`, no AUR), update+rollback + (`nomarchy-pull`/`-rebuild`/`-home`, boot-menu generations, + `nomarchy-doctor`). Added to `docs/README.md` map + VISION § F ✓. +- **Verified:** V0 (docs). Grounded Nomarchy side in code: pulled real + binds from `keybinds.nix`; confirmed all 7 cited commands, the `nsearch` + alias, and the named slugs (gruvbox/rose-pine/nord) exist. Kept + Omarchy-side claims to known facts (Arch, dotfiles, pacman/AUR). +- **Pending:** none. +- **Next suggestion:** NEXT head #76 `[blocked:hw]`; last open PROPOSED is + auto time-of-day theme pair (`§D`, `[big]` — needs splitting). + +## 2026-07-10 — #77 doctor hibernate/sleep section (V2 PASS) +- **Task:** BACKLOG #77 (promoted from PROPOSED by Bernardo) — read-only + hibernate section in nomarchy-doctor (`VISION § C`, #76 follow-on). +- **Did:** Added a hibernate/sleep row group to `nomarchy-doctor.sh`: resume + device on cmdline (+ `resume_offset` for a swapfile), disk swap ≥ RAM, + zram active, previous-boot suspend/hibernate error. Self-gates (`skip` on + swap=0); only ok/warn/skip → never fails the sheet. Added `hibernate` to + the `checks.doctor` probe list. +- **Verified:** **V2 PASS** — `checks.doctor` VM test green (fresh build, + exit 0; asserts the hibernate row renders + healthy run still 0). **V1** — + ran on this box's real LUKS+@swap layout: all three `ok` rows render + (resume set, swap 34G ≥ RAM, zram 16G) and the sheet reaches its verdict. + **V0** bash -n + flake check. +- **Gotcha (fixed + MEMORY):** the doctor runs `set -euo pipefail`; my first + cut aborted before the verdict because a no-match `grep` inside `$(…)` and + a `cond && action` both trip set -e. Fixed with `|| true` / `|| echo 0` and + an `if`. First VM run caught it (exit 1, no verdict) — the test earned its keep. +- **Pending:** none — fully agent-verifiable (read-only checks, no V3). +- **Next suggestion:** NEXT head is #76 `[blocked:hw]`; remaining PROPOSED + (Omarchy doc §F, auto time-of-day theme §D) await triage. + +## 2026-07-10 — QA sweep (clean) + VISION-gap pass → 3 PROPOSED +- **Task:** Bernardo — QA/drift sweep, then a VISION-gap pass with proposals. +- **Did (sweep):** Fanned out two subagents (Bernardo OK'd spawning for + efficiency): nomarchy-runner ran the deterministic checks + `bash -n`/ + `py_compile` (all PASS; the 4 "needs-args" scripts pass via their flake + derivations); nomarchy-scout hunted fuzzy drift (dead code, stale refs, + TODOs, changed-area contradictions, count/version) — **all clean**. + Spot-checked scout's count claim myself: 24 theme JSONs / 24 previews / + README "24 presets" — consistent. Eval sweep green. **No fixes needed.** +- **Did (VISION):** Verified candidate gaps against the tree before + proposing (killed two false gaps — nomarchy-rebuild/home already tail logs + + point at doctor on failure = §A shipped; `nvd diff` = §B covered; System + › Firmware menu already exists). Filed 3 **PROPOSED** (verified open): + doctor hibernate/sleep section (§C, top Day-2 pick, #76 follow-on), + Omarchy migrant one-pager (§F), auto time-of-day theme pair (§D, `[big]`). +- **Verified:** V0 (agent-notes/docs only). Sweep evidence above. +- **Pending:** none. Proposals await Bernardo's triage into a tier. +- **Next suggestion:** if a PROPOSED is promoted, the doctor hibernate + section is the cleanest next build; else NEXT #76 stays `[blocked:hw]`. + +## 2026-07-10 — Icon overrides: user-facing docs (OVERRIDES.md) +- **Task:** Bernardo asked whether the session's features need user docs. +- **Did:** Hibernation already covered (README swapfile line, MIGRATION.md + runbook, discoverable Power-menu row) — no gap. Icons had one: the only + doc was the template comment. Added an "Icon pack" subsection to + `docs/OVERRIDES.md` § Appearance — `nomarchy-theme-sync set icons ""`, + the known-packs table, the ~1 GiB/opt-in rationale, and that the choice is + sticky across `apply` (presets carry no icon field; verified `deep_merge`). +- **Verified:** command path confirmed (`cmd_set` writes any dotted key; + `icons` is a schema key). **Built all 4 packs and listed real theme dirs** + to fix the examples — caught Qogir using capital `Qogir-Dark`/`Light` + (lowercase would silently fall back to hicolor). Docs-only (V0). +- **Pending:** none. +- **Next suggestion:** NEXT #76 `[blocked:hw]`; LATER/QA-sweep next. + +## 2026-07-10 — Icon themes: opt-in cross-pack overrides (no default bloat) +- **Task:** LATER "per-theme icon overrides / more icon packs". Recon found + papirus is already ~1 GiB and ships only Papirus/Dark/Light (no free + variety); real variety needs extra packs at ~hundreds of MB each. Bernardo + chose the **opt-in, no-default-bloat** shape (over shipping packs). +- **Did:** `theme.nix` resolves `nomarchy.theme.iconThemePackage` from a + small `iconPacks` registry (papirus·tela·qogir·reversal·numix, by name + prefix). Default themes name `Papirus-*` → resolves to the *plain* papirus + derivation (no symlinkJoin, identical closure); only a theme naming another + pack's set symlinkJoins that one pack in. `stylix.nix` uses it + (mkDefault). Opt-in note in `templates/downstream/home.nix`; ROADMAP § + Icon themes updated (incl. the deliberate no-default-packs decision). +- **Verified:** **V1** — HM activationPackage builds (exit 0). Eval proofs: + default `iconThemePackage` = plain `papirus-icon-theme-*` (zero delta); + with `icons="Tela-dark"` → `nomarchy-icon-themes` symlinkJoin (papirus+tela) + and name flows, **without building tela**. All 5 pack attrs exist in the + pinned nixpkgs. `template-sot` + `option-docs` + `flake check` green. +- **Pending:** none. No default visual change (identical papirus), so no + screenshot needed; the opt-in render is the downstream user's to see. +- **Next suggestion:** NEXT still #76 `[blocked:hw]`; LATER/QA-sweep next. + +## 2026-07-10 — #76 slice 3: hibernate VM test (V2 PASS) → #76 agent-complete +- **Task:** BACKLOG #76 slice 3 — the mandatory V2 hibernate test + V3 queue. +- **Did:** Added `checks.hibernate` (flake.nix), modeled on nixpkgs' + hibernate.nix but wired to Nomarchy's #76 risk: imports oom.nix (zram + default-on), disk swap at lower priority + explicit `boot.resumeDevice`, + systemd-initrd. Test drives hibernate→power-off→resume→crash: ramfs marker + survives resume, a crash-boot loses it (real resume, not a survivor), and + asserts zram@100 + disk-swap<100 so the image lands on disk not volatile + zram. Queued the V3 laptop steps (real LUKS+@swap+offset resume + no-swap + notify) in HARDWARE-QUEUE. Collapsed #76 to a `[blocked:hw]` stub; design + record → ROADMAP § "Hibernation + zram by default". +- **Verified:** **V2 PASS** — `nix build .#checks.x86_64-linux.hibernate` + built the driver fresh and exited 0 (all assertions held). `nix flake + check --no-build` green. +- **Pending:** only V3 (dev box / laptop) — #76's last check; close on PASS. +- **Next suggestion:** #76 is now blocked:hw; NEXT head falls to LATER/ + PROPOSED triage or a QA sweep — pick per LOOP.md orientation next session. + +## 2026-07-10 — #76 slice 2: Hibernate notify-on-failure +- **Task:** BACKLOG #76 remaining slice 2 — per the settled "keep row, notify + on failure" call. +- **Did:** `modules/home/rofi.nix` power menu Hibernate arm now runs + `systemctl hibernate 2>/dev/null || notify-send "Hibernate" "…see + docs/MIGRATION.md"`. On success the call blocks until resume, so the notify + only fires on a genuine failure (e.g. swap=0 no-swap machine). Row stays + unconditional (no hiding). +- **Verified:** **V1** — `nix build …homeConfigurations.nomarchy.activationPackage` + green (rebuilds `nomarchy-menu.drv`; `writeShellScriptBin` runs bash -n at + build). Control-flow proof on the arm extracted from the built script: + failing `systemctl` → notify fires; succeeding → no notify. `nix flake + check --no-build` green. +- **Pending:** slice 3 = the V2 hibernate→resume VM test + V3 laptop + (Hibernate→power off→resume on the LUKS+@swap machine; plus confirm the + no-swap notify surfaces in a real session). Both remain open on #76. +- **Next suggestion:** slice 3 — add a `checks.*` hibernate VM test (as far + as QEMU allows) and queue the V3 laptop steps in HARDWARE-QUEUE. + +## 2026-07-10 — #76 slice 1: MIGRATION.md hibernation runbook +- **Task:** BACKLOG #76 remaining slice 1 — docs runbook for enabling + hibernation on an existing machine (per the settled "docs not tool" call). +- **Did:** Added § "Enabling hibernation on an existing machine (no reinstall)" + to `docs/MIGRATION.md`: create `@swap` subvol (subvolid=5) + `mkswapfile` + (NOCOW), read `map-swapfile -r` offset, wire `fileSystems."/swap"` + + `swapDevices` + `resumeDevice` + `resume_offset` into system.nix. Flagged + the mount as required on the hand-edit path (installer gets it from + disko-gen hardware-config). Notes zram-priority reservation, no-LUKS + variant, `swap=0` opt-out. Worked example = this dev machine. +- **Verified:** **V0** — read-only commands run live against this machine's + real LUKS(`cryptroot`)+btrfs(`@`)+`/swap/swapfile` layout (RAM 31G, fsuuid, + `findmnt SOURCE`, `mkswapfile` flags, zram@100 vs swapfile@-1 confirms the + design intent). `nix flake check --no-build` green. +- **Pending:** slice 2 — Hibernate row notify-on-failure (V1/V2); then the + V2 hibernate VM test + V3 laptop. +- **Next suggestion:** slice 2 (menu notify-on-failure). + +## 2026-07-10 — #76 hibernation design calls (no commit yet → this bookkeeping) +- **Task:** BACKLOG #76 design slice — Bernardo made the open calls. +- **Did:** Recon showed the hibernation half is **already built for new + installs** (installer defaults swap=RAM hibernation-ready `@swap` swapfile; + `patch-template.py` writes swapDevices/resumeDevice/resume_offset; Power + menu Hibernate row + LUKS/hyprlock handling exist). Settled 3 calls: + (1) swap sizing = **exactly RAM** (no change); (2) migration = **docs + runbook in MIGRATION.md**, not a tool; (3) no-swap Hibernate = **keep row, + notify on failure**. Folded into BACKLOG #76 (design ✓, re-sliced remaining: + MIGRATION.md runbook + notify-on-failure menu) and Decisions. +- **Verified:** **V0** — `nix flake check --no-build` green (docs-only). +- **Pending:** two remaining slices below; V2 hibernate VM test + V3 laptop. +- **Next suggestion:** slice 1 — `docs/MIGRATION.md` hibernation-enable runbook + (V0), then slice 2 — Hibernate notify-on-failure (V1/V2). + +## 2026-07-10 — #76 zram slice: compressed-RAM swap default +- **Task:** BACKLOG #76 (`[big]`) — split; took the low-risk zram-default slice. +- **Did:** `zramSwap` on by default in `modules/nixos/oom.nix` (zstd, 50% RAM, + priority 100) as the memory-pressure layer before earlyoom, following the + earlyoom mkDefault precedent (no toggle). High priority keeps day-to-day + paging in zram so a disk swapfile stays reserved for #76's hibernate image. + Added `checks.zram-swap` runNixOSTest (imports oom.nix). Split #76 in + BACKLOG → remainder is the hibernation half (swapfile/resume/installer). +- **Verified:** **V2** — `nix build .#checks…zram-swap` PASS: /dev/zram0 active + in /proc/swaps, `[zstd]` comp_algorithm, priority 100. **V1** full distro + toplevel builds. **V0** flake check --no-build green. +- **Pending:** hibernation half of #76 still open (needs hibernate→resume VM + test + V3 laptop). No V3 for zram (under-load tuning is secondary). +- **Next suggestion:** #76 hibernation half — design default swapSize + the + resume/installer wiring; it's the boot-critical, V2-hibernate + V3 part. + +## 2026-07-10 — #41 hardware-confirmed: OpenFile portal floats (V3 close) +- **Task:** BACKLOG #41 — final on-hardware confirmation (Bernardo reported PASS). +- **Did:** #41 already out of NEXT + portal rule shipped + (`hyprland.nix` xdg-desktop-portal-gtk float/center). Bernardo verified the + GTK OpenFile file-picker floats on real hardware; dropped the "OpenFile not + re-probed / optional residual" caveats in HARDWARE-QUEUE — #41 fully closed. +- **Verified:** **V3** (Bernardo, Latitude). No code change. Bookkeeping only; + QA-sweep guards run green this session: `nix flake check --no-build`, + option-docs/template-sot/theme-sync-validate builds, contrast 24×7. +- **Pending:** none for #41. NEXT head is #76 (hibernation + zram, `[big]`). +- **Next suggestion:** split #76 — take the low-risk **zram-default** slice + (V2-testable headlessly) before the boot-critical hibernate/resume work. + +## 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, + menu/powermgmt live sysfs + state, oneshot reads live theme-state + + AC re-apply. (2) Look & Feel already had Theme/wallpaper/night light; + added Reset wallpaper (auto). (3) NVIDIA first-class deferred past v1 + (HARDWARE.md). (4) Identity retunes: white L-steps, lumon subtext, + hackerman surface+UI warn/bad, matte-black subtext, miasma bad. + (5) Hand `btop.theme` for 9 identity/whole-swap slugs from palette map. +- **Verified:** **V0** contrast 24×7; **V1** battery-charge-limit VM + (udev restart). **V3** live charge write on real laptop (HARDWARE-QUEUE). +- **Next suggestion:** only #20/#41 blocked, or Decisions. + +## 2026-07-10 — Summer pair polish + status CSS + preview recapture +- **Task:** finish agent-able PROPOSED theme leftovers. +- **Did:** summer-day/night — JSON hierarchy (night subtext/muted/overlay + ladder; day overlay≠muted); waybar CSS tokens track JSON roles; font + 13px both; day battery 25/10; VPN pill + full status states + (.recording/.available/.on/.activated/battery warn). Recaptured + executive-slate + neon-glass `preview.png` via theme-shot desktop + (480×270). Closed those PROPOSED lines. +- **Verified:** **V0** contrast 24×7 + wholeswap; **V2** theme-shot + summer-day/night/executive-slate/neon-glass — viewed bar crops + + previews. Identity taste retunes stay PROPOSED. +- **Next suggestion:** only blocked NEXT (#20/#41) or product Decisions. + +## 2026-07-10 — #74 matrix flags + #75 V2 install (default arm) +- **Task:** NEXT #74 unattended matrix · #75 SoT V2 install after ISO. +- **Did:** `NOMARCHY_TEST_SWAP_GB` / `NOMARCHY_TEST_NO_LUKS` drive + `tools/test-install.sh` go.sh + first-boot LUKS skip; nixpkgs OVMF + fallback. Full offline install V2 (SWAP=2 LUKS) after live ISO rebuild + with starter packages — first-boot themed Boreal, no red banner. + Closed #74/#75. Other matrix arms scripted (not full-ISO re-run). +- **Verified:** **V2** — install powered off ~460s; first-boot.png + viewed (`/tmp/nomarchy-vm-75/first-boot.png`): themed wallpaper + + waybar (logo, clock, modules), doctor glyph, no autogen banner. +- **Next suggestion:** NEXT only #20 [human] + #41 [blocked:hw]. + +## 2026-07-10 — Loop batch land #64–#73 (parallel worktrees) +- **Task:** agent-actionable NEXT #64–#73 via worktree agents; land on main. +- **Did:** #64 MIGRATION snapshots · #65 real-uid chown · #66 theme-state + fail-closed reader · #67/#68 theme fidelity+ANSI · #69/#70 audit+import + tools · #71 IR portal docs · #72 template-sot check · #73 MOTD/first-boot + fingerprint+doctor tips. Agents did not push; parent cherry-picked + (stripped agent BACKLOG races). Closed #64–#73. +- **Verified:** **V0/V1** — theme-contrast 24×7 pass; template-sot green; + bash -n install; flake check --no-build green. +- **Next suggestion:** #74 unattended matrix + #75 V2 install (KVM). + +## 2026-07-10 — Promote agent-actionable PROPOSED → NEXT #64–#75 +- **Task:** Bernardo: bump non-hw/non-human PROPOSED categories 1+2. +- **Did:** **#64** MIGRATION snapshots · **#65** installer chown · + **#66** mkFlake theme-state errors · **#67** theme fidelity nits · + **#68** #52 residual ANSI · **#69** audit identity exemptions · + **#70** import-pipeline hierarchy · **#71** IR portal docs (a) · + **#72** template SoT CI · **#73** hardware hints residual · **#74** + unattended install matrix · **#75** SoT V2 install. Breadcrumbs in + PROPOSED; actionable items sit above #20/#41 in NEXT. +- **Verified:** V0 (backlog only). +- **Next suggestion:** queue head **#64** (docs) or batch #67/#68 themes. + +## 2026-07-10 — PROPOSED cleanup (stale exam residue) +- **Task:** Bernardo: clean stale PROPOSED items after A/B/C + #52 ship. +- **Did:** Rewrote PROPOSED to open work only — dropped #52 shipped + high-ROI bullets, neon-glass quarantine, empty/shipped installer + audit sections, template seed drift (keys already present), soft + gaps fixed by #50, and “no action” kanagawa/boreal notes. Kept + product day-2, installer follow-ups, theme polish residuals, tooling. +- **Verified:** V0 (backlog hygiene); spot-checked template keys, + latte/mocha #52 fixes, usbutils, package exports. +- **Next suggestion:** triage the lean PROPOSED list or HARDWARE-QUEUE. + +## 2026-07-10 — Pending closeout: #14, #57 V2, #41 slice +- **Task:** pending V2/CI/float leftovers after A/B/C batch. +- **Did:** **#14 closed** — first scheduled lock bump landed + `8fded63` (2026-07-06 Mon 05:20 UTC) as `nomarchy-bump` / + `chore(lock): scheduled upstream bump` (Actions token push works). + **#57 V2** — `checks.live-install-entry` asserts live HM gen has + `nomarchy-install.desktop` (Name/Terminal/Exec) + installer bin + + Tools menu gate in `nomarchy-menu`. **#41 slice** — float/center rules + for hyprpolkitagent + pinentry-qt from package app-id strings; + `tools/capture-float-classes.nix` harness (softGL empty clients); + residual GTK portal stays NEXT `#41 [blocked:hw]`. HARDWARE-QUEUE + float confirm steps added. +- **Verified:** **V2** live-install-entry green; windowrule-syntax green. + SoftGL class capture inconclusive (empty clients). **V3** float confirm + + fingerprint/#60 still HARDWARE-QUEUE. **#20** still `[human]`. +- **Next suggestion:** Bernardo: #20 KVM runner, or HARDWARE-QUEUE pass. + +## 2026-07-10 — #55 fingerprint menu + #56 human rebuild errors +- **Task:** NEXT #55 (System › Fingerprint) + #56 (rebuild failure UX). +- **Did:** #55 — System row self-gated on fprintd-list; enroll/list/verify/ + delete-all terminal flows; Use for login writes + `settings.fingerprint.pam` (hardware.nix default from stateFile); + HARDWARE.md §5 + HARDWARE-QUEUE V3 enroll. #56 — sys-update / + sys-rebuild / home-update tee last 40 lines + nomarchy-doctor pointer; + theme-sync run_switch notify/die text. Closed #55/#56. +- **Verified:** **V1** — HM template rebuild (menu + theme-sync); + option-docs green; failure-footer shell smoke. **V3 pending:** real + fingerprint enroll (queue). **V2 pending:** forced bad sys-rebuild in + VM (footer text pure/logic covered). +- **Next suggestion:** queue was A–C; remaining NEXT is blocked items + (#14/#20/#41) or PROPOSED triage. + +## 2026-07-10 — #58 nomarchy-detect-hw CLI +- **Task:** NEXT #58 — post-install re-probe package (HARDWARE.md §8). +- **Did:** `pkgs/nomarchy-detect-hw` wrapping installer’s hardware-db; + human report + snippets + `--raw` protocol; overlay + systemPackages; + HARDWARE.md §8 updated. Closed #58. +- **Verified:** **V1** — package builds; ran on this AMD laptop: correct + MODULE/NOMARCHY lines (amd cpu/gpu, laptop, ssd, fingerprint, IR cam, + NPU) and printable system.nix snippets. +- **Next suggestion:** #55 fingerprint menu or #56 human rebuild errors. + +## 2026-07-10 — #57 live Install Nomarchy affordance +- **Task:** NEXT #57 — durable live-ISO install surface (not only toast). +- **Did:** `xdg.desktopEntries.nomarchy-install` (Terminal=true) on live + HM; Tools › Install Nomarchy self-gated on `command -v nomarchy-install`; + welcome toast wording updated. Closed #57. +- **Verified:** **V1** — live config eval exposes entry name/exec; + `downstream-template-home` rebuilds with menu gate. **V2 pending:** + ISO rebuild + smoke that the .desktop appears in the session. +- **Next suggestion:** #58 `nomarchy-detect-hw` CLI. + +## 2026-07-10 — #63 generated Waybar logo + powermenu +- **Task:** NEXT #63 — reverse parity: generated bar lacked whole-swap + logo → menu and power icon → power menu. +- **Did:** `custom/nomarchy` (left, Nomarchy.ttf U+F000) + `custom/powermenu` + (right, U+F011 → `nomarchy-menu power`) in generated settings/style. + Fixed Nix `\uf000` pitfall (no `\u` escapes — use literal UTF-8). + Whole-swaps already had both; no JSON/CSS edits. Closed #63. +- **Verified:** **V2** — `THEME=tokyo-night` theme-shot: left monogram N, + right power glyph, accent styling; config modules-left/right correct. + Crop paths under `/tmp/theme-shot-tn2-*.png`. +- **Next suggestion:** product path #55 fingerprint menu (or #57 live install). + ## 2026-07-10 — #60 name-agnostic system-battery scan - **Task:** NEXT #60 — align charge-limit / menu / waybar / doctor / installer chassis with battery-notify’s type=Battery + !scope=Device diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 73d0b24..668a66b 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -19,6 +19,19 @@ Template: --- +## 2026-07-11 — QA sweep (queue empty but #76) +- **Task:** QA sweep — NEXT only has #76 `[blocked:hw]`; no other + actionable items. +- **Did:** option-docs (88 opts) + template-sot green; HM generation has + What changed? / doctor float / first-boot unit; rotated JOURNAL.md + 41→18 entries (tail → JOURNAL-ARCHIVE). No product code change. +- **Verified:** **V2** — `nix flake check --no-build`; rebuilt green: + doctor, first-boot, what-changed, clamshell-logind, dock-audio, + windowrule-syntax, battery-notify, zram-swap, nightlight-geo. +- **Pending:** #76 V3 hibernate on Nomarchy hardware; #86/#87 V3 dock QA. +- **Next suggestion:** HARDWARE-QUEUE pass by human, or promote LATER + wallpapers split / triage PROPOSED. + ## 2026-07-11 — #87 dock audio sink priority - **Task:** NEXT #87 — default audio follows dock plug/unplug. - **Did:** WirePlumber `90-nomarchy-dock-audio` (HDMI/DP session prio @@ -299,344 +312,3 @@ Template: and 3 (Look & Feel menu) remain under #79. - **Next suggestion:** #79 slice 2 — the timer/hook (V2 runNixOSTest). -## 2026-07-10 — #78 Omarchy migrant doc (docs/OMARCHY.md) -- **Task:** BACKLOG #78 (promoted from PROPOSED) — Omarchy→Nomarchy - one-pager (`VISION § F`). -- **Did:** New `docs/OMARCHY.md`: leads with the config-model shift - (imperative dotfiles → declarative flake + menu, rollback via - generations), then install (ISO/`nomarchy-install` or MIGRATION.md), - a familiar-bindings table, theming (`SUPER+T`/`nomarchy-theme-sync`), - packages (home.packages / `nix shell`, no AUR), update+rollback - (`nomarchy-pull`/`-rebuild`/`-home`, boot-menu generations, - `nomarchy-doctor`). Added to `docs/README.md` map + VISION § F ✓. -- **Verified:** V0 (docs). Grounded Nomarchy side in code: pulled real - binds from `keybinds.nix`; confirmed all 7 cited commands, the `nsearch` - alias, and the named slugs (gruvbox/rose-pine/nord) exist. Kept - Omarchy-side claims to known facts (Arch, dotfiles, pacman/AUR). -- **Pending:** none. -- **Next suggestion:** NEXT head #76 `[blocked:hw]`; last open PROPOSED is - auto time-of-day theme pair (`§D`, `[big]` — needs splitting). - -## 2026-07-10 — #77 doctor hibernate/sleep section (V2 PASS) -- **Task:** BACKLOG #77 (promoted from PROPOSED by Bernardo) — read-only - hibernate section in nomarchy-doctor (`VISION § C`, #76 follow-on). -- **Did:** Added a hibernate/sleep row group to `nomarchy-doctor.sh`: resume - device on cmdline (+ `resume_offset` for a swapfile), disk swap ≥ RAM, - zram active, previous-boot suspend/hibernate error. Self-gates (`skip` on - swap=0); only ok/warn/skip → never fails the sheet. Added `hibernate` to - the `checks.doctor` probe list. -- **Verified:** **V2 PASS** — `checks.doctor` VM test green (fresh build, - exit 0; asserts the hibernate row renders + healthy run still 0). **V1** — - ran on this box's real LUKS+@swap layout: all three `ok` rows render - (resume set, swap 34G ≥ RAM, zram 16G) and the sheet reaches its verdict. - **V0** bash -n + flake check. -- **Gotcha (fixed + MEMORY):** the doctor runs `set -euo pipefail`; my first - cut aborted before the verdict because a no-match `grep` inside `$(…)` and - a `cond && action` both trip set -e. Fixed with `|| true` / `|| echo 0` and - an `if`. First VM run caught it (exit 1, no verdict) — the test earned its keep. -- **Pending:** none — fully agent-verifiable (read-only checks, no V3). -- **Next suggestion:** NEXT head is #76 `[blocked:hw]`; remaining PROPOSED - (Omarchy doc §F, auto time-of-day theme §D) await triage. - -## 2026-07-10 — QA sweep (clean) + VISION-gap pass → 3 PROPOSED -- **Task:** Bernardo — QA/drift sweep, then a VISION-gap pass with proposals. -- **Did (sweep):** Fanned out two subagents (Bernardo OK'd spawning for - efficiency): nomarchy-runner ran the deterministic checks + `bash -n`/ - `py_compile` (all PASS; the 4 "needs-args" scripts pass via their flake - derivations); nomarchy-scout hunted fuzzy drift (dead code, stale refs, - TODOs, changed-area contradictions, count/version) — **all clean**. - Spot-checked scout's count claim myself: 24 theme JSONs / 24 previews / - README "24 presets" — consistent. Eval sweep green. **No fixes needed.** -- **Did (VISION):** Verified candidate gaps against the tree before - proposing (killed two false gaps — nomarchy-rebuild/home already tail logs - + point at doctor on failure = §A shipped; `nvd diff` = §B covered; System - › Firmware menu already exists). Filed 3 **PROPOSED** (verified open): - doctor hibernate/sleep section (§C, top Day-2 pick, #76 follow-on), - Omarchy migrant one-pager (§F), auto time-of-day theme pair (§D, `[big]`). -- **Verified:** V0 (agent-notes/docs only). Sweep evidence above. -- **Pending:** none. Proposals await Bernardo's triage into a tier. -- **Next suggestion:** if a PROPOSED is promoted, the doctor hibernate - section is the cleanest next build; else NEXT #76 stays `[blocked:hw]`. - -## 2026-07-10 — Icon overrides: user-facing docs (OVERRIDES.md) -- **Task:** Bernardo asked whether the session's features need user docs. -- **Did:** Hibernation already covered (README swapfile line, MIGRATION.md - runbook, discoverable Power-menu row) — no gap. Icons had one: the only - doc was the template comment. Added an "Icon pack" subsection to - `docs/OVERRIDES.md` § Appearance — `nomarchy-theme-sync set icons ""`, - the known-packs table, the ~1 GiB/opt-in rationale, and that the choice is - sticky across `apply` (presets carry no icon field; verified `deep_merge`). -- **Verified:** command path confirmed (`cmd_set` writes any dotted key; - `icons` is a schema key). **Built all 4 packs and listed real theme dirs** - to fix the examples — caught Qogir using capital `Qogir-Dark`/`Light` - (lowercase would silently fall back to hicolor). Docs-only (V0). -- **Pending:** none. -- **Next suggestion:** NEXT #76 `[blocked:hw]`; LATER/QA-sweep next. - -## 2026-07-10 — Icon themes: opt-in cross-pack overrides (no default bloat) -- **Task:** LATER "per-theme icon overrides / more icon packs". Recon found - papirus is already ~1 GiB and ships only Papirus/Dark/Light (no free - variety); real variety needs extra packs at ~hundreds of MB each. Bernardo - chose the **opt-in, no-default-bloat** shape (over shipping packs). -- **Did:** `theme.nix` resolves `nomarchy.theme.iconThemePackage` from a - small `iconPacks` registry (papirus·tela·qogir·reversal·numix, by name - prefix). Default themes name `Papirus-*` → resolves to the *plain* papirus - derivation (no symlinkJoin, identical closure); only a theme naming another - pack's set symlinkJoins that one pack in. `stylix.nix` uses it - (mkDefault). Opt-in note in `templates/downstream/home.nix`; ROADMAP § - Icon themes updated (incl. the deliberate no-default-packs decision). -- **Verified:** **V1** — HM activationPackage builds (exit 0). Eval proofs: - default `iconThemePackage` = plain `papirus-icon-theme-*` (zero delta); - with `icons="Tela-dark"` → `nomarchy-icon-themes` symlinkJoin (papirus+tela) - and name flows, **without building tela**. All 5 pack attrs exist in the - pinned nixpkgs. `template-sot` + `option-docs` + `flake check` green. -- **Pending:** none. No default visual change (identical papirus), so no - screenshot needed; the opt-in render is the downstream user's to see. -- **Next suggestion:** NEXT still #76 `[blocked:hw]`; LATER/QA-sweep next. - -## 2026-07-10 — #76 slice 3: hibernate VM test (V2 PASS) → #76 agent-complete -- **Task:** BACKLOG #76 slice 3 — the mandatory V2 hibernate test + V3 queue. -- **Did:** Added `checks.hibernate` (flake.nix), modeled on nixpkgs' - hibernate.nix but wired to Nomarchy's #76 risk: imports oom.nix (zram - default-on), disk swap at lower priority + explicit `boot.resumeDevice`, - systemd-initrd. Test drives hibernate→power-off→resume→crash: ramfs marker - survives resume, a crash-boot loses it (real resume, not a survivor), and - asserts zram@100 + disk-swap<100 so the image lands on disk not volatile - zram. Queued the V3 laptop steps (real LUKS+@swap+offset resume + no-swap - notify) in HARDWARE-QUEUE. Collapsed #76 to a `[blocked:hw]` stub; design - record → ROADMAP § "Hibernation + zram by default". -- **Verified:** **V2 PASS** — `nix build .#checks.x86_64-linux.hibernate` - built the driver fresh and exited 0 (all assertions held). `nix flake - check --no-build` green. -- **Pending:** only V3 (dev box / laptop) — #76's last check; close on PASS. -- **Next suggestion:** #76 is now blocked:hw; NEXT head falls to LATER/ - PROPOSED triage or a QA sweep — pick per LOOP.md orientation next session. - -## 2026-07-10 — #76 slice 2: Hibernate notify-on-failure -- **Task:** BACKLOG #76 remaining slice 2 — per the settled "keep row, notify - on failure" call. -- **Did:** `modules/home/rofi.nix` power menu Hibernate arm now runs - `systemctl hibernate 2>/dev/null || notify-send "Hibernate" "…see - docs/MIGRATION.md"`. On success the call blocks until resume, so the notify - only fires on a genuine failure (e.g. swap=0 no-swap machine). Row stays - unconditional (no hiding). -- **Verified:** **V1** — `nix build …homeConfigurations.nomarchy.activationPackage` - green (rebuilds `nomarchy-menu.drv`; `writeShellScriptBin` runs bash -n at - build). Control-flow proof on the arm extracted from the built script: - failing `systemctl` → notify fires; succeeding → no notify. `nix flake - check --no-build` green. -- **Pending:** slice 3 = the V2 hibernate→resume VM test + V3 laptop - (Hibernate→power off→resume on the LUKS+@swap machine; plus confirm the - no-swap notify surfaces in a real session). Both remain open on #76. -- **Next suggestion:** slice 3 — add a `checks.*` hibernate VM test (as far - as QEMU allows) and queue the V3 laptop steps in HARDWARE-QUEUE. - -## 2026-07-10 — #76 slice 1: MIGRATION.md hibernation runbook -- **Task:** BACKLOG #76 remaining slice 1 — docs runbook for enabling - hibernation on an existing machine (per the settled "docs not tool" call). -- **Did:** Added § "Enabling hibernation on an existing machine (no reinstall)" - to `docs/MIGRATION.md`: create `@swap` subvol (subvolid=5) + `mkswapfile` - (NOCOW), read `map-swapfile -r` offset, wire `fileSystems."/swap"` + - `swapDevices` + `resumeDevice` + `resume_offset` into system.nix. Flagged - the mount as required on the hand-edit path (installer gets it from - disko-gen hardware-config). Notes zram-priority reservation, no-LUKS - variant, `swap=0` opt-out. Worked example = this dev machine. -- **Verified:** **V0** — read-only commands run live against this machine's - real LUKS(`cryptroot`)+btrfs(`@`)+`/swap/swapfile` layout (RAM 31G, fsuuid, - `findmnt SOURCE`, `mkswapfile` flags, zram@100 vs swapfile@-1 confirms the - design intent). `nix flake check --no-build` green. -- **Pending:** slice 2 — Hibernate row notify-on-failure (V1/V2); then the - V2 hibernate VM test + V3 laptop. -- **Next suggestion:** slice 2 (menu notify-on-failure). - -## 2026-07-10 — #76 hibernation design calls (no commit yet → this bookkeeping) -- **Task:** BACKLOG #76 design slice — Bernardo made the open calls. -- **Did:** Recon showed the hibernation half is **already built for new - installs** (installer defaults swap=RAM hibernation-ready `@swap` swapfile; - `patch-template.py` writes swapDevices/resumeDevice/resume_offset; Power - menu Hibernate row + LUKS/hyprlock handling exist). Settled 3 calls: - (1) swap sizing = **exactly RAM** (no change); (2) migration = **docs - runbook in MIGRATION.md**, not a tool; (3) no-swap Hibernate = **keep row, - notify on failure**. Folded into BACKLOG #76 (design ✓, re-sliced remaining: - MIGRATION.md runbook + notify-on-failure menu) and Decisions. -- **Verified:** **V0** — `nix flake check --no-build` green (docs-only). -- **Pending:** two remaining slices below; V2 hibernate VM test + V3 laptop. -- **Next suggestion:** slice 1 — `docs/MIGRATION.md` hibernation-enable runbook - (V0), then slice 2 — Hibernate notify-on-failure (V1/V2). - -## 2026-07-10 — #76 zram slice: compressed-RAM swap default -- **Task:** BACKLOG #76 (`[big]`) — split; took the low-risk zram-default slice. -- **Did:** `zramSwap` on by default in `modules/nixos/oom.nix` (zstd, 50% RAM, - priority 100) as the memory-pressure layer before earlyoom, following the - earlyoom mkDefault precedent (no toggle). High priority keeps day-to-day - paging in zram so a disk swapfile stays reserved for #76's hibernate image. - Added `checks.zram-swap` runNixOSTest (imports oom.nix). Split #76 in - BACKLOG → remainder is the hibernation half (swapfile/resume/installer). -- **Verified:** **V2** — `nix build .#checks…zram-swap` PASS: /dev/zram0 active - in /proc/swaps, `[zstd]` comp_algorithm, priority 100. **V1** full distro - toplevel builds. **V0** flake check --no-build green. -- **Pending:** hibernation half of #76 still open (needs hibernate→resume VM - test + V3 laptop). No V3 for zram (under-load tuning is secondary). -- **Next suggestion:** #76 hibernation half — design default swapSize + the - resume/installer wiring; it's the boot-critical, V2-hibernate + V3 part. - -## 2026-07-10 — #41 hardware-confirmed: OpenFile portal floats (V3 close) -- **Task:** BACKLOG #41 — final on-hardware confirmation (Bernardo reported PASS). -- **Did:** #41 already out of NEXT + portal rule shipped - (`hyprland.nix` xdg-desktop-portal-gtk float/center). Bernardo verified the - GTK OpenFile file-picker floats on real hardware; dropped the "OpenFile not - re-probed / optional residual" caveats in HARDWARE-QUEUE — #41 fully closed. -- **Verified:** **V3** (Bernardo, Latitude). No code change. Bookkeeping only; - QA-sweep guards run green this session: `nix flake check --no-build`, - option-docs/template-sot/theme-sync-validate builds, contrast 24×7. -- **Pending:** none for #41. NEXT head is #76 (hibernation + zram, `[big]`). -- **Next suggestion:** split #76 — take the low-risk **zram-default** slice - (V2-testable headlessly) before the boot-critical hibernate/resume work. - -## 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, - menu/powermgmt live sysfs + state, oneshot reads live theme-state + - AC re-apply. (2) Look & Feel already had Theme/wallpaper/night light; - added Reset wallpaper (auto). (3) NVIDIA first-class deferred past v1 - (HARDWARE.md). (4) Identity retunes: white L-steps, lumon subtext, - hackerman surface+UI warn/bad, matte-black subtext, miasma bad. - (5) Hand `btop.theme` for 9 identity/whole-swap slugs from palette map. -- **Verified:** **V0** contrast 24×7; **V1** battery-charge-limit VM - (udev restart). **V3** live charge write on real laptop (HARDWARE-QUEUE). -- **Next suggestion:** only #20/#41 blocked, or Decisions. - -## 2026-07-10 — Summer pair polish + status CSS + preview recapture -- **Task:** finish agent-able PROPOSED theme leftovers. -- **Did:** summer-day/night — JSON hierarchy (night subtext/muted/overlay - ladder; day overlay≠muted); waybar CSS tokens track JSON roles; font - 13px both; day battery 25/10; VPN pill + full status states - (.recording/.available/.on/.activated/battery warn). Recaptured - executive-slate + neon-glass `preview.png` via theme-shot desktop - (480×270). Closed those PROPOSED lines. -- **Verified:** **V0** contrast 24×7 + wholeswap; **V2** theme-shot - summer-day/night/executive-slate/neon-glass — viewed bar crops + - previews. Identity taste retunes stay PROPOSED. -- **Next suggestion:** only blocked NEXT (#20/#41) or product Decisions. - -## 2026-07-10 — #74 matrix flags + #75 V2 install (default arm) -- **Task:** NEXT #74 unattended matrix · #75 SoT V2 install after ISO. -- **Did:** `NOMARCHY_TEST_SWAP_GB` / `NOMARCHY_TEST_NO_LUKS` drive - `tools/test-install.sh` go.sh + first-boot LUKS skip; nixpkgs OVMF - fallback. Full offline install V2 (SWAP=2 LUKS) after live ISO rebuild - with starter packages — first-boot themed Boreal, no red banner. - Closed #74/#75. Other matrix arms scripted (not full-ISO re-run). -- **Verified:** **V2** — install powered off ~460s; first-boot.png - viewed (`/tmp/nomarchy-vm-75/first-boot.png`): themed wallpaper + - waybar (logo, clock, modules), doctor glyph, no autogen banner. -- **Next suggestion:** NEXT only #20 [human] + #41 [blocked:hw]. - -## 2026-07-10 — Loop batch land #64–#73 (parallel worktrees) -- **Task:** agent-actionable NEXT #64–#73 via worktree agents; land on main. -- **Did:** #64 MIGRATION snapshots · #65 real-uid chown · #66 theme-state - fail-closed reader · #67/#68 theme fidelity+ANSI · #69/#70 audit+import - tools · #71 IR portal docs · #72 template-sot check · #73 MOTD/first-boot - fingerprint+doctor tips. Agents did not push; parent cherry-picked - (stripped agent BACKLOG races). Closed #64–#73. -- **Verified:** **V0/V1** — theme-contrast 24×7 pass; template-sot green; - bash -n install; flake check --no-build green. -- **Next suggestion:** #74 unattended matrix + #75 V2 install (KVM). - -## 2026-07-10 — Promote agent-actionable PROPOSED → NEXT #64–#75 -- **Task:** Bernardo: bump non-hw/non-human PROPOSED categories 1+2. -- **Did:** **#64** MIGRATION snapshots · **#65** installer chown · - **#66** mkFlake theme-state errors · **#67** theme fidelity nits · - **#68** #52 residual ANSI · **#69** audit identity exemptions · - **#70** import-pipeline hierarchy · **#71** IR portal docs (a) · - **#72** template SoT CI · **#73** hardware hints residual · **#74** - unattended install matrix · **#75** SoT V2 install. Breadcrumbs in - PROPOSED; actionable items sit above #20/#41 in NEXT. -- **Verified:** V0 (backlog only). -- **Next suggestion:** queue head **#64** (docs) or batch #67/#68 themes. - -## 2026-07-10 — PROPOSED cleanup (stale exam residue) -- **Task:** Bernardo: clean stale PROPOSED items after A/B/C + #52 ship. -- **Did:** Rewrote PROPOSED to open work only — dropped #52 shipped - high-ROI bullets, neon-glass quarantine, empty/shipped installer - audit sections, template seed drift (keys already present), soft - gaps fixed by #50, and “no action” kanagawa/boreal notes. Kept - product day-2, installer follow-ups, theme polish residuals, tooling. -- **Verified:** V0 (backlog hygiene); spot-checked template keys, - latte/mocha #52 fixes, usbutils, package exports. -- **Next suggestion:** triage the lean PROPOSED list or HARDWARE-QUEUE. - -## 2026-07-10 — Pending closeout: #14, #57 V2, #41 slice -- **Task:** pending V2/CI/float leftovers after A/B/C batch. -- **Did:** **#14 closed** — first scheduled lock bump landed - `8fded63` (2026-07-06 Mon 05:20 UTC) as `nomarchy-bump` / - `chore(lock): scheduled upstream bump` (Actions token push works). - **#57 V2** — `checks.live-install-entry` asserts live HM gen has - `nomarchy-install.desktop` (Name/Terminal/Exec) + installer bin + - Tools menu gate in `nomarchy-menu`. **#41 slice** — float/center rules - for hyprpolkitagent + pinentry-qt from package app-id strings; - `tools/capture-float-classes.nix` harness (softGL empty clients); - residual GTK portal stays NEXT `#41 [blocked:hw]`. HARDWARE-QUEUE - float confirm steps added. -- **Verified:** **V2** live-install-entry green; windowrule-syntax green. - SoftGL class capture inconclusive (empty clients). **V3** float confirm - + fingerprint/#60 still HARDWARE-QUEUE. **#20** still `[human]`. -- **Next suggestion:** Bernardo: #20 KVM runner, or HARDWARE-QUEUE pass. - -## 2026-07-10 — #55 fingerprint menu + #56 human rebuild errors -- **Task:** NEXT #55 (System › Fingerprint) + #56 (rebuild failure UX). -- **Did:** #55 — System row self-gated on fprintd-list; enroll/list/verify/ - delete-all terminal flows; Use for login writes - `settings.fingerprint.pam` (hardware.nix default from stateFile); - HARDWARE.md §5 + HARDWARE-QUEUE V3 enroll. #56 — sys-update / - sys-rebuild / home-update tee last 40 lines + nomarchy-doctor pointer; - theme-sync run_switch notify/die text. Closed #55/#56. -- **Verified:** **V1** — HM template rebuild (menu + theme-sync); - option-docs green; failure-footer shell smoke. **V3 pending:** real - fingerprint enroll (queue). **V2 pending:** forced bad sys-rebuild in - VM (footer text pure/logic covered). -- **Next suggestion:** queue was A–C; remaining NEXT is blocked items - (#14/#20/#41) or PROPOSED triage. - -## 2026-07-10 — #58 nomarchy-detect-hw CLI -- **Task:** NEXT #58 — post-install re-probe package (HARDWARE.md §8). -- **Did:** `pkgs/nomarchy-detect-hw` wrapping installer’s hardware-db; - human report + snippets + `--raw` protocol; overlay + systemPackages; - HARDWARE.md §8 updated. Closed #58. -- **Verified:** **V1** — package builds; ran on this AMD laptop: correct - MODULE/NOMARCHY lines (amd cpu/gpu, laptop, ssd, fingerprint, IR cam, - NPU) and printable system.nix snippets. -- **Next suggestion:** #55 fingerprint menu or #56 human rebuild errors. - -## 2026-07-10 — #57 live Install Nomarchy affordance -- **Task:** NEXT #57 — durable live-ISO install surface (not only toast). -- **Did:** `xdg.desktopEntries.nomarchy-install` (Terminal=true) on live - HM; Tools › Install Nomarchy self-gated on `command -v nomarchy-install`; - welcome toast wording updated. Closed #57. -- **Verified:** **V1** — live config eval exposes entry name/exec; - `downstream-template-home` rebuilds with menu gate. **V2 pending:** - ISO rebuild + smoke that the .desktop appears in the session. -- **Next suggestion:** #58 `nomarchy-detect-hw` CLI. - -## 2026-07-10 — #63 generated Waybar logo + powermenu -- **Task:** NEXT #63 — reverse parity: generated bar lacked whole-swap - logo → menu and power icon → power menu. -- **Did:** `custom/nomarchy` (left, Nomarchy.ttf U+F000) + `custom/powermenu` - (right, U+F011 → `nomarchy-menu power`) in generated settings/style. - Fixed Nix `\uf000` pitfall (no `\u` escapes — use literal UTF-8). - Whole-swaps already had both; no JSON/CSS edits. Closed #63. -- **Verified:** **V2** — `THEME=tokyo-night` theme-shot: left monogram N, - right power glyph, accent styling; config modules-left/right correct. - Crop paths under `/tmp/theme-shot-tn2-*.png`. -- **Next suggestion:** product path #55 fingerprint menu (or #57 live install). -