Some checks failed
Check / eval (push) Failing after 1m22s
BACKLOG #90 root-caused: the arrows were never missing from the icon theme — Papirus-Dark resolves pan-end-symbolic through its breeze-dark inheritance (breeze ships inside the nixpkgs papirus output). The real culprit: Waybar loads its stylesheet screen-wide at application priority, so the tray menus it hosts for SNI apps (nm-applet & co) inherit the bar's '* { min-height: 0; }', which out-prioritizes adw-gtk3's 16px min-height on the menuitem arrow node and collapses the submenu arrow to zero height. Property bisect confirmed min-height:0 alone reproduces; the font/border resets don't. - boreal + executive-slate waybar.css, waybar.nix generatedStyle: '*' block scoped to 'window#waybar, window#waybar *'; tooltip rules restate the font (tooltips are separate toplevels outside the scope). - stylix.nix: drop the go-next-symbolic remap — a workaround for the misdiagnosis; native pan-end-symbolic resolves fine. - BACKLOG #90 deleted; JOURNAL entry records the method (live GTK3 repro + grim screenshots + CSS property bisect, V3 on TuringMachine). V3 pending: human click on the real nm-applet tray icon post-switch. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
218 lines
11 KiB
Markdown
218 lines
11 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 `[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
|
||
blue (T14s V3, 2026-07-11); Signal / Telegram / ZapZap (all flatpaks on
|
||
the T14s) likely worse. Goal: every tray icon reads like part of the bar.
|
||
|
||
Slices:
|
||
1. **Inventory — DONE (T14s live session, 2026-07-11):**
|
||
| app | IconName | pixmap? | verdict |
|
||
|---|---|---|---|
|
||
| nm-applet | `nm-signal-*` (state-varying) | no | **name-based** — override the `nm-*` family |
|
||
| udiskie | `drive-removable-media-usb-panel` | no | **name-based** |
|
||
| Telegram | `org.telegram.desktop[-mute/-attention]-symbolic` | yes (fallback) | **name-based** — ship all state names |
|
||
| Signal | `Signal_status_icon_1` (generated, not a real theme name) | yes | **pixmap** — slice 3 |
|
||
| ZapZap | *(empty)* | yes | **pixmap** — slice 3; check its own tray-style setting first |
|
||
| EasyEffects 8 | `com.github.wwmm.easyeffects` (prior T14s finding) | — | **name-based**; NB `--gapplication-service` alone registers no SNI |
|
||
|
||
**Bernardo's visual verdict (T14s, 2026-07-11):** Telegram and ZapZap
|
||
already read fine on the bar — out of scope. The offenders are
|
||
**EasyEffects** (slice 2: name-based override) and **Signal**
|
||
(slice 3: pixmap; check for an app-side tray option, else document).
|
||
Related fix shipped same day: easyeffects.service now *waits for a
|
||
registered tray host* before starting (the old After=waybar.service
|
||
ordering was inert — waybar is supervisor-run, not a unit), so the
|
||
icon no longer vanishes on unlucky boot order.
|
||
2. **Override layer:** an HM-managed shadow icon dir that wins the XDG
|
||
lookup for the session icon theme (e.g. `xdg.dataFile
|
||
"icons/<theme-iconset>/…"` shadowing the store copy, or a
|
||
`Nomarchy-tray` theme inheriting the active set — pick whichever
|
||
survives theme whole-swaps; icons must follow the active theme per
|
||
THEME-DESIGN, not hardcode one palette). Ship monochrome SVGs for the
|
||
name-based offenders found in slice 1. Waybar restart re-resolves.
|
||
3. **Pixmap apps:** document (or wire, where a setting exists) per-app
|
||
monochrome/tray options; what can't be fixed goes in the item's
|
||
record, not silent scope creep.
|
||
|
||
V-path: V1 eval + icon file lands in the right lookup dir; V3 screenshot
|
||
of the tray on a real session (headless VM has no flatpak chat apps).
|
||
|
||
## 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.
|
||
- **MIPI/IPU software-ISP camera** support (no-UVC machines).
|
||
- **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.
|
||
|
||
## 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
|
||
|
||
- **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.
|
||
|
||
- **Post-install hardware hints** (`VISION § B`) — After the general
|
||
“you're set” card (#81), optionally fire **one** additional
|
||
self-gated notify when the machine actually has the hardware:
|
||
(a) `fwupdmgr` on PATH → “System › Firmware to check LVFS updates”;
|
||
(b) `fprintd-list` on PATH → “System › Fingerprint to enroll”.
|
||
One-shot markers in `settings.*` (same in-checkout discipline as
|
||
`firstBootShown`); never a permanent MOTD nag. Cost: small — extend
|
||
`nomarchy-first-boot` or a sibling oneshot + `checks.first-boot`
|
||
fixture. Control-center / MOTD already mention these; the gap is the
|
||
silent first *graphical* session for people who never open those.
|
||
|
||
- **Fingerprint *or* password, in parallel** (2026-07-11, Bernardo) —
|
||
`fingerprint.pam` gives pam_fprintd's sequential UX: sudo waits on
|
||
the reader, password only after failure/timeout. Bernardo wants
|
||
either factor accepted at the same prompt (type the password *or*
|
||
touch the sensor, whichever comes first). Stock PAM can't express
|
||
this; needs a parallel-conversation module (e.g. `pam-any`, not in
|
||
nixpkgs — would be a new package + `fingerprint.pam = "any"` mode).
|
||
Cost: medium (package + PAM wiring + careful lockout testing on real
|
||
hardware). Security note: keep sudo fallback sane if fprintd hangs.
|
||
|
||
_(#80–#83 + #85–#88 shipped 2026-07-11. Theme A day-2 + neon-glass finish
|
||
shipped — VISION ✓. Dock/hibernate V3 → HARDWARE-QUEUE.)_
|
||
|
||
### v1.0 pointer
|
||
|
||
See **VISION**. Open PROPOSED: post-install hardware hints; NVIDIA
|
||
deferred past v1; IR portal (b)/(c) need T14s (HARDWARE-QUEUE § T14s).
|
||
Standing calls: browser = 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**.
|