From c97ecade63ed6fd5284f239e125e52202efcf0e6 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Mon, 13 Jul 2026 18:33:01 +0100 Subject: [PATCH] fix(install): label and explain the swap-size prompt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BACKLOG #93 (Acer live pass): the swap field appeared as a bare prefilled number — gum never renders the placeholder once --value is set, and the block had no section header, so nothing said what the value meant. Add a visible "Swap & hibernation" section, two info lines (default = RAM keeps hibernation possible; 0 = no swap), a labeled --header on the input, and make the info + Review lines state the outcome in full ("N GiB swapfile (enables hibernation)" / "none (hibernation disabled)"). Default behavior unchanged (swap = RAM). Verified: V2 — interactive KVM UI drive of the built ISO; viewed 10-swap-prompt.png (section + explanations + labeled input) and the Review box ("Swap: 6 GiB swapfile (enables hibernation)") in /tmp/nomarchy-v2-swap-93/; the wipe confirmation was aborted, nothing touched. bash -n + nix flake check --no-build green. Side-finding recorded on #112: QEMU's /dev/fd0 was listed first by the disk picker (live repro evidence in the same artifacts). Co-Authored-By: Claude Fable 5 --- agent/BACKLOG.md | 13 ++++--------- agent/JOURNAL.md | 17 +++++++++++++++++ pkgs/nomarchy-install/nomarchy-install.sh | 9 +++++++-- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index 3855cef..7d184a4 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -30,14 +30,6 @@ These are separate queue items from one real install/session pass. Preserve that separation when fixing them: the installer blocker, unclear installer copy, and post-install desktop failures have different verification paths. -### 93. Installer: swap-size field lacks a clear prompt/explanation - -The partition value appears prefilled without a caption explaining that it is -swap size. Keep the resolved product default (swap exactly equal to RAM), but -label the field, state its unit/default, and explain the no-swap value. Pass = -the summary makes the resulting swap allocation unambiguous before disk -changes begin. - ### 94. Live ISO/install: no default browser observed Chromium is the resolved default-browser decision and is present in the @@ -155,7 +147,10 @@ effects made clear and each existing recovery path represented once. ### 112. Installer disk-picker safety Exclude floppy, pseudo, tiny, and otherwise non-installable devices such as -`/dev/fd0`; never select them by default. Pass = the real install disk is clear, +`/dev/fd0`; never select them by default. **Reproduced in QEMU 2026-07-13** +(#93's V2 run): with OVMF the guest exposes `/dev/fd0` and the picker listed +it FIRST — a blind Enter selected it (artifacts: +`/tmp/nomarchy-v2-swap-93/20-review.png`, `Disk: /dev/fd0 (WILL BE ERASED)`). Pass = the real install disk is clear, invalid devices cannot reach destructive setup, a permanent guard covers the filter/default logic, and a pre-destructive KVM run proves the picker behavior. diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 20bb88e..8c9838b 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -19,6 +19,23 @@ Template: --- +## 2026-07-13 — #93 installer swap prompt labeled + explained (this commit) +- **Task:** BACKLOG #93 — the swap field was a bare prefilled gum input (no + visible section, label, or unit; the placeholder never shows once a value + is prefilled). +- **Did:** `nomarchy-install.sh`: visible "Swap & hibernation" section, two + info lines (default = RAM ⇒ hibernation-ready; 0 = no swap), a labeled + `--header` on the input, and unambiguous info + Review lines + ("N GiB swapfile (enables hibernation)" / "none (hibernation disabled)"). +- **Verified:** V2 — full interactive KVM UI drive on the built ISO; VIEWED + `/tmp/nomarchy-v2-swap-93/10-swap-prompt.png` (section, both info lines, + labeled prefilled input) and `…/30-doctor.png` (Review box: + "Swap: 6 GiB swapfile (enables hibernation)"); wipe confirm aborted by + mismatch, nothing touched. bash -n + V0 flake check green. +- **Pending:** side-finding: QEMU exposed `/dev/fd0` as the FIRST picker row + — recorded as live repro evidence on #112. +- **Next suggestion:** #99/#107 commits from the same evidence run. + ## 2026-07-13 — charge-limit start-limit-hit on spaced AC storms (this commit) - **Task:** Live V3 failure of #101 (TuringMachine doctor badge, 18:16): a spaced dock/AC event storm → 5 successful starts in 10s → diff --git a/pkgs/nomarchy-install/nomarchy-install.sh b/pkgs/nomarchy-install/nomarchy-install.sh index 8de2697..d10467f 100644 --- a/pkgs/nomarchy-install/nomarchy-install.sh +++ b/pkgs/nomarchy-install/nomarchy-install.sh @@ -279,15 +279,20 @@ info "Encryption: $([[ $WITH_LUKS == true ]] && echo "LUKS2 (desktop auto-login) # ─── Swap / hibernation ───────────────────────────────────────────────── # A swapfile ≥ RAM on its own BTRFS subvolume makes hibernation possible; # the resume offset is wired into the config below. +section "Swap & hibernation" + ram_gb=$(awk '/MemTotal/ {print int(($2 + 1048575) / 1048576)}' /proc/meminfo) if [[ "$UNATTENDED" == "1" ]]; then SWAP_GB="${NOMARCHY_SWAP_GB:-$ram_gb}" else + info "A swapfile sized ≥ RAM lets this machine hibernate (suspend to disk)." + info "Default = ${ram_gb} GiB (this machine's RAM). Enter 0 for no swap (disables hibernation)." SWAP_GB=$(gum input --value "$ram_gb" \ + --header "Swap size in GiB (default ${ram_gb} = RAM, 0 = no swap)" \ --placeholder "swap size in GiB (≥ RAM enables hibernation, 0 = none)") fi [[ "$SWAP_GB" =~ ^[0-9]+$ ]] || fail "Swap size must be a whole number of GiB." -info "Swap: $([[ "$SWAP_GB" == "0" ]] && echo none || echo "${SWAP_GB}G swapfile (hibernation-ready)")" +info "Swap: $([[ "$SWAP_GB" == "0" ]] && echo "none (hibernation disabled)" || echo "${SWAP_GB} GiB swapfile (hibernation-ready)")" # ─── User account ─────────────────────────────────────────────────────── section "Your account" @@ -442,7 +447,7 @@ fi gum style --border normal --padding "0 2" \ "Disk: $TARGET_DISK (WILL BE ERASED)" \ "Encryption: $([[ $WITH_LUKS == true ]] && echo "LUKS2 + desktop auto-login" || echo none)" \ - "Swap: $([[ "$SWAP_GB" == "0" ]] && echo none || echo "${SWAP_GB}G (hibernation)")" \ + "Swap: $([[ "$SWAP_GB" == "0" ]] && echo "none (hibernation disabled)" || echo "${SWAP_GB} GiB swapfile (enables hibernation)")" \ "User: $USERNAME" \ "Hostname: $HOSTNAME_" \ "Timezone: $TIMEZONE" \