Drill new household: phase-1 journal, A1 and A2 part 2 evidence
gates / gates (push) Successful in 27s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-09-29 21:58:12 +02:00
parent 78126575cb
commit 178be6de51
3 changed files with 219 additions and 1 deletions
@@ -14,7 +14,7 @@ printed; every evidence file is secret-scanned before commit.
| felhom.eu | `8cadacb553ba` (hub v0.125.0) | yes |
| app-catalog-felhom.eu | `64461979250b` | yes |
Register: 355 rows, highest id R-718. Disk: `/mnt/5_hdd` 37 %, `/` 54 %.
Register: 350 rows (register-shape gate), highest id R-718. Disk: `/mnt/5_hdd` 37 %, `/` 54 %.
## Phase 0.1 — golden 0.282.0
@@ -81,3 +81,173 @@ VM **340 `drill-nh0930-new-household`** on demo-hp: q35/OVMF (`pre-enrolled-keys
| | `s14` | Summary as typed. **Focus rests on „Previous", not „Install"** — Enter would go back |
| | `s15` | H3: auto-reboot unticked (as 2026-09-14) |
| 19:03:14 | `s16` | **Install** pressed |
| ≤19:10:41 | `s18` | „Success — Installation finished - reboot now?" — **≤ 7 m 27 s** after Install; disk 4.0 G |
| 19:10:59 | first boot | H3: `qm stop`, `--delete ide2`, `--boot order=scsi0` in its own `qm set`, `qm start` |
## Step 3 — the first screen and the bind (the volunteer's own link)
**19:11:30 — the hub logs `appliance registered: new unclaimed box`, 31 s after power-on.** (A harness search for the
MAC on the hub's appliances page matched nothing for 6 min — the page does not print it; the log line is the record.)
Console (`s19`, code redacted) — Hungarian block then English block, each: „Felhom — a doboz készen áll, és a
párosításra vár. · Párosító kód: ***-*** · Nyisd meg az e-mailben kapott linket, és add meg ezt a kódot és a
Tulajdonosi jelmondatodat (az 5 szót a Felhom üzemeltetőjétől kaptad). · Ez a képernyő magától frissül…". **No
Proxmox admin-page line** (R-496 holds).
**The mail** „[Felhom] Kösd össze a Felhom dobozodat" (18:54:52): link `https://hub.felhom.eu/bind/<token>` (7 days),
two inputs, 5 tries. It says „Elkészült a Felhom dobozod" — it was sent 16 min before the box existed (R-719's press).
**The bind page** (`hub.felhom.eu/bind/<token>`, 200): „Kösd össze a most telepített Felhom dobozodat a fiókoddal…" ·
Párosító kód · Tulajdonosi jelmondat „…amelyet a beállításkor kaptál" (R-725).
| UTC | act | result (`phase1/A2-bind-typo.txt`, `phase1/step3-bind.txt`) |
|---|---|---|
| 19:19:03 | **A2 part 1:** pairing code with its last character changed, right passphrase | 200, „A megadott adatok nem megfelelőek. Ellenőrizd a párosító kódot és a tulajdonosi jelmondatot, majd próbáld újra." Hub: `self-bind attempt 1/5 failed` |
| 19:19:13 | the right code + passphrase | 200 „**Sikeres összekötés.** A doboz kb. egy percen belül folytatja a telepítést…" Hub: `self-bind SUCCESS: appliance 35 bound to customer tester-1 by customer self-service` |
**The self-bind page is proven through a real mailed link for the first time** (H1 of 2026-09-14 is gone: the Gmail
connector reads the tester1@ catch-all).
Hub after the bind (CEST): credentials delivered 21:19:31 · host enrolled `tester-1-693e79` 21:20:07 · **reenroll
code (gen 7) mailed** 21:20:08 · off-site shared credentials re-issued (sub-account 311327) 21:20:18 · break-glass
vaulted 21:20:19 · manifest served `agent=0.137.0 golden=0.282.0` 21:20:20 · **WireGuard peer `10.77.0.5/32` on ep0**
21:20:37 · PBS-DR re-issued automatically (F-14 path: the previous host was removed through the escrow-ack flow on
2026-09-17), provisioned gen 2, 21:20:38 · `controller_started (0.282.0)` 21:22:04 · floor 0.282.0 served.
Console after the bind (`s20`): „Felhom — a doboz össze van kötve. V · A beállítás magától folytatódik…" — **R-214
holds closed** (a stray „V" glyph → R-725).
## Step 4 — "ready", and the version
| | vouched | landed |
|---|---|---|
| agent | 0.137.0 | **0.137.0** |
| controller | golden 0.282.0 | **0.282.0** from the golden — no self-update |
Power-on 19:10:59 → registered 31 s; bind 19:19:13 → controller 2 m 51 s. Infra: `traefik:v3.6.7`,
`cloudflared:2026.6.0`, `filebrowser:1.3.3-stable`.
## Step 5 — the dashboard, through the public address
The mail „[Felhom] **Új beállító kód — újratelepült a szervered**" (19:20:08): „A Felhom szervered újratelepült, ezért
a vezérlőpultod belépését újra be kell állítani. A korábbi jelszavad már nem érvényes. · Beállító kód: *** · 72 óráig ·
https://felhom.enkicsifelhom.hu". A customer with an earlier box gets the reinstall wording, not the guide's
„Elindult a Felhom szervered" (R-722).
`felhom.enkicsifelhom.hu` resolved publicly to Cloudflare; **through the tunnel** `GET /` → 302 `/claim` → 200 at
19:22:56, 52 s after the controller started. **No intervention** (2026-09-14's I1 is gone; R-505's box-side hop
proven → closed). Claim page: „A szerver beállítása · Tester 1 · Add meg az e-mailben kapott beállító kódot…".
19:23:09 a harness slip (two form tokens joined → „Érvénytelen űrlap — töltsd újra az oldalt.", no code judged);
19:23:31 claimed → 302 `/`. Launcher: Filebrowser only; menu includes an English „Debug". **Power-on → claimed
dashboard: 27 m 51 s** (install 7 m 27 s of it; box first boot → claimed 12 m 32 s, of which the bind waited on the
harness ~7 min).
## Step 6 — three apps (`phase1/step6-deploy.txt`)
| app | kind | POST → running | the stranger (no session, public address) before the setup |
|---|---|---|---|
| bookstack | random first password (`Generálás`, 24 chars) | 202 → **65 s** | login page only |
| audiobookshelf | — | **400** „a(z) "Hangoskönyv tár útvonal" (HDD_PATH) mező kitöltése kötelező" — needs a data drive; refused before anything was written | — |
| actualbudget | gated, status probe | 202 → **23 s** | API 401 `{"error":"this app is waiting for its first setup"}`; a browser → the gate page „**ActualBudget — Beállításra vár** · Ez az alkalmazás még beállításra vár. Jelentkezz be a Felhom vezérlőpultba. · Bejelentkezés"; `POST /account/bootstrap` 401 |
| vikunja | gated, no probe, sign-up lock (block + own switch) | 202 → **12 s** | `POST /api/v1/register` 401 (gate) |
- **BookStack first password:** the settings page's 👁 (`/stacks/bookstack/auto-field/reveal`) returns the value typed
at install (equal: YES); `admin@admin.com / password` → back to `/login` (refused); the shown password → `/`.
The app page's first steps: „Jelentkezz be: admin@admin.com és a Beállítások oldalon látható első jelszó" — and
still `wiki.DOMAIN` (R-498).
- **actualbudget:** „Kész, beállítottam" before the setup → **409** „Az alkalmazás szerint még nincs kész az első
beállítás. Hozd létre a fiókodat, aztán próbáld újra." The household (dashboard session) → 3 redirects → the app,
`felhom_gate` cookie; `POST /account/bootstrap` ok; **the gate opened by itself ~12 s later** (probe). Stranger
after: `already-bootstrapped` 400, wrong password `invalid-password` 400.
- **vikunja:** the household registered `csalad` through the gate, then pressed „Kész, beállítottam" (card: „Ha kész,
nyomd meg ezt a gombot. Addig a telefonos alkalmazások és a család többi tagja nem éri el.") → 200 `opened`.
Stranger register → **403** `sign-up is closed on this app; its admin adds new accounts`; the running container
carries `VIKUNJA_SERVICE_ENABLEREGISTRATION=false`; `app.yaml` `after_setup ok: true`. Front door **404 for ~2 s**
while vikunja restarted for its switch (R-718).
## Step 5b — the recovery code (guide §7)
`/backup/escrow` at 19:30: „A doboz még készül — a távoli mentés kulcsát pár perc múlva tudod létrehozni…" (preflight:
`DR tier not applied on this host`). The descriptor reached the agent with its next 15-minute host report: ready
**19:35:44** (enrolment + 15 m 37 s; claim + 12 m). Banner then: „A távoli mentés szünetel, amíg nem hozod létre a
helyreállítási kódot." Ceremony (`phase1/step5-recovery-code.txt`): start with the dashboard password → done in
**5 s**; claim → 200, **10 words, English** (known, per language); a second claim → **410**. Wizard text is formal
„Írja fel…" (R-725). `/backups/remote` after: „A helyreállítási kód letétbe helyezve."
## Step 7 — using the apps (`phase1/step7-use.txt`)
- BookStack: book „Családi receptek NH0930", page „Töltött káposzta" with `NH0930-OLDAL … árvíztűrő tükörfúrógép`,
attachment 262 144 B → read back: sentence 2 (control 0), sha256 equal YES.
- Vikunja: project „Háztartás NH0930", three Hungarian tasks, 64 KiB attachment → read back 3 tasks, sha equal YES.
- **The family member through the 15-minute window:** before, stranger register **403**; „Regisztráció megnyitása 15
percre" (card: „Ehhez az alkalmazás újraindul, és a 15 perc végén még egyszer.") → `open_until 19:46:37Z`; own switch
open after 4 s; „nagymama" registered 200. **After** (19:48:38): stranger **403**, `registration_enabled:false`,
container `ENABLEREGISTRATION=false`, nagymama logs in.
## Step 8 — backups (`phase1/step8-*.txt`)
`/backups` verbatim: „Csak egy másolat készül (nincs második meghajtó)…" · „A rendszermentés jelenleg ugyanazon a
lemezen van…" · Utolsó teljes mentés **2026-09-29 21:27 (4 perce) 911.2 MB Helyi tároló (local) Naprakész** (ran
unaided after the claim) · „Következő mentés — 0 órája" (R-724) · Távoli rendszermentés „nincs beállítva" (the tier
was not applied yet). `/backups/apps`: each app „1. mentés Auto helyi · Nincs 2. (off-drive) másolat · **3. mentés
Kikapcsolva — Ez az alkalmazás nincs kijelölve távoli mentésre**" (R-720). „Mentés most" → 19 s, all three apps a
restore point at the true time; „Utolsó adatbázis mentés: 2026-09-29 21:33 (most)"; bookstack MariaDB 58.3 KB 41
tábla OK. No customer alarm. The household pressed „Távoli mentés bekapcsolása" for **BookStack only** (19:36:39).
Operator mails on day one: `node_recovered` and `backup_tier_skipped` (R-723).
## Step 9 — versions
All three „Naprakész"; `template_images` == `catalog_images` (bookstack 26.05.5 + mariadb 12.3, actual-server 26.9.0,
vikunja 2.6.0); no newer tested step offered — nothing to press.
## Step 10 — remove keeping the data, reinstall (`phase1/step10-*`)
- 19:37:16 „Leállítás" on actualbudget **during the first off-site whole-guest backup's quiesce** (started 19:37:01):
recorded `desired state … stopped`, then the backup's early resume restarted it the same second → **R-721**.
Stop again → stopped; „Eltávolítás" refused „Az alkalmazáson mentés vagy visszaállítás fut. Várd meg…" until
19:41:06 (job `done` 19:38:55; hold released ~2 min later). Removed: volume deleted (the dialog says it always is),
backup kept (112 K).
- **No „A megőrzött adataimat használom / Tiszta lappal kezdem" choice exists for this app** — its data lives in a
Docker volume; that choice is for data kept on a drive (this box has none set up). The reinstall page said instead:
„Ennek az alkalmazásnak van korábbi mentése, ezért az alábbi mezőket a saját mentése alapján töltöttük ki…".
- Reinstall → **gated again, and empty** (`bootstrapped:false`) — correct for an empty app.
- Restore from the kept point (19:33:04) → „1 adatkötet visszaállítva" in 9.5 s; the household's OLD password logs in;
**the gate opened by itself 10 s later** (`setup gate OPENED by probe`). What the household sees: an empty gated app
until it restores, then its data and an open app. **It does not stay gated over its own data.**
## Step 11 — restore BookStack (`phase1/step11-restore.txt`)
Page deleted through BookStack (page and attachment 404) → restore → „2 adatkötet és az adatbázis visszaállítva" in
**26 s** → the page's shown password logs in; sentence 2 (control 0), Hungarian 2, attachment sha equal YES; same
images (26.05.5 / 12.3).
## Step 12 — remove with „delete my data too" (uptime-kuma, `phase1/step12-remove-delete.txt`)
Stop → remove `{remove_hdd_data:true, remove_backups:true}` → `volumes_removed [uptime-kuma_uptime_kuma_data]`,
`hdd_note „Az alkalmazás nem tárolt saját adatot külső meghajtón…"`, backup removed; after: volumes 0, containers 0,
front door 404, restore points `[]`, „Megőrzött adatok: Nincs megőrzött adat". The gate file stayed ~4 min and was
then removed by the loop (seen gone at 19:50) — not a finding.
## Step 13 — status pages (`phase1/step13-status-pages.txt`)
R-724 (schedule disagreement, raw timestamp, LAN „nem állapítható meg", „0 órája", R-500 UTC). The monitoring page's
„A gazdagép metrikái jelenleg nem elérhetők" is script-toggled — not evidence (as 2026-09-14).
## Accidents
- **A1 power cut** (`phase1/A1-power-cut.txt`): `qm stop` 19:50:46, start 19:51:47 (60 s dark) → SSH +21 s, dashboard
through the tunnel **+123 s**, apps Up +124 s; same eight images; BookStack data sha equal; actualbudget's gate stays
open; vikunja stranger 403 and switch off; hub: only `controller_started`. **No alarm.** Dashboard session did not
survive (401) — one re-login.
- **A2 typos:** bind page (above) and the setup code (`phase1/A2-setup-code-typo.txt`): the spent code → „Hibás vagy
lejárt kód" (**one-shot: yes**); „Új beállító kód kérése" → mail in < 2 s „[Felhom] Beállító kód a jelszavad
visszaállításához"; new code with one letter changed → „Hibás vagy lejárt kód"; right code → 302; old password
refused, new accepted.
- **A3 phone** (`phase1/A3-phone.txt`, uptime-kuma freshly gated): Android Chrome UA, no session → the gate page
(Hungarian, viewport meta present) → „Bejelentkezés" → the dashboard login with `next` → back into Uptime Kuma, gate
cookie set (4 redirects). **Understandable.** A native app's API call gets English JSON (R-725). Two harness slips
(missing `Origin`; `-X POST` kept across a redirect) — both 403 „CSRF token missing or invalid", both the harness.
## Evidence off the machine, end of phase 1 (19:49)
`box-logs-phase1/` (agent journal 3 356 lines, felhom units 3 627, controller 882, box state). Secret scan over 47
files: **0 hits**, control 1. Commit `1ec1819`.
@@ -0,0 +1,37 @@
## 2026-09-29T19:50:43Z A1 — BEFORE
actualbudget actualbudget/actual-server:26.9.0 Up 8 minutes (healthy)
bookstack lscr.io/linuxserver/bookstack:26.05.5 Up 7 minutes (healthy)
bookstack-db mariadb:12.3 Up 7 minutes (healthy)
cloudflared cloudflare/cloudflared:2026.6.0 Up 28 minutes
felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.282.0 Up 28 minutes (healthy)
filebrowser gtstef/filebrowser:1.3.3-stable Up 28 minutes (healthy)
traefik traefik:v3.6.7 Up 28 minutes
vikunja vikunja/vikunja:2.6.0 Up 4 minutes
controller.yml
serverstransports.yml
signup-block-vikunja.yml
felhom-agent 0.137.0
## 2026-09-29T19:50:46Z qm stop 340 (hard power cut)
## 2026-09-29T19:51:47Z qm start 340 (60 s dark)
+21 s host answers SSH
+123 s dashboard /api/health 200 (public address)
+124 s all three apps Up
## 2026-09-29T19:54:36Z A1 — AFTER
actualbudget actualbudget/actual-server:26.9.0 Up 48 seconds (healthy)
bookstack lscr.io/linuxserver/bookstack:26.05.5 Up 48 seconds (healthy)
bookstack-db mariadb:12.3 Up 48 seconds (healthy)
cloudflared cloudflare/cloudflared:2026.6.0 Up 48 seconds
felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.282.0 Up 47 seconds (healthy)
filebrowser gtstef/filebrowser:1.3.3-stable Up 48 seconds (healthy)
traefik traefik:v3.6.7 Up 48 seconds
vikunja vikunja/vikunja:2.6.0 Up 48 seconds
controller.yml
serverstransports.yml
signup-block-vikunja.yml
dashboard session survived: 401
BookStack: sentence 2 (control 0), attachment sha equal YES
actualbudget stranger needs-bootstrap → {"status":"ok","data":{"bootstrapped":true,"loginMethod":"password","a (gate stays open)
vikunja stranger register → {"error":"sign-up is closed on this app; its admin adds new accounts"} 403; registration_enabled "registration_enabled":false
hub across the cut (non-routine):
2026/09/29 21:51:13 [INFO] restore-test staleness: tester-1 pbs tier: not restore-proven yet, but only watching for 1h0m0s (grace 288h0m0s since first contact 2026-09-29T19:20:37Z) — newborn, not a fault
2026/09/29 21:53:57 [INFO] Event from tester-1: controller_started (info) — Controller elindult (0.282.0)
@@ -0,0 +1,11 @@
## 2026-09-29T19:54:58Z A2 part 2 — the login page's „Elfelejtett jelszó“ path
href="/claim">Elfelejtett jelszó
/claim: Jelszó visszaállítása — Felhom | Jelszó | visszaállítása | Tester 1 | Add meg az e-mailben kapott beállító kódot, majd válassz új jelszót. | Beállító kód | Új jelszó (min. 12 karakter) | Új jelszó megerősítése | Jelszó beállítása | Új beállító kód kérése | Felhom — Otthoni szerver kezelés | felhom.eu | Magyar | English
the SPENT setup code (used 19:23) → 200: Hibás vagy lejárt kód
„Új kód kérése“ → 200: Jelszó visszaállítása — Felhom | Jelszó | visszaállítása | Tester 1 | Ha az e-mail cím regisztrálva van, elküldtük a kódot. | Add meg az e-mailben kapott beállító kódot, majd válassz új jelszót. | Beállító kód | Új jelszó (min. 12 karakter) | Új jelszó megerősítése |
mail at 19:55:00 „[Felhom] Beállító kód a jelszavad visszaállításához“ (code held 0600)
## 2026-09-29T19:55:21Z the NEW code with its last letter changed
→ 200: Hibás vagy lejárt kód
the right new code, right after → 302 location: /
login with the new password → 302 https://felhom.enkicsifelhom.hu/
login with the old password → 200