Merge remote-tracking branch 'origin/master' into hermes/hermes-1e775b03
Some checks failed
CI / verify (pull_request) Has been cancelled

# Conflicts:
#	docs/technical/README.md
#	src/components/custom-world-home/CustomWorldCreationHub.tsx
#	src/components/custom-world-home/creationWorkShelf.ts
#	src/components/platform-entry/PlatformEntryFlowShellImpl.tsx
#	src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx
This commit is contained in:
2026-05-12 15:02:47 +08:00
141 changed files with 13407 additions and 2277 deletions

View File

@@ -124,7 +124,7 @@ Match3D 必须形成独立玩法域,后续技术方案至少需要覆盖:
3. 不做排行榜正式展示。
4. 不做道具,但需要预留功能口。
5. 不做洗牌、重置、旋转、放大等局内操作。
6. 不做真实 3D 模型。
6. 不做多批次真实 3D 模型生成;当前草稿生成只固定产出 `3` 个 GLB 模型并写入 OSS
7. 不做真实 3D 物理遮挡。
8. 不做真实物理碰撞结算。
9. 不做必须试玩通关才能发布的门槛。
@@ -161,7 +161,7 @@ Match3D 首版参考拼图后期的入口表单收集方式,而不是早期的
题材决定后续生成或选择物品素材的方向。用户可以自定义主题,例如水果、玩具、食物、符号等。
首版 demo 不接入真实图片生成。当前运行态可消除物统一使用题材方向的 25 个积木件类型表现,不使用透明气泡,也不在图案上放文字标识。前端首版用差异化颜色、积木造型和 3D 程序化模型表现可消除物,避免玩家在堆叠状态下难以辨认。
当前抓大鹅草稿生成会固定生成 `3` 个题材物品:素材图切割出的独立图片会作为 Rodin 图生 3D 参考图,生成出的 GLB 模型必须转存 OSS并随作品 profile 的 `generatedItemAssets` 持久化。运行态优先使用这些生成模型;只有模型缺失、加载失败或未进入 3D 渲染模式时,才回退到 25 个默认积木件视觉键。默认素材不使用透明气泡,也不在图案上放文字标识。
可消除物尺寸使用五档相对体积规则XL 型相对体积为 `1.60~2.30`L 型为 `1.25~1.60`M 型为 `1.00`XS 型为 `0.65~0.85`S 型为 `0.35~0.50`。单局中 XL / L / M / XS / S 按本局使用的消除物类型数的 `20% / 30% / 30% / 15% / 5%` 分配;非整数配额按最大余数补齐,确保总数等于本局使用类型数量。同一关卡内同一个颜色和造型的物品只能对应一个尺寸档位;可存在同尺寸但不同颜色和造型的物品。后端运行态通过 `radius` 下发权威尺寸,前端只按快照表现。
@@ -195,7 +195,7 @@ Match3D 首版参考拼图后期的入口表单收集方式,而不是早期的
## 6.3 参考图片
抓大鹅入口页不展示参考图片上传。题材表现由题材文本和草稿切割图片链路承接;后续需要 3D 模型时,在结果页 `3D素材` Tab 以切割图片作为图生模型参考图手动触发
抓大鹅入口页不展示参考图片上传。题材表现由题材文本和草稿切割图片链路承接;草稿生成阶段会直接以切割图片作为 Rodin 图生模型参考图生成首批 GLB。结果页 `3D素材` Tab 仍可对单个素材触发重新生成
---
@@ -222,9 +222,9 @@ Match3D 首版参考拼图后期的入口表单收集方式,而不是早期的
## 7.3 素材生成边界
抓大鹅草稿生成链路会生成首批 `3` 个题材物品素材文本模型生成物品名VectorEngine 生成 `2*2` 素材图并切割独立图片。入口页选择的 `assetStylePrompt` 必须写入素材图提示词;结果页手动 Rodin 图生模型时,继续以该物品图片和默认提示词作为起点。
抓大鹅草稿生成链路会生成首批 `3` 个题材物品素材文本模型生成物品名VectorEngine 生成 `2*2` 素材图并切割独立图片,再以每张独立图片调用 Rodin 图生 3D下载 `.glb` 并转存 OSS。入口页选择的 `assetStylePrompt` 必须写入素材图提示词;结果页手动 Rodin 图生模型时,继续以该物品图片和默认提示词作为起点。
生成出的独立图片作为草稿页 `3D素材` Tab 的预览资产返回,状态为 `image_ready`模型文件为空。正式平台资产绑定、Rodin 生成模型转存和二次编辑流程以后续技术方案为准。
生成出的独立图片与 GLB 模型都必须作为草稿页 `3D素材` Tab 的预览资产返回。模型生成成功时 `generatedItemAssets[].status = model_ready`,并携带 `modelSrc``modelObjectKey``modelFileName``taskUuid``subscriptionKey`;正式平台资产绑定和更完整的二次编辑流程以后续技术方案为准。
## 7.4 发布前试玩
@@ -297,12 +297,14 @@ itemTypeCount = clearCount <= 25 ? clearCount : 25
## 8.5 物品资产
首版 demo 使用 2D 图案素材
当前 demo 使用生成 GLB 优先、默认积木兜底的物品资产策略
1. demo 至少提供 `25` 种彼此不同的颜色与几何造型组合素材,支撑 `clearCount > 25` 时的类型上限。
2. 当前 demo 使用 25 个积木件视觉键作为默认素材池;前端首版必须把这些视觉键映射为无文字的纯色 2D 图标和程序化 3D 积木模型,不能显示为透明气泡或文字标记
3. 后续可以尝试替换为伪 3D 或 3D 模型
4. 用户题材主题后续会映射为符合常识预期的物品集合
1. demo 至少提供 `25` 种彼此不同的颜色与几何造型组合默认素材,支撑 `clearCount > 25` 时的类型上限和 GLB 缺失兜底
2. `generatedItemAssets[].modelSrc``modelObjectKey` 时,运行态与备选栏必须优先读取该 GLB默认积木件只作为加载失败、模型缺失或 2D 回退时的兜底素材池
3. 前端读取生成模型必须通过 `/api/assets/read-bytes` 获取私有 OSS 字节,再交给 Three.js `GLTFLoader` 解析;不得直接把 `/generated-match3d-assets/...` 当裸 URL 请求
4. 当前固定 `clearCount = 3` 的生成草稿中,运行态 `match3d-type-01/02/03` 按类型编号顺序映射到生成出的 `3` 个模型;后续恢复更大生成数量时,模型列表顺序必须继续与类型编号稳定对应
5. 默认积木视觉键仍需映射为无文字的纯色 2D 图标和程序化 3D 积木模型,不能显示为透明气泡或文字标记。
6. 用户题材主题后续会映射为符合常识预期的物品集合。
示例:水果题材可以对应红色苹果、黄色香蕉、紫色葡萄等。
@@ -706,10 +708,10 @@ GET /api/runtime/match3d/runs/:runId
3. 入口页不展示参考图上传。
4. 内置风格显示画风参考图,自定义风格通过独立面板填写并进入提交 payload。
5. 移动端入口页所有内容一屏展示,不产生纵向滚动。
6. 系统可生成待发布结果页,并在草稿中返回首批切割图片素材预览。
6. 系统可生成待发布结果页,并在草稿中返回首批切割图片与 OSS GLB 模型素材预览。
7. 用户可编辑游戏名称、标签、封面图等基础信息。
8. 用户可发布前试玩,且试玩失败不阻断发布。
9. 运行态能展示圆形空间、倒计时、物品和 `7` 格备选栏。
9. 运行态能展示圆形空间、倒计时、物品和 `7` 格备选栏;存在 `generatedItemAssets` 模型时必须优先展示生成 GLB而不是默认积木素材
10. 物品可重叠、遮挡、堆叠。
11. 被完全遮挡物品不可点击,露出可点击区域的物品可点击。
12. 点击通过后物品飞入备选栏。

