diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/desktop-client-v1.md | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/docs/desktop-client-v1.md b/docs/desktop-client-v1.md index b167525..491af65 100644 --- a/docs/desktop-client-v1.md +++ b/docs/desktop-client-v1.md @@ -1000,10 +1000,18 @@ refactoring the same six commands twice. | # | Component | Prio | |---|---|---| -| C1 | **Device linking** — `identities` schema, `device_requests`, the two transcripts, operator surface (§4) | 1 | -| C2 | **`POST /v1/users/auth`** — device Ed25519 authentication (§5). *The only hub change in the whole plan* | 1 | -| C3 | **Minimum client version** in `GET /v1/hub/version` (§2.6, O8) | 1 | -| C4 | Device management in the SPA — list, approve, revoke | 1 | +| C1 | ✅ **DONE 2026-08-18** — `identities` keyed by (user_id, pk_ed25519) with a rebuild migration that preserves existing pins, `device_requests`, both transcripts in `meshbay_common/device.py`, handlers and audit events | 1 | +| C2 | ✅ **DONE 2026-08-18** — `POST /v1/users/auth`, plus `/v1/users/devices` to register, list and retire. New `user_devices` table with an Alembic migration. *The only hub change in the whole plan* | 1 | +| C3 | ✅ **DONE 2026-08-18** — `client.minimum` and `client.recommended` in `GET /v1/hub/version` | 1 | +| C4 | ✅ **DONE 2026-08-18** — the `unknown_device` refusal offers a linking code; the Members panel lists devices, approves by code and retires one | 1 | + +**One correction the implementation forced.** §4.3 has the approver look a request +up by its hash — which is circular, because computing that hash needs the keys +being asked about. What shipped: the node lists this account's pending requests +**with their stored hashes**, and the client recomputes `sha256(code ‖ keys)` for +each and keeps the match. The code never reaches the node, which is what makes +substitution impossible: a node offering fabricated keys would have to produce a +hash over a code it has never seen. C1 lands in the SPA first, where both ends of a link can be exercised without a desktop build existing. |