feat(iso): R-21 slice A — bare-metal Felhom ISO pipeline + first-boot bootstrap

scripts/iso/: a DooPlex pipeline (build-felhom-iso.sh + Dockerfile.assistant) that
turns the official PVE ISO into a Felhom auto-install ISO whose first-boot stub
installs a retry-forever felhom-bootstrap unit which unattended-fetches
felhom-host-install.sh from the public felhom.eu/scripts channel and runs it until the
host is enrolled + a guest provisioned. host-install is UNMODIFIED (invoked only).

- build gates the answer on validate-answer OUTPUT text, never $? (spike S1 exit-0 trap)
- stub is from-iso, fully-up, exactly-once; retry unit owns all network work (S8a)
- retry-vs-resume encoded once: plain first, --resume when install state exists (v1.11.3)
- secret-bearing (embeds the retrieval passphrase): supervised/single-use; env shredded on success

Validated on VM 310: build gate + red-proof, disk-filter fail-safe, chain + retry,
resume-decision, exactly-once, no-net retry+recovery. Terminal host-install rc-0 success
operator-gated (drill customer needs the password-gated create-UI). scripts v1.16.0;
ROADMAP R-21 -> in-progress. Detail in REPORT.md.
This commit is contained in:
2026-07-16 13:47:08 +02:00
parent 914d51aa5f
commit 1fa3250aa3
13 changed files with 743 additions and 109 deletions
+15
View File
@@ -3,6 +3,21 @@
> Created with the REUSE.md rollout (2026-07-03). Authoritative history: `hub/CHANGELOG.md` (hub),
> `website/CHANGELOG.md`, `scripts/CHANGELOG.md`; end-of-task detail in `REPORT.md`.
- **2026-07-16 — R-21 SLICE A SHIPPED: bare-metal Felhom ISO pipeline (`scripts/iso/`, scripts
v1.16.0).** A DooPlex pipeline (`build-felhom-iso.sh` + `Dockerfile.assistant`) turns the official
PVE ISO into a Felhom auto-install ISO whose first-boot stub installs a retry-forever
`felhom-bootstrap` unit that unattended-fetches `felhom-host-install.sh` from the public
`felhom.eu/scripts/` channel and runs it (host-install **unmodified**). Validated on VM 310:
build gate + red-proof, disk-filter fail-safe, stub→unit→real-fetch→invoke→retry, resume-decision,
exactly-once, no-net retry+recovery — all GREEN. **Rulings settled:** stub is from-iso (no
cert-rotation risk); ordering fully-up; the retry unit owns all network work. **§4.4 finding
(shapes slice C):** the distribution URL carries no secret, but the unattended install needs the
customer retrieval passphrase → **the slice-A ISO is secret-bearing** (supervised/single-use; the
bootstrap shreds the env on success). OPEN: host-install rc-0 terminal success (hub-enrolled +
guest-provisioned) is operator-gated — a drill customer needs the password-gated create-UI (a
live-`hub.db` insert is unsafe). Slice B = physical N100 RUNBOOK; slice C = claim-pairing to
de-secret the distributed ISO. Detail: `REPORT.md`, `documentation/audits/SPIKE-baremetal-iso-2026-07-16.md`.
- **2026-07-13 eve — ESCROW CEREMONY WIZARD SHIPPED (agent v0.88.0 + controller v0.127.0; this
repo: host-install v1.16.0 + RUNBOOK rewrite).** The recovery-code ceremony is now
customer-driveable from the controller (`/backup/escrow`): one-shot R reveal, re-stage-first,