Commit Graph

13 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
CI Bot 9d31818222 style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 21s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 21s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m42s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m46s
CI/CD Pipeline / Validate - Style (pull_request) Failing after 1m48s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m57s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m20s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 5m2s
AI Code Review / AI Code Review (pull_request) Successful in 6m42s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m48s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 16s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 2m16s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 30m18s
CI/CD Pipeline / CI Gate (pull_request) Failing after 3s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 304h32m54s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 304h32m56s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 304h32m56s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 304h32m56s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 305h2m55s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 305h2m55s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 305h2m58s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 305h3m10s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 305h3m10s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 305h3m10s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 305h3m17s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 305h3m17s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 305h3m17s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 305h3m20s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 305h3m20s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 305h3m22s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 305h3m24s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 305h7m18s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 305h37m20s
2026-09-03 14:21:24 +00:00
saas-backend-agent af4dd31dd1 feat: 跨视频片段避让 — 生成前注入已用区间 #1670
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 31s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 32s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m38s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m40s
AI Code Review / AI Code Review (pull_request) Successful in 1m53s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m52s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m54s
CI/CD Pipeline / Validate - Style (pull_request) Failing after 2m59s
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 305h6m12s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 305h6m12s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 305h6m18s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 305h6m23s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 305h6m23s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 305h6m24s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 305h6m24s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 305h6m26s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 305h6m27s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 305h6m26s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 305h40m36s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 305h40m46s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 305h40m48s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 305h40m49s
- Repository: list_used_segments_by_user() JOIN edit_plans 查用户最近
  已完成 plan 的已渲染 clips,聚合为 {asset_id: [(start, end), ...]}
- Domain: distribute_assets / _distribute_* 子函数新增 external_used_segments
  参数,深拷贝注入 used_segments,让 _resolve_start_time 自动避让
- Service: _distribute_assets 新增 user_id 参数,预览和正式生成都查询
  已用区间;查询失败时不阻塞,回退纯随机
