Merge remote-tracking branch 'origin/main' into main
All checks were successful
Check / eval (push) Successful in 3m2s
Lock bump / bump (push) Successful in 6m30s

This commit is contained in:
2026-07-12 20:21:23 +01:00
26 changed files with 891 additions and 42 deletions

View File

@@ -26,6 +26,117 @@ Template:
- **Pending:** #89 is fully closed.
- **Next suggestion:** Pick the next item from the BACKLOG.
## 2026-07-12 — CI OOM: memory-bounded eval for check.yml/bump.yml
- **Task:** Bernardo: check.yml always red since he capped the runner
container at 2 GB (uncapped it OOM'd the whole 4 GB VPS); bump.yml
status unknown.
- **Did:** Measured (GNU time, eval-cache off): one-process `nix flake
check --no-build` peaks **6.0 GB** RSS — that's the whole story. New
`tools/ci-eval.sh`: same coverage, ONE output per nix process (heap
freed between outputs); both workflows now call it. bump.yml also got
max-jobs=1/cores=2. Facts: bump.yml WORKS — landed 8fded63 on
2026-07-06, on schedule; ROADMAP's "no CI today" was stale → fixed.
- **Verified:** V1+ — ci-eval.sh ran green locally end-to-end (3:22);
per-output cold peaks measured: worst check 0.99 GB
(hardware-toggles), nomarchy toplevel 0.78 GB, HM 0.60 GB, **except
nomarchy-live 2.69 GB** (live ISO eval) — fits only with the
container's swap allowance (docker default --memory-swap = 2×memory);
if Bernardo set swap off, that one output still OOMs → server-side
one-liner (--memory=2g --memory-swap=6g) or a skip-hatch decision.
- **Pending:** real proof is the next push's Actions run on the VPS —
watch nomarchy-live's step; can't be verified from this machine.
- **Next suggestion:** confirm green run on the remote, then hardware
V3 batch.
## 2026-07-12 — parallel fingerprint-or-password (interactive, promoted)
- **Task:** Bernardo promoted the PROPOSED "fingerprint or password in
parallel" item live; wants it default-on for fingerprint-PAM users.
- **Did:** Packaged pam-fprint-grosshack v0.3.0 (pkgs/, source-reviewed
first: all failure paths → PAM_AUTHINFO_UNAVAIL, typed password only
ferried via AUTHTOK to pam_unix try_first_pass — can't lock out
password login). New `nomarchy.hardware.fingerprint.parallel`
(default true; false = stock sequential). Wiring swaps stock fprintd's
rule modulePath (mkForce) so ordering is inherited. README/template
rows; BACKLOG PROPOSED entry closed into ROADMAP ✓.
- **Verified:** V2 — checks.hardware-toggles extended to three nodes and
green: parallel node asserts grosshack line before pam_unix in
/etc/pam.d/sudo AND `sudo -S` with the right password succeeds /
wrong password fails with NO reader present (the lockout invariant);
seqpam node = stock pam_fprintd, no grosshack; nopam = neither.
Package builds (meson needed libpam-wrapper + python3). flake check
green.
- **Pending:** V3 on the AMD dev box (HARDWARE-QUEUE): the actual
type-or-touch race, fprintd-stopped fallback, hyprlock/greeter
behavior after a fingerprint win (pthread_cancel'd prompt quirk).
- **Next suggestion:** dock + fingerprint V3 batch on hardware, then
#89 slice 3.
## 2026-07-12 — undock blackout rescue (interactive follow-up)
- **Task:** Bernardo: "if I turn the laptop screen off and undock, does
the panel come back?" Answer had to be tested, not recalled.
- **Did:** Built tools/monitor-fallback.nix (softGL desktop VM, crib of
theme-shot): headless "external" + menu's exact disable + output
remove. Verdict: Hyprland 0.55.4 does NOT re-enable → shipped
`rescue_blackout` in the display hotplug watcher (immediate + retried
keyword re-enable of disabled outputs on zero-active, toast).
- **Verified:** V2 for the hazard (VM reproduced the dead state);
rescue itself is V1+components — the VM crashes before rescue can act
in 4/5 runs (aquamarine ABRT in dispatchIdle on the zero-output
state; control with panel active survives 5/5 — discriminator run).
Crash predates rescue (run with rescue provably inert also crashed).
Also fixed: `grep -c .` exit-1-at-zero disabling the rescue's own
trigger. flake check green.
- **Pending:** real-dock V3 (HARDWARE-QUEUE, "nothing important open"
warning); if real DRM crashes too → rework row (mirror) or wait for
Hyprland bump; consider reporting upstream with the coredump.
- **Next suggestion:** dock V3 results, then #89 slice 3.
## 2026-07-12 — dock audio auto-follow + docked menu rows (interactive)
- **Task:** Bernardo's dock test (= #87's V3): audio stayed on speakers,
had to hand-tweak EasyEffects; wants docked Display/Audio menu options.
- **Did:** Root-caused live on Newton: WirePlumber's stored default
(default-nodes) outranks the #87 priority rules (control test: new
sink, no watcher → default pinned), and the running gen lacked the
rules anyway; EE 8 follows the default fine (kcfg default true +
observed links move). Shipped `modules/home/dock-audio.nix`
(`nomarchy.dockAudio.enable`, on): pactl-subscribe watcher
set-default-sinks new dock-class sinks (regexes imported from
dock-audio-rules.nix) + toast + startup sweep. Menu: Display gains
laptop-off/screen-on/move-workspace/swap rows (live-only keywords);
Audio gains self-gated "Send output → <dock sink>" row.
- **Verified:** V2-equivalent live on Newton — watcher: fake dock-named
null sink → default followed, unplug → fell back, EE links moved
mid-playback (pw-link); menu: generated script bash -n, dock-row jq
exercised against real pactl JSON, dispatchers probed on live
Hyprland. flake check green; option-docs green. Beware: kill the
subscribe pipe by PID — pkill -f self-matches the test shell.
- **Pending:** real-dock V3 ×2 in HARDWARE-QUEUE (watcher may miss
sinks that pre-exist and only flip route availability — capture pactl
subscribe + sink JSON if it fails again).
- **Next suggestion:** #89 slice 3 (Signal pixmap) or dock V3 feedback.
## 2026-07-12 — auto-commit sweep before pull/rebuild/home (interactive)
- **Task:** Bernardo's request (no BACKLOG item): with autoCommit on,
hand edits to `~/.nomarchy` (his had 4) stayed forever-dirty —
theme-sync's commit is pathspec-limited to theme-state.json by design.
- **Did:** New internal `nomarchy-autocommit` in nomarchy-lifecycle:
live-reads `settings.autoCommit`, commits *everything* dirty with
message `nomarchy: auto-commit before <label>` + file list in the
body; called (`|| true`, never blocks) at the top of nomarchy-pull /
-rebuild / -home. Exposed as `passthru.autocommit`; package exported.
Docs/comments swept: README, RECOVERY, ROADMAP ✓ entry, rofi toggle
text, control-center prompt, theme-sync docstring.
- **Verified:** V1+ — `nix flake check --no-build` green; new permanent
`checks.lifecycle-autocommit` builds (real binary, sandbox repos:
sweep/clean/off/non-repo); end-to-end on a *copy* of the real
~/.nomarchy via built nomarchy-rebuild with stubbed sudo/rebuild —
the 4 real dirty files landed in one commit, tree clean. No VM boot:
no session-visible surface. Real-machine confirmation lands after the
next nomarchy-pull picks up this rev.
- **Pending:** nothing queued; Bernardo's actual ~/.nomarchy still has
its 4 uncommitted files until his next pull/rebuild with the new rev.
- **Next suggestion:** back to BACKLOG (#89 slice 3, Signal pixmap).
## 2026-07-12 — #89 slice 2: EasyEffects tray icon themed monochrome (b98248f)
- **Task:** BACKLOG #89 slice 2 — EasyEffects SNI shows Papirus' full-
colour blue equaliser, clashing with the monochrome tray.