Commit Graph

31 Commits

Author SHA1 Message Date
xiaoxia 53fb25efcf fix(#1834): 批量修复 UP 系列静态分析警告(UP007/UP006/UP017/UP035) (#1928)
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 2s
CI/CD Pipeline / Check push changed paths (push) Successful in 19s
CI/CD Pipeline / Build Staging API Image (push) Successful in 41s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 48s
CI/CD Pipeline / Integration Tests (push) Successful in 3m10s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 3m17s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 3m30s
CI/CD Pipeline / Validate - Style (push) Successful in 4m17s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 59s
CI/CD Pipeline / Frontend Unit Tests (push) Failing after 5m33s
CI/CD Pipeline / Validate - Security (push) Successful in 7m12s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 2m38s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m13s
CI/CD Pipeline / Unit Tests (push) Successful in 10m11s
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Failing after 26h14m3s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 26h24m21s
CI/CD Pipeline / Retag skipped Staging API Image (push) Failing after 26h19m47s
CI/CD Pipeline / PR Build Web Image (push) Failing after 26h23m44s
CI/CD Pipeline / PR Build API Image (push) Failing after 26h23m44s
CI/CD Pipeline / Deploy Production (push) Failing after 26h13m23s
CI/CD Pipeline / Build Production Web Image (push) Failing after 26h13m26s
CI/CD Pipeline / CI Gate (push) Failing after 26h13m25s
CI/CD Pipeline / Build Production API Image (push) Failing after 26h13m26s
CI/CD Pipeline / Canary Release to Production (push) Failing after 26h13m23s
CI/CD Pipeline / Retag skipped Staging Web Image (push) Failing after 26h19m46s
CI/CD Pipeline / Frontend Lint (push) Failing after 26h23m37s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 26h23m45s
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Failing after 26h19m46s
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-09-15 12:59:17 +08:00
xiaoxia 9c0474ef9c feat: #1775 默认项目/素材库幂等化(DB 唯一约束兜底)
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check push changed paths (push) Successful in 7s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 41s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 42s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (push) Successful in 1m0s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 34s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 2m32s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m50s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m53s
CI/CD Pipeline / Integration Tests (push) Successful in 2m56s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 2m43s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Validate - Style (push) Successful in 3m19s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 50s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m7s
CI/CD Pipeline / Validate - Security (push) Successful in 5m45s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 1m54s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 6m6s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 2m13s
AI Code Review / AI Code Review (pull_request) Successful in 6m38s
CI/CD Pipeline / Unit Tests (push) Failing after 7m58s
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Failing after 198h32m29s
CI/CD Pipeline / CI Gate (push) Failing after 198h32m31s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 198h32m31s
CI/CD Pipeline / Build Production Web Image (push) Failing after 198h32m31s
CI/CD Pipeline / Build Production API Image (push) Failing after 198h32m31s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 198h36m16s
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Failing after 198h37m22s
CI/CD Pipeline / Retag skipped Staging Web Image (push) Failing after 198h37m23s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 198h39m3s
CI/CD Pipeline / Retag skipped Staging API Image (push) Failing after 198h37m23s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 198h39m11s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 198h39m14s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 198h39m20s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 198h39m40s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 198h39m27s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 198h39m33s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 198h39m42s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 198h39m45s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 198h39m39s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 198h40m27s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 198h40m28s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 198h40m29s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 198h40m29s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 198h40m29s
CI/CD Pipeline / Validate - Security (pull_request) Failing after 198h40m30s
CI/CD Pipeline / Validate - Style (pull_request) Failing after 198h40m30s
CI/CD Pipeline / Frontend Lint (push) Failing after 198h40m30s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 198h40m37s
CI/CD Pipeline / PR Build API Image (push) Failing after 198h40m37s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 198h40m37s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 198h40m39s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 199h14m21s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 199h14m26s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 199h15m10s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 199h15m11s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Failing after 199h15m11s
CI/CD Pipeline / PR Build Web Image (push) Failing after 199h15m19s
Squash merge PR #1783 into develop
2026-09-08 08:43:31 +08:00
xiaoxia 528f56254d feat(#1718): PATCH /auth/me 资料更新接口 + profile_completed 字段 (#1728)
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check push changed paths (push) Successful in 8s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 20s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 21s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 23s
CI/CD Pipeline / Build Staging API Image (push) Successful in 17s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 23s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 33s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 2m0s
CI/CD Pipeline / Integration Tests (push) Successful in 2m17s
CI/CD Pipeline / Validate - Style (push) Successful in 2m28s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m8s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m6s
AI Code Review / AI Code Review (pull_request) Successful in 3m27s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m38s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 1m30s
CI/CD Pipeline / Validate - Security (push) Successful in 4m54s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 5m17s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m11s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 5m10s
CI/CD Pipeline / Unit Tests (push) Successful in 8m18s
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 11m48s
CI/CD Pipeline / Canary Release to Production (push) Failing after 243h9m2s
CI/CD Pipeline / CI Gate (push) Failing after 243h9m5s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 243h9m5s
CI/CD Pipeline / Build Production Web Image (push) Failing after 243h9m5s
CI/CD Pipeline / Build Production API Image (push) Failing after 243h9m5s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 243h13m34s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 243h16m9s
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Failing after 243h16m10s
CI/CD Pipeline / Retag skipped Staging API Image (push) Failing after 243h16m12s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 243h16m16s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 243h16m17s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 243h16m19s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 243h16m46s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 243h16m40s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 243h17m16s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 243h16m43s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 243h17m17s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 243h17m18s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 243h17m18s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Failing after 243h17m19s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 243h17m19s
CI/CD Pipeline / Validate - Security (pull_request) Failing after 243h17m20s
CI/CD Pipeline / Frontend Lint (push) Failing after 243h17m24s
CI/CD Pipeline / Validate - Style (pull_request) Failing after 243h17m20s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 243h17m25s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 243h17m26s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 243h17m26s
CI/CD Pipeline / PR Build Web Image (push) Failing after 243h17m26s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 243h17m27s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 243h17m28s
CI/CD Pipeline / PR Build API Image (push) Failing after 243h17m27s
CI/CD Pipeline / Deploy Production (push) Failing after 243h43m37s
CI/CD Pipeline / Retag skipped Staging Web Image (push) Failing after 243h50m46s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 243h50m52s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 243h51m20s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 243h51m52s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 243h51m54s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 243h52m0s
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-09-06 12:06:58 +08:00
saas-backend-bot df99305dd6 feat(worker): celery 队列隔离 + 孤儿任务消息作废 (#1714)
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 29s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 29s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 49s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m39s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m44s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m19s
AI Code Review / AI Code Review (pull_request) Failing after 2m52s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m54s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 4m11s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 6m23s
CI/CD Pipeline / CI Gate (pull_request) Failing after 1s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m39s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 260h6m22s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 260h6m25s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 260h6m25s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 260h12m32s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 260h12m33s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 260h12m43s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 260h12m33s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 260h12m43s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 260h12m43s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 260h12m48s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 260h12m49s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 260h12m51s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 260h12m49s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 260h12m57s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 260h40m56s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 260h40m59s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 260h47m12s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 260h47m22s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 260h47m24s
问题:素材转码与视频生成共用 celery 默认队列、worker 单进程消费,
20+ 转码积压会把用户生成任务堵 40 分钟以上;孤儿清理把任务标 failed
后 Redis 队列消息未作废,消息被重投导致 failed→running 非法转换,
worker 打印 ERROR 后继续产出半成品。

队列隔离:
- 新增 packages/shared/celery_queues.py:generation/transcode/celery
  三队列与 task_routes(generate_video→generation;ingest_asset/
  classify_asset/duplication→transcode),apply_queue_settings()
- worker 入口改双进程:generation worker 独占队列并内嵌 beat
  (prefetch=1, GENERATION_CONCURRENCY 默认 2),transcode worker
  消费 transcode,celery(并发=总-2,最小 1),任一退出则整体终止
- compose/部署脚本/ps1 同步新增 GENERATION_CONCURRENCY 与健康检查

消息作废:
- 新增 packages/shared/celery_orphan_guard.py:终态守卫
  ensure_task_claimable、Redis 队列消息物理清理(JSON 信封解析,
  按业务 id + celery headers.id 双匹配,未命中 rpush 保序)、
  revoke_and_purge(control.revoke + 物理清队列双保险)
- 入队点(生成/上传/分片/重试)send_task 后持久化 celery_task_id
  到 generation_tasks/ingest_jobs(新列,067 迁移,失败仅 warning)
- generate_video/ingest_asset 执行前校验 DB 状态:终态直接 discarded
  不进业务逻辑;mark_processing 返回 False(非法转换)安全中止
- 孤儿/超时清理标 failed 时同时 revoke + 清队列消息
- pending 超时阈值 15→45 分钟,与 running 孤儿(20min)区分

测试:新增 22 个单测(路由表/真实 Redis 消息清理/终态守卫/
非法转换中止/标 failed 后消息不重投/入队持久化),全量
14301 passed;067 迁移隔离 DDL 验证 upgrade/downgrade 通过。
2026-09-05 19:07:47 +08:00
xiaoxia 0a7ae8db4f fix(upload): complete 接口幂等去重 + HEVC 转码回写占位 asset 禁止兜底新建 (#1714) (#1715)
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 1s
CI/CD Pipeline / Check push changed paths (push) Successful in 4s
CI/CD Pipeline / Build Staging API Image (push) Successful in 41s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 32s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m5s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 2m8s
AI Code Review / AI Code Review (pull_request) Failing after 2m24s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 1m51s
CI/CD Pipeline / Validate - Style (push) Successful in 2m36s
CI/CD Pipeline / Integration Tests (push) Successful in 2m33s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m52s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 5m21s
CI/CD Pipeline / Validate - Security (push) Successful in 5m43s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 3m1s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 1m20s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 1m32s
CI/CD Pipeline / Unit Tests (push) Successful in 8m29s
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m18s
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 21s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 24s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 28s
CI/CD Pipeline / CI Gate (pull_request) Successful in 17s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 262h50m20s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 262h50m38s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 262h50m40s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 262h57m36s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 262h57m48s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 262h57m49s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 262h57m54s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 262h57m56s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 262h57m37s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 262h58m2s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 262h57m37s
CI/CD Pipeline / Deploy Production (push) Failing after 263h8m9s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 263h8m10s
CI/CD Pipeline / Build Production Web Image (push) Failing after 263h8m10s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 263h12m49s
CI/CD Pipeline / Build Production API Image (push) Failing after 263h8m10s
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Failing after 263h14m0s
CI/CD Pipeline / Retag skipped Staging Web Image (push) Failing after 263h14m0s
CI/CD Pipeline / Retag skipped Staging API Image (push) Failing after 263h14m1s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 262h57m58s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 262h58m1s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Failing after 262h58m1s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 262h57m58s
CI/CD Pipeline / Validate - Style (pull_request) Failing after 262h58m1s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 262h57m58s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 263h16m37s
CI/CD Pipeline / PR Build API Image (push) Failing after 263h16m38s
CI/CD Pipeline / PR Build Web Image (push) Failing after 263h16m38s
CI/CD Pipeline / Frontend Lint (push) Failing after 263h16m39s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 263h16m46s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 263h32m15s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 263h32m22s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 263h32m29s
CI/CD Pipeline / CI Gate (push) Failing after 263h42m43s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 263h24m54s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 263h25m13s
CI/CD Pipeline / Validate - Security (pull_request) Failing after 263h32m34s
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-09-05 16:07:45 +08:00
xiaoxia 5679daca41 refactor(#779): 消除重复枚举定义,统一到classification模块 (#801)
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m55s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 4m50s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 1m54s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 1m58s
CI/CD Pipeline / Unit Tests (push) Successful in 6m48s
CI/CD Pipeline / Integration Tests (push) Successful in 2m31s
CI/CD Pipeline / Frontend Lint (push) Successful in 49s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 2m36s
CI/CD Pipeline / Build Staging API Image (push) Successful in 13m52s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 2m28s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 4m50s
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Failing after 1303h19m58s
CI/CD Pipeline / Deploy Production (push) Failing after 1303h22m56s
CI/CD Pipeline / Build Production Web Image (push) Failing after 1303h23m42s
CI/CD Pipeline / Build Production API Image (push) Failing after 1303h23m45s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 1303h25m40s
CI/CD Pipeline / PR Build API Image (push) Failing after 1303h25m40s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 1303h25m42s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 1303h56m7s
CI/CD Pipeline / PR Build Web Image (push) Failing after 1303h58m6s
2026-07-24 08:03:08 +08:00
xiaoxia 269723ced2 feat(#558): 微信登录 + 绑定手机号邮箱完整后端实现 (#670)
CI/CD Pipeline / Staging E2E Tests (push) Failing after 1m6s
CI/CD Pipeline / Production Browser E2E (push) Failing after 1374h8m10s
CI/CD Pipeline / Build Production Web Image (push) Failing after 1374h8m12s
CI/CD Pipeline / Build Production API Image (push) Failing after 1374h8m13s
CI/CD Pipeline / Deploy Production (push) Failing after 1374h8m11s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 1374h8m14s
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been skipped
CI/CD Pipeline / Unit Tests (push) Has been skipped
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (push) Has been skipped
CI/CD Pipeline / Build Staging API Image (push) Has been skipped
CI/CD Pipeline / Build Staging Web Image (push) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (push) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (push) Has been skipped
CI/CD Pipeline / Build Production Worker Image (push) Failing after 1374h40m21s
CI/CD Pipeline / ACR Image Cleanup (push) Has been skipped
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-07-21 09:21:01 +08:00
xiaoxia edb118a5a0 fix: 修复ingest测试MagicMock写入SQLite导致Unit Tests失败 (#601)
CI/CD Pipeline / Check if frontend-only change (push) Failing after 1413h48m43s
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been skipped
CI/CD Pipeline / Unit Tests (push) Has been skipped
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (push) Has been skipped
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-07-19 17:40:44 +08:00
xiaoxia 9afd4060d1 feat(P1): 素材列表支持按类型过滤 - 视频库/配音库分类 (#561)
CI Build & Deploy Pipeline / Build Staging API Image (push) Has been cancelled
CI Build & Deploy Pipeline / Build Staging Web Image (push) Has been cancelled
CI Build & Deploy Pipeline / Build Staging Worker Image (push) Has been cancelled
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Has been cancelled
CI Build & Deploy Pipeline / Staging E2E Tests (push) Has been cancelled
CI Build & Deploy Pipeline / Staging API Integration Tests (push) Has been cancelled
CI Build & Deploy Pipeline / Build Production API Image (push) Has been cancelled
CI Build & Deploy Pipeline / Build Production Web Image (push) Has been cancelled
CI Build & Deploy Pipeline / Build Production Worker Image (push) Has been cancelled
CI Build & Deploy Pipeline / Deploy Production (push) Has been cancelled
CI Build & Deploy Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (push) Has been cancelled
CI/CD Pipeline / Check if frontend-only change (push) Failing after 1423h48m57s
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-07-19 07:40:37 +08:00
xiaoxia 58ff565c48 feat: 素材批量操作接口(软删除/打标签/改分类/智能视图标记) (#290)
CI/CD Pipeline / Validate Code Quality And Tests (push) Successful in 42s
CI/CD Pipeline / Unit Tests (push) Successful in 1m18s
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production Runtime Images (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
feat: 素材批量操作接口(软删除/打标签/改分类/智能视图标记)
2026-07-14 09:49:35 +08:00
xiaoxia 8883581e34 fix(asset): AssetStatus枚举兼容历史uploaded值,避免500 (#227)
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been skipped
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Has been skipped
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Failing after 1588h8m38s
CI/CD Pipeline / Production Browser E2E (push) Failing after 1587h37m1s
CI/CD Pipeline / Build Production Runtime Images (push) Failing after 1587h37m5s
2026-07-12 11:49:41 +08:00
用户CI Test e5d627fc3e fix(asset): ClassificationStatus枚举兼容历史done值,避免500错误
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 2m19s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1599h56m53s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1599h56m56s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1599h56m56s
CI/CD Pipeline / Build Production Runtime Images (pull_request) Failing after 1599h56m57s
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (pull_request) Failing after 1599h56m57s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1600h28m30s
生产环境发现26个classification_status='done'的历史脏数据导致枚举转换失败500。
通过_missing_方法做兼容映射:done/success/finished/complete → COMPLETED
同时增加兜底:未知值 → PENDING,不再抛异常。
2026-07-11 23:27:33 +08:00
灵应 4fee87c5e8 feat: 素材重复上传检测 + 批量生成视频
CI/CD Pipeline / Frontend Lint (push) Failing after 45h56m35s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 45h56m48s
CI/CD Pipeline / Production Browser E2E (push) Failing after 1704h31m50s
CI/CD Pipeline / Build Production Runtime Images (push) Failing after 1704h32m6s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 1704h31m51s
CI/CD Pipeline / Deploy Staging (push) Failing after 1704h32m6s
CI/CD Pipeline / Deploy Production (push) Failing after 1705h3m19s
任务1: 素材重复上传检测
- 上传接口支持 file_hash 参数,通过 MD5+素材库ID 去重
- 命中去重直接返回已有 asset_id,不重复存 OSS
- file_hash 透传: API → IngestJob → Asset 全链路
- 三条上传路径(表单/直传/分片)均支持去重
- Alembic 031: assets + ingest_jobs 加 file_hash 列+索引
- 6 个单元测试覆盖去重命中/未命中/空hash/透传

任务3: 批量生成视频
- POST /generations 支持 count 参数,一次创建多条生成任务
- 每条任务独立状态跟踪,响应返回 task_ids 列表

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 14:57:37 +08:00
灵应 b0f2e4712a feat: P3 配音模块标签体系 — 标签 CRUD + 素材打标 + tag_ids 筛选
CI/CD Pipeline / Frontend Lint (push) Failing after 48h55m59s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 48h55m59s
CI/CD Pipeline / Production Browser E2E (push) Failing after 1707h31m26s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 1707h31m28s
CI/CD Pipeline / Build Production Runtime Images (push) Failing after 1707h31m30s
CI/CD Pipeline / Deploy Staging (push) Failing after 1707h31m30s
CI/CD Pipeline / Deploy Production (push) Failing after 1708h2m56s
- 新增 Tag 领域实体 + TagModel/AssetTagModel ORM 模型
- Alembic 迁移 030:tags 表 + asset_tags 关联表
- TagRepository 端口 + SQLAlchemy/InMemory 实现
- Asset.tag_ids 多对多关联替代原 JSON tags
- GET /tags / POST /tags / DELETE /tags/{tag_id} 标签 CRUD
- POST /assets/{asset_id}/tags 打标 / DELETE 取消标签
- GET /assets 新增 tag_ids 筛选参数(逗号分隔,取交集)
- 19 个单元测试全部通过
2026-07-07 11:58:27 +08:00
CI Test a568c97439 feat(auth): User实体新增wechat_openid/wechat_unionid字段 2026-07-06 22:07:07 +08:00
灵应 a57a26cb67 fix(tests): 修复 sys.modules 污染导致 test_generated_video_management 间歇失败
Deploy / Staging E2E Tests (push) Failing after 107h15m3s
Deploy / Deploy Staging (push) Failing after 107h16m41s
CI/CD Pipeline / Frontend Lint (push) Failing after 107h17m11s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 107h17m18s
Deploy / Production Browser E2E (push) Failing after 1765h46m3s
Deploy / Deploy Production (push) Failing after 1765h46m5s
Deploy / Build Production Runtime Images (push) Failing after 1765h51m12s
根因:test_subscription_api._install_mocks() 在模块导入时替换了
packages.domain / packages.ports 等命名空间包,导致后续测试文件
无法导入真实的 GeneratedVideo 等实体类。

修复:移除所有 packages.* 命名空间包的 fake module 创建,仅保留
必要的叶子 mock(redis/smtp 适配器、app.config/auth/dependencies)。
让 packages.* 模块从磁盘正常加载。

同时包含:
- P2: asset_diagnosis 单素材诊断支持
- P2: edit_plans/edit_templates 管理员权限校验
- P2: edit_plans project 归属鉴权
- P3: test_error_scenarios 限流计数器重置
- P3: test_asset_diagnosis/test_edit_templates 测试修复
- P3: Alembic 迁移 024_add_user_is_admin
2026-07-05 01:37:06 +08:00
Deploy Bot 3fe48b37d4 fix: replace StrEnum with Python 3.10 compatible implementation
Deploy / Deploy Staging (push) Failing after 209h38m38s
CI/CD Pipeline / Frontend Lint (push) Failing after 209h50m50s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 209h50m56s
Deploy / Deploy Production (push) Failing after 1868h14m3s
Deploy / Build Production Runtime Images (push) Failing after 1868h45m27s
Deploy / Production Browser E2E (push) Failing after 1868h45m22s
2026-06-30 19:03:38 +08:00
xiaoxia 52ff2f80ad style: apply black formatting to pass CI validation (#126)
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
Deploy / Deploy Staging (push) Has been cancelled
Deploy / Build Production Runtime Images (push) Has been cancelled
Deploy / Deploy Production (push) Has been cancelled
Deploy / Production Browser E2E (push) Has been cancelled
2026-06-30 17:23:08 +08:00
Audit Bot f80a311082 fix: 清理 entities.py 重复实体定义,统一使用独立域模块
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
移除 entities.py 中与其他独立域文件重复的 dataclass 定义:
- ClassificationJob → 统一从 classification.py 导入
- GenerationTask → 统一从 generation_task.py 导入
- GeneratedVideo → 统一从 generated_video.py 导入
- EditTemplate → 已废弃,无引用

重复定义导致字段不一致(如 GenerationTask 缺少 template_id/asset_ids,
GeneratedVideo.file_size 类型 float vs int),可能引发运行时错误。

Fixes: #150

Co-Authored-By: 灵应 <437848575@qq.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-29 19:29:21 +08:00
API文档维护Agent a43ddb4b63 feat: Phase 1 - 核心重构(去Project层/标题库API/配音库API/清理废弃代码)
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
## 主要变更

### 1. 清理废弃代码(18个文件删除)
- 删除 TaskModel/MilestoneModel/TaskIssueModel 及相关文件
- 删除 ProjectTitleModel/EditPlanModel/EditPlanClipModel 及相关文件
- 清理 domain/ports/adapters/application/api 各层引用
- 从 GenerationTaskModel 移除 edit_plan_id 字段

### 2. 新建标题库 API(/api/v1/titles)
- Domain: TitleLibraryItem 数据类
- Ports: TitleLibraryRepository 接口
- Adapters: SQLAlchemy 实现(软删除)
- Application: CRUD Use Cases + 配额检查(max_titles: free=50, basic=500, premium=500)
- API: GET/POST/PUT/DELETE 端点
- Schema: Pydantic 请求/响应模型

### 3. 新建配音库 API(/api/v1/voices)
- Domain: VoiceLibraryItem 数据类
- Ports: VoiceLibraryRepository 接口
- Adapters: SQLAlchemy 实现(软删除)
- Application: CRUD Use Cases + 配额检查(max_voiceovers: free=10, basic=100, premium=100)
- API: GET/POST/PUT/DELETE 端点
- Schema: Pydantic 请求/响应模型

### 4. 去掉 Project 层依赖
- 修复 authenticated_user.id → authenticated_user.user.id bug
- asset_libraries.py: project_id 改为可选查询参数
- generated_videos.py: project_id 改为可选查询参数
- 无 project_id 时通过 find_accessible_projects 获取用户可访问的所有项目

### 5. 数据库迁移
- 创建 011_phase1_core_refactor.py
- 删除 6 个废弃表:tasks, milestones, task_issues, project_titles, edit_plans, edit_plan_clips
- 从 generation_tasks 表删除 edit_plan_id 列

### 6. 其他改进
- 迁移 EditingMode 到独立模块 packages/domain/editing_mode.py
- 注册 titles_router 和 voices_router
- 添加 get_title_library_repository 和 get_voice_library_repository 依赖
- 更新 domain/ports __init__.py 导出新实体和仓储接口

## 技术细节
- 遵循六边形架构模式
- 配额检查通过 QuotaRegistry 实现
- 软删除:标题库用 is_active=False,配音库用 status='deleted'
- 配音库支持可选的 project_id 关联

## 破坏性变更
- 删除 6 个废弃表(需先备份数据)
- 删除 /api/v1/edit-plans, /api/v1/project-titles, /api/v1/project-management 端点
- generation_tasks API 不再包含 edit_plan_id 字段
2026-06-28 15:02:10 +08:00
API文档维护Agent e3fb518ab2 refactor: remove all workspace_id references from codebase
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
- Remove workspace_id from Pydantic models in project_management routes
- Remove workspace_id from SQLAlchemy and SQLite project management repos
- Remove workspace_id from worker tasks (storage keys, entity creation)
- Remove workspace_id from video dedup and title usage modules
- Remove workspace_id from generation and ingest worker tasks
- Clean workspace_id from all test files and scripts
- Remove workspace-specific test files (list_workspaces, workspace repos)

Task: #14 workspace_id 残留清理
2026-06-27 22:52:09 +08:00
CI Bot 38c66a9c68 fix: add workspace_id compatibility for removed workspace concept 2026-06-27 08:43:02 +08:00
xiaoxia 0422967229 refactor: Remove workspace concept - Projects now directly under User
BREAKING CHANGES:
- Removed Workspace, WorkspaceMember, WorkspaceInvitation entities
- Project now has owner_user_id instead of workspace_id
- Added shared_users list to Project for collaboration
- Subscription/quota moved from Workspace to User level

Changes:
- packages/domain/entities.py: Removed Workspace entities, updated Project
- packages/adapters/sqlalchemy_impl/models.py: Updated models
- packages/application/: Removed workspace use cases, updated other use cases
- packages/ports/: Removed workspace repository interfaces
- apps/api/: Updated routes, schemas, dependencies, router
- alembic/versions/007_remove_workspace_concept.py: Database migration

New APIs:
- POST /projects/{id}/share: Share project with user
- DELETE /projects/{id}/share/{user_id}: Unshare project
2026-06-26 19:16:54 +08:00
Xiaoxia AI bfbaddbd9a style: normalize python formatting gates 2026-06-21 06:52:19 +08:00
Xiaoxia AI 758c2c7e13 feat(phase7): align asset flow and scaffold generation pipeline 2026-06-18 19:59:37 +08:00
Xiaoxia AI 00b1710250 feat(workspace): add WorkspaceInvitation entity
- Add InvitationStatus enum (pending/accepted/declined/expired)
- Add WorkspaceInvitation entity to track invitation lifecycle
- Store inviter, invitee email, role, and invitation token
- Track status, expiration, and acceptance time
- Foundation for workspace invitation system

Phase 4 Task 11/68 completed
2026-06-17 01:27:15 +08:00
Xiaoxia AI 3913c3d2d1 feat(workspace): add WorkspaceMember entity with role-based access
- Add WorkspaceMemberRole enum (owner/admin/member/viewer)
- Add WorkspaceMember entity to track user membership in workspace
- Track invited_by for audit trail
- Track joined_at for membership timeline
- Foundation for multi-tenant permission system

Phase 4 Task 10/68 completed
2026-06-17 01:26:43 +08:00
Xiaoxia AI 687f4b7f7a feat(workspace): extend Workspace entity with subscription fields
- Add subscription_plan (free/pro/enterprise) with free as default
- Add subscription_status (active/cancelled/expired)
- Add subscription_expires_at for expiration tracking
- Add max_projects quota (free: 3, pro/enterprise: unlimited)
- Add max_storage_gb and used_storage_gb for storage tracking
- Backward compatible with existing code (all new fields have defaults)

Phase 4 Task 9/68 completed
2026-06-17 01:26:18 +08:00
Xiaoxia AI 5d35a19084 feat(auth): extend User entity with authentication fields
- Add username field
- Add password_hash for bcrypt hash storage
- Add email_verified and email_verification_token for email verification
- Add password_reset_token and password_reset_expires_at for password reset
- Add last_login_at and last_login_ip for login tracking
- Backward compatible with existing code (all new fields have defaults)

Phase 4 Task 5/68 completed
2026-06-17 01:18:35 +08:00
Xiaoxia AI 5f0a280669 feat: add tag functionality to Asset
- domain: Asset.tags field with add_tag/remove_tag methods
- validation: no empty tags, auto deduplication
- tests: 5 integration tests (add/remove/duplicate/empty/idempotent)
- all 13 tests passing
2026-06-15 16:47:45 +08:00
Xiaoxia AI b5a62ee9a3 feat: initial SaaS scaffold
- domain: User, Workspace, Project, AssetLibrary, Asset, IngestJob
- ports: repository interfaces
- application: use cases
- adapters: in-memory
- API: FastAPI 5 routes
- worker: Celery ingest_asset
- tests: 4 passing
2026-06-15 15:17:40 +08:00