BIGNIGHT: R-509 filed (no self-bind mail for an existing customer) before intervention I1; journal + screens so far
gates / gates (push) Successful in 19s
@@ -0,0 +1,125 @@
|
||||
# Journal — BIGNIGHT 2026-09-14 (a household's first month in one night)
|
||||
|
||||
Times UTC unless marked. Hub logs print CEST (UTC+2). Brief: `drills/BIGNIGHT-2026-09-14.md`.
|
||||
|
||||
## Phase 1 — baselines (read 17:29–17:40Z from live source)
|
||||
|
||||
| repo | main == origin/main | version |
|
||||
|---|---|---|
|
||||
| felhom-controller | `406755fa8fba` | v0.242.0 (CHANGELOG top) |
|
||||
| felhom-agent | `4586f0f7f6d1` | v0.130.0 (tree: one untracked `scripts/__pycache__/`, no tracked change) |
|
||||
| felhom.eu | `a4d684412b49` | hub v0.113.0 (CHANGELOG top; live image `felhom-hub:0.113.0`) |
|
||||
| app-catalog-felhom.eu | `6d6eec307939` | — |
|
||||
|
||||
Register: highest id R-508; 221 table rows (grep `^| R-n`).
|
||||
|
||||
ISO 1.27.1: `/mnt/5_hdd/felhom.eu/felhom-iso/out/felhom-installer-1.27.1-pve9.2-1.iso`, 1 705 322 496 B,
|
||||
sha256 `25637007d5a7120ff9faa6b5b7ead3e33c0a361ac2d67e9fd4e0ee77c034c053` = `.sha256` = manifest
|
||||
`output-sha256`; manifest `repo-commit 27e8ec86…`, mode release, answer-file NONE. **Found, not rebuilt.**
|
||||
|
||||
DooPlex headroom: `/mnt/5_hdd` 37 %, `/` 52 %.
|
||||
|
||||
demo-hp (17:29Z): `qm list` empty; 9201 + 9202 running (each `memory: 25898`, `cores: 7`);
|
||||
host RAM 29 994 MB total, 24 652 MB available; 8 threads (Ryzen V1756B); storages `local` 56.96 %,
|
||||
`local-lvm` 44.17 %, `nvme-scratch` (dir `/mnt/hdd_1`, is_mountpoint yes) 1.03 %.
|
||||
|
||||
Gmail connector: authenticates as **`felhom.eu@gmail.com`** — the catch-all for `@felhom.eu`
|
||||
(threads to `admin@felhom.eu` and `drill0242@felhom.eu` land there). Read only; nothing sent.
|
||||
|
||||
## Phase 1 — the Tester 1 record (hub `GET /customers/tester-1`, Basic auth, 17:30Z)
|
||||
|
||||
Customer ID `tester-1` · Name „Tester 1" · Domain `enkicsifelhom.hu` · **Email `tester1@felhom.eu`** ·
|
||||
Config MANAGED. Status tile still reads `down`, „Last report 1h ago · Controller 0.242.0" — the stale
|
||||
report of the destroyed VM 331 (host record deleted 16:46:52Z). Claim: „Claimed 1h ago · generation 1".
|
||||
Edit tab: `dr_tier` **ON** (all four DR steps „waiting — no host enrolled yet"); **`offsite_enabled`
|
||||
OFF** („Enable offsite (provisions a Hetzner Storage Box on save)"). Controller floor v0.242.0.
|
||||
Mailbox: `to:tester1@felhom.eu` → 0 threads before tonight.
|
||||
|
||||
**Brief vs record — off-site.** The brief says "Off-site (Tier 3) is ON … its own namespace on ep0".
|
||||
On the record, the ep0 namespace is the **DR tier (PBS whole-guest)**; the **Tier-3 restic off-site
|
||||
is OFF**, and turning it on provisions a Hetzner Storage Box (money, and a new external resource).
|
||||
**Not followed:** I do not tick it — money is fenced by the rules file §1. "Off-site" tonight = the DR
|
||||
tier to ep0 as configured. Consequence, stated up front: the Phase 4 off-site integrity check and the
|
||||
Phase 6 app restore "from off-site" have no restic tier to act on; each is recorded as such when reached.
|
||||
|
||||
**Harness slip:** the first read of the customer page printed the page's text into this session's
|
||||
tool output, which includes the customer's hub **API key** (not the retrieval passphrase — that is
|
||||
masked). It stayed on DooPlex; not written to any file.
|
||||
|
||||
## Tunnel before any box (17:31:19Z, from DooPlex) — `tunnel-before-no-box.txt`
|
||||
|
||||
DNS resolves to Cloudflare (both resolvers); `https://felhom.enkicsifelhom.hu` → **530, `error code: 1033`**
|
||||
(no connector). Expected with no box.
|
||||
|
||||
## Venue — VM 333 `bignight-household` on demo-hp (created 17:31:52Z)
|
||||
|
||||
q35 / OVMF (`pre-enrolled-keys=0`), **4 cores**, `cpu=host`, **16 384 MB**, virtio NIC
|
||||
`BC:24:11:F2:E2:95` on vmbr0, `scsi0` **200 G** qcow2 on `nvme-scratch` (dir at `/mnt/hdd_1`, its root),
|
||||
ISO 1.27.1 on `ide2` (sha verified on the HP = `25637007…`). **One disk at install**; the data disk is
|
||||
added after.
|
||||
|
||||
**Why these numbers.** System disk = doorstep VM 331's 200 G. Memory: the HP has 29 994 MB; 9201 and
|
||||
9202 together used ≈ 5.3 GB at 17:29Z with 24 652 MB available. Both LXCs carry a 25 898 MB *limit*,
|
||||
so no VM size leaves both limits whole; 16 GB leaves ≈ 8 GB free plus 8 GB swap for 9201's real load.
|
||||
Cores: the 0242 drill's 4 of 8 threads.
|
||||
|
||||
Power-on **17:32:13Z**. GRUB (`s01`, `s02`): the two Felhom entries; **text mode** chosen (H4).
|
||||
|
||||
## Phase 2.1 — install from 1.27.1 (text mode), one disk
|
||||
|
||||
| UTC | screen | what it said / what was done |
|
||||
|---|---|---|
|
||||
| 17:34:5x | `s03` | English Proxmox EULA → „I agree" |
|
||||
| 17:35:11 | `s04` | „Target harddisk: /dev/sda (QEMU HARDDISK) (200.00 GiB)" — **one disk, no choice to make** → Next |
|
||||
| 17:35:24 | `s05` | Country Hungary · Timezone Europe/Budapest · Keyboard layout **Hungarian** (H2: changed to U.S. English, `s06`–`s09`; one dropped keystroke landed on „Turkish" first, corrected) |
|
||||
| 17:37:00 | `s11` | „Root password [at least 8 characters]" · Confirm · „Administrator email" **prefilled `mail@example.invalid`** → 20-char generated password (0600 file on DooPlex), `tester1@felhom.eu` (the guide: „a saját e-mail címedet") |
|
||||
| 17:39:01 | `s13` | nic0 `bc:24:11:f2:e2:95, virtio_net` · Hostname **`pve.example.invalid`** · IP `192.168.0.136`/24 (the DHCP lease, frozen static) · GW `192.168.0.1` · DNS `192.168.0.250` · „[X] Pin network interface names" → hostname set `felhom.enkicsifelhom.hu` per the guide (`s15`) |
|
||||
| 17:40:36 | `s16` | Summary: ext4 · /dev/sda · Europe/Budapest · U.S. English · tester1@felhom.eu · nic0 · felhom.enkicsifelhom.hu · 192.168.0.136/24 · 192.168.0.1 · 192.168.0.250 · „[X] Automatically reboot after successful installation" (H3: unticked, `s17`) |
|
||||
| 17:41:02 | — | Install pressed |
|
||||
| ≤17:43:47 | `s18` | „Success — Installation finished - reboot now?" (**≤ 2 m 45 s** copying; qcow2 4 058 MB, settled) |
|
||||
| 17:44:xx | first boot | H3: `qm stop`, `--delete ide2`, `--boot order=scsi0`, `qm start` |
|
||||
|
||||
Seeds prepared on DooPlex (scratchpad, tmpfs): 200 JPEG 1600×1200 noise + caption (264 MB), 20 three-page
|
||||
PDFs (2.3 MB), a 50 MB random file, a 150 s 1280×720 H.264 video (98.9 MB).
|
||||
|
||||
## Phase 2.2 — first screen, and waiting for the mail
|
||||
|
||||
**17:44:53Z — hub lists Unclaimed appliance 28** (38 s after power-on): smbios uuid `1ecd1c40…`, pairing
|
||||
code `***-***` (redacted), MAC `bc:24:11:f2:e2:95`, „Standard PC (Q35 + ICH9, 2009)", 15.6 GB, three SSH
|
||||
host keys. Bind list offers „Tester 1 (0 hosts)".
|
||||
|
||||
**The console, 17:45:31Z (`s19`, code redacted), verbatim:**
|
||||
|
||||
```
|
||||
Felhom otthoni szerver
|
||||
|
||||
Ezen a gépen most nincs dolgod, és bejelentkezni sem kell.
|
||||
A beállításhoz kövesd a Felhomtól kapott útmutatót.
|
||||
|
||||
felhom login:
|
||||
==============================================
|
||||
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 — nincs teendő a
|
||||
doboznál, és nyugodtan itt hagyhatod bekapcsolva.
|
||||
==============================================
|
||||
```
|
||||
|
||||
No Proxmox `:8006` line on the first boot (the 1.27.1 fix holds on a fresh install). Text says
|
||||
„otthoni szerver"; the guide §3 quotes „Ezen a képernyőn nincs teendőd" — **the guide's quote does not
|
||||
match the screen word for word** (meaning is the same).
|
||||
|
||||
**Mailbox, 17:46Z:** `to:tester1@felhom.eu` → 0 threads. The console asks for „az e-mailben kapott linket".
|
||||
Hub source: the self-bind link is auto-sent only at **customer creation** (`configs.go:725`) and at
|
||||
**RESET completion** (`customer_reset.go:162`); `tester-1` was created 32 days ago with no e-mail, so no
|
||||
link was ever sent to `tester1@felhom.eu`. Waiting the brief's 10 minutes (to 17:55Z) before acting.
|
||||
|
||||
**17:55:11Z — ten minutes, 0 messages to `tester1@felhom.eu`.** Filed **R-509 (P1)** at 17:56Z, before acting.
|
||||
**Intervention I1:** the operator's „Send self-bind link" button on the customer's Setup tab is pressed
|
||||
(a volunteer cannot press it).
|
||||
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
@@ -0,0 +1,5 @@
|
||||
=== tunnel BEFORE (no box) 2026-09-14T17:31:19Z
|
||||
dig @1.1.1.1 felhom.enkicsifelhom.hu: 172.67.205.21 104.21.22.132
|
||||
dig @192.168.0.1 felhom.enkicsifelhom.hu: 104.21.22.132 172.67.205.21
|
||||
https://felhom.enkicsifelhom.hu -> 530 0.199202s
|
||||
error code: 1033
|
||||
@@ -712,6 +712,7 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server`
|
||||
| **R-506** | **[P3-LOW] `day0-install.md` A.1 says "the controller manages per-app hostnames itself via the tunnel" — it does not.** MEASURED 2026-09-14: no code under `felhom-controller/controller/internal` creates tunnel ingress, DNS records or tunnel configurations (`grep -i 'ingress\|cfd_tunnel\|/configurations\|dns_records'` → only comments saying cloudflared is deployed when a token exists; positive control: the geo-restriction CF API use IS found in `cmd/controller/main.go`). The controller's only Cloudflare act is geo-restriction; the tunnel runs `tunnel run` with the token, so its routes come from Cloudflare's remote config set by the operator. A reader following A.1 skips the one step that makes the dashboard reachable (R-505). **Fix shape:** A.1 names the public-hostname step and its service settings, copied from a working tunnel. | **READY — rank P3-LOW; owner: CC (doc), operator (the settings to copy)** |
|
||||
| **R-507** | **[P3-LOW] The proof-install harness cannot drive the graphical installer, so a release's graphical entry is proven only up to its password screen.** MEASURED 2026-09-14 on VM 332 (ISO 1.27.0): `qm sendkey 332 tab` did not move focus (both password copies landed in one field), `mouse_move 1237 772` + `mouse_button 1` did not move the cursor or press Next, while `alt-n` did advance a page. The TUI entry is fully drivable. The gate's "proof install on BOTH menu entries" was met for 1.26.1 (by a person) and not for 1.27.x. **Fix shape:** measure QEMU `input-send-event` with absolute coordinates, or a VNC client on DooPlex; until then a release's graphical proof is an operator click-through. | **READY — rank P3-LOW; owner: CC** |
|
||||
| **R-508** | **[P2-MEDIUM] Customer `tester-1` has no registered e-mail, so neither the self-bind link nor the setup code can reach a volunteer.** MEASURED 2026-09-14: the edit form's `email` value is empty; on bind the hub logged `[ERROR] [claim] claim code generated (gen 1) but customer tester-1 has NO registered email — deliver via resend after setting one`. A volunteer onboarded on this record would sit at „A szerver beállítása" with no code. **What it needs:** the operator sets the volunteer's address on the record before sending the guide (day-0 A.2). The hub's customer page could warn when a record with an unclaimed box has no e-mail — the log line exists, the page says nothing. | **WAITING-ON-OPERATOR — rank P2-MEDIUM; owner: operator (record), CC (page warning)** |
|
||||
| **R-509** | **[P1-HIGH] A box installed for an EXISTING customer never gets the self-bind e-mail the console tells the volunteer to open.** MEASURED 2026-09-14 (BIGNIGHT, VM 333, ISO 1.27.1): customer `tester-1` now has `tester1@felhom.eu` registered; the box registered as appliance 28 at 17:44:53Z and its console says „Nyisd meg az e-mailben kapott linket"; **ten minutes later the mailbox (read through the Gmail connector) held 0 messages to that address.** Cause, from source: the hub auto-sends the link only at customer creation (`hub/internal/web/configs.go:725`) and at RESET completion (`customer_reset.go:162`); a customer whose e-mail was added later, or whose previous box was destroyed, never receives one unless the operator presses „Send self-bind link". The volunteer guide's operator prerequisites do not list that press. Intervention **I1** of the big night (the operator's button pressed). **Fix shape (for the operator to choose):** send the link when an unclaimed appliance registers and a customer with no host is waiting, or add the press to the guide's operator prerequisites (day-0 A.2). | **READY — rank P1-HIGH; owner: CC (hub fix) · operator (which fix shape)** |
|
||||
|
||||
<!-- DUE-CHECKS-BEGIN — machine-readable. Parsed by scripts/due_checks_gate.py.
|
||||
One row per dated check. The R-number must have a row above. Dates are UTC.
|
||||
|
||||