现象(staging E2E 2026-07-17,os-6zmft7.objectos.app)
新环境第一次打开登录页时,只渲染了邮箱+密码表单——没有「Continue with ObjectStack」按钮、也没按 ssoEnforced 隐藏密码表单。刷新后才正确(SSO 按钮 + break-glass「Use a password instead」)。
服务端无辜:当时 GET /api/v1/auth/config 返回完全正确(socialProviders:[{id:'objectstack-cloud',type:'oidc'}],ssoEnforced:true)。
影响
平台 SSO(SSO-only)模式下,JIT 用户没有密码。首开即密码墙 = 新 builder 在「打开环境」的魔法时刻直接卡死,除非碰巧刷新。P1。
疑似根因
登录页在 auth config 加载完成前(或首次请求失败/超时后)fallback 渲染了纯密码表单,config 到达后不重渲染/不重试。env 刚 provision 时 kernel 冷启动,首个 config 请求容易慢/失败,放大了这个 race。
修复方向
- config 未就绪时渲染 loading 骨架,而非默认密码表单
- config 请求失败自动重试(带退避)
- config 到达后强制以 config 为准重渲染(ssoEnforced → 隐藏密码表单)
🤖 Generated with Claude Code
现象(staging E2E 2026-07-17,os-6zmft7.objectos.app)
新环境第一次打开登录页时,只渲染了邮箱+密码表单——没有「Continue with ObjectStack」按钮、也没按
ssoEnforced隐藏密码表单。刷新后才正确(SSO 按钮 + break-glass「Use a password instead」)。服务端无辜:当时
GET /api/v1/auth/config返回完全正确(socialProviders:[{id:'objectstack-cloud',type:'oidc'}],ssoEnforced:true)。影响
平台 SSO(SSO-only)模式下,JIT 用户没有密码。首开即密码墙 = 新 builder 在「打开环境」的魔法时刻直接卡死,除非碰巧刷新。P1。
疑似根因
登录页在 auth config 加载完成前(或首次请求失败/超时后)fallback 渲染了纯密码表单,config 到达后不重渲染/不重试。env 刚 provision 时 kernel 冷启动,首个 config 请求容易慢/失败,放大了这个 race。
修复方向
🤖 Generated with Claude Code