Summary#
- Phase 1 (relay): Add
GET /v1/relay/keyspublic endpoint returning the active signing key as{ keyId, publicKey, algorithm }or 503 if unprovisioned. 4 integration tests. Bruno file added. - Phase 2 (crypto): Add
build_did_plc_genesis_op_with_external_signer— callback-based genesis op builder enabling Secure Enclave signing without exposing raw private key bytes.build_did_plc_genesis_oprefactored to thin wrapper. 2 new tests. - Phase 3 (identity-wallet Rust): Add
perform_did_ceremonyTauri command — 7-step orchestration (device key → relay key → genesis op → pending token → POST /v1/dids → persist DID + session token → return). ExtendRelayClientwithget(),post_with_bearer(),base_url(). 8 serde serialization tests. - Phase 4 (identity-wallet TS/Svelte): Wire
performDIDCeremony()IPC wrapper,DIDCeremonyScreen.svelte(loading/error/retry),DIDSuccessScreen.svelte(truncated DID + Continue), and+page.sveltestep machine (did_ceremony→did_success→shamir_backup).
Test Plan#
-
cargo test -p relay get_relay— 4/4 pass (AC1.1–AC1.4) -
cargo test -p crypto— 44/44 pass (AC2.1–AC2.3) -
cargo test -p identity-wallet— 23/23 non-keychain tests pass, 8 pre-existing sandbox failures unaffected (AC3.4–AC3.7 serde contracts) -
pnpm check— 262 files, 0 errors (AC4 TypeScript contracts) - iOS Simulator: full onboarding flow end-to-end (see
docs/test-plans/2026-03-20-MM-146.md)