diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index 4faa23f..091fc6f 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -28,37 +28,6 @@ in [`docs/ROADMAP.md`](../docs/ROADMAP.md); map in ## NEXT -### 76. Hibernation default — all agent work shipped `[human]` -Hibernation + zram on by default (product intent, Bernardo 2026-07-10). -**All V0/V1/V2 slices done** (2026-07-10); only the V3 check remains. -**Unblocked 2026-07-11:** the dev box (TuringMachine T14s) now RUNS Nomarchy -(migrated per docs/MIGRATION.md) with exactly the target layout — step 1 of -the queue entry verified live (`/swap/swapfile` file-type swapon, zram0 prio -100, `resume=`+`resume_offset=` on cmdline). Remaining: Bernardo performs the -power-cycle (hibernate → power off → single LUKS unlock → session restored) — -steps in HARDWARE-QUEUE. Design record in -**ROADMAP § Hibernation + zram by default**. Shipped: -- zram default (`modules/nixos/oom.nix`, zstd/50%/prio 100) — `checks.zram-swap`. -- Installer/template already default new installs to a RAM-sized encrypted - `@swap` swapfile + `resume_offset` wiring; `swapSize=0` = no-swap opt-out. -- `docs/MIGRATION.md` enable-hibernation runbook (existing machines). -- `rofi.nix` Power → Hibernate: kept unconditional, **notifies on failure**. -- `checks.hibernate` VM test (V2 PASS) — hibernate→resume→crash round-trip - (swap partition); zram (prio 100) doesn't swallow the image, disk carries it. -- `checks.hibernate-swapfile` VM test (V2 PASS) — the installer's btrfs `@swap` - **swapfile** setup: NOCOW `mkswapfile`, file-type swapon, a valid - `map-swapfile -r` offset the kernel accepts (`/sys/power/resume_offset`), - zram above it. (Bounded proof of the swapfile+offset the partition test - can't reach; a full runtime-swapfile hibernate isn't headless-reachable — - systemd `CanHibernate=no` for undeclared swap.) - -**V3 remaining (narrowed):** the literal encrypted-swapfile power-cycle — -`Hibernate → power off → unlock LUKS → resume session` on the LUKS+@swap -layout — plus the no-swap notify in a real session. QEMU can't feed a -runtime-computed `resume_offset` into the boot cmdline, and the dev box runs -exactly this layout (`/proc/cmdline` verified) but isn't Nomarchy. Steps in -HARDWARE-QUEUE. Close #76 on PASS. - ### 89. Tray icon parity — themed overrides for SNI apps (Bernardo 2026-07-11) The bar is monochrome; third-party tray icons aren't. EasyEffects 8's Qt SNI publishes IconName `com.github.wwmm.easyeffects` → Papirus full-color @@ -206,8 +175,8 @@ decide. **Resolved** entries stay for history; agents treat them as closed. - **Hibernation** — **want by default** (product intent). Needs a disk-backed swap (file or partition) sized for resume; not zram alone. - Implementation is a future/NEXT item when designed (installer + - resume device + encrypted-root story). + **Shipped as #76**; V3 power-cycle PASSED on TuringMachine 2026-07-12 + (ROADMAP § Hibernation + zram by default). ### Resolved (2026-07-10, #76 design) diff --git a/agent/HARDWARE-QUEUE.md b/agent/HARDWARE-QUEUE.md index 76a1124..e203648 100644 --- a/agent/HARDWARE-QUEUE.md +++ b/agent/HARDWARE-QUEUE.md @@ -216,27 +216,11 @@ the **T14s** (webcam case). screenshot loaded. Check that the UI draws on the current theme palette (tools colored properly) and hitting save places the screenshot in `~/Pictures/Screenshots/` while hitting copy places it in the clipboard. -- [ ] **#76 hibernate→resume on a real Nomarchy install** — the V2 VM test - proves the resume mechanism + zram coexistence, but QEMU can't feed a - boot-time `resume_offset` for a btrfs *swapfile* nor drive the LUKS - initrd unlock, so this triple needs hardware. **The dev box qualifies - since 2026-07-11**: TuringMachine (T14s) migrated to Nomarchy per - docs/MIGRATION.md — it now exercises Nomarchy's oom.nix/rofi wiring, - not just the layout. - 1. ✓ Confirm the wiring on the Nomarchy box: `swapon --show` lists - `/swap/swapfile` (Type file) **and** `/dev/zram0` at priority 100; - `cat /proc/cmdline` shows `resume_offset=…` + `resume=` the btrfs UUID. - (**Verified on TuringMachine 2026-07-11**: swapfile 34G file-type, - zram0 prio 100, `resume_offset=533760`.) - 2. Open apps, note an unsaved in-RAM state. `nomarchy-menu → Power → - Hibernate` (or `systemctl hibernate`). Machine writes image, **powers - off**. - 3. Power on: unlock LUKS **once** in the themed prompt; land back in the - **same session** — state restored, not a fresh login. - 4. **Pass** = session restored after full power-off + single unlock. - Fail (fresh boot / stuck initrd) → NOW bug in BACKLOG (capture - `journalctl -b -1 | grep -i -E 'hibernat|resume|swap'`). -- [ ] **#76 no-swap Hibernate notify** — on a **Nomarchy** machine installed +- [ ] **#76 no-swap Hibernate notify** (#76 itself is closed — the + hibernate→resume power-cycle **PASSED on TuringMachine 2026-07-12**: + Bernardo ran the full hibernate → power off → single LUKS unlock → + session-restored cycle "flawlessly"; this notify check is the one + remaining leftover) — on a **Nomarchy** machine installed with `swap = 0` (or temporarily `sudo swapoff -a` on one): `nomarchy-menu → Power → Hibernate` must surface a desktop notification ("Couldn't hibernate — likely no swap is configured. See docs/MIGRATION.md → diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 8df55cb..0bb31a1 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -19,6 +19,19 @@ Template: --- +## 2026-07-12 — #76 closed: hibernate V3 PASSED on TuringMachine (this commit) +- **Task:** BACKLOG #76 `[human]` closure — Bernardo reports the V3 check. +- **Did:** Bernardo ran the real power-cycle on the T14s (LUKS + btrfs + `@swap` swapfile): hibernate → power off → single LUKS unlock → + session restored, "flawlessly". Deleted #76; HARDWARE-QUEUE resume + entry pruned (outcome recorded here + ROADMAP ✓-entry updated); + Decisions note marked shipped. The **no-swap Hibernate notify** check + stays open in HARDWARE-QUEUE as the one leftover. +- **Verified:** V3 (human, real hardware). Docs-only commit otherwise. +- **Pending:** no-swap notify check (needs a swapless session or + temporary `swapoff -a`). +- **Next suggestion:** #89 slice 2 — the override-icon layer. + ## 2026-07-12 — #90 tray submenu arrows: root cause was waybar CSS (this commit) - **Task:** BACKLOG #90 `[stuck]` (interactive, Bernardo driving on T14s). - **Did:** Diagnosis was wrong — Papirus-Dark resolves `pan-end-symbolic` diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 0e0d5ae..483ad48 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -354,7 +354,9 @@ Design/decision records and a running log of shipped work (items marked hibernate from a *runtime* swapfile isn't headless-reachable (systemd `CanHibernate=no` for undeclared swap; and a runtime-computed `resume_offset` can't be fed into the boot cmdline), so the literal encrypted-swapfile - power-cycle + LUKS-initrd unlock stays a V3 laptop check. + power-cycle + LUKS-initrd unlock stayed a V3 laptop check — **V3 PASSED + 2026-07-12** on TuringMachine (T14s, LUKS+`@swap` swapfile layout): + hibernate → power off → single LUKS unlock → session restored. ✓ **Doctor hibernate/sleep section (#77, `VISION § C`):** `nomarchy-doctor` gained a read-only hibernate row group — resume device on the cmdline (+ `resume_offset` for a swapfile), disk swap ≥ RAM, zram active, and any