All checks were successful
Check / eval (push) Successful in 4m11s
Add checks.hibernate: a runNixOSTest modeled on nixpkgs' hibernate.nix, wired to the actual risk #76 introduces — coexistence with the zram swap that oom.nix now enables by default. It imports oom.nix, puts the disk swap at a lower priority than zram with an explicit boot.resumeDevice, and uses systemd-initrd. The test drives a full hibernate -> power-off -> resume -> crash cycle: a volatile ramfs marker survives resume but NOT a crash-boot (proving genuine resume), and it asserts zram sits at priority 100 while the disk swap is lower, so the hibernate image lands on disk rather than volatile zram. What QEMU genuinely can't do — feed a boot-time resume_offset for a btrfs swapfile (offset only exists after first-boot allocation) or drive a LUKS-initrd unlock — stays a V3 laptop check (HARDWARE-QUEUE, dev box already runs that exact layout), plus the no-swap notify in a real session. With this, all V0/V1/V2 work on #76 is done; #76 collapses to a [blocked:hw] stub and the design record moves to ROADMAP. Verification: V2 PASS — nix build .#checks.x86_64-linux.hibernate built the driver fresh and exited 0. nix flake check --no-build green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
178 lines
7.7 KiB
Markdown
178 lines
7.7 KiB
Markdown
# Backlog — the prioritized task queue
|
||
|
||
**This is the only executable work list for agents.** Product themes and
|
||
v1.0 intent live in [`docs/VISION.md`](../docs/VISION.md); design history
|
||
in [`docs/ROADMAP.md`](../docs/ROADMAP.md); map in
|
||
[`docs/README.md`](../docs/README.md) and [`agent/README.md`](README.md).
|
||
|
||
**Rules:**
|
||
- Agents take the topmost actionable item (see LOOP.md). Finished items
|
||
are **deleted** here — the journal + git log are the record; durable
|
||
design notes get a ✓-entry in docs/ROADMAP.md (and/or a note in VISION)
|
||
if worth keeping.
|
||
- Item numbers are **stable IDs** — never renumbered or reused. A gap in
|
||
the sequence means shipped (or dropped) work; new items take the next
|
||
free number regardless of tier.
|
||
- Tags: `[blocked:hw]` needs real hardware (see HARDWARE-QUEUE.md) ·
|
||
`[human]` needs Bernardo · `[stuck]` two failed attempts, needs help ·
|
||
`[big]` must be split before starting.
|
||
- Agents may append to **PROPOSED** and **Decisions** freely (include
|
||
`VISION § …` or `ROADMAP § …` when relevant); only Bernardo moves items
|
||
*out* of PROPOSED into the tiers.
|
||
|
||
---
|
||
|
||
## NOW
|
||
|
||
*(empty — NEXT's top item is the queue head)*
|
||
|
||
## NEXT
|
||
|
||
### 76. Hibernation default — all agent work shipped `[blocked:hw]`
|
||
Hibernation + zram on by default (product intent, Bernardo 2026-07-10).
|
||
**All V0/V1/V2 slices done** (2026-07-10); only the V3 laptop check remains
|
||
(HARDWARE-QUEUE → "AMD dev box"). 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;
|
||
zram (prio 100) doesn't swallow the image, disk swap carries it.
|
||
|
||
**V3 remaining:** real hibernate→resume on the LUKS+@swap swapfile+offset
|
||
layout (QEMU can't feed a boot-time offset / drive LUKS-initrd) + the no-swap
|
||
notify in a real session. Steps queued in HARDWARE-QUEUE. Close #76 on PASS.
|
||
|
||
## LATER
|
||
|
||
- **Wallpapers artifact split** (ROADMAP § Faster switches — decided,
|
||
deferred): pinned `Nomarchy-wallpapers` input so a state write stops
|
||
re-copying 86 MB. Follow-on: pre-built theme variants if switches are
|
||
still slow after.
|
||
- **Installer round 2** (ROADMAP § Installer): multi-disk BTRFS RAID,
|
||
impermanence, BIOS/legacy boot.
|
||
- **Boot-from-snapshot**: a systemd-boot equivalent of grub-btrfs.
|
||
- **Night-light geo mode**: lat/long auto sunset/sunrise (means wlsunset).
|
||
- **Per-theme icon overrides** / more icon packs (ROADMAP § Icon themes).
|
||
- **MIPI/IPU software-ISP camera** support (no-UVC machines).
|
||
- **VPN exit-node richer display** (country/city) (optional).
|
||
- **NixOS release bump → v2** `[human]`: deliberate, hand-edited, never
|
||
automated; the previous attempt was discarded (2026-06-22) over a
|
||
Hyprland OOM blocker — see MEMORY.md before retrying (NOW#3 should
|
||
also soften that blocker class).
|
||
|
||
## FUTURE (decided deferred — not the agent queue head)
|
||
|
||
Work we **intend** someday but explicitly **not** NEXT. Agents do not
|
||
pick these unless Bernardo promotes one into NEXT/NOW.
|
||
|
||
### 20. KVM runner → VM suite in CI `[human]`
|
||
**Status (2026-07-10):** keep **eval-only** CI on the current Gitea
|
||
stack (act_runner in docker-compose on the 4c/4 GB IONOS VPS). Nested
|
||
KVM + RAM headroom on that host are a poor fit next to Gitea; full
|
||
`checks.*` VMs stay local / promotion-time until a **separate**
|
||
KVM-capable machine exists.
|
||
|
||
**When ready:** register a second runner (host-mode nix + `/dev/kvm`,
|
||
label `nix-kvm` — not the existing docker eval runner), then uncomment
|
||
the `vm-checks` job in `.gitea/workflows/check.yml` (`runs-on: nix-kvm`,
|
||
`nix flake check` + toplevel/HM builds). Do not enable the job until
|
||
that label is online (Gitea queues forever otherwise).
|
||
|
||
### Formatter — adopt later `[human]`
|
||
**Intent:** add a Nix formatter (likely `nixfmt-rfc-style`) in a dedicated
|
||
pass: reformat the tree once, document in CONVENTIONS, optional CI
|
||
check. **Not** the queue head — no drive-by reformats until that pass.
|
||
|
||
### Hibernation + zram
|
||
**Promoted → NEXT #76** (2026-07-10).
|
||
|
||
## PROPOSED (agent suggestions — await human triage)
|
||
|
||
*Agents: append here with a one-paragraph pitch (what/why/cost). Do not
|
||
implement. Bernardo moves accepted items into a tier.*
|
||
|
||
*Open work only. Shipped exam/A–C items (#47–#63, #14, #52 theme
|
||
high-ROI, etc.) live in the journal + ROADMAP — not here.*
|
||
|
||
### Product / day-2
|
||
|
||
_(Battery charge-limit instant → shipped 2026-07-10; V3 PASS Latitude
|
||
5310: Custom charge type + live menu + unplug re-apply.)_
|
||
|
||
_(Portal/Flatpak IR camera → **#71** docs (a); (b)/(c) still need T14s.)_
|
||
|
||
_(Post-install hardware hints residual → **#73**.)_
|
||
|
||
_(Look & Feel submenu → already shipped (Theme / wallpaper / night light);
|
||
2026-07-10: Reset wallpaper (auto) row; root stays six.)_
|
||
|
||
- **NVIDIA first-class options** — **deferred past v1** (Bernardo
|
||
2026-07-10). Keep #59 commented install guidance; no
|
||
`nomarchy.hardware.nvidia.*` until a hybrid maintainer + queue.
|
||
|
||
### Installer / template
|
||
|
||
_(Installer ↔ template SoT CI → **#72**; V2 install → **#75**.)_
|
||
_(Installer chown flake dir → **#65**.)_
|
||
_(MIGRATION.md snapshot layout → **#64**.)_
|
||
_(Unattended-install test matrix → **#74**.)_
|
||
_(Friendlier mkFlake theme-state errors → **#66**.)_
|
||
|
||
### Theme polish
|
||
|
||
_(#52 residual ANSI → **#68** ✓.)_
|
||
_(Fidelity / hierarchy nits → **#67** ✓.)_
|
||
_(Import pipeline hierarchy → **#70** ✓.)_
|
||
_(audit-theme-design identity exemptions → **#69** ✓.)_
|
||
_(summer-day/night pair polish + status CSS + preview recapture →
|
||
shipped 2026-07-10: JSON SoT, status states, theme-shot previews for
|
||
executive-slate + neon-glass.)_
|
||
|
||
_(Identity taste retunes + hand `btop.theme` for white/vantablack/lumon/
|
||
hackerman/matte-black/miasma/neon-glass/boreal/executive-slate →
|
||
shipped 2026-07-10.)_
|
||
|
||
### v1.0 pointer
|
||
|
||
See **VISION**. Open PROPOSED: NVIDIA wrappers deferred past v1; IR
|
||
portal (b)/(c) hardware. Browser default = Chromium; power = PPD.
|
||
|
||
|
||
## Decisions `[human]`
|
||
|
||
Open calls only Bernardo can make; agents add options/evidence but never
|
||
decide. **Resolved** entries stay for history; agents treat them as closed.
|
||
|
||
### Resolved (2026-07-10)
|
||
|
||
- **Docs site vs Markdown-in-repo** — **markdown in-repo for now**
|
||
(`docs/`, README). A rendered docs site is FUTURE if wanted.
|
||
- **Default browser** — **ship Chromium** in
|
||
`templates/downstream/home.nix`; mime → `chromium-browser.desktop`.
|
||
Opt out: delete the line / override mime.
|
||
- **Default power backend** — **keep PPD** (`nomarchy.system.power.backend`
|
||
default). TLP remains the one-line opt-in. Rationale: stability + live
|
||
profile API for menu/Waybar; Omarchy’s TLP experiment reverted.
|
||
|
||
### Resolved (2026-07-10, more)
|
||
|
||
- **Formatter adoption** — **yes, but not now.** Tracked as FUTURE
|
||
(below). Nix-source style only (`nixfmt-rfc-style` or similar); one
|
||
bulk reformat + CI/check when promoted. Until then: hand-aligned
|
||
style per CONVENTIONS.
|
||
|
||
- **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).
|
||
|
||
### Resolved (2026-07-10, #76 design)
|
||
|
||
- **Swap sizing** — **exactly RAM** (installer default, unchanged). Hibernate
|
||
image ≤ RAM; zram takes day-to-day paging. **`swapSize=0`** stays no-swap.
|
||
- **Migration** — **docs runbook** (`docs/MIGRATION.md`), not a tool.
|
||
- **No-swap Hibernate** — keep the menu row; **notify on failure**.
|