ISO train v1.25.0 code: OOB belt default appliance leg (F9) + apt no-subscription (Part2) + R-63 Lat2 console font + R-71 golden>=floor build gate

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NKSN3gSg4TKVBBqkwW2djR
This commit is contained in:
2026-07-23 15:38:14 +02:00
parent eaa8eddf66
commit b620435afe
5 changed files with 175 additions and 6 deletions
@@ -62,3 +62,22 @@ controller v0.115.0 + agent v0.82.0 the agent reports its version in the `X-Felh
response header, so `Supports` decides by version comparison when the version is known and only
falls back to the route probe for header-less (≤0.81) agents — capability detection is now explicit,
not probe-inferred.
## 5. Every ISO build asserts golden ≥ the managed floor (the R-71 gate)
**Incident:** `DIAG-f10-demo-hp-offsite-2026-07-23.md` / R-71. A box installed from an ISO whose
golden controller is BELOW the hub's managed floor boots below the floor, so the day-0 managed
update fires within minutes of first boot — racing the offsite apply-bridge in exactly the window
that burned demo-hp's one-time offsite credential (2 days unprotected). The gap is invisible at
build time unless something checks it.
**Rule:** a build where the managed floor exceeds golden must **fail loudly, at build time**, not
ship. `build-felhom-iso.sh` carries the assertion itself (`assert_golden_ge_floor`, gated on
`FELHOM_ASSERT_GOLDEN` = the hub's `artifact_golden_version` and `FELHOM_ASSERT_FLOOR` = its
`min_controller_version`); it prints both versions and `die`s on `golden < floor`. Resolve the two
values operator-side before the build and pass them in — e.g. from the hub DB
(`hub_settings.artifact_golden_version` / `min_controller_version`) or the operator artifacts UI —
so the gate is enforced, not skipped (an unset input warns LOUDLY and does not silently pass). The
fix for a tripped gate is never to lower the floor: **republish golden ≥ floor and vouch it**
(rule 1), then rebuild. This gate composes with rule 1 — the manifest still leads the floor; this
one stops an ISO from carrying a golden the floor has already outrun.