# Journal — append-only iteration log One entry per iteration, **newest first**. This is the loop's short-term memory: the next session reads the last 3–5 entries to orient. Keep an entry under ~15 lines; durable lessons go to MEMORY.md, not here. When this file grows past ~25 entries, rotate the tail to [JOURNAL-ARCHIVE.md](JOURNAL-ARCHIVE.md) (history, never edited). Template: ```markdown ## YYYY-MM-DD — () - **Task:** which BACKLOG item (or QA sweep / bootstrap / escalation) - **Did:** what changed, in 2–4 lines - **Verified:** tier reached (V0/V1/V2) + the actual commands/checks run - **Pending:** V3 queued? follow-ups filed? anything [stuck]? - **Next suggestion:** what the following iteration should probably take ``` --- ## 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 → " 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