Files
Genarrative/docs/audits/RPG_RUNTIME_DIRECT_DRAFT_PROFILE_AUDIT_2026-04-25.md
kdletters cbc27bad4a
Some checks failed
CI / verify (push) Has been cancelled
init with react+axum+spacetimedb
2026-04-26 18:06:23 +08:00

2.1 KiB
Raw Permalink Blame History

RPG 运行时直读世界草稿 Profile 检查 2026-04-25

结论

RPG 运行时进入游戏时不应再通过 resultPreview.preview 或 legacy runtime profile 做中间转换,主数据源统一为 Agent session 的 draftProfile

本次检查确认:

  1. Rust 侧 custom_world_foundation_draft 已直接产出 draftProfile
  2. 前端原先 buildCustomWorldProfileFromAgentSession() 仍只读取 session.resultPreview.preview,这会绕过草稿 profile 中已经存在的角色形象、关系、压力等字段。
  3. 角色选择页与游戏内角色本身可以消费 CustomWorldProfile.playableNpcs[].imageSrc断点在“session -> profile”的入口而不是角色选择页。
  4. “进入世界”按钮原先还会先执行 sync_result_profile,把当前结果页旧快照再同步回 session如果结果页 profile 没有最新角色图,会在进入角色选择页前覆盖掉 draftProfile 中的正确形象。

已修正

  • buildCustomWorldProfileFromAgentSession() 改为直接归一化 session.draftProfile
  • resultPreview 只保留为发布质量、blocker、预览外壳信息不再作为进入游戏 profile 的数据源。
  • Agent 草稿结果进入游戏时直接使用最新 agentSessionProfile,不再把当前结果页 profile 回写成新的运行时 profile。
  • 前端 normalizeCustomWorldProfileRecord() 补齐 rs 草稿角色字段兼容:
    • publicMask/publicIdentity -> description/visualDescription/personality fallback
    • currentPressure/hiddenHook -> backstory/actionDescription/sceneVisualDescription fallback
    • relationToPlayer -> motivation/relationshipHooks fallback
    • imageSrc/generatedVisualAssetId/generatedAnimationSetId/animationMap 保持直通

后续约束

  • 新 RPG 运行时链路只允许读取 draftProfile
  • 不再为进入游戏构造额外 legacy profile也不再把 resultPreview.preview 当作运行时真相源。
  • 如果草稿中新增角色、场景、物品字段,应优先扩展 draftProfile 的归一化读取,而不是增加中间转换结构。