fix(vps): complete remaining #451 hardening (hermes-claw swap, autoUpgrade=boot, deploy docs)#463
Conversation
hermes-claw (CX33, GRUB) had no disk swap — the <8GB-GRUB profile #451 flags. Mirrors sancta-choir; no kernel pin (no corrupted-store history). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PR #463 Review — VPS Hardening (hermes-claw swap, autoUpgrade=boot, deploy docs)SummaryThis PR finishes the remaining #451 remote-VPS OOM-hardening items: 4 GB swapfile on hermes-claw, Findings
Detailed Analysishermes-claw swapfileCorrect NixOS pattern. sancta-claw autoUpgrade operation
LOW: The practical effect is that the nightly build sets a new boot default that is never activated until a human reboots. The running generation can drift indefinitely from the boot generation. This is the safer trade-off on a headless VPS, but a manual reboot cadence is now needed to actually ship updates (including security patches). sancta-choir kernel pin commentPure documentation improvement. The three-condition exit criteria (GC corrupt paths → clean 6.12 build on-host → CLAUDE.mdWarning is accurate, cites the right scripts ( VerdictPASS — No critical or high severity issues. All changes are defensive hardening with clear operational rationale. The LOW findings are known trade-offs, not bugs. |
Complete the remaining #451 remote-VPS hardening
#462 already shipped part of #451 (the
--max-jobs 1 --cores 1throttle ondeploy.sh/install.shand the zero-kuzea swapfile). This PR finishes the rest:fix(hermes-claw)/swapfile— hermes-claw (CX33, GRUB) was the last VPS with no disk swap (the<8GB-GRUBbuild-OOM-brick profile). Mirrors sancta-choir.fix(sancta-claw)system.autoUpgrade.operation = "boot"— the nightly unattended upgrade ran the default GRUB-mutatingswitch;bootbuilds + sets the boot default without activating, so a bad generation only needs a reboot.docs--max-jobs+boot, citing #252). sancta-choir's 6.6 kernel pin gets a documented rationale + exit criteria.On the kernel-pin "audit/expire" item
I documented the pin's exit criteria rather than unpinning. The corruption was a one-time build-OOM artifact (the 6.12 kernel itself isn't broken), but I can't verify the VPS store state or test a 6.12 boot from this darwin host — and unpinning untested risks an unbootable headless box, which is exactly the failure #451 is about. The comment now records why it's pinned and the precise steps to safely remove it (GC corrupt paths → clean 6.12 build on-host →
nixos-rebuild boot+ reboot test).Validation (darwin host — eval only)
nix eval …{hermes-claw,sancta-claw,sancta-choir}…toplevel.drvPath— all evaluate cleanly.sancta-claw.config.system.autoUpgrade.operation=="boot"; hermes-claw swapfile present.nixpkgs-fmt --check— clean on all 3 changed nix files.Closes #451. (No code/secret changes beyond config + docs; CI's Trivy scan + aarch64/x86_64 eval are the gates.)
🤖 Generated with Claude Code