v6.3.0
What's Changed
Added
- Mask account emails across all display surfaces (#164) —
maskEmailnow applies to command output, the interactive auth menu, delete/refresh confirmations, the standalone login menu, the interactive account picker, and runtime rotation/auth-failure messages, not just the TUI quota status. Raw emails remain only in opt-in--includeSensitiveJSON.
Fixed
- 16 deep-audit findings (#165) — data-loss, rotation, redaction, and concurrency bugs:
- Transient refresh failures (network/5xx) no longer trigger permanent account removal.
- Keychain load no longer swallows forward-compat (
UNSUPPORTED_SCHEMA_VERSION/ V2) errors. - Workspace-deactivation removes only the deactivated workspace, not refresh-token siblings.
- Refresh-token rotation propagates to sibling org-variant accounts.
runAccountCheck/ email hydration writes are transactional (no lost updates).- Health/token-bucket/backoff trackers remap on account removal (no misattributed rotation state).
- Token-bucket depletion rotates instead of aborting the whole pool.
- Empty-response retry actually retries (was a no-op 503 for single-account).
retry_after_msvsretry_afterscaled correctly.- Stream-stall/SSE exceptions refund the token and rotate.
codex-diffredaction is key-aware (opaque tokens no longer leak).- Flagged storage uses the keychain when
CODEX_KEYCHAIN=1. - Logger masks emails domain-preserving and adds cookie headers to the sensitive set.
Internal
- Deep stress suite (#166) — property-based and concurrency tests for the audited subsystems, each mutation-verified.
Full test suite: 2487 passing.