fix(edit-flow): 补全 title_config 数据链路,修复编辑流程断裂 #1464
Reference in New Issue
Block a user
Delete Branch "fix/edit-flow-data-chain"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
改动
1. Schema 补字段
2. 数据库
3. 创建任务后回写 plan.config
4. Worker 读取 title_config
5. 旧路由标记废弃
兼容性
1. Schema: CreateGenerationTaskRequest 增加 title_config(dict|None=None) 2. DB: generation_tasks 新增 title_config JSON 列 (alembic 057) 3. Domain/ORM/Repo/UseCase 全链路透传 title_config 4. API 创建任务成功后,merge 回写 EditPlan.config (generation_task_id + title_config),失败不影响主流程 5. Worker 优先使用 title_config 构建标题图层,custom_title 兜底 6. GenerationTaskResponse 返回 title_config 7. 旧路由 /generate 和 /generation-status 标记 DEPRECATED 所有新字段默认 None/{},不传时行为与现在完全一致。🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
create_generation_task函数中,针对批量创建任务(request.count > 1)的场景,代码在循环内部对同一个source_edit_plan_id调用_writeback_edit_plan_config。该函数会直接覆盖EditPlan.config中的generation_task_id字段。这意味着当批量生成多个任务时,EditPlan最终只会关联到最后一个生成的任务 ID,前序任务的关联信息会被覆盖丢失。如果业务依赖EditPlan反向查询生成的任务,这将导致数据不一致。generation_task_id存储为数组,或者仅在生成第一个任务时回写,或者确认业务逻辑上只需关联最后一个任务(但通常批量任务需要保留所有关联)。建议修改_writeback_edit_plan_config逻辑,或者仅在循环结束后统一处理关联。💡 改进建议(不阻塞合并)
title_config = Column(JSON, nullable=False, default=dict)使用了default=dict。在 Python 中,这会导致所有未显式设置该字段的新实例共享同一个dict对象引用。虽然在 SQLAlchemy 中通常通过server_default或 flush 机制规避了部分风险,但在 Python 对象层面操作时仍可能导致脏数据污染。建议改为default={}或使用default_factory(如果框架支持),或者依赖server_default并移除 Python 侧的default=dict。✅ 良好实践
_writeback_edit_plan_config中对plan_model.config进行了类型检查(isinstance(plan_model.config, dict)),防止因旧数据格式问题导致崩溃。_writeback_edit_plan_config捕获了所有异常并回滚事务,确保回写失败不影响主流程(任务创建)。title_config和旧的custom_title,并做了字段名归一化(font_size->size),保证了平滑过渡和向后兼容。test_writeback_edit_plan_config.py,覆盖了空值、异常、回滚等多种边界情况。🤖 由 AI 代码审查机器人自动生成 | 2026-08-23 05:41:09 | 模型:
🗑️ 预览环境已清理
PR #1464 已关闭或合并,对应的预览环境已被清理。