# DRILL — an English speaker's first hour on 0.258.0 (2026-09-20) Every observable, in order. Times are UTC. "Language met" is the column the 2026-09-14 walk did not have. Classification: **(F)** Felhom-owned → a row · **(A)** the app's own UI → not ours · **(K)** known and deferred → its row number. ## Phase 0 — what the operator does before the volunteer starts | | observable | language met | |---|---|---| | 0.1 | Golden **0.258.0** baked, published (`…/felhom-golden/0.258.0/golden.tar.zst` → 200), vouched (`Artifact manifest set: agent=0.132.0 golden=0.258.0 min_agent="0.131.0"`). One run, no aborted attempts. Record: `documentation/tests/golden-0.258.0-2026-09-20/` | n/a | | 0.2 | Customer `drill-en-0920` created through the hub's own page **with `language=en`**; `dr_tier` and off-site OFF (ep0 is fenced for this task, as on 2026-09-14) | — | | 0.3 | The hub auto-minted and sent the bind mail on creation, with no button pressed: `self-bind link auto-minted for drill-en-0920 on customer creation` | — | | 0.4 | **The stranger's first Felhom text is the bind mail, and it is ENGLISH**: subject *"[Felhom] Link your Felhom box to your account"*, body *"Dear Customer, Your Felhom box is ready and waiting to be linked…"*, including the 5-word owner-passphrase explanation and the 7-day/5-attempt limits | **English** ✓ | **The operator steps the guide silently depends on**, all still true: create the customer (with the language), hand over the owner passphrase out of band, create the Cloudflare tunnel (**not done here — R-494, the known intervention**). ## Step 1 — download the installer | | observable | language met | |---|---|---| | 1 | `https://felhom.eu/en/download` → **HTTP 200**, 7 565 B, 0.12 s. Names `felhom-installer-1.29.0-pve9.2-1.iso`, 1 705 324 544 B, sha256 `dceacae5…e94829`, and gives the check command for Linux/macOS and PowerShell | **English — 0 Hungarian lines on the page** ✓ | | 1b | The ISO the drill VM boots hashes to **exactly** the published checksum, and its size matches the page to the byte. So this walk installs what a volunteer downloads, not a look-alike | — | ## Step 2 — install (the GRAPHICAL installer, which the 2026-09-14 walk did NOT exercise) | | observable | language met | |---|---|---| | 2.0 | VM 9301 on demo-hp, 8 GB / 4 cores / 120 GB on `nvme-scratch` (`/mnt/hdd_1`), ISO 1.29.0 as ide2, `--boot order=scsi0;ide2` set in a SEPARATE `qm set` after the disk existed | — | | 2.1 | Boot: the **graphical** entry is the default and fired on its own after the menu timeout | English (Proxmox's own) | | 2.2 | EULA screen → **I agree** | English (Proxmox's own) | | 2.3 | Target harddisk: `/dev/sda (120.00GiB, QEMU HARDDISK)`, listed with size and type as the guide says | English | | 2.4 | Location: prefilled **Hungary / Europe/Budapest / Hungarian keyboard** | English screen, Hungarian DEFAULTS | | 2.5 | Keyboard layout changed to **U.S. English** — see F1 | — | | 2.6 | Password screen: password twice, e-mail prefilled `mail@example.invalid` → replaced with `drill-en@felhom.eu`, exactly as the guide says | English | | 2.7 | Network: hostname prefilled `pve.example.invalid` (refused by the installer), changed to `felhom.drill-en-0920.felhom.eu`; DHCP gave 192.168.0.155/24, gw 192.168.0.1, DNS 192.168.0.250 — left alone as the guide says | English | | 2.8 | Summary: ext4 · /dev/sda · Hungary · Europe/Budapest · **Keymap en-us** · drill-en@felhom.eu · hostname felhom · 192.168.0.155/24. **"Automatically reboot after successful installation" is TICKED by default** — see F2 | English | | 2.9 | Install started 16:41:48Z | — | **Keyboard note, for honesty:** `qm sendkey` speaks US scancodes, so the layout had to be U.S. English for this harness to type at all. On 2026-09-14 that was recorded as a harness substitution (H2). **This time it is not one** — it is what an English-speaking volunteer would genuinely choose, and the fact that the guide told them to do the opposite is finding F1. ## Step 3 — the first screen (the console) | | observable | language met | |---|---|---| | 3.1 | Install started **16:41:48Z**; the appliance registered itself at the hub **16:44:33Z** (`appliance registered: new unclaimed box`); the console showed the pairing banner by **16:52:53Z** — about **11 minutes** from pressing Install | — | | 3.2 | `/etc/issue`, top of screen: *"There is nothing to do on this machine, and no need to log in. Follow the guide you received from Felhom."* | **English** ✓ | | 3.3 | The pairing banner is **bilingual**, Hungarian block then English block, inside one frame. **Pairing code `P3G-JGW`, printed once in each language.** The English half reads: *"Open the link from your e-mail and enter this code together with your Owner passphrase (the 5 words you received from your Felhom operator). This screen refreshes itself. There is nothing to do at the box; you can leave it switched on."* | **bilingual, English readable** ✓ | | 3.4 | The install auto-rebooted (the Summary's default) — the guide's *"Installation finished — reboot now?"* prompt never appeared. See **F2** | — | ## Step 4 — connecting the box (the self-bind page) — and A2, the typo **This is what 2026-09-14 could NOT do (its H1: no mailbox, so the operator's bind fallback was used and the mailed link and self-bind page were unproven).** This walk did the real customer path. | | observable | language met | |---|---|---| | 4.1 | The link from the e-mail opens `hub.felhom.eu/bind/` → **HTTP 200**. The page: *"Link your Felhom box"*, *"Pairing code — It appears on the box's monitor, after the install"*, *"Owner passphrase — The five-word phrase you received during setup. It proves the account is yours."*, *"For safety the link locks after 5 failed attempts."* | **English — 0 Hungarian lines** ✓ | | A2 | **Typo first:** `P3G-JGX` instead of `P3G-JGW` → refused with *"Those details are not right. Check the pairing code and the owner passphrase, then try again."* It does not say WHICH was wrong, which is right. Hub log: `self-bind attempt 1/5 failed` | **English — 0 Hungarian lines** ✓ | | 4.2 | Correct code + passphrase at **16:54:42Z** → *"Linked successfully. The box carries on installing within about a minute. You can close this page — the setup finishes in the background."* Hub log: `self-bind SUCCESS: appliance 34 bound to customer drill-en-0920 by customer self-service` | **English — 0 Hungarian lines** ✓ | **Harness slip, recorded:** while looking for the owner passphrase I printed it to stdout in a probe, against the project's own rule (never print a one-time secret; file→file). It belongs to this throwaway drill customer and is invalidated by the teardown that deletes the customer; every later use read it from a 0600 file. Recorded because a tidy-up nobody is told about teaches the next session nothing. ## Step 5 — the setup code, and the claim | | observable | language met | |---|---|---| | 5.1 | The setup-code mail arrived **31 seconds** after the bind (16:55:13Z). Body fully English: *"Your Felhom server is up. To use the dashboard for the first time, enter the setup code below, then choose your own password"*, the 72-hour/one-use limits, the dashboard address, and the "Request a new code" fallback | **English** ✓ | | 5.2 | **The setup code itself is three HUNGARIAN words with five accented characters** — see **F4**. 20 characters, 3 words, 5 of them outside ASCII | **HUNGARIAN inside an English mail** ✗ | | 5.3 | The dashboard address in the mail does **not resolve** — `getent hosts felhom.drill-en-0920.felhom.eu` finds nothing, because no Cloudflare tunnel was created. **This is R-494, filed long before this walk, and it is intervention I1** | — | | 5.4 | The install-time root password **no longer works** on the box (`Permission denied`) — exactly what the guide promises ("you do not need to remember it") | — PASS | | 5.5 | The claim page itself: *"Set up the server"*, *"Enter the setup code you got by e-mail…"*, *"New password (at least 12 characters)"*, *"Set up and sign in"*, *"Did not get the code? Ask for a new one"* | **English chrome** ✓ | | 5.6 | …but its MESSAGES are Hungarian. A short password answered **„A jelszónak legalább 12 karakter hosszúnak kell lennie"**; a wrong code answered **„Hibás vagy lejárt kód"** — the message the guide quotes in English. See **F3** | **HUNGARIAN** ✗ | | 5.7 | The correct code claimed the dashboard: **302 → /**. Power-on to a claimed dashboard: **≈23 minutes**, including two deliberate typo tests | — | ## Step 4 (continued) — the dashboard's first language | | observable | language met | |---|---|---| | 4.3 | Nobody touched a language switch. The dashboard came up **in English**, from `customer.language` alone: titles *"Apps — Felhom.eu"*, *"Backup — Felhom.eu"*, *"Settings — Felhom.eu"* | **English** ✓ | | 4.4 | Apps page: **0 Hungarian lines in 409**. Settings: **0 in 87**. Launcher: **0 in 39** | ✓ | | 4.5 | Backup page: **4 Hungarian strings in 73 lines** — see **F5** | ✗ | ## Steps 5–6 — the two apps the guide names | | observable | language met | |---|---|---| | 6.1 | BookStack and PrivateBin installed from the Apps page with the default subdomains, exactly as the guide says. The API answered **in English**: *"The install has started – the card shows how it is going"* | ✓ | | 6.2 | Both healthy: PrivateBin ~40 s, BookStack ~50 s after the request | — | | 6.3 | `/apps/bookstack`: **0 Hungarian lines**. `/apps/privatebin`: **0 Hungarian lines** — the whole catalog block (description, tagline, use cases, first steps, deploy labels) in English on a box that was installed from scratch today | ✓ | | 6.4 | The update badge read **"Up to date"** and the backup age **"0 hours ago — within the backup window"** — R-589 and the time helpers, both fixed in 0.258.0 this morning, both proven on a fresh box | ✓ | ## Step 13 — the language switch | | observable | language met | |---|---|---| | 13.1 | The globe switched the household to Hungarian: the Backup page title became **„Biztonsági mentés — Felhom.eu"** | ✓ both ways | | 13.2 | A VISITOR's switch on the sign-in page (`POST /lang`) returned 303 and set **only** the display cookie `felhom_lang=en`; the household's own setting was untouched | ✓ | | 13.3 | Switching the household back made the title **"Backup — Felhom.eu"** again | ✓ | ## Step 14 — the mailbox **Every customer mail this walk produced was in English.** Four mails in the hour: | to | subject | language | |---|---|---| | the customer | *[Felhom] Link your Felhom box to your account* | **English** ✓ | | the customer | *[Felhom] Your Felhom server is up — setup code* | **English** ✓ (the code inside is Hungarian — F4) | | the customer | *[Felhom] Your dashboard is now password protected* | **English** ✓ | | the operator | *[Felhom] ⚠️ drill-en-0920: backup_tier_skipped* | operator-tier, English body | The box's own log carries the observable R-558 built for exactly this question: `Event pushed: controller_started (info) **[+household(en)]** — Controller elindult (0.258.0)` — the operator's copy is Hungarian, and a separate English household sentence was attached. ## R-214 — CLOSED by this walk, and it was OPEN before it The 2026-09-14 drill recorded *"R-214 still reproduces"*: the console kept showing the pairing code and „a doboz … a párosításra vár" long after a successful bind. **It no longer does.** The console's LAST paint is the bound banner, bilingual, in one frame: > Felhom — a doboz össze van kötve. ✓ / A beállítás magától folytatódik… / Ezen a gépen nincs több teendőd. > Felhom — the box is linked. / Setup carries on by itself; this takes a few minutes. / Your dashboard address is in the e-mail you received. / There is nothing left to do on this machine. That is R-535 (slice 4, ISO 1.28.0) working on a real install, seen rather than reasoned about.