1
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
# 创作流程草稿/图片/动作自动保存数据库检查 2026-04-21
|
||||
|
||||
更新时间:`2026-04-21`
|
||||
|
||||
## 1. 本次检查范围
|
||||
|
||||
本次检查只聚焦当前创作流程里下面这条链路:
|
||||
|
||||
`结果页前端编辑 -> 自动保存 -> Agent session 主链同步 -> 作品库落库`
|
||||
|
||||
重点核对三类内容:
|
||||
|
||||
1. 草稿文本类修改
|
||||
2. 生成后的角色图片、地点图片、分幕图
|
||||
3. 角色动作相关资产字段
|
||||
|
||||
## 2. 当前实际自动保存链路
|
||||
|
||||
当前前端主入口在:
|
||||
|
||||
- `src/components/game-shell/PreGameSelectionFlow.tsx`
|
||||
|
||||
实际行为如下:
|
||||
|
||||
1. 结果页编辑统一通过 `onProfileChange` 更新 `generatedCustomWorldProfile`
|
||||
2. 当结果页停留在 `custom-world-result` 阶段时,前端会对 profile 做防抖自动保存
|
||||
3. 如果当前结果页来源是 `agent-draft`,自动保存前会先执行 `sync_result_profile`
|
||||
4. `sync_result_profile` 完成后,前端不直接保存旧内存 profile,而是优先保存“从最新 session 重编译出的 profile”
|
||||
5. 作品库保存最终走 `PUT /api/runtime/custom-world-library/:profileId`
|
||||
6. Express 后端通过 `runtimeRepository.upsertCustomWorldProfile(...)` 把 profile 写入 `custom_world_profiles.payload_json`
|
||||
|
||||
所以数据库层本身是有正常落库能力的。
|
||||
|
||||
## 3. 本次检查前确认成立的部分
|
||||
|
||||
以下能力在本次检查前已经成立:
|
||||
|
||||
1. 结果页普通草稿字段编辑会触发自动保存
|
||||
2. 自动保存会真正调用后端作品库接口并更新数据库
|
||||
3. 返回创作、进入世界两条路径也会优先同步 Agent session
|
||||
4. `legacyResultProfile` 已作为阶段一桥接快照保留在 session 中
|
||||
|
||||
## 4. 本次发现的真实风险
|
||||
|
||||
风险不在数据库写入本身,而在:
|
||||
|
||||
`sync_result_profile -> session 重编译结果页 profile`
|
||||
|
||||
此前 `sync_result_profile` 只回写:
|
||||
|
||||
1. 基础摘要字段
|
||||
2. `legacyResultProfile`
|
||||
|
||||
但没有把结果页里已经确认过的资产字段同步回 foundation draft 对应节点。
|
||||
|
||||
这会导致一个阶段性风险:
|
||||
|
||||
1. 用户在结果页换了新的角色图
|
||||
2. 或者结果页里刚确认了新的动作资产字段
|
||||
3. 或者结果页里刚确认了新的地点图、分幕图
|
||||
4. 自动保存前前端先做一次 session 同步
|
||||
5. 同步完成后又从 session 重编译结果页 profile
|
||||
6. 重编译过程会把 draft 层旧资产字段再次并入结果 profile
|
||||
|
||||
这样就可能出现:
|
||||
|
||||
**数据库自动保存成功了,但保存进去的是“被旧 draft 资产字段回退过的版本”,不是用户刚在结果页看到的最新图/动作。**
|
||||
|
||||
## 5. 本轮修复
|
||||
|
||||
本轮在:
|
||||
|
||||
- `server-node/src/services/customWorldAgentOrchestrator.ts`
|
||||
|
||||
补了一个收窄修复:
|
||||
|
||||
1. `sync_result_profile` 仍然保持阶段一边界,不做整套 runtime -> foundation draft 反解
|
||||
2. 但会按相同 id,把结果页里已确认的资产字段同步回 draft 层已有对象
|
||||
3. 同步范围包括:
|
||||
- 角色 `imageSrc`
|
||||
- 角色 `generatedVisualAssetId`
|
||||
- 角色 `generatedAnimationSetId`
|
||||
- 角色 `animationMap`
|
||||
- 地点 `imageSrc`
|
||||
- 分幕 `backgroundImageSrc`
|
||||
- 分幕 `backgroundAssetId`
|
||||
|
||||
这样后续再从 session 重编译结果页 profile 时,最新资产字段不会再被旧 draft 值回退。
|
||||
|
||||
## 6. 验证补充
|
||||
|
||||
本轮补了服务端测试:
|
||||
|
||||
- `server-node/src/services/customWorldAgentPhase4.test.ts`
|
||||
|
||||
新增验证点:
|
||||
|
||||
1. `sync_result_profile` 后,最新角色主图会写回 draft
|
||||
2. 最新角色动作资产字段会写回 draft
|
||||
3. 最新地点图会写回 draft
|
||||
4. 最新分幕图会写回 draft
|
||||
|
||||
## 7. 结论
|
||||
|
||||
截至本轮修复后,当前创作流程里:
|
||||
|
||||
1. 草稿文本修改可以自动保存到数据库
|
||||
2. 结果页中确认后的角色图、地点图、分幕图可以随自动保存稳定进入数据库
|
||||
3. 角色动作相关资产字段可以随 session 同步和自动保存稳定保留
|
||||
|
||||
但仍需注意:
|
||||
|
||||
1. 当前仍是阶段一兼容链路,核心桥接字段仍然是 `legacyResultProfile`
|
||||
2. 正式发布链 `publish_world` 还没有在当前阶段打通
|
||||
3. 前端仍依赖 `buildCustomWorldProfileFromAgentDraft()` 作为 session -> 结果页兼容编译层
|
||||
|
||||
因此本轮结论是:
|
||||
|
||||
**当前“前端修改 -> 自动保存 -> 数据库”主链可用;本次已补上图片与动作资产在 session 重编译阶段的回退风险。**
|
||||
Reference in New Issue
Block a user