0f321c62c1
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 41s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m43s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m48s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m49s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m8s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m35s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 2m6s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m58s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m27s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m22s
CI/CD Pipeline / CI Gate (pull_request) Failing after 7s
AI Code Review / AI Code Review (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 698h31m29s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 698h31m31s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 698h31m31s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 698h31m30s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 698h31m31s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 698h36m10s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 698h36m12s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 698h31m31s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 698h36m51s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 698h36m51s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 698h36m55s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 698h36m55s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 698h36m55s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 699h5m12s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 699h9m37s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 699h10m30s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 699h10m34s
Bug 1 — 数据源统一: - scheduleProactiveRefresh() 中 accessToken 和 refreshToken 统一从 Zustand store 读取 - 修复前:accessToken 从 localStorage 读,refreshToken 从 Zustand 读(不一致) - 修复后:两者都从 useAuthStore.getState() 读取(单一数据源) Bug 2 — 非空断言修复: - 移除 client.ts 和 tokenRefresh.ts 中的 user! 强制非空断言 - executeTokenRefresh() 在刷新前检查 user 是否为空,为空则跳过刷新 - client.ts 401 处理中,executeTokenRefresh() 返回 null 时直接登出 并发竞态修复: - 新增 executeTokenRefresh() 共享函数,带 activeRefreshPromise 锁 - 主动刷新(setTimeout)和被动刷新(401 拦截器)共用同一把锁 - 多个组件同时触发刷新时,只发一次请求,后续调用复用 Promise 测试更新: - client.test.ts 适配新逻辑,mock executeTokenRefresh 替代直接 mock refreshAccessToken - 43 个测试全部通过