[{"id":"3c9ac84ad6d7","message":"fix: Resolve fable audit pin and option leftovers (v3.4.14)\n\n- Implement nina pin via flake.lock source parsing plus nix flake lock --override-input\n- Filter NixOS option docs inside nix eval and live-verify option search on golden\n- Document NINA-008\/NINA-009 closeout evidence and bump version","timestamp":"2026-07-02T15:37:10Z"},{"id":"bcb25ca4b195","message":"flake check: propagate nix flake check failure as a non-zero nina exit code instead of always returning 0; bump v3.4.13","timestamp":"2026-07-02T01:27:08Z"},{"id":"762b7aa461df","message":"size the man pager to the real terminal height via TIOCGWINSZ instead of a fixed 22-row guess; bump v3.4.10","timestamp":"2026-07-02T00:01:28Z"},{"id":"0feb174dd569","message":"bump VERSION to 3.4.9","timestamp":"2026-07-01T23:29:42Z"},{"id":"3d1160fd9b1e","message":"fix nina update reporting false success on nix profile installs: nix profile upgrade re-resolves the element's own originalUrl, which the --no-write-lock-file archive install bakes a permanent narHash pin into, so upgrade was silently re-fetching the exact same locked content forever (exit 0, no warning text) instead of a real update; replace it with nix profile remove + nix profile add against the plain unpinned flake URL so HEAD is genuinely re-resolved; bump v3.4.8","timestamp":"2026-07-01T22:35:12Z"},{"id":"b33a68e0dd08","message":"show full version-range changelog on nina update instead of only the latest release's notes","timestamp":"2026-07-01T22:08:00Z"},{"id":"d51758b58acb","message":"enable raw terminal mode on macos for the man and search TUIs: drop the linux-only termios guard (the ECHO\/ICANON\/ISIG\/IEXTEN\/ICRNL\/IXON flags and V.MIN\/V.TIME exist on every POSIX target Zig exposes, so the guard was a false assumption that left macos in cooked mode — echo on, line-buffered, requiring Enter); OPOST stays on so newline-to-CR-LF translation the renderers rely on is unchanged; bump v3.4.6","timestamp":"2026-07-01T16:44:06Z"},{"id":"a36b421dce6b","message":"add `nina man [topic]` pager with website palette and 17-section docs tree; bump v3.4.4","timestamp":"2026-07-01T15:54:33Z"},{"id":"ed87fe45ff11","message":"auto-retry nix search + profile add with NIXPKGS_ALLOW_UNFREE=1 --impure when unfree error detected; bump v3.4.3","timestamp":"2026-06-17T14:16:07Z"},{"id":"12e8a2b5e5f0","message":"add nix\/tamal\/manifest.kdl: fresh-cmd queries kepr saves.json to pin latest nina save automatically","timestamp":"2026-06-16T04:20:41Z"},{"id":"be1fa5647d2b","message":"install: select #nina attr so nix names the element 'nina' (revert bogus --name flag which does not exist); install.sh was using the bare URL -\u003e default attr -\u003e full-URL name","timestamp":"2026-06-15T16:30:24Z"},{"id":"63c01c28ec41","message":"update: stop telling flake\/module installs to 'nix profile add' — rename updateSelfNotInProfile to updateSelfSystemManaged, point at nix flake update + rebuild","timestamp":"2026-06-15T16:12:52Z"},{"id":"7b3809e8339a","message":"read only canonical 'notes' field in releaseNotesFromMetadata; drop release_notes\/changelog fallbacks; v3.4.1","timestamp":"2026-06-15T13:44:12Z"},{"id":"7acbc7250302","message":"changelog: use oldest save per version to show version-intro message, not follow-up CONTINUITY updates (v3.3.1)","timestamp":"2026-06-13T16:03:29Z"},{"id":"d90a1016c675","message":"home init: record REAL network VM verification (init + --switch gen 1) pass in CONTINUITY","timestamp":"2026-06-13T15:52:47Z"},{"id":"9a7b9486f3f3","message":"fix: nix update uses originalUrl as installable, add hash -r hint (v3.2.6)","timestamp":"2026-06-12T23:30:09Z"},{"id":"2e6bd97e4fc0","message":"fix: progress bar tracks copies, error pipeline catches service activation failures (v3.2.5)","timestamp":"2026-06-12T23:15:19Z"},{"id":"63f60ea4c5c0","message":"fix: Render update changelog fallback (v3.2.4)\n\n- Prefer release notes from metadata, then derive changelog entries from Kepr archives when notes are missing\n- Compare semver before offering an update so newer local builds do not downgrade\n- Bump VERSION\/build.zig.zon to 3.2.4\n- Verified zig build, zig build test, live update --check, and a local missing-notes update fixture","timestamp":"2026-06-12T21:02:22Z"},{"id":"9a3229ca965f","message":"upgrade: live build panel during rebuild phase","timestamp":"2026-06-12T19:45:43Z"},{"id":"8e8ad66cbc0a","message":"apply: live build panel — single name slot, cyan\/yellow\/green bar, fetch\/build\/activate phases, non-TTY suppressed; bump v3.2.3","timestamp":"2026-06-12T19:41:28Z"},{"id":"a04f62111174","message":"errors: expanded translation table (25 patterns + home manager), 3-layer pipeline, warning extraction; output: buildError + buildWarnings; exec: capture nixos-rebuild stderr; main: route BuildFailed through pipeline; bump v3.2.2","timestamp":"2026-06-12T18:28:11Z"},{"id":"636dfd11f624","message":"verify hooks: 18\/18 pass on golden-unstable (v3.2.1)","timestamp":"2026-06-12T17:26:35Z"},{"id":"6ba802b79f6d","message":"fix: pre-hook abort returns error.HookAborted for non-zero exit; bump v3.2.1","timestamp":"2026-06-12T16:25:22Z"},{"id":"7d715ad938a1","message":"fix: nina back uses switchGeneration on flake systems, not --rollback","timestamp":"2026-06-12T16:24:38Z"},{"id":"738c20da084e","message":"verify hooks: record golden failures (v3.2.0)","timestamp":"2026-06-12T15:26:38Z"},{"id":"1974f3b85d9d","message":"feat: Add lifecycle hooks for state-changing commands (v3.2.0)\n\n- Add local ~\/.config\/nina\/hooks runner with executable checks, exit codes, and capped tail output\n- Wire pre\/post hooks into apply, back, home apply, and upgrade\n- Document hook files and bump VERSION\/build.zig.zon to 3.2.0\n- Verify zig build, zig build test, nina --version, and shimmed apply hook smoke","timestamp":"2026-06-12T14:13:18Z"},{"id":"b06dca45c445","message":"document v3.1.9 nina update verification in CONTINUITY — changelog + self-update-completion confirmed working (build\/test green, HTTP-fixture check\/download\/checksum paths exercised); credits GPT 5.4 Mini for the code, Opus 4.8 for the verification","timestamp":"2026-06-11T18:28:14Z"},{"id":"0695035b0f43","message":"fix: Surface successful self-update completion (v3.1.9)\n\n- Print the standard updated line after a successful nix-managed nina update\n- Keep the existing direct-download flow unchanged\n- Bump VERSION and build.zig.zon to 3.1.9","timestamp":"2026-06-11T18:18:43Z"},{"id":"669fea798465","message":"feat: Show release changelog in nina update (v3.1.6)","timestamp":"2026-06-11T15:44:47Z"},{"id":"a178ca844c84","message":"pkg commands: resolve as nixpkgs#name consistently — fixes why\/deps\/size\/closure on flake systems (v3.1.5)","timestamp":"2026-06-10T21:27:52Z"},{"id":"a512584d3c19","message":"docs: record kyoshi try\/develop prompt smoke verification","timestamp":"2026-06-10T20:30:12Z"},{"id":"570595053bdd","message":"try + develop: branded PS1 prompt and exit instruction (v3.1.4)","timestamp":"2026-06-10T19:39:17Z"},{"id":"b32f051a7897","message":"document v3.1.3 cleanups in CONTINUITY — .\/result litter fix, useFlakeFlag trailing-slash normalization, golden home.nix enableNixpkgsReleaseCheck, module-mode verified live (5\/5 PASS on golden); all open code-review items now fixed-and-verified or documented non-defects","timestamp":"2026-06-10T13:00:12Z"},{"id":"cc6de0e806d9","message":"fix remaining open code-review items, bump v3.1.3 — (LOW) home-manager build no longer litters .\/result in the cwd: homeManagerBuild now runs 'sh -c d=$(mktemp -d) && cd \"$d\" && home-manager build' (affects home check + home apply --dry). (LOW) useFlakeFlag trims trailing slashes before the \/etc\/nixos comparison so '\/etc\/nixos\/' is still treated as the default (no spurious --flake). Golden fixture: home.nix sets home.enableNixpkgsReleaseCheck=false (master tracks unstable; the 26.05-vs-26.11 mismatch warning is spurious) — applies on next rebake. Verified on the golden: no .\/result after check\/apply--dry, module-mode dispatch redirects to 'nina apply' (closes the last verification gap), normal home apply + check still work. Confirmed-correct non-defects left as-is (seen.put dedup, parseHomeGenerations empty-path guarded at call sites). VERSION\/zon -\u003e 3.1.3, build+tests green","timestamp":"2026-06-10T12:59:46Z"},{"id":"60b58bedad52","message":"document rebake + channel-paths + kyoshi read-only + code-review pass (v3.1.2) in CONTINUITY — rebaked & promoted kiln\/golden-unstable.qcow2 (nixPath fix + v3.1.2 nina); channel paths 4\/4 PASS on the golden (channel doctor ok, channel list no flake note, apply --dry plain dry-activate, flake doctor still ok); kyoshi read-only suite clean on real unstable channel hardware with fully isolated HOME (nothing disturbed); code-review fixed HIGH (home local-only) + MED (gen-0), other findings noted","timestamp":"2026-06-10T12:47:09Z"},{"id":"be755c08c166","message":"fix code-review HIGH: home commands are local-only, bump v3.1.2 — home detection (binary, ~\/.config\/home-manager, $HOME\/$USER flake ref) all read the LOCAL host while exec routes over SSH for a remote machine, so 'nina home --on \u003cremote\u003e' would decide mode\/flake-ref from the wrong box. Now home() refuses a non-local machine with output.homeLocalOnly. Also (MED) homeApplyDone prints 'done' instead of 'generation 0' when the post-switch gen re-read fails (switch still succeeded). VERSION\/zon -\u003e 3.1.2. Verified on mac: 'home apply --on remotebox' -\u003e local-only refusal; local 'home apply' unaffected. build+tests green","timestamp":"2026-06-10T12:13:39Z"},{"id":"a96eade6fa9c","message":"document v3.1.1 fixes in CONTINUITY — finding 1 (home packages descend into home-manager-path env + dedup) and finding 2 (doctor config-syntax: root cause 'nixos-config not in NIX_PATH', nina fix = flake-aware dry-build, golden fix = restore nixos-config to nix.nixPath in configuration-unstable.nix; golden not yet re-baked so channel-style doctor on \/etc\/nixos still fails until rebuild). Both nina fixes verified real on the unstable golden","timestamp":"2026-06-10T11:32:33Z"},{"id":"155ea1de2442","message":"home packages + flake-aware doctor fixes, bump v3.1.1 — (1) home packages now descends into the '…-home-manager-path' env (findHomeManagerPath finds it among the generation's refs and lists ITS references) instead of listing the generation's own activation deps, so the user's home.packages (hello, jq) show and bash\/coreutils no longer leak; dedup by name collapses multi-output dups (jq\/jq-lib). (2) doctor's config-syntax check is now flake-aware like apply\/upgrade — runs 'nixos-rebuild dry-build --flake \u003cconfig\u003e' when the config dir has a flake.nix, fixing the spurious 'config syntax fail' on flake systems (plain dry-build needs \u003cnixos-config\u003e and fails). VERSION+zon -\u003e 3.1.1. Verified on the unstable golden: home packages -\u003e hello+jq(once), no bash; flake doctor -\u003e config syntax ok \/ all good. build+tests green incl findHomeManagerPath test","timestamp":"2026-06-10T11:31:56Z"},{"id":"a57888937a6e","message":"document enriched nixos-unstable golden + real-tool verification in CONTINUITY — built kiln\/golden-unstable.qcow2 (NixOS 26.11pre, flakes + baked home-manager channel + \/root\/nixos-config flake fixture); 10\/11 PASS verifying v3.1.0 against REAL home-manager (apply\/switch gen1+gen2, back\/rollback, history, diff-closures, status hm line, doctor row) and REAL flake dry-activate --flake. Two findings: (1) home packages lists the generation's activation deps not the user's home.packages (should list the home-manager-path env's refs), (2) doctor 'config syntax fail' pre-existing. Harness: build-golden-unstable.sh parses the new unstable ISO boot layout (kernel\/initrd under boot\/nix\/store, dual kernels). Artifacts in koh-ignored test\/vm + kiln","timestamp":"2026-06-10T04:11:11Z"},{"id":"1b8fbce38ab4","message":"document golden-VM verification of v3.1.0 flake+HM in CONTINUITY — 41\/41 PASS on a throwaway overlay of kiln\/golden.qcow2 (NixOS 24.11). Golden is the May-29 image (flakes disabled, no home-manager), so the test PATH-shims sudo\/nixos-rebuild\/nix\/nix-channel\/nix-store\/home-manager to assert nina's exact constructed argv + drive the full home suite, with real checks for version\/help\/hello\/wizard\/no-HM gating. Verified: flake-aware apply --flake gating (added for non-default flake dir, omitted for \/etc\/nixos even with flake.nix, omitted for channel), channel flake-note, upgrade flake-vs-channel branch, home apply\/back\/history\/check\/diff\/packages\/edit, status+doctor HM rows. On-disk artifacts (test\/ is koh-ignored): test\/vm\/tests\/v31-flake-home.sh, test\/vm\/run-once.sh (single-send driver — run-in-vm.sh's 2nd send is swallowed on this golden), test\/vm\/results\/v31-flake-home.txt. Still needs a flake-enabled + HM golden for the real external tools","timestamp":"2026-06-10T02:31:49Z"},{"id":"5a395ec7b4cc","message":"document flake + home manager session in CONTINUITY: 15 saves to v3.1.0, what's host-verified vs needs VM (flake\/HM env), and the 'nina update' self-updater divergence from the brief's Part 3 (channel\/flake branch placed in upgrade)","timestamp":"2026-06-10T01:34:13Z"},{"id":"105a19163c99","message":"bump version to v3.1.0 — VERSION 3.0.24-\u003e3.1.0 and build.zig.zon to match; minor bump for the new 'nina home' command surface and the changed flake-aware behavior of apply\/upgrade\/setup; nina --version confirms v3.1.0, build+tests green","timestamp":"2026-06-10T01:33:41Z"},{"id":"d6ff1e3add5a","message":"help: add home manager commands — 'home  home manager subcommands' row added to nina help; hello cheatsheet now features home apply \/ home back \/ home history; verified help renders the home row; build+tests green","timestamp":"2026-06-10T01:32:52Z"},{"id":"d7d4dc71a0ea","message":"setup wizard: scan for config and flake.nix, smart defaults — firstRunWizard now scans \/etc\/nixos (scanConfig: flake.nix -\u003e flake, configuration.nix -\u003e channel, else none), reports the detection, and pre-fills the config-path prompt (output.firstRunPromptDefault, [default] enter-to-confirm); flake-ness is re-detected at the chosen path via exec.dirHasFlake and written as 'flake = true' — never asked. Dropped the [1]\/[2] manage-type question and the local prompt (defaults local=true); removed now-dead firstRunManageType. exec.pathExists made pub, configHasFlake refactored onto dirHasFlake. Verified both branches: plain dir -\u003e no flake line; dir with flake.nix -\u003e flake=true. build+tests green","timestamp":"2026-06-10T01:32:26Z"},{"id":"f41c183586ea","message":"update\/upgrade: auto-detect flake vs channel and use correct path — nina upgrade now updates flake inputs (exec.flakeUpdateAt: cd config dir && nix flake update) on a flake system instead of nix-channel --update, then rebuilds (rebuild already flake-aware); channel path unchanged for channel systems. NOTE: in this codebase 'nina update' is the kepr binary self-updater, so the channel-vs-flake branch lives in 'upgrade' (the channel-update+rebuild command); flake-system note for plain channel ops is shown by 'nina channel'. build+tests green","timestamp":"2026-06-10T01:30:15Z"},{"id":"c35b8c5bbfb7","message":"doctor: add home manager check — when HM is detected, doctor appends a 'home manager' row with note 'standalone  gen \u003cn\u003e' (or 'module'), status ok; gated on detection so the table is unchanged on machines without home-manager; homeDoctorNote builds the caller-owned note string; build+tests green","timestamp":"2026-06-10T01:29:40Z"},{"id":"e0aef3b8a987","message":"status: show home manager generation when HM is installed — homeStatusLine adds a dim 'hm  gen \u003cn\u003e  \u003cdate\u003e' row indented under the machine rows, gated on standalone HM detection so a machine without home-manager shows nothing (verified: no hm line on a no-HM host); statusCmd no longer early-returns on --all so the hm line renders in both modes; build+tests green","timestamp":"2026-06-10T01:29:08Z"},{"id":"e0ee1531cdef","message":"home packages: list home-manager managed packages — homePackages reads the current home generation's store path, lists its references via nix-store -q --references, and renders name+version through output.listPkg (reusing pkgFromStorePath); skips versionless support outputs and home-manager scaffolding paths; build+tests green","timestamp":"2026-06-10T01:28:17Z"},{"id":"e54614fcd2b5","message":"home diff: diff between home manager generations — homeDiff parses the two newest home generations and runs nix store diff-closures on their store paths via exec.diffClosuresPaths (tty streams native color, piped path captures+strips ANSI like system diff); \u003c2 generations prints 'nothing to diff yet'; build+tests green","timestamp":"2026-06-10T01:27:53Z"},{"id":"55d6ea4397d0","message":"home check: home-manager build without switch — homeCheck runs 'home-manager build' (validates + builds, no activation), prints ':: ok' on success or routes to checkFailed + BuildFailed on non-zero; build+tests green","timestamp":"2026-06-10T01:27:20Z"}]