feat(identity-wallet): implement submit_claim command (AC4.8, AC4.9)
Adds submit_claim_impl helper and Tauri command wrapper for final claim step.
Core logic:
- Reads verified_signed_op from ClaimState, returns Unauthorized if None
- POSTs signed operation to plc.directory via post_plc_operation
- Persists identity to IdentityStore:
- add_identity(did) registers DID
- get_or_create_device_key(did) ensures key exists
- Re-fetches DID doc and stores via store_did_doc
- Fetches and stores audit log via store_plc_log
- Clears claim state after success
- Returns ClaimResult with updated_did_doc
Tests:
- AC4.8: Success case - operation POSTs successfully, identity persisted
- AC4.9: PlcDirectoryError when POST fails with 409 Conflict
- Unauthorized when verified_signed_op is None
Changes:
- Added #[derive(Clone)] to ClaimState for mutex extraction
- Manual conversion of PlcDidDocument to serde_json::Value
- Added 3 tests covering happy path and error cases