feat(identity-wallet): implement recovery override builder and state management
Implements Subcomponent A tasks 1-3 for Phase 2:
Task 1: build_op_diff helper
- Computes OpDiff between unauthorized state and fork-point state
- Reports full fork-point state restoration (rotation keys, services)
- Sets prev_cid to fork point operation CID
- Verifies AC7.2: recovery operation restores pre-unauthorized state
Task 2: build_recovery_override function
- Fetches audit log from plc.directory
- Identifies unauthorized operation and checks 72-hour recovery window
- Finds fork point (earliest device-key-signed operation before unauthorized change)
- Builds counter-operation restoring fork-point state
- Signs with per-DID device key (simulator: software P-256, real iOS: Secure Enclave)
- Includes sign_recovery_op and build_sign_closure with platform dispatch
- Verifies AC7.1, AC7.2, AC7.3, AC7.5, AC7.7
Task 3: Add RecoveryState to AppState
- Adds RecoveryState struct for pending recovery op between build and submit
- Adds recovery_state field to AppState (tokio::sync::Mutex<Option<RecoveryState>>)
- Initializes recovery_state in AppState::new()
- Enables multi-step recovery flow infrastructure
All tests pass (15/15 recovery tests):
- AC7.1: Counter-op prev points to fork point CID
- AC7.2: Counter-op restores fork-point rotation keys and services
- AC7.5: Recovery window check rejects expired operations
- AC7.7: Multiple unauthorized ops target earliest fork point
Also adds #[derive(PartialEq)] to claim::ChangeType for test assertions.