fix: refresh custom world publish gate diagnostics

This commit is contained in:
2026-04-24 12:42:43 +08:00
parent 5050ce4ff8
commit 49a79aee54
5 changed files with 321 additions and 6 deletions

View File

@@ -173,3 +173,20 @@ Rust 首版沿用这些结论,但不要求一次性照搬旧 Node 的全部多
3. `server-rs/crates/spacetime-module/src/lib.rs`
4. `server-rs/crates/module-custom-world/src/lib.rs`
5. `docs/technical/SPACETIMEDB_CUSTOM_WORLD_WORKS_AND_AGENT_EXTENSION_STAGE9_DESIGN_2026-04-22.md`
## 2026-04-24 发布阻断快照刷新修正
### 问题
- 现象:生成 foundation draft 后,结果页已经能看到玩家 premise、主线章节、第一幕场景幕但底部仍显示旧的发布阻断项并禁用“发布并进入世界”。
- 根因:前端结果页直接消费 `session.resultPreview.blockers`。当当前页面 profile 已经补齐结构字段,但服务端 `resultPreview` 仍停留在上一轮快照时,展示态与可点击态会被旧 blocker 锁住。
- 次要根因:进入世界前的 `sync_result_profile` 发现当前页面 profile 与 session preview 签名一致时会短路,导致旧 `publish_gate_json/result_preview_json` 没机会被强制重算。
### 落地方案
- `PlatformEntryFlowShellImpl` 在 Agent 草稿结果页按当前 `generatedCustomWorldProfile` 判断旧结构 blocker 是否已过期,文案继续沿用后端 `resultPreview.blockers`,前端不新增重复中文提示。
- 非结构类 blocker 继续继承服务端快照,避免把真实质量阻断误放行。
- `useRpgCreationResultAutosave.syncAgentDraftResultProfile``agentSession.resultPreview.publishReady === false` 时不走签名短路,发布前会调用后端 `sync_result_profile` 重建 `publish_gate_json/result_preview_json`
- `api-server` 在读取 session 以及执行 `draft_foundation/sync_result_profile/publish_world` 后写入 `custom_world.publish_gate` 诊断日志,记录 blocker code、preview 来源与关键门禁字段是否为空;前端只显示简洁阻断数量,不展示字段细节。
### 验收点
- 生成草稿后,如果当前 profile 已包含 `playerPremise``anchorContent.playerEntryPoint``coreConflicts``chapters/sceneChapterBlueprints` 与至少一个 `acts`,结果页不再继续显示旧结构 blocker。
- 点击“发布并进入世界”前仍会同步到 SpacetimeDB reducer由后端重新计算最终发布门禁若仍有非结构质量 blocker按钮仍保持阻断。