Files
felhom.eu/documentation/tests/golden-0.232.0-2026-09-01/README.md
T
admin 63eff21a5c
gates / gates (push) Successful in 17s
golden 0.232.0 baked, vouched, floor raised — and it carries TWO releases
GOLDEN_SHA256 5f8a53ed5b19a6cb2006298ce6239f6fca2b990cc3ef6eada89f602801ca91b8,
657 494 489 B. 0.231.0 was never baked, so the fleet went 0.230.0 -> 0.232.0.

THE CHECK THE 0.230.0 BAKE SKIPPED, AND THIS ONE DID NOT: the bake script's fingerprint was
compared ACROSS THE HOP - 7b0fb5cf...73b6a1 on DooPlex and inside the VM. The previous bake
recorded only the DooPlex-side hash and said so; this one is a measurement.

Three independent readers agreed before anything was vouched: the bake's own print, the round
trip of the published bytes (HTTP 200, 657494489 B, same sha, hashed from what was
downloaded), and the hub's Day-0 dropdown reading Gitea on a different code path. The
delivered artifact names its own controller - ./etc/felhom-controller-image reads
felhom-controller:0.232.0 - with 19382 entries under var/lib/felhom/docker/.

Both pre-gates were shown able to see something before their zeroes were believed, and the
manifest was RE-READ after vouching rather than trusted from the 303 flash.

DELIVERY WAS ACTUALLY EXERCISED. Both boxes had been hand-deployed during validation, so the
floor had nothing to move. Rather than report delivery untested, demo-felhom was rolled back
to 0.231.0 and the chain run for real - it moved itself in ~20s:
  10:47:16 controller-swap: image file written, restarting bootstrap  target=...0.232.0
  10:47:26 controller-swap: new controller healthy                    target=...0.232.0

And this is the first bake golden_currency_gate.py actually gates: it now reads the
GOLDEN_SHA256 line out of the bake log rather than matching a directory name (R-410, shipped
hours earlier the same day). All 13 felhom.eu gates are green, golden-currency included, for
the first time since v0.230.0 was released.
2026-09-01 10:50:54 +02:00

101 lines
4.5 KiB
Markdown

# Golden bake 0.232.0 — 2026-09-01
Baked, published, round-trip verified, **vouched**, and the fleet floor raised.
**This bake carries TWO releases: 0.231.0 was never baked**, so the fleet went 0.230.0 → 0.232.0.
| | |
|---|---|
| `GOLDEN_SHA256` | `5f8a53ed5b19a6cb2006298ce6239f6fca2b990cc3ef6eada89f602801ca91b8` |
| size | **657 494 489 B** |
| baked controller | `gitea.dooplex.hu/admin/felhom-controller:0.232.0` |
| `MinAgent` | **0.129.0** — read from the controller CHANGELOG header, not assumed |
| script | `build-golden.sh v3.0.0`, sha `7b0fb5cf…73b6a1` |
| template | `debian-13-standard_13.6-1_amd64.tar.zst`, after `pveam update` |
| archive volid | `local:backup/vzdump-lxc-9100-2026_09_01-10_43_08.tar.zst` |
## The check the 0.230.0 bake skipped, and this one did not
**The bake script's fingerprint was compared ACROSS THE HOP:**
```
DooPlex : 7b0fb5cf082fa3301a45578d1624e375d205b4e538d602e7d198a015e573b6a1
in the VM : 7b0fb5cf082fa3301a45578d1624e375d205b4e538d602e7d198a015e573b6a1
```
The 0.230.0 bake recorded only the DooPlex-side hash and said so plainly. This one is a measurement.
## Acceptance markers — counted on the COMMITTED log
```
docker OK (overlay2 : 1
including mount point rootfs : 1 (line 310)
including mount point mp0 : 1 (line 311) <- no mp1 since v3.0.0 (R-165/R-233)
upload OK (HTTP 201) : 1
--- must be ZERO ---
excluding : 0
FATAL : 0
```
## Three independent readers agreed before anything was vouched
1. **The bake** printed `GOLDEN_SHA256=5f8a53ed…91b8`.
2. **The round trip** — the published bytes downloaded back: `HTTP 200`, **657 494 489 B**, sha
`5f8a53ed…91b8`. Hashed from the **downloaded** bytes, never the local file.
3. **The hub's Day-0 dropdown**, a different code path reading Gitea: `data-sha="5f8a53ed5b19a6cb…"`.
**And the delivered artifact names the controller it will start**, read out of the downloaded archive:
```
$ tar --zstd -xOf golden.tar.zst ./etc/felhom-controller-image
gitea.dooplex.hu/admin/felhom-controller:0.232.0
```
with **19 382** entries under `var/lib/felhom/docker/` — the image store is IN the archive.
## Pre-gates, each proven able to see something first
| gate | result | the control that makes it believable |
|---|---|---|
| 404 pre-gate | `HTTP 404` for 0.232.0 before the bake | the controller image manifest returns `HTTP 200` on the same host |
| token-leak grep on the committed log | **0** | the token appended to a throwaway copy greps **1**; the copy was `shred -u`'d |
| token off every command line | unit properties grep **0** | same seeded control returns **1** |
## The vouch — three fields, and only one moved
| field | before | after | why |
|---|---|---|---|
| `golden_version` | 0.230.0 | **0.232.0** | the new bake |
| `agent_version` | 0.130.0 | 0.130.0 | unchanged — already ≥ MinAgent |
| `min_agent` | 0.129.0 | 0.129.0 | unchanged — v0.232.0's header says `MinAgent: 0.129.0` |
`min_agent` (0.129.0) ≤ `agent_version` (0.130.0), so **not** the R-216 shape.
`POST /configuration/artifacts` → `303 flash=artifacts_set`; **the flash was not treated as proof** —
the page was re-read (`golden_version` selected 0.232.0, sha `5f8a53ed…`) and the R-120 refusal banner
confirmed **absent**.
## The floor, and the box moving itself
`min_controller_version` **0.230.0 → 0.232.0**, re-read from the page afterwards.
**Both boxes had been hand-deployed during validation, so the floor had nothing to move.** Rather than
claim delivery untested, `demo-felhom` was rolled back to 0.231.0 and the chain exercised for real. It
moved itself in **~20 s**, in its own words:
```
10:47:16 controller-swap: image file written, restarting bootstrap target=…felhom-controller:0.232.0
10:47:26 controller-swap: new controller healthy target=…felhom-controller:0.232.0
```
## Teardown
`pct destroy 9100 --purge`, `shred -u` of the token, runner, script and log **after** the log was
copied out (`ls | grep` in the VM's `/root` → 0), `poweroff`, qemu confirmed exited with
`ps -eo comm` (**not** `pgrep -f`, which self-matches), and `qemu-img snapshot -a virgin`. The disk
carries the single `virgin` snapshot.
## And this is the first bake the gate actually gates
`golden_currency_gate.py` now reads `GOLDEN_SHA256=` out of this directory's `bake.log` rather than
matching the directory's name (R-410, shipped earlier the same day). Its verdict:
`newest golden baked : 0.232.0 (… [sha 5f8a53ed5b19…])`.