fix: address PR review feedback for relay URL config
- BLOCKER 1: set_relay_client logs warning when OnceLock::set drops value
- BLOCKER 2: save_relay_url logs reqwest::Error before discarding it
- BLOCKER 3: Add RelayConfigError serialization tests (INVALID_URL, UNREACHABLE, KEYCHAIN_ERROR)
- SHOULD FIX 4: normalize_relay_url rejects URLs with non-root paths
- SHOULD FIX 5: Update CLAUDE.md - twelve onboarding screens, seventeen-step state machine
- SHOULD FIX 6: Fix default_relay_url() doc comment to reflect actual usage
- SHOULD FIX 7: Make UTF-8 error logging consistent (tracing::error instead of warn)
- SUGGESTION 8: TypeScript RelayConfigError as discriminated union
- SUGGESTION 9: Add comment explaining test ordering assumption for get_relay_url test
- SUGGESTION 10: Add comment explaining Unreachable conflates transport and HTTP errors