Decided; now build it
The half of this issue that was a question is answered: ADR-0043 (#505, 2026-09-18) keeps the CA on prometheus and builds phoenix as the deployment host. The body as filed assumed step-ca sits beneath the estate root; it does not — the root is pathlen:0 (ADR-0037), which is why the tier has its own. The CA-key custody gap the ADR found is #496.
docs/runbooks/build-the-jumpbox.md is the procedure: phoenix, 10.0.30.70, VMID 170, a VM not an LXC, 2 vCPU / 4 GiB / 32 GB, no stack, no Docker, no age key, no CA — with a CAUTION that certificates/ca-key.pem does not come here. One cost the issue did not count and the ADR did: the Proxmox firewall on Saruman admits 8006 from Hicks only, so this widens ADR-0014's rule by one address on one port.
Why it moved
It is the root of the automation chain — #440, #445 and #448 hang on it, and only #449–#451 hang on #414 — and it has no predecessor: it needs Saruman, which exists. A milestone described as a strict chain should not hold the one item in it that is not blocked. Moved to the Saruman milestone beside #527.
Done when
phoenix is in network.md and hardware.md, architecture.md no longer says Not built yet, check_docs.py's absence marker is removed, and a make deploy from it has landed on one host.
Body as filed, superseded 2026-09-19
This estate has 34 ADRs, 20 runbooks, 95 alert rules and a convergence loop
that refuses to deploy without a pinned GPG signature — and it builds virtual
machines by clicking. The Packer, OpenTofu and Ansible issues that follow this
one close that gap. This is their prerequisite: there is nowhere for the
toolchain to live.
Today Proxmox is driven from a Hicks workstation by hand. Packer, OpenTofu and
Ansible want a host that holds an API token, an SSH key and a checkout, and that
host is a pet — it is the thing that rebuilds everything else.
What is decided by placement
VLAN 30, not 99. It drives the lab, and ADR-0031
already grants Hicks all of ImaginationLAN, so it needs no new rule. Putting it
on Winterfell would widen the management segment for exactly the reason
ADR-0008 argues against —
"Winterfell becomes busier and less special."
A dedicated Proxmox user and API token, not root@pam, per the same instinct
that gave the lab guest its own age recipient under
ADR-0020:
the token that can create VMs should not be the token that can do everything.
The open question this issue carries
The estate's CA currently lives on prometheus. scripts/gen-certs.sh
deliberately leaves the CA key without a passphrase — the trade is written down,
that interactive issuance leads to certificates nobody dares reissue — and
SECURITY.md records that host's disk and swap as unencrypted. So the root of
trust for the estate sits on the monitoring box, protected by file permissions.
Moving it to the jumpbox is not obviously right; it trades one unencrypted disk
for another. But it is worth deciding rather than inheriting. stacks/sensitive's
step-ca is already an intermediate beneath that root (#130),
so the tree is shaped for it either way. Decide here, record it, and do not
move the key as a side effect of this build.
Order of work
- Guest on
Saruman, VLAN 30, static below .100 with a Kea reservation.
- Proxmox user and API token, privilege separation off, credential into
secrets/.
- Alloy agent via
scripts/deploy-agent.sh — it is a lab host, so it pushes to
the lab's stack on alexander, never to 10.0.99.20
(ADR-0007).
- Decide the CA question. Record it.
Purchases this needs
None.
Decided; now build it
The half of this issue that was a question is answered: ADR-0043 (#505, 2026-09-18) keeps the CA on
prometheusand buildsphoenixas the deployment host. The body as filed assumed step-ca sits beneath the estate root; it does not — the root ispathlen:0(ADR-0037), which is why the tier has its own. The CA-key custody gap the ADR found is #496.docs/runbooks/build-the-jumpbox.mdis the procedure:phoenix,10.0.30.70, VMID 170, a VM not an LXC, 2 vCPU / 4 GiB / 32 GB, no stack, no Docker, no age key, no CA — with a CAUTION thatcertificates/ca-key.pemdoes not come here. One cost the issue did not count and the ADR did: the Proxmox firewall onSarumanadmits8006from Hicks only, so this widens ADR-0014's rule by one address on one port.Why it moved
It is the root of the automation chain — #440, #445 and #448 hang on it, and only #449–#451 hang on #414 — and it has no predecessor: it needs
Saruman, which exists. A milestone described as a strict chain should not hold the one item in it that is not blocked. Moved to the Saruman milestone beside #527.Done when
phoenixis innetwork.mdandhardware.md,architecture.mdno longer says Not built yet,check_docs.py's absence marker is removed, and amake deployfrom it has landed on one host.Body as filed, superseded 2026-09-19
This estate has 34 ADRs, 20 runbooks, 95 alert rules and a convergence loop
that refuses to deploy without a pinned GPG signature — and it builds virtual
machines by clicking. The Packer, OpenTofu and Ansible issues that follow this
one close that gap. This is their prerequisite: there is nowhere for the
toolchain to live.
Today Proxmox is driven from a Hicks workstation by hand. Packer, OpenTofu and
Ansible want a host that holds an API token, an SSH key and a checkout, and that
host is a pet — it is the thing that rebuilds everything else.
What is decided by placement
VLAN 30, not 99. It drives the lab, and ADR-0031
already grants Hicks all of ImaginationLAN, so it needs no new rule. Putting it
on Winterfell would widen the management segment for exactly the reason
ADR-0008 argues against —
"Winterfell becomes busier and less special."
A dedicated Proxmox user and API token, not
root@pam, per the same instinctthat gave the lab guest its own age recipient under
ADR-0020:
the token that can create VMs should not be the token that can do everything.
The open question this issue carries
The estate's CA currently lives on
prometheus.scripts/gen-certs.shdeliberately leaves the CA key without a passphrase — the trade is written down,
that interactive issuance leads to certificates nobody dares reissue — and
SECURITY.mdrecords that host's disk and swap as unencrypted. So the root oftrust for the estate sits on the monitoring box, protected by file permissions.
Moving it to the jumpbox is not obviously right; it trades one unencrypted disk
for another. But it is worth deciding rather than inheriting.
stacks/sensitive'sstep-ca is already an intermediate beneath that root (#130),
so the tree is shaped for it either way. Decide here, record it, and do not
move the key as a side effect of this build.
Order of work
Saruman, VLAN 30, static below.100with a Kea reservation.secrets/.scripts/deploy-agent.sh— it is a lab host, so it pushes tothe lab's stack on
alexander, never to10.0.99.20(ADR-0007).
Purchases this needs
None.