91f047dfc0
gates / gates (push) Successful in 29s
Part 0 shipped as controller v0.258.0 (its own commit). Part A is the guide's English twin. Part B is the walk: a box installed from scratch that day, used by an English speaker following only the English guide and the screens. VERDICT: not yet ready for an English-speaking tester, because the claim page — the one screen between them and their box — is English chrome with Hungarian messages (R-596, P1). Everything else held: the download page, the bilingual console, all three customer mails, the bind page and its refusal, the dashboard's first language from customer.language alone, both app pages, the whole catalog, the language switch both ways — every one of them with zero Hungarian lines. One intervention (I1 = R-494, filed 2026-09-14); the stop rule was not reached. The walk exercised what 2026-09-14 could not: the graphical installer, the auto-reboot, and the mailed link and self-bind page end to end — that walk's H1 is closed, because this session had a mailbox. R-214 CLOSED as a side effect and seen rather than reasoned about: the console's last paint is now the bilingual "the box is linked" banner. R-516 does NOT close, and the item-by-item note says why: more than half its twelve items are about what a HUNGARIAN household reads, and an English walk cannot see them. It now waits on a Hungarian walk with a second drive. Rows opened: R-596 (P1, the claim page), R-597 (the setup code is three Hungarian words), R-598 (the Backup page's protection warnings), R-599 (a drill's teardown is blocked 30 minutes by report staleness and the 409 does not say so). Golden 0.258.0 baked, published, vouched, with its record. The waiver was NOT retired and the record says why in one line. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
135 lines
12 KiB
Markdown
135 lines
12 KiB
Markdown
# 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/<token>` → **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.
|