Files
Nomarchy/agent/BACKLOG.md
Bernardo Magri 1d6b25b96a
All checks were successful
Check / eval (push) Successful in 2m59s
docs(agent): clean stale PROPOSED backlog residue
Drop shipped #52 high-ROI theme bullets, neon-glass quarantine, empty
installer audit sections, resolved template seed drift, and #50 soft
gaps. PROPOSED is open work only (day-2, installer follow-ups, theme
polish residuals, tooling).
2026-07-10 09:25:15 +01:00

10 KiB
Raw Blame History

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; design history in docs/ROADMAP.md; map in docs/README.md and agent/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

20. KVM runner → VM suite in CI [human]

The remaining stretch of the CI item — checks-on-push is live and green (run #58; runner = gitea/act_runner docker, eval tier). Register a second runner on a host with /dev/kvm + nix (host-mode label nix-kvm), then an agent uncomments the workflow's vm-checks job: the checks.* VM suite + real toplevel/HM builds on every push that later upgrades the bump gate from eval-only to the full suite.

41. Floating-window audit — residual GTK portal class [blocked:hw]

(Raised by Bernardo, 2026-07-07 — item 11.) Conservative cut + 2026-07-10 slice shipped: mixer, blueman, system-config-printer, calendar, hyprpolkitagent + pinentry-qt (classes from package app-id strings; softGL capture harness could not materialize dialogs). Still open: GTK file-chooser portal (xdg-desktop-portal-gtk) — class not discoverable headlessly. On hardware: open a portal file picker, hyprctl clients, append float/center rules if needed; confirm polkit/pinentry/blueman actually float.

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).

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/AC items (#47#63, #14, #52 theme high-ROI, etc.) live in the journal + ROADMAP — not here.

Product / day-2

  • Battery charge-limit — make the toggle instant [blocked:hw] Menu/CC write settings.power.batteryChargeLimit but need a rebuild. Instant path: udev group-writable charge_control_end_threshold on system batteries + live echo alongside state persist. Decide first whether a local user may set the charge cap. Cost: medium; hw confirm.

  • Portal/Flatpak IR camera still listed (libcamera path). WirePlumber v4l2 hide is shipped; Flatpak Zoom can still pick the IR node. Options: (a) document; (b) libcamera monitor rule; (c) udev/libcamera quirk. Rec: (a) until T14s session. Cost: (b)/(c) [blocked:hw].

  • Post-install hardware hints residual — #43 shipped Firmware MOTD; still open: fingerprint + doctor one-liners (once/dismissible). Cost: small; V2/V3.

  • Look & Feel submenu (ROADMAP optional) — night-light, wallpaper cycle, blur/gaps with Theme; root stays six entries. Product call.

  • NVIDIA first-class options [big] [blocked:hw] — thin nomarchy.hardware.nvidia.* only with hybrid maintainer + queue. Prefer shipped #59 commented guidance until then.

Installer / template

  • Installer ↔ template SoT follow-ups — core copy+patch shipped. Remaining: (1) optional CI that install share matches template; (2) V2 test-install.sh after ISO rebuild (larger HM pre-activate closure). Cost: CI + KVM time.

  • Installer soft gap: chown flake dirchown -R 1000:100 assumes first-user UID/GID. Cost: small. (usbutils PATH + flake package exports → #50 ✓.)

  • MIGRATION.md snapshot layout — still says top-level @home-snapshots; installer uses @snapshots + nested /home/.snapshots. One clarifying paragraph. Cost: docs only.

  • Unattended-install test matrix — document/script no-swap and no-LUKS paths in test-install.sh (env flags only). Cost: script + KVM. Do not grow the interactive installer.

  • Fail-closed / friendlier theme-state errors in mkFlake — missing or invalid theme-state.json should point at schema/docs early. Related: settings.displayProfile* defaults, unknown border role. Cost: medium lib UX.

Theme polish

  • #52 residual ANSI — after high-ROI fixes: vantablack ansi[8] still #fdfdfd (diverges from muted #666666); osaka-jade ansi[3] still warn-green #459451 while warn is #E5C736. Decide identity vs bug per theme. Cost: tiny JSON; V0 contrast.

  • summer-day / summer-night pair polish — waybar CSS vs JSON dual SoT; night subtext=muted=overlay; day/night font + battery threshold + VPN pill drift. Pick JSON as SoT (or document EF split). Cost: CSS/JSON; V3.

  • summer-* CSS status module states — missing .on / .available / .recording polish vs boreal/generated. Cost: CSS; V3.

  • theme preview recapture nicety — executive-slate + neon-glass previews are bare desktop+bar, not the floating-terminal composition of the other 21; optional identity btop.themes. Cost: asset/V3.

  • Fidelity / hierarchy nits (popular ports) — gruvbox Material vs classic name+btop split; nord inverted subtext/text; tokyo-night btop warm fg; ethereal surface=base; retro-82 surface darker than base; ristretto subtext=text + btop bg drift; flexoki-light bright-black. Cost: small JSON/btop each; V0V1.

  • Identity optional taste retunes — white / lumon / hackerman / matte-black / miasma hierarchy or status L-steps only (no traffic-light forced on identity themes). Product call per theme.

  • Import pipeline hierarchy when ANSI 0==8import-palettes.py collapses surface/overlay; light themes get sludge mantle. Allow role overrides independent of ANSI. Cost: tool + convention.

  • audit-theme-design identity exemptions — document expected CVD/ hue noise for white/vantablack/lumon/hackerman/matte-black/miasma. Cost: docs or small script.

v1.0 pointer

See VISION for release bar. Day-2 surfaces largely shipped (#43#45, #55#58). Remaining product-ish PROPOSED: charge-limit instant, IR portal doc, first-boot hint residual, theme polish above.

Decisions [human]

Open calls only Bernardo can make; agents add options/evidence but never decide.

  • Formatter adoption: repo deliberately has none; nixfmt-rfc-style would flatten the aligned hand-formatting of ~33 files. Adopt or declare never?

  • Docs site vs Markdown-in-repo (from the docs-review item).

  • zram swap: faster under pressure and pairs with NOW#3, but it interacts with the hibernation-swapfile story (resume device/priority ordering) — adopt, adopt-with-hibernation-guard, or skip?

  • Default browser: the template comments Firefox out. The shipped mime defaults (item 8, done) point text/html/http(s) at firefox.desktop as inert entries — they activate the moment Firefox is installed and are skipped otherwise, so the remaining call is only: ship a browser active in the suite, or stay browserless-by-default?

  • Default power backend — PPD vs TLP: (raised by Bernardo 2026-07-08: would TLP be more power-efficient, and should it be the default?) TLP does get more idle battery life, but only from device-level knobs PPD deliberately omits — PCIe ASPM, disk/NVMe link PM, USB autosuspend, runtime PM — which are the same knobs behind NVMe/USB flakiness that pillar 1 (rock-stable, never fight your machine) guards against. Evidence (2026-07-08): no credible hard-watt benchmarks exist — TLP's own maintainer declines to quote any ("measure on your hardware") and says PPD's power-saver gives similar savings under load; TLP's edge is idle-only (linrunner.de/tlp/faq/ppd.html — PPD covers a subset of TLP, "no settings to reduce consumption when the CPU is idle"). Our sibling distro Omarchy ran this exact experiment — a "replace Power Profiles with TLP for battery" guide — and the author reverted to PPD ("more headaches and weird issues"); Omarchy shipped PPD auto-switching instead (basecamp/omarchy#3907). PPD 3.4.0 now does AC/battery auto-switching, closing part of TLP's UX gap. Cost of TLP-default: TLP has no live D-Bus profile API, so the powermgmt menu + Waybar profile indicator + low-battery auto power-saver (all powerprofilesctl) would need a rework — it's not a one-line backend swap. Agent rec (evidence, not a decision): keep PPD default; chase battery via targeted low-risk tweaks (PCIe ASPM policy, battery-side EPP, the charge start threshold, PPD auto-switching) and keep TLP the documented one-line opt-in it already is (nomarchy.system.power.backend = "tlp"). Options: (i) status quo + targeted tweaks [rec]; (ii) TLP default (reworks the profile UX); (iii) nothing.