From 9550d2be5e8c2c3d532e70c5e47b4b26e0ce2c33 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Mon, 13 Jul 2026 20:14:04 +0100 Subject: [PATCH] fix(live): git-init the seeded flake so doctor stops false-warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BACKLOG #99: the live-session seed (nomarchy-seed-flake) did a bare `cp -r` with no `git init`, so `~/.nomarchy` was not a repo in the live session and nomarchy-doctor's `git ls-files --error-unmatch theme-state.json` false-alarmed "theme-state.json is NOT git-tracked" (installed systems commit at nomarchy-install.sh:654 and were always fine). The seed now init+add+commits, exactly like the installer. Verified: V2 — focused serial-log VM run (/tmp/nomarchy-v2-theme-99/): doctor prints "theme-state.json is git-tracked" and "flake checkout is clean"; GIT_REPO_OK / TRACKED_OK markers. A drv-equivalence test proves the seed change is build-neutral: homeConfigurations..activationPackage is byte-identical path-seeded vs git-seeded (bvl30ggn...-home-manager-generation.drv). nix flake check green. The same run exposed a separate, pre-existing failure — offline theme switching in the live session rebuilds from source and dies offline — filed as BACKLOG #113 (NOT caused by this change: same drv either way). Co-Authored-By: Claude Fable 5 --- agent/BACKLOG.md | 47 ++++++++++++++++++++++++----------------------- agent/JOURNAL.md | 31 ++++++++++++++++++------------- flake.nix | 7 +++++++ hosts/live.nix | 10 ++++++++++ 4 files changed, 59 insertions(+), 36 deletions(-) diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index 5221359..76fe3d8 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -37,10 +37,10 @@ generation the ISO pins for offline installs contains the chromium binary, `chromium-browser.desktop`, and all three HTTP/HTML handlers (mime.nix sets them; template ships the package). The Acer sighting is the LIVE session, which ships NO browser by design (mime defaults name chromium, -GIO skips it while absent) — #103 adds live baseline apps. Remains: a -test-install VM run proving chromium launches post-install (chain #97's -Bluetooth-click V2 into the same run), + make the live posture explicit in -the flake comment (edit drafted, uncommitted). +GIO skips it while absent) — #103 adds live baseline apps. Live posture is +now explicit in the flake comment. Remains: a test-install VM run proving +chromium launches post-install (chain #97's Bluetooth-click V2 into the +same run). Chromium is the resolved default-browser decision and is present in the downstream template, but this hardware pass found no usable default browser. @@ -71,26 +71,27 @@ buttons in the installer (VM gum screens under Boreal look legible — artifacts in `/tmp/nomarchy-v2-swap-93/`). Needs Bernardo's screenshot or an Acer repro to pin the actual widget before fixing. -### 99. Doctor/Waybar reports `theme.json` is not git-tracked +### 113. Live session: offline theme switch rebuilds the world from source -**Progress 2026-07-13:** root-caused — the message is doctor's -"`theme-state.json` is NOT git-tracked": the live seed (hosts/live.nix -`nomarchy-seed-flake`) does `cp -r` with no `git init`, so `~/.nomarchy` -isn't a repo in the LIVE session (installed systems commit at -nomarchy-install.sh:654 and are fine). Fix drafted in the working tree -(seed does init+add+commit like the installer). Held for one open -question: the same evidence run saw the live offline -`nomarchy-theme-sync apply gruvbox` rebuild fail ("Build failed due to -failed dependency") — determine whether that predates the git-seed (the -git+file eval flips untracked-file visibility) before committing; a -focused VM run capturing the full rebuild log over serial is in flight -(`/tmp/nomarchy-v2-theme-99/`). - -The live-installed checkout shows a doctor/Waybar warning that `theme.json` -is not tracked. Determine whether the warning targets the generated alias or -the canonical `theme-state.json`, then align the check with the in-flake state -contract. Pass = a fresh install has no false warning while a genuinely -untracked canonical state file is still detected. +Surfaced by #99's evidence run (2026-07-13, `/tmp/nomarchy-v2-theme-99/`): +in the **live ISO** session, offline `nomarchy-theme-sync apply gruvbox` +fails — its `home-manager switch` tries to build **1176 derivations** from +the `stage0`/`hex0` bootstrap up, then dies on offline source fetches +(`vala`, `yasm`, `config.jsonc`, `ghostty-config`, `easyeffects.svg`, +`typogrify`…), ending `error: Build failed due to failed dependency`. This +contradicts docs/TESTING.md item 6 ("apply gruvbox → switch runs offline"). +The failing generation is `bvl30ggn…-home-manager-generation.drv`; it is +**not** the drv the ISO pins (the pin is the *default*-theme +`homeConfigurations.${username}.activationPackage`, i.e. Boreal — confirmed +drv-identical to the failing one only for gruvbox state, so a non-default +theme's generation is unpinned). NOT caused by #99's git-seed: the drv is +byte-identical path-seeded vs git-seeded. **Decide the contract:** either +pin every baked theme's live activationPackage into the ISO (size cost) or +scope the offline-switch promise to the shipped theme + correct +TESTING.md/MEMORY. Pass = a fresh live ISO either switches to any baked +theme offline, or fails with a clear "needs network for this theme" message +and accurate docs. **Not caused by anything in today's batch** — separate +pre-existing ISO-pinning gap. ## NEXT diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index b780955..733bcb2 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -19,19 +19,24 @@ Template: --- -## 2026-07-13 — session wrap: #94/#98/#99 parked with findings (this commit) -- **Task:** Record in-progress state (token budget wrap-up). -- **Did:** BACKLOG progress notes on #94 (installed chromium path V1-proven; - live posture is the real gap), #98 (not palette-level; needs the actual - widget identified), #99 (root cause + fix drafted; held on the open live - offline theme-switch failure — focused serial-log VM run in flight to - `/tmp/nomarchy-v2-theme-99/`). -- **Verified:** V0 — notes only. Working tree deliberately carries two - uncommitted drafts: hosts/live.nix git-seed (#99) and the flake.nix live - posture comment (#94); next session verifies then commits or reverts. -- **Pending:** #99 decision from the in-flight run; #94 test-install run - (+ #97 V2 click); #96 V3 + #101 round 2 in HARDWARE-QUEUE. -- **Next suggestion:** read the #99 run's serial.log first. +## 2026-07-13 — #99 live-seed git-init; theme-switch failure filed as #113 (this commit) +- **Task:** BACKLOG #99 — false "theme-state.json NOT git-tracked" doctor/ + Waybar warning in the live session; resolve the held question from Fable. +- **Did:** hosts/live.nix `nomarchy-seed-flake` now `git init`+`add`+`commit`s + the seeded `~/.nomarchy` (like nomarchy-install.sh:654), so the live + checkout is a committed repo. Also committed #94's live-posture comment in + flake.nix (separate commit). +- **Verified:** V2 — focused serial-log VM run (`/tmp/nomarchy-v2-theme-99/`): + doctor prints `✔ theme-state.json is git-tracked` + `✔ flake checkout is + clean`, `GIT_REPO_OK`/`TRACKED_OK` markers. Held question RESOLVED: the + same run's offline gruvbox switch failed with a 1176-drv source rebuild, + but a local drv-equivalence test proved the failing + `bvl30ggn…home-manager-generation.drv` is BYTE-IDENTICAL path-seeded vs + git-seeded → the git-seed is exonerated; the failure is a pre-existing + ISO-pinning gap (unpinned non-default-theme generation), now filed as #113. +- **Pending:** #113 (offline theme-switch contract); #94 launch check; #97 + V2 click; #96 V3 + #101 round 2 (HARDWARE-QUEUE). +- **Next suggestion:** #113 — decide pin-all-themes vs scope the offline promise. ## 2026-07-13 — #96+#97 menu gates explain instead of vanish/raw-fail (this commit) - **Task:** BACKLOG #96 (battery-limit row silently absent on threshold-less diff --git a/flake.nix b/flake.nix index 086d6b6..d34eebb 100644 --- a/flake.nix +++ b/flake.nix @@ -1572,6 +1572,13 @@ users.${username} = { imports = [ self.homeModules.nomarchy ]; nomarchy.stateFile = ./theme-state.json; + # Deliberate live-session posture (BACKLOG #94): the live + # desktop ships the distro modules only — NO browser or + # template app suite (mime defaults still name chromium, + # which GIO skips while absent). The template's Chromium + + # apps arrive with installation (the ISO pins that HM + # closure for offline installs); #103 adds a baseline app + # set to the live session itself. }; }; diff --git a/hosts/live.nix b/hosts/live.nix index 2bd7a6b..cfa8576 100644 --- a/hosts/live.nix +++ b/hosts/live.nix @@ -148,6 +148,16 @@ in if [ ! -e "$home/.nomarchy" ]; then cp -r ${nomarchySrc} "$home/.nomarchy" chmod -R u+w "$home/.nomarchy" + # Committed git repo, exactly like nomarchy-install produces — + # otherwise nomarchy-doctor (and its Waybar badge) false-alarms + # "theme-state.json is NOT git-tracked" in the live session. + ( + cd "$home/.nomarchy" + ${pkgs.git}/bin/git init -q + ${pkgs.git}/bin/git add -A + ${pkgs.git}/bin/git -c user.name="Nomarchy Live" -c user.email="live@nomarchy" \ + commit -qm "Nomarchy live session" + ) chown -R ${username}:users "$home/.nomarchy" fi '';