Modron: migrate deployment to deploy-rs with a hardened node profile #30
Labels
No labels
blocked
conflicted
curated
in-progress
in-review
needs-decision
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
larandar/flaky-mesh#30
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stable ID: FM-MODRON-DEPLOY
Source: owner directive 2026-08-06; deploy law (ratified design session, not yet on wiki);
outputs/hosts/modron/configuration.nixSource status: new user story, owner-requested
Disposition: open — deploy-rs input absent, hardening scope undefined
Blocked by: #14 (FM-AUDIT-06 — sudo posture decision defines what "hardened" means)
Problem
Modron deploys via
nixos-rebuild --remote --use-substitutes— the fleet'sfallback path (justfile
nixos-rebuildprivate recipe, lines 160–200).The deploy law says stateless hosts go to deploy-rs (magic rollback),
stateful to nixops4, nixos-rebuild as fallback only.
Modron is stateless: auth proxy (CLIProxyAPI container + selector), secrets
sops-rendered at activation, no database, no persistent stateful service.
By the deploy law it belongs on deploy-rs, not the fallback.
The cost of staying on nixos-rebuild:
modron broken until a human re-deploys. deploy-rs magic rollback auto-reverts
on health-check failure.
security.sudo.wheelNeedsPassword = false(line 55 — same blanket NOPASSWDas every server, #14). A deploy-rs node profile is the natural home for
fleet-standard hardening applied as a group.
(bifrost's edge, heimdallr's identity, tamiel's monitoring) have the same
shape and could share a hardened profile.
Scope
deploy-rs input. Add
deploy-rs(github:serokell/deploy-rs,inputs.nixpkgs.follows = "nixpkgs"). Definedeploy.nodes.modronin flakeoutputs — via a flake-parts module, consistent with the import-tree pattern.
Hardened node profile. A reusable deploy-rs profile applying fleet-standard
hardening:
policies/sudo(currently odin-only — #14) or its resolved successorcan select it.
justfile integration. A
deployverb invoking deploy-rs for the targethost, replacing
nixos-rebuild --remotefor stateless hosts.Health check. deploy-rs magic rollback needs a probe confirming modron is
actually serving post-activation — the selector or auth-manager health
endpoint.
Non-scope
their deploy path.
separate — it changes what modron serves, not how it deploys.
Open questions for the owner
stateless servers, or is modron a one-off? The deploy law's
"stateless→deploy-rs" reads as a rule, suggesting fleet-wide.
policy, or a broader set (kernel, systemd, network)?
(
vpsadminos.nixosModules.containerUnstable). deploy-rs activates over SSH —does the container's activation path differ from bare NixOS? Needs a live
check before relying on it.
flake inputs can't substitute on the target. Same class — does deploy-rs's
equivalent handle this, or does #2 need to land first?
an aspect migration. Is it independent of the Phase 0→1→3→2 sequence, or
blocked behind Phase 3 (architecture validation)?
Acceptance
deploy-rsis a flake input;deploy.nodes.modronevaluatesjust deploy modronactivates via deploy-rs, not nixos-rebuildauto-reverts)
scoped to mesh interface
just checkgreenmodron-specific code
Provenance
Owner request 2026-08-06. Deploy law from ratified design session (not yet
recorded on wiki — belongs with #22's build queue or its own wiki page).
Modron host config at
outputs/hosts/modron/configuration.nix.Deploy law (verbatim from session): "stateless→deploy-rs (magic rollback),
stateful→nixops4 (spike-gated, never deploy path), fallback=nixos-rebuild;
colmena struck. HITL-only bifrost+odin."
Mistaken architecture read — this was filed against the wrong repo with the wrong shape.
The actual model: modron is an independent flake (
lar.ad/modron) that becomes a self-deployable building group. flake-ops provisions a staging VPS for it; flaky-mesh stops owning the host.This issue treated modron as a flaky-mesh host migrating internally to deploy-rs. Closed as wrong. Corrected issue(s) filed on the right repos.