9cb20c38ae
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 41s
CI/CD Pipeline / Build Staging API Image (push) Successful in 2m4s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 3m12s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 3m43s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 4m10s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m12s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 1m3s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 1m20s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 7m25s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m31s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 10m28s
CI/CD Pipeline / Unit Tests (push) Successful in 15m9s
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Failing after 623h43m17s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 623h43m19s
CI/CD Pipeline / Build Production Web Image (push) Failing after 623h43m19s
CI/CD Pipeline / PR Build Web Image (push) Failing after 623h58m26s
CI/CD Pipeline / PR Build API Image (push) Failing after 623h58m28s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 623h58m32s
CI/CD Pipeline / Canary Release to Production (push) Failing after 623h43m18s
CI/CD Pipeline / Build Production API Image (push) Failing after 623h43m19s
CI/CD Pipeline / Deploy Production (push) Failing after 624h17m4s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 624h32m10s
CI/CD Pipeline / Frontend Lint (push) Failing after 624h32m15s
React 18 Strict Mode 下 effect 执行两次(run → cleanup → run), destroy() 和 init() 都调用 decodeGenerationRef.current++ 导致 generation 被多增两次,decode loop 内 generation check 误判为 seek/destroy 事件而提前退出。 修复: - destroy() 移除 decodeGenerationRef.current++ - init() 移除 decodeGenerationRef.current++ - seek()/play() 保留 generation 递增不变 - decoder.state === 'closed' 时 return 而非 break,让第二轮 init 重新创建 decoder 正常解码