Repository navigation
01: Pin the running system for deadman rollback - #1
Merged
Merged
Conversation
Add a disposable NixOS VM regression check for test activation and missing-pin recovery. Bootstrap its test-only lock in Linux CI before final verification. Co-authored-by: Copilot App <[email protected]>
Guard arm and disarm with the same lock so a competing failed arm cannot replace or remove a live timer's recovery target. Co-authored-by: Copilot App <[email protected]>
Preserve both changelog entries and the confirmed-session, disarm, commit, switch order alongside pinned recovery documentation. Co-authored-by: Copilot App <[email protected]>
Record the lock generated by Linux Nix and disable GRUB in the direct-kernel test VM, whose unpartitioned disk cannot support bootloader installation. Co-authored-by: Copilot App <[email protected]>
The NixOS test shell uses errexit; put the expected rejection in a conditional so both concurrent arm statuses are recorded. Co-authored-by: Copilot App <[email protected]>
Record the actual locked Linux VM run and its recovery, warning, status, and competing-arm assertions without claiming live-host or bootloader coverage. Co-authored-by: Copilot App <[email protected]>
jrcruciani
marked this pull request as ready for review
September 21, 2026 14:14
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
I made
aether-armpin/run/current-systembefore activation. Recovery validates that store path, sets the system profile to it and activates it directly, without rebuilding or evaluating a flake. A missing or invalid pin warns and uses the current boot-default profile; it never steps back a generation. A failed profile update is reported but does not prevent a recovery activation attempt, and the service still reports failure rather than hiding the boot-default problem.Disarm removes the pin, status shows it with time remaining, and arm/disarm share a root-owned lock so a competing arm cannot overwrite or remove a live timer's recovery target. Every helper's external commands are supplied by its runtime inputs. The README, playbook, prompt, option docs and changelog match the behavior.
This fixes
nixos-rebuild testleaving the profile at known-good N while the oldnix-env --rollbackselected N-1.Actual VM evidence
Final-head Linux VM run 35610510052 passed on
396b46376d81d5986e2bdee44903d8f9fe8029fa: job 2m0s, test script 86.32s. An earlier locked run also passed and is recorded in the changelog./run/current-systemand/nix/var/nix/profiles/systemboth resolve to the base and sshd listens on port 22 again./run/aether/rollback-target; assert the same recovery and the explicit boot-default fallback warning in the journal.No rebuild runs inside the VM. Actions and the NixOS 26.05 test-only nixpkgs input are pinned, and
flake.lockwas generated by Nix on Linux and committed.nix flake check --no-update-lock-file --print-build-logsruns the check. The importing host still supplies the module'spkgs.The first two runs exposed harness issues (GRUB installation on the direct-boot VM's unpartitioned disk, and the test shell exiting before recording an expected failed arm). Both were corrected before the passing runs. This is not live-host or bootloader coverage; Nix is absent locally on macOS.
Scope and coordination
Item 01 only, plus its prerequisite VM harness and tightly coupled pin-ownership lock. The broader scenario matrix remains item 04; general root/timespan/active-disarm hardening remains item 08. Item 02 was merged from
origin/mainwithout rewriting history; its R3 commit/failure order and both changelog sections are preserved. LICENSE is untouched.Ready for the parent's coordinated merge: final-head CI passed, GitHub reports MERGEABLE/CLEAN, and the worktree is clean. No known blocking concerns remain for item 01. No merge has been performed by this session.