ADR-0002: one real nixosConfiguration, no decoy split
Status: accepted (2026-07-06)
Context
ward-os shipped nixosConfigurations.workstation as a headless CI-safe decoy
and hid the real machine behind a custom installable.workstation output. That
kept nix flake check green in CI, but broke every stock tool
(nixos-rebuild –flake targeted the wrong config), confused every session, and
meant CI never evaluated the closure that actually runs.
Decision
One output: nixosConfigurations.noreply-hardware, the real machine. There is
no decoy and no installable.* namespace. CI checks are made eval-safe (pure
eval, no secrets read at eval time) instead of the machine being made
check-shaped. nix flake check and build.yml exercise the real closure.
Alternatives considered
- Keep the decoy/installable split: proven confusing and check-hollow.
- Per-environment configs (ci-baseline + real): same problem, renamed.
Consequences
Stock tooling works unmodified. Anything that cannot evaluate in CI is a bug in the module, not a reason to fork the config. The wrong-disk guard moves into the config itself (ADR-0004) since there is no placeholder tree.