View File

@@ -50,18 +50,18 @@
外部仓库文件只作为玩法语义参考,不能作为目录结构迁入依据:
| 外部参考 | 可参考内容 | Genarrative 落点 |
| --- | --- | --- |
| `interface/routes/visual.js` | 视觉小说创作和运行时路由语义 | `server-rs/crates/api-server/src/visual_novel.rs` |
| `interface/handlers/visual/sendActionStream.js` | 流式动作推进事件 | Axum SSE handler + `shared-contracts` typed envelope |
| `interface/handlers/visual/getHistory.js` | 历史记录读取 | 平台 runtime history API |
| `interface/handlers/visual/saves.js` | 存档语义 | 平台统一 `profile/save-archives` |
| `services/visual/gameLogic.js` | step 解析、会话状态推进 | `server-rs/crates/module-visual-novel` |
| `services/visual/storyGeneration.js` | 创作底稿生成语义 | `platform-agent` / `platform-llm` + visual novel Tool |
| `prompts/visual.gm.system/1.0.1/body.js` | 视觉小说 GM 输出结构经验 | 新 prompt 必须适配 Genarrative 契约,不原样照搬平台规则 |
| `src/page/Galgame.tsx` | 运行时界面结构 | `src/components/visual-novel-runtime/VisualNovelRuntimeShell.tsx` |
| `src/hooks/galgame/useGalgameController.ts` | 前端运行时状态组织 | visual novel runtime hooks |
| `src/page/GameSettingsEditor.tsx` | 创作编辑器模块划分 | visual novel result / workspace 组件 |
| 外部参考 | 可参考内容 | Genarrative 落点 |
| ----------------------------------------------- | ---------------------------- | ----------------------------------------------------------------- |
| `interface/routes/visual.js` | 视觉小说创作和运行时路由语义 | `server-rs/crates/api-server/src/visual_novel.rs` |
| `interface/handlers/visual/sendActionStream.js` | 流式动作推进事件 | Axum SSE handler + `shared-contracts` typed envelope |
| `interface/handlers/visual/getHistory.js` | 历史记录读取 | 平台 runtime history API |
| `interface/handlers/visual/saves.js` | 存档语义 | 平台统一 `profile/save-archives` |
| `services/visual/gameLogic.js` | step 解析、会话状态推进 | `server-rs/crates/module-visual-novel` |
| `services/visual/storyGeneration.js` | 创作底稿生成语义 | `platform-agent` / `platform-llm` + visual novel Tool |
| `prompts/visual.gm.system/1.0.1/body.js` | 视觉小说 GM 输出结构经验 | 新 prompt 必须适配 Genarrative 契约,不原样照搬平台规则 |
| `src/page/Galgame.tsx` | 运行时界面结构 | `src/components/visual-novel-runtime/VisualNovelRuntimeShell.tsx` |
| `src/hooks/galgame/useGalgameController.ts` | 前端运行时状态组织 | visual novel runtime hooks |
| `src/page/GameSettingsEditor.tsx` | 创作编辑器模块划分 | visual novel result / workspace 组件 |
---
@@ -69,7 +69,7 @@
### 3.1 必须完成的模板闭环
1. 平台创作中心展示 `视觉小说` 入口,并在实现完成后从 `open: false` 改为 `open: true`
1. 平台创作中心展示 `视觉小说` 入口2026-05-11 起当前运营状态回退为 `open: false`,入口显示敬请期待,不允许创建新视觉小说草稿
2. 创作者可选择 `idea``document``blank` 三种起点创建视觉小说底稿。
3. Agent 或表单工作台生成 / 编辑同一份 `VisualNovelResultDraft`
4. 结果页可编辑世界观、角色、场景、剧情阶段、资产和运行时配置。
@@ -160,8 +160,8 @@
5. 玩家身份。
6. 3 到 6 个主要角色。
7. 3 到 8 个可用场景。
7. 3 到 6 个剧情阶段。
8. 初始场景、初始旁白和第一轮可选行动。
8. 3 到 6 个剧情阶段。
9. 初始场景、初始旁白和第一轮可选行动。
### 5.2 文档创建 `document`
@@ -399,7 +399,15 @@ export type VisualNovelAgentActionKind =
```ts
export type VisualNovelAgentStreamEvent =
| { type: 'start'; sessionId: string }
| { type: 'phase'; phase: 'perception' | 'reasoning' | 'drafting' | 'reflection' | 'finalizing' }
| {
type: 'phase';
phase:
| 'perception'
| 'reasoning'
| 'drafting'
| 'reflection'
| 'finalizing';
}
| { type: 'text_delta'; text: string }
| { type: 'draft_patch'; patch: VisualNovelDraftPatch }
| { type: 'action_required'; action: VisualNovelAgentPendingAction }
@@ -558,35 +566,35 @@ export type VisualNovelRuntimeStreamEvent =
### 9.1 创作 session
| 方法 | 路由 | 用途 |
| --- | --- | --- |
| `POST` | `/api/creation/visual-novel/sessions` | 创建视觉小说创作 session |
| `GET` | `/api/creation/visual-novel/sessions/{session_id}` | 读取 session snapshot |
| `POST` | `/api/creation/visual-novel/sessions/{session_id}/messages` | 非流式发送创作消息 |
| `POST` | `/api/creation/visual-novel/sessions/{session_id}/messages/stream` | 流式发送创作消息 |
| `POST` | `/api/creation/visual-novel/sessions/{session_id}/actions` | 执行结构化创作 action |
| `POST` | `/api/creation/visual-novel/sessions/{session_id}/compile` | 编译为 work profile 草稿 |
| 方法 | 路由 | 用途 |
| ------ | ------------------------------------------------------------------ | ------------------------ |
| `POST` | `/api/creation/visual-novel/sessions` | 创建视觉小说创作 session |
| `GET` | `/api/creation/visual-novel/sessions/{session_id}` | 读取 session snapshot |
| `POST` | `/api/creation/visual-novel/sessions/{session_id}/messages` | 非流式发送创作消息 |
| `POST` | `/api/creation/visual-novel/sessions/{session_id}/messages/stream` | 流式发送创作消息 |
| `POST` | `/api/creation/visual-novel/sessions/{session_id}/actions` | 执行结构化创作 action |
| `POST` | `/api/creation/visual-novel/sessions/{session_id}/compile` | 编译为 work profile 草稿 |
### 9.2 作品草稿与发布
| 方法 | 路由 | 用途 |
| --- | --- | --- |
| `GET` | `/api/creation/visual-novel/works` | 读取当前用户视觉小说作品草稿列表 |
| `GET` | `/api/creation/visual-novel/works/{profile_id}` | 读取作品详情 |
| `PUT/PATCH` | `/api/creation/visual-novel/works/{profile_id}` | 更新作品草稿 |
| `DELETE` | `/api/creation/visual-novel/works/{profile_id}` | 删除未发布草稿或用户自有作品 |
| `POST` | `/api/creation/visual-novel/works/{profile_id}/publish` | 发布到平台作品体系 |
| 方法 | 路由 | 用途 |
| ----------- | ------------------------------------------------------- | -------------------------------- |
| `GET` | `/api/creation/visual-novel/works` | 读取当前用户视觉小说作品草稿列表 |
| `GET` | `/api/creation/visual-novel/works/{profile_id}` | 读取作品详情 |
| `PUT/PATCH` | `/api/creation/visual-novel/works/{profile_id}` | 更新作品草稿 |
| `DELETE` | `/api/creation/visual-novel/works/{profile_id}` | 删除未发布草稿或用户自有作品 |
| `POST` | `/api/creation/visual-novel/works/{profile_id}/publish` | 发布到平台作品体系 |
### 9.3 运行时
| 方法 | 路由 | 用途 |
| --- | --- | --- |
| `GET` | `/api/runtime/visual-novel/gallery` | 读取平台聚合后的视觉小说公开作品列表 |
| `POST` | `/api/runtime/visual-novel/works/{profile_id}/runs` | 创建测试或正式 run |
| `GET` | `/api/runtime/visual-novel/runs/{run_id}` | 读取 run snapshot |
| `POST` | `/api/runtime/visual-novel/runs/{run_id}/actions/stream` | 提交选择 / 自由行动并流式推进 |
| `GET` | `/api/runtime/visual-novel/runs/{run_id}/history` | 读取当前 run 历史 |
| `POST` | `/api/runtime/visual-novel/runs/{run_id}/regenerate` | 从历史节点重生成 |
| 方法 | 路由 | 用途 |
| ------ | -------------------------------------------------------- | ------------------------------------ |
| `GET` | `/api/runtime/visual-novel/gallery` | 读取平台聚合后的视觉小说公开作品列表 |
| `POST` | `/api/runtime/visual-novel/works/{profile_id}/runs` | 创建测试或正式 run |
| `GET` | `/api/runtime/visual-novel/runs/{run_id}` | 读取 run snapshot |
| `POST` | `/api/runtime/visual-novel/runs/{run_id}/actions/stream` | 提交选择 / 自由行动并流式推进 |
| `GET` | `/api/runtime/visual-novel/runs/{run_id}/history` | 读取当前 run 历史 |
| `POST` | `/api/runtime/visual-novel/runs/{run_id}/regenerate` | 从历史节点重生成 |
### 9.4 存档
@@ -627,16 +635,16 @@ GET /api/runtime/profile/save-archives
### 10.1 crate 职责
| crate / 层 | 职责 |
| --- | --- |
| crate / 层 | 职责 |
| -------------------------------------- | ------------------------------------------------------------- |
| `server-rs/crates/module-visual-novel` | 纯领域规则草稿校验、step 解析、run 状态推进、历史重生成边界 |
| `server-rs/crates/shared-contracts` | DTO、请求响应、SSE envelope、草稿和运行时契约 |
| `server-rs/crates/spacetime-module` | 表、reducer、procedure、migration 和事务编排 |
| `server-rs/crates/spacetime-client` | api-server 到 SpacetimeDB 的 typed facade |
| `server-rs/crates/api-server` | Axum 路由、鉴权、SSE、LLM 编排、资产和钱包 facade 调用 |
| `server-rs/crates/platform-llm` | 视觉小说创作和运行时 GM 的模型调用 |
| `server-rs/crates/platform-oss` | 文档、图片、音乐等资产对象读写 |
| `server-rs/crates/platform-agent` | 如复用创意 Agent负责 Agent 编排和工具注册 |
| `server-rs/crates/shared-contracts` | DTO、请求响应、SSE envelope、草稿和运行时契约 |
| `server-rs/crates/spacetime-module` | 表、reducer、procedure、migration 和事务编排 |
| `server-rs/crates/spacetime-client` | api-server 到 SpacetimeDB 的 typed facade |
| `server-rs/crates/api-server` | Axum 路由、鉴权、SSE、LLM 编排、资产和钱包 facade 调用 |
| `server-rs/crates/platform-llm` | 视觉小说创作和运行时 GM 的模型调用 |
| `server-rs/crates/platform-oss` | 文档、图片、音乐等资产对象读写 |
| `server-rs/crates/platform-agent` | 如复用创意 Agent负责 Agent 编排和工具注册 |
### 10.2 领域规则
@@ -654,14 +662,14 @@ GET /api/runtime/profile/save-archives
新增表必须同步 `migration.rs`、表目录和 bindings
| 表 | 用途 |
| --- | --- |
| `visual_novel_agent_session` | 创作 session 主表 |
| `visual_novel_agent_message` | 创作消息和模型回复 |
| `visual_novel_work_profile` | 视觉小说作品草稿 / 发布 profile |
| `visual_novel_runtime_run` | 玩家或测试 run |
| `visual_novel_runtime_history_entry` | 运行时历史 |
| `visual_novel_runtime_event` | 可审计事件,不用于回放 |
| 表 | 用途 |
| ------------------------------------ | ------------------------------- |
| `visual_novel_agent_session` | 创作 session 主表 |
| `visual_novel_agent_message` | 创作消息和模型回复 |
| `visual_novel_work_profile` | 视觉小说作品草稿 / 发布 profile |
| `visual_novel_runtime_run` | 玩家或测试 run |
| `visual_novel_runtime_history_entry` | 运行时历史 |
| `visual_novel_runtime_event` | 可审计事件,不用于回放 |
不得新增:
@@ -684,27 +692,27 @@ GET /api/runtime/profile/save-archives
### 11.1 入口配置
当前 `src/config/newWorkEntryConfig.ts` 已存在
入口配置事实源已经迁移到 SpacetimeDB 的 `creation_entry_type_config` 表,默认种子位于 `server-rs/crates/spacetime-module/src/runtime/creation_entry_config.rs`。2026-05-11 起视觉小说当前默认状态为
```ts
{
id: 'visual-novel',
title: '视觉小说',
subtitle: '敬请期待',
subtitle: '分支叙事体验',
badge: '敬请期待',
visible: true,
open: false,
}
```
实现完成后更新为:
重新开放创建时再通过后台入口开关或默认种子更新为:
```ts
{
id: 'visual-novel',
title: '视觉小说',
subtitle: 'AI 生成可玩的视觉小说',
badge: '新玩法',
subtitle: '分支叙事体验',
badge: '可创建',
visible: true,
open: true,
}
@@ -781,6 +789,8 @@ service client 要复用现有请求封装、鉴权和错误提示风格,不
3. 生成草稿按钮。
4. 错误、忙碌与禁用态。
视觉画风卡片使用 `public/visual-novel-style-references/` 下的 `gpt-image-2-all` 参考图,分别对应映画动画、水彩绘本、像素霓虹、水墨幻想、柔彩校园和暗色哥特。卡片只承载图像和标签,不额外展示说明文案。
点击生成草稿后进入 `visual-novel-generating` 过程页,过程页复用平台已有生成进度面板,展示一句话输入、画风和草稿生成阶段;完成后自动进入 `visual-novel-result` 草稿页。
不展示:
@@ -975,13 +985,13 @@ V1 默认提供平台统一存档能力;如果平台存档 UI 当前按槽位
### 16.1 并行批次总览
| 批次 | 可并行任务 | 进入条件 | 汇合点 |
| --- | --- | --- | --- |
| Batch 0 | `VN-00` | PRD 已冻结 | 所有人以本文为唯一口径 |
| Batch 1 | `VN-01``VN-02``VN-03``VN-04` | `VN-00` 完成 | 契约、领域、UI 骨架、Prompt 口径可对齐 |
| Batch 2 | `VN-05``VN-06``VN-07``VN-08` | `VN-01` 产出契约初稿;`VN-02` 产出表草案 | 后端 API、前端创作、前端运行时可联调 |
| Batch 3 | `VN-09``VN-10``VN-11` | `VN-05``VN-06``VN-07``VN-08` 主链路可跑 | 发布、存档、广场、负向扫描收口 |
| Batch 4 | `VN-12``VN-13` | 主链路完成 | 全链路验收和文档同步 |
| 批次 | 可并行任务 | 进入条件 | 汇合点 |
| ------- | ---------------------------------- | --------------------------------------------- | -------------------------------------- |
| Batch 0 | `VN-00` | PRD 已冻结 | 所有人以本文为唯一口径 |
| Batch 1 | `VN-01``VN-02``VN-03``VN-04` | `VN-00` 完成 | 契约、领域、UI 骨架、Prompt 口径可对齐 |
| Batch 2 | `VN-05``VN-06``VN-07``VN-08` | `VN-01` 产出契约初稿;`VN-02` 产出表草案 | 后端 API、前端创作、前端运行时可联调 |
| Batch 3 | `VN-09``VN-10``VN-11` | `VN-05``VN-06``VN-07``VN-08` 主链路可跑 | 发布、存档、广场、负向扫描收口 |
| Batch 4 | `VN-12``VN-13` | 主链路完成 | 全链路验收和文档同步 |
并行规则:
@@ -992,22 +1002,22 @@ V1 默认提供平台统一存档能力;如果平台存档 UI 当前按槽位
### 16.2 并行任务具体要求速查表
| 任务 | 可并行窗口 | 输入依赖 | 必须完成 | 禁止事项 | 验收口径 |
| --- | --- | --- | --- | --- | --- |
| `VN-00` 口径冻结 | Batch 0 | 本 PRD、旧 TXT 文档、Hermes 决策记录 | 冻结 `visual-novel` 只做模板玩法、平台接口、删除回放;标注旧文档冲突口径 | 不再使用“原样迁入外部平台工程”作为实现目标 | 文档和 Hermes 记录明确三条硬边界;`npm run check:encoding` 通过 |
| `VN-01` 契约与领域 | Batch 1 | PRD 第 6 到 8 章契约 | TS contracts、Rust shared-contracts、`module-visual-novel`、领域单测 | 不写 HTTP、DB reducer、LLM、UI不出现 replay 类型 | TS/Rust 契约一致草稿校验、step 解析、状态推进、重生成测试通过 |
| `VN-02` SpacetimeDB 与 facade | Batch 1 | `VN-01` 契约草案、SpacetimeDB 约束文档 | 表、reducer/procedure、migration、表目录、bindings、`spacetime-client` facade | 不手改 bindings 绕过 schema不建 replay 表或私有 save 表 | schema 可生成;表目录写明 event 不是回放;`cargo check -p spacetime-client` 通过 |
| `VN-03` Prompt / LLM 工具 | Batch 1 | `VN-01` draft 与 step 契约 | 创作 prompt、运行 GM prompt、repair prompt、工具参数 | 不照搬外部平台规则、扣费规则、回放规则;不让前端猜业务 step | fixture 输出可解析;坏格式进入 repair 或可重试错误 |
| `VN-04` 前端 UI 骨架 | Batch 1 | PRD 第 12 章 UI 要求 | workspace、result、runtime mock 骨架;移动端优先布局;独立面板模式 | 不接真实 API不写规则长文不出现回放入口 | 桌面 / 移动基础布局可检查;长文本不撑破按钮 |
| `VN-05` API Server | Batch 2 | `VN-01``VN-02`,真实 LLM 依赖 `VN-03` | creation、works、runtime、history、regenerate 路由SSE平台 save archive 接入 | 不把领域规则塞 handler不新增 replay 路由;不新增私有 save API | `/api/creation/visual-novel/*``/api/runtime/visual-novel/*` 可 smoke`cargo check -p api-server` 通过 |
| `VN-06` 前端 service 与入口 | Batch 2 | `VN-01` TS 契约草案mock 可先行 | service client、selection stage、入口分流、壳层挂载、登录态清理 | 不设计表单细节;不写 runtime UI 细节;不绕过平台入口 | 创作中心可进入 workspaceservice 路由与 PRD 一致;`npm run typecheck` 通过 |
| `VN-07` 创作工作台与结果页 | Batch 2 | `VN-04``VN-06`,真实生成依赖 `VN-05` | `idea` / `document` / `blank`、Agent 进度、结果页表单、保存草稿、测试 run 入口 | 不做正式玩家 runtime不新增说明页复杂内容不在卡片下展开 | 三种创建起点可用;草稿写入 `VisualNovelResultDraft`;发布校验 issue 可见 |
| `VN-08` 前端运行时 | Batch 2 | `VN-04``VN-06`,真实运行依赖 `VN-05` | runtime shell、SSE 消费、step 渲染、历史、设置、存档、重生成 | 不做回放 UI历史不生成分享播放页`raw_text` 不作为业务真相 | typed step 可渲染历史与重生成可用save archive 可继续体验 |
| `VN-09` 作品架 / 广场 / 发布 | Batch 3 | `VN-05` works/gallery API、`VN-06` 壳层 | work summary 聚合、作品架、公开聚合、public work code、详情跳转 | 不新增独立视觉小说市场;不迁入外部平台详情页;不做分享回放 | 发布后作品架可见;公开作品可启动 run聚合 key 不冲突 |
| `VN-10` 资产与文档输入 | Batch 3 | `VN-05` action/API、平台资产接口 | 文档资产读取、封面/场景/角色/音乐资产引用、可选图片生成 action | 不迁入外部 R2不存大 Data URL不绕过资产鉴权 | 文档创建使用资产引用SpacetimeDB 不保存二进制或大 base64 |
| `VN-11` 负向扫描 | Batch 1 到发布前 | 所有任务增量改动 | 扫描 replay 和外部平台功能;补负向测试或脚本清单 | 不把历史误判为回放;不做大范围重构 | 新工程代码无 replay外部平台账号/订单/会员/后台等未误入 |
| `VN-12` 全链路验收 | Batch 4 | `VN-05``VN-10` 主链路完成 | 创作、结果页、测试 run、发布、正式 run、历史、重生成、存档联调 | 不跳过移动端;不只测 mock不忽略负向验收 | 全链路可跑;前端 typecheck、后端相关 cargo 检查、编码检查通过 |
| `VN-13` 文档与交接 | Batch 4 | 实际工程落地结果 | PRD、技术方案、表目录、Hermes 决策 / 踩坑同步 | 不让旧 TXT 文档重新成为实现口径;不留下过期接口描述 | 新开发者可按最新文档维护;文档与代码一致 |
| 任务 | 可并行窗口 | 输入依赖 | 必须完成 | 禁止事项 | 验收口径 |
| ----------------------------- | ---------------- | --------------------------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `VN-00` 口径冻结 | Batch 0 | 本 PRD、旧 TXT 文档、Hermes 决策记录 | 冻结 `visual-novel` 只做模板玩法、平台接口、删除回放;标注旧文档冲突口径 | 不再使用“原样迁入外部平台工程”作为实现目标 | 文档和 Hermes 记录明确三条硬边界;`npm run check:encoding` 通过 |
| `VN-01` 契约与领域 | Batch 1 | PRD 第 6 到 8 章契约 | TS contracts、Rust shared-contracts、`module-visual-novel`、领域单测 | 不写 HTTP、DB reducer、LLM、UI不出现 replay 类型 | TS/Rust 契约一致草稿校验、step 解析、状态推进、重生成测试通过 |
| `VN-02` SpacetimeDB 与 facade | Batch 1 | `VN-01` 契约草案、SpacetimeDB 约束文档 | 表、reducer/procedure、migration、表目录、bindings、`spacetime-client` facade | 不手改 bindings 绕过 schema不建 replay 表或私有 save 表 | schema 可生成;表目录写明 event 不是回放;`cargo check -p spacetime-client` 通过 |
| `VN-03` Prompt / LLM 工具 | Batch 1 | `VN-01` draft 与 step 契约 | 创作 prompt、运行 GM prompt、repair prompt、工具参数 | 不照搬外部平台规则、扣费规则、回放规则;不让前端猜业务 step | fixture 输出可解析;坏格式进入 repair 或可重试错误 |
| `VN-04` 前端 UI 骨架 | Batch 1 | PRD 第 12 章 UI 要求 | workspace、result、runtime mock 骨架;移动端优先布局;独立面板模式 | 不接真实 API不写规则长文不出现回放入口 | 桌面 / 移动基础布局可检查;长文本不撑破按钮 |
| `VN-05` API Server | Batch 2 | `VN-01``VN-02`,真实 LLM 依赖 `VN-03` | creation、works、runtime、history、regenerate 路由SSE平台 save archive 接入 | 不把领域规则塞 handler不新增 replay 路由;不新增私有 save API | `/api/creation/visual-novel/*``/api/runtime/visual-novel/*` 可 smoke`cargo check -p api-server` 通过 |
| `VN-06` 前端 service 与入口 | Batch 2 | `VN-01` TS 契约草案mock 可先行 | service client、selection stage、入口分流、壳层挂载、登录态清理 | 不设计表单细节;不写 runtime UI 细节;不绕过平台入口 | 创作中心可进入 workspaceservice 路由与 PRD 一致;`npm run typecheck` 通过 |
| `VN-07` 创作工作台与结果页 | Batch 2 | `VN-04``VN-06`,真实生成依赖 `VN-05` | `idea` / `document` / `blank`、Agent 进度、结果页表单、保存草稿、测试 run 入口 | 不做正式玩家 runtime不新增说明页复杂内容不在卡片下展开 | 三种创建起点可用;草稿写入 `VisualNovelResultDraft`;发布校验 issue 可见 |
| `VN-08` 前端运行时 | Batch 2 | `VN-04``VN-06`,真实运行依赖 `VN-05` | runtime shell、SSE 消费、step 渲染、历史、设置、存档、重生成 | 不做回放 UI历史不生成分享播放页`raw_text` 不作为业务真相 | typed step 可渲染历史与重生成可用save archive 可继续体验 |
| `VN-09` 作品架 / 广场 / 发布 | Batch 3 | `VN-05` works/gallery API、`VN-06` 壳层 | work summary 聚合、作品架、公开聚合、public work code、详情跳转 | 不新增独立视觉小说市场;不迁入外部平台详情页;不做分享回放 | 发布后作品架可见;公开作品可启动 run聚合 key 不冲突 |
| `VN-10` 资产与文档输入 | Batch 3 | `VN-05` action/API、平台资产接口 | 文档资产读取、封面/场景/角色/音乐资产引用、可选图片生成 action | 不迁入外部 R2不存大 Data URL不绕过资产鉴权 | 文档创建使用资产引用SpacetimeDB 不保存二进制或大 base64 |
| `VN-11` 负向扫描 | Batch 1 到发布前 | 所有任务增量改动 | 扫描 replay 和外部平台功能;补负向测试或脚本清单 | 不把历史误判为回放;不做大范围重构 | 新工程代码无 replay外部平台账号/订单/会员/后台等未误入 |
| `VN-12` 全链路验收 | Batch 4 | `VN-05``VN-10` 主链路完成 | 创作、结果页、测试 run、发布、正式 run、历史、重生成、存档联调 | 不跳过移动端;不只测 mock不忽略负向验收 | 全链路可跑;前端 typecheck、后端相关 cargo 检查、编码检查通过 |
| `VN-13` 文档与交接 | Batch 4 | 实际工程落地结果 | PRD、技术方案、表目录、Hermes 决策 / 踩坑同步 | 不让旧 TXT 文档重新成为实现口径;不留下过期接口描述 | 新开发者可按最新文档维护;文档与代码一致 |
每个任务的交付回复必须包含:
@@ -1143,20 +1153,20 @@ cd server-rs
cargo check -p spacetime-client
```
阻塞关系:
1. 依赖 `VN-01` 的 Rust 契约。
2. 阻塞 `VN-05` 的真实数据库联调。
阻塞关系:
VN-02 实施收口记录2026-05-05
1. 依赖 `VN-01` 的 Rust 契约。
2. 阻塞 `VN-05` 的真实数据库联调。
1. 已新增 `server-rs/crates/spacetime-module/src/visual_novel.rs`,落地 `visual_novel_agent_session``visual_novel_agent_message``visual_novel_work_profile``visual_novel_runtime_run``visual_novel_runtime_history_entry``visual_novel_runtime_event` 六张表及对应 procedure。
2. 已同步 `server-rs/crates/spacetime-module/src/lib.rs``server-rs/crates/spacetime-module/src/migration.rs``docs/technical/SPACETIMEDB_TABLE_CATALOG.md` 和 Rust bindings。
3. 已新增 `server-rs/crates/spacetime-client/src/visual_novel.rs` typed facade并从 `server-rs/crates/spacetime-client/src/lib.rs` 导出视觉小说 record / input 类型
4. `visual_novel_runtime_event` 只作为 `public event` 审计事件表使用;`visual_novel_runtime_history_entry` 只保存继续体验与历史重生成所需 step 和快照哈希,二者均不是 replay 数据源
5. 本阶段未新增 Axum 路由、LLM prompt、前端 UI、replay 表、replay 路由或私有 save 表;后续 VN-05 只应通过本阶段 facade 接入真实数据库
### VN-03创作与运行 Prompt / LLM 工具
VN-02 实施收口记录2026-05-05
1. 已新增 `server-rs/crates/spacetime-module/src/visual_novel.rs`,落地 `visual_novel_agent_session``visual_novel_agent_message``visual_novel_work_profile``visual_novel_runtime_run``visual_novel_runtime_history_entry``visual_novel_runtime_event` 六张表及对应 procedure
2. 已同步 `server-rs/crates/spacetime-module/src/lib.rs``server-rs/crates/spacetime-module/src/migration.rs``docs/technical/SPACETIMEDB_TABLE_CATALOG.md` 和 Rust bindings
3. 已新增 `server-rs/crates/spacetime-client/src/visual_novel.rs` typed facade并从 `server-rs/crates/spacetime-client/src/lib.rs` 导出视觉小说 record / input 类型
4. `visual_novel_runtime_event` 只作为 `public event` 审计事件表使用;`visual_novel_runtime_history_entry` 只保存继续体验与历史重生成所需 step 和快照哈希,二者均不是 replay 数据源。
5. 本阶段未新增 Axum 路由、LLM prompt、前端 UI、replay 表、replay 路由或私有 save 表;后续 VN-05 只应通过本阶段 facade 接入真实数据库。
### VN-03创作与运行 Prompt / LLM 工具
负责范围:
@@ -1744,7 +1754,7 @@ VN-11 从 Batch 1 开始持续运行,最终阻塞发布。
### 17.1 正向验收
1. `visual-novel` 入口可见并可点击创建。
1. `visual-novel` 入口当前可见但处于敬请期待禁用态;重新开放 `open=true` 后,再验收点击创建闭环
2. 一句话创建能生成可编辑底稿。
3. 文档创建能读取平台文档资产并生成底稿。
4. 空白创建能进入结果页。