docs: refine image async task plan

This commit is contained in:
QiuSW
2026-07-08 19:47:49 +08:00
parent 5c9f070d15
commit 2042c1a3e7
5 changed files with 43 additions and 9 deletions
+29
View File
@@ -1619,3 +1619,32 @@
- `git diff --check`:通过,仅 Windows CRLF 提示。
- `py -3.12 manage.py test apps.portal.tests.PortalAccountFlowTests.test_homepage_is_public_and_shows_anonymous_onboarding_without_release apps.portal.tests.PortalAccountFlowTests.test_homepage_shows_current_download_release apps.portal.tests.PortalAccountFlowTests.test_portal_pages_use_shopee_circle_branding --keepdb --noinput --verbosity 2`:通过,3 tests OK。
- 下一步:如需线上生效,部署最新代码到 185.216.248.75 并重启服务;无数据库迁移需要执行。
## 2026-07-08 生图异步任务化任务口径修正(非任务)
- 状态:DONE。
- 背景:Claude Code 新增了 T-612~T-615 草案,用于处理生图慢、504 gateway timeout、客户端请求超时和旧同步接口迁移问题。复核线上实际运行后确认当前 `cmhub-generate` 已是 `gthread --workers 2 --threads 16 --timeout 900`,并非 sync worker,因此原草案中“sync worker 池饥饿 → 默认切 gevent”的口径需要修正。
- 文档变更:
- `docs/06-tasks.md`:T-612 改为“上游硬截止 + 长请求池校准”,明确先保留已验证的 `gthread` 长请求池,gevent 仅作为兼容性验证后的替代方案;T-613 明确重构现有 `apps/api/generation.py`,不得复制第二套扣点 / 退点逻辑;T-614 补充 `ImageGenerationTask`、UUID `task_id`、`Idempotency-Key` 去重与 payload 冲突、DB worker + systemd、公开 URL 配置、IDOR 防护和本期不暴露 cancel;T-615 补充旧同步 / 新异步路径结构化遥测与弃用条件。
- `docs/current-state.md`:把“当前无编号 TODO”更新为 T-612~T-615 待开始,下一步为 T-612。
- `README.md`、`docs/00-ai-start-here.md`:同步 Phase 6 当前状态和下一步任务。
- 验证:
- `git diff --check -- README.md docs/00-ai-start-here.md docs/06-tasks.md docs/current-state.md`:通过,仅 Windows CRLF 提示。
- `Select-String` 确认 `docs/06-tasks.md` 中 T-612~T-615、M11 和 Backlog 已更新,`docs/current-state.md` 的下一个可领取任务为 T-612。
- `rg -n "sync worker|先 gevent|当前无编号 TODO|图片真实耗时验证" README.md docs/00-ai-start-here.md docs/06-tasks.md docs/current-state.md`:仅保留 T-612 中“当前是 `gthread` 而非 sync worker”的事实说明,未再出现“当前无编号 TODO”等旧口径。
- 阻塞:无。
- 决策:T-612 先做硬截止和现有 gthread 长请求池校准,不把 gevent 作为默认第一步;T-614 第一版用 DB 任务表 + management command worker + systemd,不引入 Celery / Redis;异步 worker 必须复用共享 core 和已预扣 `CallRecord`,不得复制资金逻辑。
- 下一步:领取 T-612,先更新 `deployment.md` / `04-architecture.md` / `env.md`,再落代码实现上游硬截止与退点测试。
## 2026-07-08 T-614 验收条件加固(非任务)
- 状态:DONE。
- 背景:复核 Claude Code 对 T-614 的新增验收条件后,确认“结果保留窗口”“僵任务回收 reaper”“worker 重复执行幂等”方向合理,但需要把重排队、租约和迟到 worker 的口径写得更严格。
- 变更:更新 `docs/06-tasks.md` 中 T-614:
- `ImageGenerationTask` 字段补充 `locked_at`、`lease_expires_at`、`heartbeat_at`、`worker_id`、`attempt_count`。
- reaper 改为按 `lease_expires_at` / `heartbeat_at` 识别僵任务,默认 `running -> failed + 退点`,不默认重排队;只有能证明尚未调上游时才允许后续任务设计重排队。
- worker 语义改为“允许至少一次执行,但账务和结果终态必须 exactly-once”,不得重复扣 / 退,不得覆盖已成功结果,也不得把已被 reaper 判失败并退点的任务改回成功。
- 环境变量口径补充 `IMAGE_TASK_RETENTION_HOURS`、`GENERATED_IMAGE_RETENTION_HOURS`、`IMAGE_TASK_REAPER_INTERVAL_SECONDS`、`IMAGE_TASK_LEASE_SECONDS`。
- 验收补充迟到 worker 场景:reaper 已判失败并退点后,迟到 worker 返回成功也不能改回 `succeeded`、不能覆盖结果、不能再次改账。
- 验证:仅文档更新;提交前用 `git diff --check`、`Select-String` 复核。
- 下一步:提交本轮文档;后续领取 T-612。