hub v0.50.0: customer-claim arc docs (CHANGELOG, default template claim_code_* fields, REUSE rows)
Claude-Session: https://claude.ai/code/session_01NptTCFtu7dz2Ru89qHRagN
This commit is contained in:
@@ -1,5 +1,33 @@
|
||||
# Felhom Hub — Changelog
|
||||
|
||||
## v0.50.0 — customer-claim password arc: code engine + email + ACK/config delivery (2026-07-12)
|
||||
|
||||
Hub half of the customer-claim password gate (closes DRILL-day0-vm F-4/F-5; needs controller
|
||||
v0.122.0). The customer OWNS the dashboard password — the hub generates a one-time claim code,
|
||||
emails it (Hungarian) to the REGISTERED address, and stores only `bcrypt(code)`. No operator-set
|
||||
path; the plaintext code exists solely inside the email send (the retrieval-passphrase custody
|
||||
rule).
|
||||
|
||||
- **`internal/claim`** — the code engine. `EnsureIssued` (idempotent — issue+email at the FIRST
|
||||
real config retrieve = Day-0, and at a live box's first report; repeated pulls/reports never
|
||||
rotate or re-send), `Resend` (operator button; rotates generation — unclaimed gets the claim
|
||||
template, claimed gets the reset template), `RequestReset` (controller-forwarded "Elfelejtett
|
||||
jelszó", rate-limited 3/day/customer), `MarkClaimed` (set-only; one confirmation email on the
|
||||
unclaimed→claimed transition).
|
||||
- **`store.customer_claims`** — per-customer `{code_hash, generation, issued_at, emailed_at,
|
||||
claimed_at, reset_day, reset_count}`. `RotateClaimCode` bumps the generation (single active
|
||||
code) and PRESERVES `claimed_at` (a reset never un-claims); `MarkClaimed` is set-only.
|
||||
- **Delivery**: `GET /api/v1/config/{id}` bakes `web.claim_code_{hash,generation,issued_at}` into
|
||||
the generated controller.yaml (gate-from-first-boot) and issues the first code; the report ACK
|
||||
serves the active `claim {code_hash, generation, issued_at}` (allowlisted) and ingests the
|
||||
controller's `claimed` flag (set-only). `POST /api/v1/claim/reset-request` (self-scoped by the
|
||||
box's report key). New emails via the notify dispatcher; `claim_lockout` event allowlisted.
|
||||
- **UI**: the customer page Setup tab shows a claim status chip (Nyitott — kód kiküldve / Claimed)
|
||||
+ a "Kód újraküldése" button (`POST /configs/{id}/claim-resend`) — no plaintext code ever
|
||||
rendered (there is none to render).
|
||||
- 15 tests (engine, ACK/config, UI); the arc's red-proofs live in the controller repo (gate) +
|
||||
here (generation bump, reset non-DoS).
|
||||
|
||||
## v0.49.0 — Edit tab merge (edit-a), scoped auto-refresh, style.css cache-bust (2026-07-12)
|
||||
|
||||
> The task spec targeted "v0.48.0", but v0.48.0 (app_start_failed, below) had already shipped +
|
||||
|
||||
Reference in New Issue
Block a user