# felhom.eu — task reports > **Overwrite** this file with a summary of the most recent task only (uniform with the other repos; not cumulative). The cumulative hub history lives in [hub/CHANGELOG.md](hub/CHANGELOG.md); the scripts history lives in [scripts/CHANGELOG.md](scripts/CHANGELOG.md). ## Hub v0.50.0 — customer-claim password arc (closes DRILL-day0-vm F-4/F-5) — 2026-07-12 Hub half of the customer-owned dashboard-password gate (controller v0.122.0 is the other half). The customer sets + owns the password via a one-time claim code the hub emails to the registered address; the hub stores only `bcrypt(code)`. **DEPLOYED: `felhom-hub:0.50.0` live on k3s (ArgoCD synced/healthy, `Listening on :8080` at 18:47 CEST).** ### What shipped - **`internal/claim`** — the code engine: `EnsureIssued` (idempotent Day-0/live-box issue+email), `Resend` (operator rotate), `RequestReset` (controller-forwarded, 3/day cap), `MarkClaimed` (set-only + one confirmation email). Plaintext code exists ONLY inside the email send. - **`store.customer_claims`** — `RotateClaimCode` (generation bump = single active code; PRESERVES `claimed_at`), `GetClaim`, `MarkClaimed` (set-only), `BumpResetCount`. - **Delivery**: `GET /api/v1/config/{id}` issues the first code + bakes `web.claim_code_*` into the generated controller.yaml; the report ACK serves `claim {code_hash, generation, issued_at}` (allowlisted) + ingests `claimed` (set-only); `POST /api/v1/claim/reset-request` (self-scoped). - **UI**: customer-page Setup tab claim chip + "Kód újraküldése" (`POST /configs/{id}/claim-resend`). - **Emails**: three Hungarian templates (claim / reset / claimed) via the notify dispatcher. - 15 tests (engine, ACK/config, UI); red-proofs for the generation bump + reset-non-DoS proven. ### Live validation Drill box demo-vm-felhom: on the first report after hub 0.50.0 + controller 0.122.0, the hub issued + emailed the claim code to the registered address and the ACK delivered the hash — the controller gate flipped ON (proven via the real Cloudflare edge: `/` → 302 claim page, `/api` → 401). Observed: the hub issues a code for EVERY reporting managed customer on first report (peti + demo also received emails) — benign, since a pre-v0.122 controller ignores the ACK claim field and has no gate. ### Version note Hub was at v0.49.0; this is v0.50.0. Controller v0.122.0 committed + image built. The **floor raise to 0.122.0 is the operator's supervised LAST step** (after the drill/demo claim validation) — a gated controller must never reach a box before its hub can deliver the code hash.