zizi d57032a6d3 feat(studio): U2 源项目落库事务(B8)+ V19/V20 数据完整性
6c6g 后端 Tier0 计划 U2(docs/plans/2026-06-17-001-...)。execution §5.2 源项目工件落库 + status 机器态串联。
- GameSourceProjectDO/Mapper/SourceProjectService(studio,§12-①)+ SourceProjectApi seam(land/markBuilt/markOrphanById)
- 落库挂回调外层 DifyCallbackServiceImpl(非内层 tx)——守 §5.2「源落库与建包非同一大事务」
  (land 建包前独立 commit/markBuilt 成功后/markOrphan 失败补偿)
- status 0 草稿→1 已构建(回填 version_id)/2 孤儿(不建包不动 currentVersion);
  DifyCallbackReqVO additive sourceProject;dispatcher 从图终态抽 K_SOURCE_PROJECT
- 数据完整性(codex 评审 2 P0+2 P1 全收口):
  · P0 终态任务重复回调跳过 land(防版本血缘污染)· P0 去重按 game_id+source_hash + markBuilt 校 gameId(防跨游戏复用)
  · P1 markBuilt 与 notify 解耦(notify 失败不停 status=0)· P1 markOrphanById 精确标 + V20 唯一键 uk_game_source_hash(并发兜底)
  · post-commit best-effort 包兜底 try(防挂点失败反触写链补偿误置 failed)
- 诚实边界:现图只产最小骨架源(gameDefinition 待生成 agent 真填,跨单元),终态有什么落什么不伪造

验证:mini-desktop 编译绿 + 33 单测全绿(DifyCallback 19/SourceProject 14,含跨游戏/gameId校验/终态重复/notify解耦/markOrphanById);
V19+V20 SQL 结构绿(Flyway-apply 留部署验);codex NO-MERGE→2 P0+2 P1 全修后绿。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 21:46:38 +00:00
..