docs(agent): close #76 — hibernate→resume V3 PASSED on TuringMachine
Some checks failed
Check / eval (push) Failing after 1m31s

Bernardo ran the real power-cycle on the T14s (LUKS + btrfs @swap
swapfile): hibernate → power off → single LUKS unlock → session
restored. BACKLOG #76 deleted; HARDWARE-QUEUE resume entry pruned
(outcome recorded in the remaining no-swap-notify entry, JOURNAL, and
the ROADMAP ✓-entry); Decisions hibernation note marked shipped. The
no-swap Hibernate notify check remains the one open leftover.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-12 07:52:10 +01:00
parent ac7e6bdb4e
commit 4cdc80c9bc
4 changed files with 23 additions and 55 deletions

View File

@@ -28,37 +28,6 @@ in [`docs/ROADMAP.md`](../docs/ROADMAP.md); map in
## NEXT ## 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) ### 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 The bar is monochrome; third-party tray icons aren't. EasyEffects 8's Qt
SNI publishes IconName `com.github.wwmm.easyeffects` → Papirus full-color 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 - **Hibernation** — **want by default** (product intent). Needs a
disk-backed swap (file or partition) sized for resume; not zram alone. disk-backed swap (file or partition) sized for resume; not zram alone.
Implementation is a future/NEXT item when designed (installer + **Shipped as #76**; V3 power-cycle PASSED on TuringMachine 2026-07-12
resume device + encrypted-root story). (ROADMAP § Hibernation + zram by default).
### Resolved (2026-07-10, #76 design) ### Resolved (2026-07-10, #76 design)

View File

@@ -216,27 +216,11 @@ the **T14s** (webcam case).
screenshot loaded. Check that the UI draws on the current theme palette screenshot loaded. Check that the UI draws on the current theme palette
(tools colored properly) and hitting save places the screenshot in (tools colored properly) and hitting save places the screenshot in
`~/Pictures/Screenshots/` while hitting copy places it in the clipboard. `~/Pictures/Screenshots/` while hitting copy places it in the clipboard.
- [ ] **#76 hibernate→resume on a real Nomarchy install** — the V2 VM test - [ ] **#76 no-swap Hibernate notify** (#76 itself is closed — the
proves the resume mechanism + zram coexistence, but QEMU can't feed a hibernate→resume power-cycle **PASSED on TuringMachine 2026-07-12**:
boot-time `resume_offset` for a btrfs *swapfile* nor drive the LUKS Bernardo ran the full hibernate → power off → single LUKS unlock →
initrd unlock, so this triple needs hardware. **The dev box qualifies session-restored cycle "flawlessly"; this notify check is the one
since 2026-07-11**: TuringMachine (T14s) migrated to Nomarchy per remaining leftover) — on a **Nomarchy** machine installed
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
with `swap = 0` (or temporarily `sudo swapoff -a` on one): `nomarchy-menu with `swap = 0` (or temporarily `sudo swapoff -a` on one): `nomarchy-menu
→ Power → Hibernate` must surface a desktop notification ("Couldn't → Power → Hibernate` must surface a desktop notification ("Couldn't
hibernate — likely no swap is configured. See docs/MIGRATION.md → hibernate — likely no swap is configured. See docs/MIGRATION.md →

View File

@@ -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) ## 2026-07-12 — #90 tray submenu arrows: root cause was waybar CSS (this commit)
- **Task:** BACKLOG #90 `[stuck]` (interactive, Bernardo driving on T14s). - **Task:** BACKLOG #90 `[stuck]` (interactive, Bernardo driving on T14s).
- **Did:** Diagnosis was wrong — Papirus-Dark resolves `pan-end-symbolic` - **Did:** Diagnosis was wrong — Papirus-Dark resolves `pan-end-symbolic`

View File

@@ -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 hibernate from a *runtime* swapfile isn't headless-reachable (systemd
`CanHibernate=no` for undeclared swap; and a runtime-computed `resume_offset` `CanHibernate=no` for undeclared swap; and a runtime-computed `resume_offset`
can't be fed into the boot cmdline), so the literal encrypted-swapfile 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` ✓ **Doctor hibernate/sleep section (#77, `VISION § C`):** `nomarchy-doctor`
gained a read-only hibernate row group — resume device on the cmdline gained a read-only hibernate row group — resume device on the cmdline
(+ `resume_offset` for a swapfile), disk swap ≥ RAM, zram active, and any (+ `resume_offset` for a swapfile), disk swap ≥ RAM, zram active, and any