refactor: 收口 RPG 结果预览门禁

This commit is contained in:
2026-06-04 03:09:13 +08:00
parent 671f5da86a
commit 23314e62aa
7 changed files with 385 additions and 151 deletions

View File

@@ -0,0 +1,38 @@
# 【前端架构】Platform RPG Agent Result Preview Model 收口计划
## 背景
`PlatformEntryFlowShellImpl.tsx` 曾内联维护 RPG Agent 结果页的发布门禁展示规则:从 `CustomWorldProfile` 顶层字段、`creatorIntent``anchorContent`、章节蓝图和场景章节中反证服务端返回的 legacy blocker 是否已经被当前结果页 profile 补齐,并同时在壳层内把 result preview source 映射成展示标签。
这些逻辑不读取 React state不请求网络不写 URL也不操作弹窗它们属于 RPG Agent 结果预览展示的纯判定。壳层继续负责 session、profile、发布动作和结果页 props 编排。
## 决策
新增 `src/components/platform-entry/platformRpgAgentResultPreviewModel.ts` 作为 Platform RPG Agent Result Preview **Module**。其公开 **Interface** 为:
- `buildPlatformRpgAgentResultPublishGateView(profile, fallbackBlockers, fallbackPublishReady)`:无 profile 时沿用服务端 fallback有 profile 时过滤已经被当前 profile 结构字段满足的发布 blocker并按剩余 blocker 重算展示态 `publishReady`
- `resolvePlatformRpgAgentResultPreviewSourceLabel(source)`:把 `published_profile``session_preview` 和未知 future source 映射成结果页预览来源标签。
`PlatformEntryFlowShellImpl.tsx` 仍作为 **Adapter**:它只把 `agentResultPreview``generatedCustomWorldProfile` 交给 Module并将返回的 blocker / label 传入结果页组件。
## Interface 约束
- 无 profile 时不得自行修正 blocker必须保留 fallback blocker message 与 fallback `publishReady`
- 有 profile 时只过滤已知结构 blocker`publish_missing_world_hook``publish_missing_player_premise``publish_missing_core_conflict``publish_missing_main_chapter``publish_missing_first_act`
- 世界钩子兼容读取 `worldHook``creatorIntent.worldHook``anchorContent.worldPromise``anchorContent.worldPromise.hook``settingText`
- 玩家前提兼容读取 `playerPremise``creatorIntent.playerPremise``anchorContent.playerEntryPoint.openingIdentity``openingProblem``entryMotivation`
- 主章节兼容读取 `chapters``sceneChapterBlueprints``sceneChapters`;首幕读取 `sceneChapterBlueprints` / `sceneChapters` 下的 `acts`
- 未知 blocker code 不得被前端过滤;未知 source 保留“服务端预览”兜底,不做穷尽删除。
## Depth / Leverage / Locality
- **Depth**:壳层以两个函数取得发布门禁展示和 source labelprofile 兼容字段路径、legacy blocker code 与兜底规则藏入 Module Implementation。
- **Leverage**:后续后端调整 RPG result preview blocker 或新增 source 时,先改 Module 与单测,再让壳层 Adapter 保持结果页 props 编排不变。
- **Locality**RPG Agent 结果预览展示规则集中到一个纯测试面,避免在大型平台壳中继续混杂 profile 结构探测。
## 验收
- `npm run test -- src/components/platform-entry/platformRpgAgentResultPreviewModel.test.ts`
- `npx eslint src/components/platform-entry/platformRpgAgentResultPreviewModel.ts src/components/platform-entry/platformRpgAgentResultPreviewModel.test.ts src/components/platform-entry/PlatformEntryFlowShellImpl.tsx --quiet`
- `npm run typecheck`
- `npm run check:encoding`