- 12 个单元测试覆盖 Repository/Domain/Service 三层
2026-09-03 22:18:06 +08:00
xiaoxia 24e66da061 feat: SceneChange 场景检测前置到渲染前 + 场景点缓存到素材 metadata (#1622)
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (push) Successful in 0s
CI/CD Pipeline / Check push changed paths (push) Successful in 7s
CI/CD Pipeline / Validate - Python (mypy + alembic) (push) Successful in 3m56s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 4m5s
CI/CD Pipeline / Build Staging API Image (push) Successful in 4m16s
CI/CD Pipeline / Retag skipped Staging Web Image (push) Successful in 1m13s
CI/CD Pipeline / Validate - Style (push) Successful in 6m6s
CI/CD Pipeline / Integration Tests (push) Successful in 6m16s
CI/CD Pipeline / Validate - Security (push) Successful in 7m1s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m50s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 9m4s
CI/CD Pipeline / Staging API Integration Tests (push) Failing after 1m32s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 1m34s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 2m57s
CI/CD Pipeline / Unit Tests (push) Successful in 14m10s
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 Worker Image (pull_request) Successful in 4m16s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m35s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 4m39s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 6m20s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 7m33s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 8m2s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 8m2s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 8m3s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 8m11s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 8m15s
AI Code Review / AI Code Review (pull_request) Failing after 8m21s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 9m41s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 14m22s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m37s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 5m19s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 341h12m51s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 341h12m53s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 341h12m52s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 341h12m53s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 341h12m52s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 341h22m34s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 341h22m30s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 341h22m36s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 341h22m59s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 341h22m55s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 341h27m17s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 341h27m17s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 341h27m17s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 341h27m19s
CI/CD Pipeline / Production Browser E2E (push) Failing after 342h30m16s
CI/CD Pipeline / Deploy Production (push) Failing after 342h30m16s
CI/CD Pipeline / CI Gate (push) Failing after 342h30m17s
CI/CD Pipeline / Build Production Web Image (push) Failing after 342h30m18s
CI/CD Pipeline / Build Production API Image (push) Failing after 342h30m18s
CI/CD Pipeline / Retag skipped Staging Worker Image (push) Failing after 342h40m4s
CI/CD Pipeline / Build Staging Web Image (push) Failing after 342h44m23s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 342h44m27s
CI/CD Pipeline / Frontend Lint (push) Failing after 342h44m29s
CI/CD Pipeline / PR Build Web Image (push) Failing after 342h44m29s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 342h44m31s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 341h47m12s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 341h56m51s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 341h57m16s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 342h1m36s
CI/CD Pipeline / Canary Release to Production (push) Failing after 343h4m35s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 343h4m37s
CI/CD Pipeline / Retag skipped Staging API Image (push) Failing after 343h14m23s
CI/CD Pipeline / PR Build API Image (push) Failing after 343h18m48s
Co-authored-by: xiaoxia <dev@xiaoxiajianji.com>
Co-committed-by: xiaoxia <dev@xiaoxiajianji.com>
2026-09-02 08:40:36 +08:00
CI Bot e33502956c feat(segments): 片段重复率控制(受控复用+15%闸门)与素材余量四字段
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3m5s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m35s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m38s
AI Code Review / AI Code Review (pull_request) Failing after 3m41s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 3m44s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 4m6s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m22s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m24s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 421h11m26s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 421h11m29s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 421h14m19s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 421h14m19s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 421h14m21s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 421h14m27s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 421h14m27s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 421h14m33s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 421h14m33s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 421h14m35s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 421h45m33s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 421h48m24s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 421h48m32s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 421h48m36s
Task G:任意两条成片画面重复率 ≤15%
- MediaKit 智能选片避让历史区间:历史区间并入冲突检查、0.3s 边缘间隙、
  撞历史时放弃推荐保留原起点(不再挪到已用画面)
- 自动轮回改造为受控复用:历史永不自动清空;used_time_ranges 增加
  use_count/last_used_at;100 次随机失败后复用 last_used_at 最老且
  use_count<3 的区间;单条成片复用占比 >15% 时该素材停止分配(分配闸门 +
  复用回调内预判双闸门);全部素材超限返回 400「素材可切区间不足,请补充新素材」
- 复用回调返回 None 时 calc 直接返回 None(删除末尾/0.0 重叠降级),
  from-assets 轮询内 calc 失败切换下一素材
- 批量 N 条视频片段独立:count>1 时克隆独立 plan,禁止共用
  source_edit_plan_id/clips(合并 Issue #1282);预览同样克隆独立变体
- 常量:REUSE_RATIO_LIMIT=0.15 / SEGMENT_EDGE_GAP=0.3 / MAX_RANGE_USE_COUNT=3

Task H:素材余量透出与已用尽素材排除
- GET /assets 列表与详情响应附加 used_duration/available_duration/
  used_ratio/usable 四字段(非视频/无时长/异常时 None + usable=True,零影响)
- usable=false:零重复可切区间已耗尽(扩边后无 ≥3s 空闲段)且所有历史
  区间 use_count 均达上限
- smart-match 结果层过滤 usable=false 素材(评分逻辑不动)
- from-assets 对已用尽素材天然兜底:calc 返回 None → 轮询跳过 →
  全部素材用尽时 400

测试:新增 test_mediakit_conflicts(10)/test_clone_plan_variant(7)/
test_asset_availability(23),更新 tracker/clips/mediakit 既有用例;
全量 unit 13910 passed
2026-08-30 02:10:06 +08:00
CI Bot 1b83ec9952 fix: AI Code Review 阻塞问题修复
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3m10s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m45s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 4m15s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m5s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m10s
AI Code Review / AI Code Review (pull_request) Successful in 5m8s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m24s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 9m7s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 10m0s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 18m2s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 21m17s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 19m16s
CI/CD Pipeline / CI Gate (pull_request) Successful in 28s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 4m5s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 4m30s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 426h22m1s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 426h22m2s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 426h22m3s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 426h22m3s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 426h43m20s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 426h43m22s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 426h46m21s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 426h46m19s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 426h46m23s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 426h46m25s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 426h46m21s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 426h46m26s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 426h46m27s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 426h46m31s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 426h46m33s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 426h56m4s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 426h56m6s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 427h17m24s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 427h20m28s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 427h20m32s
1. remove_used_segment 旧数据兼容:记录缺 plan_id(本功能上线前的旧数据)时
   退化为按时间匹配删除,避免旧区间永远删不掉导致素材容量泄漏
2. MediaKit 异步更新事务一致性:clip start_time 更新与 metadata 区间记录
   删旧/写新放入同一事务,metadata 失败时 rollback 本次 clip 更新,
   统一 commit,消除 clip 已提交、metadata 未更新的不一致
3. (建议) on_exhausted 回调异常增加 logger.warning,不再静默吞掉
4. 补充旧数据兼容单测
2026-08-29 20:38:56 +08:00
CI Bot 2174e91c48 feat: 素材片段区间持久化去重 + 区间用尽自动轮回
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2m39s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m43s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m8s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 5m30s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 8m33s
AI Code Review / AI Code Review (pull_request) Successful in 8m50s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 9m35s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 427h7m30s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 427h7m32s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 427h9m55s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 427h9m57s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 427h9m59s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 427h10m4s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 427h10m7s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 427h10m9s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 427h10m11s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 427h10m13s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 427h41m34s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 427h44m1s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 427h44m9s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 427h44m14s
- 新增 asset_segment_tracker 服务:素材 metadata(used_time_ranges) 持久化片段级已用区间
- from-assets 创建片段时读取历史区间,新片段跨任务/跨调用自动避开
- 片段记录与 replace_all_clips_transactional 同事务,失败整体回滚
- MediaKit 异步移动片段起点后同步更新 metadata 区间记录(失败静默)
- _calc_random_start_time 新增 on_exhausted 回调:100次找不到时清空该素材历史区间再重试,实现轮完一圈自动循环

详见 PR body 的 metadata schema 说明
2026-08-29 20:14:28 +08:00
xiaoxia 57f16364f1 fix: 修复 CI 单测隔离问题 + ruff 代码质量违规
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 57s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 1m15s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 2m8s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 2m25s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m38s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m58s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 4m56s
CI/CD Pipeline / Validate - Code Quality (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 Unit Tests (push) Has been cancelled
CI/CD Pipeline / Build Staging API Image (push) Has been cancelled
CI/CD Pipeline / Deploy 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 API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 500h46m9s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 500h46m11s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 500h47m2s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 500h47m45s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 500h47m51s
CI/CD Pipeline / Frontend Lint (push) Failing after 500h48m32s
CI/CD Pipeline / PR Build Web Image (push) Failing after 500h47m47s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 500h49m11s
CI/CD Pipeline / PR Build API Image (push) Failing after 500h47m49s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 500h47m53s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 500h47m55s
- test_generated_video_creation_logic: 添加 teardown_class 恢复 setup_class
  中替换的 sys.modules 条目(video_processing.thumbnail_generator / dedup),
  避免 MagicMock 污染后续测试导致 4 个单测失败
- plan_generator_utils: 循环变量 seg_start 未使用 → _seg_start(B007)
- acr_cleanup: 移除未使用变量 open_pr_shas(F841)
- auto_fix_formatting: 移除未使用变量 head_branch_tmp / fix_mode(F841)
2026-08-26 18:36:37 +08:00
CI Bot 850559505f style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1m2s
CI/CD Pipeline / Build Staging API Image (push) Successful in 1m4s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 1m19s
CI/CD Pipeline / Validate - Code Quality (push) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (push) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (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 Unit Tests (push) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (push) Has been cancelled
CI/CD Pipeline / Deploy 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 API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
CI/CD Pipeline / CI Gate (push) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 52s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 54s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 3m11s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 3m14s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m0s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 3m56s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m15s
AI Code Review / AI Code Review (pull_request) Successful in 8m52s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 5m24s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 13m17s
CI/CD Pipeline / CI Gate (pull_request) Failing after 6s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 501h41m32s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 501h41m33s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 501h41m34s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 501h41m34s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 501h41m34s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 501h52m54s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 501h52m58s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 501h54m51s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 501h54m53s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 501h54m53s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 501h55m36s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 501h55m43s
CI/CD Pipeline / PR Build API Image (push) Failing after 501h55m47s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 501h55m49s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 501h55m53s
CI/CD Pipeline / Frontend Lint (push) Failing after 501h55m54s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 501h57m0s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 502h15m29s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 502h26m52s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 502h28m49s
CI/CD Pipeline / PR Build Web Image (push) Failing after 502h29m41s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 502h29m47s
2026-08-26 09:28:53 +00:00
xiaoxia ecbdd49dc1 feat: 素材片段随机起始时间+去重 + MediaKit智能封面抽帧
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1m13s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 2m14s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 3m24s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 38s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m55s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m55s
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 54s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 2m19s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 2m41s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 2m21s
CI/CD Pipeline / Validate - Code Quality (push) Failing after 5m1s
CI/CD Pipeline / Build Staging API Image (push) Successful in 4m53s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 5m12s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 52s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 1m6s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 1m23s
CI/CD Pipeline / Integration Tests (push) Successful in 4m2s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m20s
CI/CD Pipeline / Unit Tests (push) Failing after 12m24s
CI/CD Pipeline / Production Browser E2E (push) Failing after 501h41m15s
CI/CD Pipeline / Canary Release to Production (push) Failing after 501h41m15s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 501h41m16s
CI/CD Pipeline / Build Production Web Image (push) Failing after 501h41m17s
CI/CD Pipeline / Build Production API Image (push) Failing after 501h41m17s
CI/CD Pipeline / CI Gate (push) Failing after 501h41m17s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 501h52m48s
CI/CD Pipeline / Frontend Lint (push) Failing after 501h53m40s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 501h54m49s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 501h58m52s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 501h58m56s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 501h58m58s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 502h0m15s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 502h0m17s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 502h1m25s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 502h1m30s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 502h1m32s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 502h1m34s
CI/CD Pipeline / Deploy Production (push) Failing after 502h15m12s
CI/CD Pipeline / PR Build Web Image (push) Failing after 502h26m46s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 502h32m50s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 502h33m35s
CI/CD Pipeline / PR Build API Image (push) Failing after 502h26m48s
## 任务1: 素材片段随机起始时间
- 修改 _calc_random_start_time 增加 used_segments 参数,避开已使用时间段
- 四个分配函数(ONE_TAKE/PIP/VOICE_OVER/VOICE_PIP)各自维护 used_segments
- 同一素材被多个clip使用时,自动记录已用区间,下次随机时避开
- 如果无空间可用,回退到最后已用段之后或缩短时长

## 任务2: MediaKit智能封面抽帧
- 新增 _extract_frames_via_mediakit 函数,上传视频到OSS后调用MediaKit API
- 使用 SceneChange 策略智能选取关键帧
- 失败时自动降级到 ffmpeg 均匀抽帧
- 抽帧后下载帧图、可选叠加标题、上传OSS

## 测试
- 新增 8 个 _calc_random_start_time 单测
- 新增 4 个 distribute_assets 去重逻辑单测
- 新增 4 个 MediaKit 集成单测
- 修复 3 个因字体映射变更的测试断言
2026-08-26 17:22:08 +08:00
xiaoxia 316f01b3f0 feat: 预览生成支持随机选素材 + 随机截取片段 (#1256) (#1268)
CI/CD Pipeline / Validate - Code Quality (push) Successful in 7m6s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 1m10s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 1m2s
CI/CD Pipeline / Unit Tests (push) Successful in 15m50s
CI/CD Pipeline / Integration Tests (push) Successful in 5m20s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 5m42s
CI/CD Pipeline / Build Staging API Image (push) Successful in 14m29s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 2m17s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 4m41s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m22s
CI/CD Pipeline / Staging API Integration Tests (push) Failing after 49s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 56s
CI/CD Pipeline / Staging E2E Tests (push) Failing after 3m59s
CI/CD Pipeline / Production Browser E2E (push) Failing after 955h8m42s
CI/CD Pipeline / Canary Release to Production (push) Failing after 955h10m38s
CI/CD Pipeline / Deploy Production (push) Failing after 955h10m40s
CI/CD Pipeline / CI Gate (push) Failing after 955h12m46s
CI/CD Pipeline / Build Production Web Image (push) Failing after 955h12m50s
CI/CD Pipeline / Build Production API Image (push) Failing after 955h12m52s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 955h30m54s
CI/CD Pipeline / PR Build API Image (push) Failing after 955h30m55s
CI/CD Pipeline / Frontend Lint (push) Failing after 955h30m56s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 955h30m58s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 955h46m9s
CI/CD Pipeline / PR Build Web Image (push) Failing after 956h4m14s
2026-08-07 19:50:01 +08:00
CI Bot 7f3c462617 style: auto-format with black + isort + prettier
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 1m1s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 56s
CI/CD Pipeline / Validate - Code Quality (push) Failing after 1m30s
CI/CD Pipeline / Frontend Lint (push) Successful in 46s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 1m57s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 4m51s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 1m40s
CI/CD Pipeline / Integration Tests (push) Successful in 2m32s
CI/CD Pipeline / Build Staging API Image (push) Successful in 13m22s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m54s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 31s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 2m13s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 5m3s
CI/CD Pipeline / Unit Tests (push) Failing after 1h12m17s
CI/CD Pipeline / Canary Release to Production (push) Failing after 1243h32m48s
CI/CD Pipeline / Production Browser E2E (push) Failing after 1243h44m17s
CI/CD Pipeline / Deploy Production (push) Failing after 1243h46m0s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 1243h52m43s
CI/CD Pipeline / Build Production Web Image (push) Failing after 1243h52m45s
CI/CD Pipeline / Build Production API Image (push) Failing after 1243h52m47s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 1243h53m13s
CI/CD Pipeline / PR Build API Image (push) Failing after 1243h53m15s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 1243h54m19s
CI/CD Pipeline / PR Build Web Image (push) Failing after 1244h25m55s
2026-07-26 10:47:55 +00:00
xiaoxia 673d18aa83 test(wave90): add 52 unit tests for plan_generator_utils (#940)
CI/CD Pipeline / Check if frontend-only change (push) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (push) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (push) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (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 / PR Build API Image (push) Has been cancelled
CI/CD Pipeline / PR Build Web Image (push) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (push) Has been cancelled
CI/CD Pipeline / Build Staging API Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (push) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy 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 API Image (push) Has been cancelled
CI/CD Pipeline / Build Production Web Image (push) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (push) Has been cancelled
CI/CD Pipeline / Canary Release to Production (push) Has been cancelled
2026-07-26 18:15:38 +08:00