You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(auth): login-page config race + sign-in watchdog — never strand SSO-only users on a password wall (#2629)
Staging E2E (2026-07-17) on a freshly provisioned environment: the login
page's FIRST load rendered the plain password form — no "Continue with
ObjectStack", no ssoEnforced collapse — because the /auth/config fetch hung
or failed while the kernel cold-started, and both LoginForm and
SocialSignInButtons silently fell back to defaults. Platform-SSO JIT users
have no password, so this dead-ends the "open your environment" moment
(#2625). Clicking the SSO button inside the same cold-start window hung the
POST forever with the button stuck spinning (#2626).
- getConfig: single-flight + success cache (3 requests → 1) with retrying
backoff (500ms/1.5s/3.5s, 8s per-attempt AbortController timeout) so a
hung request converts into a retry; final failure clears the cache.
- LoginForm: hold a spinner until config resolves; on resolve, honour
ssoEnforced on first paint. On final failure keep the old safe default
(password form) — break-glass beats lock-out.
- signInWithProvider: 20s watchdog rejects a hung sign-in so the #2458
button contract (pending + inline error) can recover it; legacy oauth2
fallback failures no longer mask the social-route error.
- Drop LoginForm's duplicate "or" divider (SocialSignInButtons already
renders one) — the stacked dividers read as a glitch.
Closes#2625. Closes#2626.
Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
0 commit comments