fix: address PR review feedback for MM-148 handle registration
Critical:
- Fix setInterval async callback swallowing poll errors — use .then/.catch
so IPC failures are logged instead of silently dropped for 2 minutes
- Map HTTP 401 from /v1/handles to SessionExpired (not KeychainError);
401 means the relay rejected the token, not a Keychain read failure
Important:
- Replace serde_json::Value dns_status parsing with typed CreateHandleRelayResponse
struct so dns_status deserialization is explicit, not a silent unwrap_or fallback
- Add tracing::debug\! for non-2xx in check_handle_resolution so relay 500s
during polling leave per-tick evidence in logs
- Add console.error in run() catch block so UNKNOWN errors are observable
- Change RegisterHandleError TypeScript type to a proper discriminated union
matching the OAuthError pattern (message required on NETWORK_ERROR/UNKNOWN)
Suggestions:
- Add settled guard to prevent onsuccess/ontimeout racing if a poll tick
resolves in-flight when the timeout fires
- Upgrade tracing::warn\! → tracing::error\! for missing DID in Keychain
(post-ceremony invariant violation, not a routine warn)