# ECP-0084: Sovereign `ecp-forge` Host Deploy from every.channel

Status: Implemented

## Context

`git.every.channel` (Hetzner 300TB host) has been operated from external infra repos. That creates coupling and weakens operational independence for every.channel infrastructure changes, especially netboot/PXE and archive workflows.

The constitutional direction is explicit repository ownership over its infrastructure path. every.channel should be able to deploy its own forge host from this repository, with age/agenix material stored here.

## Decision

1. Add a sovereign `nixosConfigurations.ecp-forge` target to this repository.
2. Keep the forge role (`services.forgejo`, `services.caddy`) and archive role (`services.every-channel.ec-node`) in that host target.
3. Enable persistent netboot from this repository using `services.every-channel.netboot`, with local sovereign tarball staging as the default source path.
4. Keep UniFi-only mode as default (`proxyDhcp.enable = false`) to avoid cross-domain DHCP coupling.
5. Store host-consumed runtime secrets in this repository (`secrets/*.age`) and decrypt on-host via `agenix`.
6. Deploy directly from this repository to `git.every.channel`.

## Alternatives considered

- Continue deploying `git.every.channel` from shared infra repos. Rejected due ownership/coupling drift.
- Keep runtime-only netboot scripts on host. Rejected because boot resilience should survive reboot and config rebuilds.
- Move to ProxyDHCP-first by default. Rejected for now to keep DHCP authority in UniFi.

## Rollout / teardown plan

- Rollout:
  - build/evaluate `.#nixosConfigurations.ecp-forge`,
  - deploy from every.channel to `git.every.channel`,
  - verify `every-channel-netboot-stage` and `every-channel-netboot`.
- Teardown:
  - disable `services.every-channel.netboot.enable` in `nix/nixos/ecp-forge.nix`,
  - redeploy,
  - fall back to manual script flow (`docs/NUC_UNIFI_NETBOOT.md`) if required.
