@playcraft/cli 0.0.57 → 0.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/README.md +34 -16
  2. package/dist/cli-root-help.js +1 -0
  3. package/dist/commands/build-all.js +10 -9
  4. package/dist/commands/build.js +13 -12
  5. package/dist/commands/create.js +26 -33
  6. package/dist/commands/platform-skills.generated.js +19 -0
  7. package/dist/commands/skills.js +2 -0
  8. package/dist/commands/tools-generation.js +1 -1
  9. package/dist/commands/workspace-runtime.js +54 -0
  10. package/dist/index.js +3 -1
  11. package/dist/project-skills/commands.js +72 -0
  12. package/dist/project-skills/lifecycle.js +28 -0
  13. package/dist/project-skills/local-run.js +112 -0
  14. package/dist/project-skills/local-store.js +149 -0
  15. package/dist/project-skills/messages.js +72 -0
  16. package/dist/project-skills/reconcile.js +62 -0
  17. package/dist/project-skills/remote-cache.js +51 -0
  18. package/dist/project-skills/validation.js +19 -0
  19. package/dist/remix/clone.js +2 -0
  20. package/dist/remix/init-template.js +2 -0
  21. package/dist/remix/pull.js +2 -0
  22. package/dist/remix/push.js +21 -1
  23. package/dist/utils/agent-api-client.js +54 -17
  24. package/dist/utils/tool-operation-journal.js +54 -0
  25. package/dist/workspace-runtime/codex/app-server.js +395 -0
  26. package/dist/workspace-runtime/codex/config-toml.js +25 -0
  27. package/dist/workspace-runtime/codex/jsonrpc-stdio.js +106 -0
  28. package/dist/workspace-runtime/codex/loopback.js +59 -0
  29. package/dist/workspace-runtime/codex/native-adapter.js +3 -0
  30. package/dist/workspace-runtime/main.js +10 -0
  31. package/dist/workspace-runtime/persistence/journal.js +350 -0
  32. package/dist/workspace-runtime/processes/managed-writes.js +69 -0
  33. package/dist/workspace-runtime/serve.js +111 -0
  34. package/dist/workspace-runtime/server/auth.js +21 -0
  35. package/dist/workspace-runtime/server/dispatch.js +861 -0
  36. package/dist/workspace-runtime/server/execution-group.js +88 -0
  37. package/dist/workspace-runtime/server/http.js +561 -0
  38. package/dist/workspace-runtime/server/lock.js +53 -0
  39. package/dist/workspace-runtime/server/types.js +1 -0
  40. package/dist/workspace-runtime/workspaces/context-error.js +2 -0
  41. package/dist/workspace-runtime/workspaces/file-snapshot.js +213 -0
  42. package/dist/workspace-runtime/workspaces/files.js +143 -0
  43. package/dist/workspace-runtime/workspaces/git.js +242 -0
  44. package/dist/workspace-runtime/workspaces/json5-edit.js +170 -0
  45. package/dist/workspace-runtime/workspaces/parameters.js +272 -0
  46. package/dist/workspace-runtime/workspaces/prepare.js +364 -0
  47. package/dist/workspace-runtime/workspaces/registry.js +107 -0
  48. package/dist/workspace-runtime/workspaces/revisions.js +31 -0
  49. package/package.json +4 -1
  50. package/project-template-v2/.claude/agents/artist.md +82 -0
  51. package/project-template-v2/.claude/agents/developer.md +153 -0
  52. package/project-template-v2/.claude/agents/game-designer.md +264 -0
  53. package/project-template-v2/.claude/agents/refs/artist-art-style-catalog.md +533 -0
  54. package/project-template-v2/.claude/agents/refs/artist-color-audio-recipes.md +153 -0
  55. package/project-template-v2/.claude/agents/refs/artist-dimension-axis.md +27 -0
  56. package/project-template-v2/.claude/agents/refs/artist-master-composite-recipes.md +208 -0
  57. package/project-template-v2/.claude/agents/refs/atom-skill-library.md +81 -0
  58. package/project-template-v2/.claude/agents/refs/developer-impl-cookbook.md +432 -0
  59. package/project-template-v2/.claude/agents/refs/framework-5-component-filter.md +252 -0
  60. package/project-template-v2/.claude/agents/refs/framework-game-feel-juice.md +266 -0
  61. package/project-template-v2/.claude/agents/refs/framework-mda.md +147 -0
  62. package/project-template-v2/.claude/agents/refs/game-designer-gameplay-sufficiency.md +123 -0
  63. package/project-template-v2/.claude/agents/refs/ta-3d-flip-recipe.md +88 -0
  64. package/project-template-v2/.claude/agents/refs/ta-atlas-deliverable-standard.md +67 -0
  65. package/project-template-v2/.claude/agents/refs/ta-batch-pipeline-recipes.md +120 -0
  66. package/project-template-v2/.claude/agents/refs/ta-image-generation-detail.md +300 -0
  67. package/project-template-v2/.claude/agents/refs/ta-image-ops-reference.md +495 -0
  68. package/project-template-v2/.claude/agents/refs/ta-pipeline-cookbook.md +1141 -0
  69. package/project-template-v2/.claude/agents/refs/ta-tools-reference.md +111 -0
  70. package/project-template-v2/.claude/agents/refs/ta-vfx-preset-catalog.md +365 -0
  71. package/project-template-v2/.claude/agents/refs/threejs-cannon-pitfalls.md +412 -0
  72. package/project-template-v2/.claude/agents/reviewer.md +75 -0
  73. package/project-template-v2/.claude/agents/technical-artist.md +86 -0
  74. package/project-template-v2/.claude/hooks/snapshot-milestone.mjs +243 -0
  75. package/project-template-v2/.claude/hooks/user-prompt.mjs +133 -0
  76. package/project-template-v2/.claude/settings.json +33 -0
  77. package/project-template-v2/.claude/skills/brainstorming/SKILL.md +161 -0
  78. package/project-template-v2/.claude/skills/brainstorming/scripts/frame-template.html +270 -0
  79. package/project-template-v2/.claude/skills/brainstorming/scripts/helper.js +177 -0
  80. package/project-template-v2/.claude/skills/brainstorming/scripts/server.cjs +354 -0
  81. package/project-template-v2/.claude/skills/brainstorming/scripts/start-server.sh +148 -0
  82. package/project-template-v2/.claude/skills/brainstorming/scripts/stop-server.sh +56 -0
  83. package/project-template-v2/.claude/skills/brainstorming/scripts/wait-for-selection.sh +62 -0
  84. package/project-template-v2/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  85. package/project-template-v2/.claude/skills/brainstorming/visual-companion.md +309 -0
  86. package/project-template-v2/.claude/skills/playcraft-ad-psychology/SKILL.md +182 -0
  87. package/project-template-v2/.claude/skills/playcraft-art-style-guide/SKILL.md +123 -0
  88. package/project-template-v2/.claude/skills/playcraft-asset-state-sheet/SKILL.md +205 -0
  89. package/project-template-v2/.claude/skills/playcraft-audio-generation/SKILL.md +280 -0
  90. package/project-template-v2/.claude/skills/playcraft-batch-pipeline/SKILL.md +184 -0
  91. package/project-template-v2/.claude/skills/playcraft-build-optimizer/SKILL.md +306 -0
  92. package/project-template-v2/.claude/skills/playcraft-image-generation/SKILL.md +298 -0
  93. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +123 -0
  94. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +254 -0
  95. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +324 -0
  96. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +97 -0
  97. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +118 -0
  98. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +137 -0
  99. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +397 -0
  100. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +296 -0
  101. package/project-template-v2/.claude/skills/playcraft-image-ops/SKILL.md +122 -0
  102. package/project-template-v2/.claude/skills/playcraft-image-processing/SKILL.md +219 -0
  103. package/project-template-v2/.claude/skills/playcraft-masking/SKILL.md +373 -0
  104. package/project-template-v2/.claude/skills/playcraft-playable-optimization/SKILL.md +161 -0
  105. package/project-template-v2/.claude/skills/playcraft-research/SKILL.md +215 -0
  106. package/project-template-v2/.claude/skills/playcraft-skill-recommender/SKILL.md +382 -0
  107. package/project-template-v2/.claude/skills/playcraft-sprite-generation/SKILL.md +423 -0
  108. package/project-template-v2/.claude/skills/playcraft-sprite-remix/SKILL.md +158 -0
  109. package/project-template-v2/.claude/skills/playcraft-sprite-sheet/SKILL.md +100 -0
  110. package/project-template-v2/.claude/skills/playcraft-storyboard/SKILL.md +167 -0
  111. package/project-template-v2/.claude/skills/playcraft-style-qa/SKILL.md +270 -0
  112. package/project-template-v2/.claude/skills/playcraft-text-rendering/SKILL.md +236 -0
  113. package/project-template-v2/.claude/skills/playcraft-vfx-animation/SKILL.md +130 -0
  114. package/project-template-v2/.claude/skills/playwright-cli/SKILL.md +390 -0
  115. package/project-template-v2/.claude/skills/playwright-cli/references/element-attributes.md +23 -0
  116. package/project-template-v2/.claude/skills/playwright-cli/references/playwright-tests.md +39 -0
  117. package/project-template-v2/.claude/skills/playwright-cli/references/request-mocking.md +87 -0
  118. package/project-template-v2/.claude/skills/playwright-cli/references/running-code.md +240 -0
  119. package/project-template-v2/.claude/skills/playwright-cli/references/session-management.md +226 -0
  120. package/project-template-v2/.claude/skills/playwright-cli/references/spec-driven-testing.md +308 -0
  121. package/project-template-v2/.claude/skills/playwright-cli/references/storage-state.md +275 -0
  122. package/project-template-v2/.claude/skills/playwright-cli/references/test-generation.md +134 -0
  123. package/project-template-v2/.claude/skills/playwright-cli/references/tracing.md +142 -0
  124. package/project-template-v2/.claude/skills/playwright-cli/references/video-recording.md +153 -0
  125. package/project-template-v2/.claude/skills/session-analyzer/SKILL.md +386 -0
  126. package/project-template-v2/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +182 -0
  127. package/project-template-v2/.claude/skills/session-analyzer/scripts/find-turns.mjs +72 -0
  128. package/project-template-v2/.claude/skills/session-analyzer/scripts/heavy-output.mjs +121 -0
  129. package/project-template-v2/.claude/skills/session-analyzer/scripts/resolve-session.mjs +102 -0
  130. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +127 -0
  131. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +106 -0
  132. package/project-template-v2/.claude/skills/session-analyzer/scripts/time-gaps.mjs +128 -0
  133. package/project-template-v2/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +67 -0
  134. package/project-template-v2/.claude/snapshot.mjs +263 -0
  135. package/project-template-v2/.playcraft/skills.lock.json +152 -0
  136. package/project-template-v2/CLAUDE.md +146 -0
  137. package/project-template-v2/assets/audio/bgm/.gitkeep +0 -0
  138. package/project-template-v2/assets/audio/sfx/.gitkeep +0 -0
  139. package/project-template-v2/assets/bundles/.gitkeep +0 -0
  140. package/project-template-v2/assets/images/bg/.gitkeep +0 -0
  141. package/project-template-v2/assets/images/reference/.gitkeep +0 -0
  142. package/project-template-v2/assets/images/storyboard/.gitkeep +0 -0
  143. package/project-template-v2/assets/images/tiles/.gitkeep +0 -0
  144. package/project-template-v2/assets/images/ui/.gitkeep +0 -0
  145. package/project-template-v2/assets/images/vfx/.gitkeep +0 -0
  146. package/project-template-v2/assets/models/.gitkeep +0 -0
  147. package/project-template-v2/docs/harness/iteration-1/context-flow.md +254 -0
  148. package/project-template-v2/docs/harness/iteration-1/generate-flow.md +91 -0
  149. package/project-template-v2/docs/harness/iteration-1/ideate-flow.md +214 -0
  150. package/project-template-v2/docs/harness/iteration-1/optimize-flow.md +75 -0
  151. package/project-template-v2/docs/harness/iteration-1/wrapup-flow.md +63 -0
  152. package/project-template-v2/docs/harness/iteration-2/context-flow.md +223 -0
  153. package/project-template-v2/docs/harness/iteration-2/generate-flow.md +129 -0
  154. package/project-template-v2/docs/harness/iteration-2/ideate-flow.md +267 -0
  155. package/project-template-v2/docs/harness/iteration-2/optimize-flow.md +164 -0
  156. package/project-template-v2/docs/harness/iteration-2/wrapup-flow.md +115 -0
  157. package/project-template-v2/docs/harness/orchestrator-flow.md +364 -0
  158. package/project-template-v2/docs/project-state.json +60 -0
  159. package/project-template-v2/docs/project-state.md +72 -0
  160. package/project-template-v2/docs/standards/README.md +225 -0
  161. package/project-template-v2/docs/standards/agent-behavior-standards.md +174 -0
  162. package/project-template-v2/docs/standards/artifacts/design-brief.md +19 -0
  163. package/project-template-v2/docs/standards/artifacts/design.md +22 -0
  164. package/project-template-v2/docs/standards/artifacts/game-code.md +41 -0
  165. package/project-template-v2/docs/standards/artifacts/todo-list.md +41 -0
  166. package/project-template-v2/docs/standards/iter1-agent-behavior-standards.md +343 -0
  167. package/project-template-v2/game/index.ts +18 -0
  168. package/project-template-v2/globals.d.ts +51 -0
  169. package/project-template-v2/index.css +34 -0
  170. package/project-template-v2/index.html +18 -0
  171. package/project-template-v2/main.ts +9 -0
  172. package/project-template-v2/package.json +46 -0
  173. package/project-template-v2/skills/_shared/scripts/dispatch-clear.mjs +31 -0
  174. package/project-template-v2/skills/_shared/scripts/dispatch-set.mjs +86 -0
  175. package/project-template-v2/skills/_shared/scripts/dod-check.mjs +153 -0
  176. package/project-template-v2/skills/_shared/scripts/handoff-append.mjs +70 -0
  177. package/project-template-v2/skills/_shared/scripts/lib/validator-artifacts.mjs +91 -0
  178. package/project-template-v2/skills/_shared/scripts/pipeline/dod-config.mjs +131 -0
  179. package/project-template-v2/skills/_shared/scripts/pipeline/index.mjs +80 -0
  180. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-1-core.mjs +90 -0
  181. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-2-wrap.mjs +93 -0
  182. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-3-visual.mjs +23 -0
  183. package/project-template-v2/skills/_shared/scripts/render-project-state.mjs +230 -0
  184. package/project-template-v2/skills/_shared/scripts/state-advance-stage.mjs +58 -0
  185. package/project-template-v2/skills/_shared/scripts/state-get.mjs +339 -0
  186. package/project-template-v2/skills/_shared/scripts/state-handoff.mjs +39 -0
  187. package/project-template-v2/skills/_shared/scripts/state-set.mjs +94 -0
  188. package/project-template-v2/skills/_shared/scripts/state-store.mjs +783 -0
  189. package/project-template-v2/skills/_shared/scripts/todo-add.mjs +88 -0
  190. package/project-template-v2/skills/_shared/scripts/todo-get.mjs +130 -0
  191. package/project-template-v2/skills/_shared/scripts/todo-remove.mjs +33 -0
  192. package/project-template-v2/skills/_shared/scripts/todo-set.mjs +47 -0
  193. package/project-template-v2/skills/_shared/scripts/verify-asset-code-sync.mjs +268 -0
  194. package/project-template-v2/skills/_shared/scripts/verify-env.mjs +285 -0
  195. package/project-template-v2/skills/_shared/scripts/verify-placeholders.mjs +161 -0
  196. package/project-template-v2/skills/playable-autoplay/SKILL.md +176 -0
  197. package/project-template-v2/skills/playable-autoplay/agents/openai.yaml +4 -0
  198. package/project-template-v2/skills/playable-debug/SKILL.md +116 -0
  199. package/project-template-v2/skills/playable-debug/agents/openai.yaml +4 -0
  200. package/project-template-v2/skills/playable-debug/references/debug-config.md +40 -0
  201. package/project-template-v2/skills/playable-record/SKILL.md +140 -0
  202. package/project-template-v2/skills/playable-record/scripts/lib/dev-server.mjs +104 -0
  203. package/project-template-v2/skills/playable-record/scripts/lib/record-audio-bridge.js +141 -0
  204. package/project-template-v2/skills/playable-record/scripts/record-playable.mjs +425 -0
  205. package/project-template-v2/skills/playable-record/scripts/verify-contract.mjs +261 -0
  206. package/project-template-v2/skills/playable-record/scripts/verify-firstwin.mjs +398 -0
  207. package/project-template-v2/skills/playable-record/scripts/verify-fusion.mjs +322 -0
  208. package/project-template-v2/skills/playable-record/scripts/verify-lifecycle.mjs +105 -0
  209. package/project-template-v2/skills/playable-record/scripts/verify-vlm-video.mjs +230 -0
  210. package/project-template-v2/skills/playable-validate/SKILL.md +61 -0
  211. package/project-template-v2/skills/playable-validate/validation-rules.md +14 -0
  212. package/project-template-v2/skills/playable-verify-ui/SKILL.md +63 -0
  213. package/project-template-v2/skills/playable-verify-ui/scripts/lib/__init__.py +1 -0
  214. package/project-template-v2/skills/playable-verify-ui/scripts/lib/config_expr.js +218 -0
  215. package/project-template-v2/skills/playable-verify-ui/scripts/lib/node_utils.js +51 -0
  216. package/project-template-v2/skills/playable-verify-ui/scripts/lib/profile_loader.py +59 -0
  217. package/project-template-v2/skills/playable-verify-ui/scripts/lib/report.py +106 -0
  218. package/project-template-v2/skills/playable-verify-ui/scripts/lib/runtime_contract.js +116 -0
  219. package/project-template-v2/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +59 -0
  220. package/project-template-v2/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +64 -0
  221. package/project-template-v2/skills/playable-verify-ui/scripts/verify_runtime_contract.js +58 -0
  222. package/project-template-v2/skills/playable-verify-ui/scripts/verify_text_overlap.py +333 -0
  223. package/project-template-v2/ta-workspace/scripts/.gitkeep +0 -0
  224. package/project-template-v2/tsconfig.json +20 -0
  225. package/project-template-v2/vite.config.ts +27 -0
@@ -0,0 +1,267 @@
1
+ # 迭代2 · ideate flow(玩法包装创意)
2
+
3
+ > 阶段执行序文档。角色:game-designer。被 `pipeline/iteration-2-wrap.mjs` 的 `ideate.flowRef` 引用,派发时给路径不复述。
4
+
5
+ ## 目标
6
+
7
+ ideate 是迭代2的第一个阶段。它不是固定做“再写一版包装”,而是先判断本轮为什么进入迭代2,再选择完全不同的文档扩充方式。
8
+
9
+ ### 路径 A:包装构建
10
+
11
+ 适用状态:迭代1核心玩法已经做完 / 已确认,但还没有形成完整 playable 包装。
12
+
13
+ 目标:把核心动作升级成完整短时体验,补齐玩家第一眼为什么行动、关卡如何递进、引导如何让玩家自然完成第一步、成功 / 失败如何形成有趣反馈和下一步动机。
14
+
15
+ 设计策略:偏发散和补全。允许基于已有 brief / design 做合理推断,但不能改坏迭代1确认的核心动作和胜负语义。
16
+
17
+ ### 路径 B:目标优化
18
+
19
+ 适用状态:已经执行过一轮包装 / 实现 / 验证,现在带着用户输入、录像反馈、handoff 或当前文件状态继续优化。
20
+
21
+ 目标:确认新信息影响了什么,把用户输入或执行反馈收敛成明确的设计修正。此时不是重做一套包装,而是更新既有包装目标、边界和取舍。
22
+
23
+ 设计策略:偏确认和收敛。先判断用户信息是在确认原方向、要求局部优化,还是改变包装 / 关卡 / 引导 / 成功失败方向;再改文档。
24
+
25
+ game-designer 必须在 handoff 中说明本轮采用路径 A 还是路径 B,依据是什么。如无法判断,提出推荐判断和问题,由调度者区分“可自行结论”还是真实用户确认。
26
+
27
+ ## 共同输入
28
+
29
+ - `docs/design.md` — 迭代1核心玩法设计;本阶段只迭代原文件,不创建 v2 / v3 设计文件。
30
+ - `docs/design-brief.md` — 过程日志;本阶段继续追加包装探索、用户输入、取舍来源。
31
+ - `docs-last/` — 如需查看进入迭代2前的历史文档,从这里读取;它由调度者维护,game-designer 不创建、不覆盖。
32
+ - 当前 `game/**` — 用来判断核心玩法是否已完成、包装是否已执行过一轮;ideate 阶段不改代码。
33
+ - 最近 handoff / 录像证据(如存在) — 用来判断上一轮实际完成度、用户反馈和待优化目标。
34
+
35
+ ## 共同入口判定
36
+
37
+ 1. 读取用户最新输入、`docs/design.md`、`docs/design-brief.md`、当前 `game/**`、最近 handoff / 录像证据。
38
+ 2. 判断进入路径:
39
+ - 选路径 A:核心玩法成立,但 hook、关卡、引导、成功 / 失败、完整体验流程还没有被包装成完整 playable。
40
+ - 选路径 B:已有一轮包装 / 实现 / 验证结果,现在需要根据用户输入或当前结果继续修正目标。
41
+ 3. 在 `docs/design-brief.md` 追加 `Iteration 2 Entry Decision`,记录:
42
+ - `Entry Mode` — `Packaging Build` 或 `Target Optimization`。
43
+ - `Evidence` — 来自 design、brief、game、handoff、录像或用户输入的依据。
44
+ - `User Signal` — 是否有用户输入;如有,标 `[USER]` 并记录影响范围。
45
+ - `Open Question` — 如有问题,写推荐判断和为什么不能从当前资料直接确定。
46
+
47
+ ## 路径 A:包装构建流程
48
+
49
+ ### 1. 读取包装线索
50
+
51
+ - 从 `docs/design-brief.md` 中抽取 hook、玩家情绪、广告动机、可用题材线索。
52
+ - 从 `docs/design.md` 中确认迭代1核心玩法边界:核心动作、胜负语义、节奏、引导、当前成功 / 失败定义。
53
+ - 参考迭代1已经做过的 Core Loop / Layout / Pacing / Win-Lose / Synergy / Visuals+Engine signals / Tutorial,以及爽感放大 / 差异机制 / 情绪曲线 / 视觉辨识等维度;不要默认重问同一批问题。
54
+
55
+ ### 2. 找包装缺口
56
+
57
+ 至少确认以下缺口:
58
+
59
+ **Hook 心理机制**
60
+
61
+ - 包装 hook:玩家第一眼看到什么,为什么愿意立刻操作。
62
+ - hook 触发类型:本游戏适合哪种认知触发机制 —— Challenge Hook(展示 near-fail 状态触发 Cognitive Closure)/ Fail & Fix(先演失败再演正确操作)/ Sensory Impact(高饱和+动态粒子+即时音效叠加)/ Identity Hook("你能通过这关吗"触发 Winner / Not-a-Loser 身份认同);不要只写视觉描述,要说明触发机制。
63
+ - 玩家身份心理:本游戏在 15-45 秒内主要激活哪种身份心理 —— Winner(需明显进度感/快速正反馈)/ Not-a-Loser(near-win 是主动力,失败应可重试)/ Unique(发现隐藏路径或特殊连锁)/ In-Control(策略选择/风险-奖励可见);至少需要激活 1 种,主次都要说明。
64
+
65
+ **包装规则与叙事**
66
+
67
+ - 包装规则:成功 / 失败的完整玩法规则如何被包装;核心玩法、副玩法是否需要包装;整体故事背景和信息是否需要二次包装。
68
+ - 包装叙事与情绪弧线:15-45 秒内玩家为什么在意,情绪如何推进。
69
+
70
+ **关卡地图设计**
71
+
72
+ - 关卡补充:是否有 first win、节奏递进、失败风险、目标变化。
73
+ - 关卡意图:每个展示关卡教什么、验证什么、制造什么挑战或 near-win。
74
+ - 空间结构可读性:目标区 / 危险区 / 操作区是否一眼可区分;布局是否避免视觉死角或错误引导;第一次尝试是否有合理成功空间。
75
+ - 节奏分段:每关内的张弛节奏是否被刻意设计;15-45 秒内是否有至少 1 个明确的高潮帧(near-win 或 climax);高潮帧的位置和触发条件。
76
+ - 递进梯度:关卡 1 → N 引入了哪些新变量(新障碍类型/速度/空间收窄);每个新变量是否有 Learn → Play → Challenge 的安全环境过渡;playable ad 通常只有 2-3 关,梯度要压缩但仍可感知。
77
+ - 风险-奖励路径:是否存在多条通关路径(高风险高收益 vs 保守路线);高风险路径的收益信号是否玩家可读;做对了是否能感受到"我发现了更好的打法"。
78
+ - 关卡差异化:每关是否有视觉或机制上的明显区别(防止第 2 关感觉与第 1 关相同而退出);是否有至少 1 个"只在这关出现"的特殊元素。
79
+ - 完成信号:每关的结束信号是否清晰;关卡间过渡时长是否 ≤ 1s;最后展示关卡是否有刻意设计的 cliffhanger 或"想看更多"动机。
80
+
81
+ **引导与反馈**
82
+
83
+ - 引导补充:第一屏提示、首个动作引导、停滞提示、错误恢复是否足够。
84
+ - 成功 / 失败升级:胜利反馈、失败反馈、趣味来源、情绪曲线、endcard 前状态是否完整。
85
+ - 核心动作反馈规格:为核心动作定义反馈意图而非实现方案 —— 即时视觉信号(闪光/粒子/形变的强度描述)、音效匹配描述(何种声音对应何种动作结果)、强度时刻(什么情况下需要 screen shake / hit stop / slow-mo);没有反馈规格,developer 只能功能正确但无 feel。
86
+
87
+ **布局与可读性**
88
+
89
+ - 布局与可读性:玩家一眼能否看出目标、可操作对象、风险、进度。
90
+
91
+ ### 3. 扩充 `docs/design.md`
92
+
93
+ 在原文件中追加或更新独立章节:
94
+
95
+ ```markdown
96
+ ## 迭代2:玩法包装升级
97
+
98
+ ### 进入路径
99
+
100
+ {Packaging Build;为什么判断核心玩法已可进入包装构建}
101
+
102
+ ### 包装 hook
103
+
104
+ {玩家第一眼看到什么,为什么愿意立刻操作,它如何不改变基础核心动作}
105
+
106
+ ### Hook 心理机制
107
+
108
+ {本游戏采用哪种 Hook 触发类型(Challenge Hook / Fail & Fix / Sensory Impact / Identity Hook);激活哪种玩家身份心理(Winner / Not-a-Loser / Unique / In-Control);为什么这种机制适合本游戏的核心动作}
109
+
110
+ ### 包装
111
+
112
+ {成功 / 失败规则的包装方式;核心玩法、副玩法是否包装;故事背景和信息是否二次包装}
113
+
114
+ ### 关卡地图设计
115
+
116
+ {每关的空间结构:目标区/危险区/操作区布局描述;节奏分段:张弛节奏和高潮帧位置;递进梯度:关卡 1→N 引入的新变量和 Learn→Challenge 过渡;风险-奖励路径:是否存在多路径选择;关卡差异化:每关的视觉/机制区别标志;完成信号:结束是否清晰、最后关卡的 cliffhanger}
117
+
118
+ ### 关卡补充
119
+
120
+ {first win 关卡、节奏递进、失败风险、关卡内玩家看到的目标变化}
121
+
122
+ ### 关卡意图
123
+
124
+ {每个展示关卡教什么、验证什么、制造什么挑战或 near-win}
125
+
126
+ ### 核心动作反馈规格
127
+
128
+ {核心动作的即时视觉信号描述(闪光/粒子/形变强度);音效匹配意图(何种声音对应何种结果);强度时刻(何时需要 screen shake / hit stop / slow-mo);成功反馈与失败反馈的情绪对比;不写具体实现参数,只定义反馈意图}
129
+
130
+ ### 引导补充
131
+
132
+ {第一屏提示、首个动作引导、停滞提示、错误恢复}
133
+
134
+ ### 成功 / 失败升级
135
+
136
+ {胜利反馈、失败反馈、趣味来源、情绪曲线、是否进入 endcard 前状态}
137
+
138
+ ### 布局与可读性意图
139
+
140
+ {屏幕主要区域如何服务目标、操作、风险、进度;不写具体实现路径}
141
+
142
+ ### 完整体验流程
143
+
144
+ {Hook → Tutorial → Gameplay → EndCard 的时间线;玩家看到什么、做什么、情绪如何过渡;各阶段进入条件和退出触发(例如:Tutorial 完成首个动作后自动进入 Gameplay;Win 后 X 秒自动进入 EndCard)}
145
+
146
+ ### 包装叙事与情绪弧线
147
+
148
+ {Narrative Level / Emotional Arc:玩家为什么在意、15-45 秒内情绪如何被推进}
149
+
150
+ ### 与基础玩法的边界
151
+
152
+ {保留哪些迭代1核心动作 / 规则 / 胜负底层语义;哪些是包装层改动}
153
+ ```
154
+
155
+ ### 4. 扩充 `docs/design-brief.md`
156
+
157
+ 追加 `Iteration 2 Packaging Build Log`:
158
+
159
+ - `Packaging Signals` — 从原 brief / design / game 状态读到的线索。
160
+ - `Packaging Gaps` — 本次识别到的包装缺口。
161
+ - `Decisions` — 本次确认的包装、关卡、引导、成功 / 失败改动。
162
+ - `Rejected / Deferred` — 明确不做或留到后续的内容。
163
+ - `Questions For Orchestrator` — 如有问题,写推荐判断和影响范围。
164
+
165
+ ## 路径 B:目标优化流程
166
+
167
+ ### 1. 确认新信息
168
+
169
+ - 读取用户输入、handoff、录像观察、当前 game 状态和已有 design / brief。
170
+ - 判断新信息类型:
171
+ - `confirm` — 用户或结果确认原包装方向。
172
+ - `tune` — 只要求局部优化,例如节奏、引导、反馈强度、关卡表达。
173
+ - `change` — 改变包装方向、关卡目标、引导方式、成功 / 失败表达或核心玩法边界。
174
+ - `unclear` — 用户信息不足以判断,需要调度者结论或真实用户确认。
175
+
176
+ ### 2. 归纳目标差异
177
+
178
+ 目标优化不重新拆 context TODO,但必须说明设计目标如何变化:
179
+
180
+ - 原设计哪些保持不变。
181
+ - 用户输入或执行结果要求改什么。
182
+ - 改动属于包装、关卡、引导、成功 / 失败、节奏、视觉可读性还是基础玩法边界。
183
+ - 哪些问题是设计目标变化,哪些只是后续 context / generate / optimize 的实现问题。
184
+ - 如果用户输入与原设计冲突,以用户为准,并记录取舍原因。
185
+
186
+ ### 3. 更新 `docs/design.md`
187
+
188
+ 在原“迭代2:玩法包装升级”章节中追加或更新 `目标优化记录`。不要重写成另一套完整方案,除非用户输入明确要求改变方向。
189
+
190
+ ```markdown
191
+ ### 目标优化记录
192
+
193
+ {Target Optimization;本轮优化来源:用户输入 / 录像反馈 / handoff / 当前实现状态}
194
+
195
+ #### 本轮修正
196
+
197
+ {需要修改的包装目标、关卡意图、引导、成功 / 失败、节奏或可读性}
198
+
199
+ #### 用户输入处理
200
+
201
+ {用户输入如何被解释;哪些直接生效;哪些由调度者自行结论或等待真实用户确认}
202
+
203
+ #### 设计边界
204
+
205
+ {哪些不能改;哪些允许进入 context / generate 形成任务}
206
+ ```
207
+
208
+ 如果目标优化发现原“迭代2:玩法包装升级”章节缺失必要信息,只补缺失小节,并在 `目标优化记录` 说明为什么补。
209
+
210
+ ### 4. 扩充 `docs/design-brief.md`
211
+
212
+ 追加 `Iteration 2 Target Optimization Log`:
213
+
214
+ - `Incoming Signal` — 用户输入、录像反馈、handoff 或当前状态摘要。
215
+ - `Signal Type` — `confirm` / `tune` / `change` / `unclear`。
216
+ - `Impact` — 影响包装、关卡、引导、成功 / 失败、节奏、可读性或核心玩法边界的哪一部分。
217
+ - `Decision` — 采用的设计修正;如以用户为准,标 `[USER]`。
218
+ - `Kept` — 明确保持不变的设计。
219
+ - `Question For Orchestrator` — 如有问题,写推荐判断、影响范围、是否建议真实用户确认。
220
+
221
+ ## 问题与确认
222
+
223
+ game-designer 可以提出问题,handoff 必须写清:
224
+
225
+ - 问题是什么。
226
+ - 推荐判断是什么。
227
+ - 影响范围是什么。
228
+ - 为什么无法从现有文档、用户输入、game 状态或录像证据中直接确定。
229
+
230
+ handoff 示例:
231
+
232
+ ```bash
233
+ npm run handoff:append -- role=game-designer \
234
+ status=awaiting_user_input \
235
+ summary="Needs orchestrator decision for iteration-2 ideate" \
236
+ artifactRefs="docs/design.md;docs/design-brief.md" \
237
+ blockers="decision-needed:<question-id>" \
238
+ pendingUserInput='{"status":"awaiting_user_input","id":"<question-id>","prompt":"<question>","options":[{"label":"<option>","description":"<impact>"}],"recommended":"<recommended>","impact":"<why it matters>"}'
239
+ ```
240
+
241
+ 结论明确后,需设置 `userConfirm=confirmed`。
242
+
243
+ ## 产出物
244
+
245
+ - `docs/design.md` — 原文件迭代。路径 A 新增 / 更新“迭代2:玩法包装升级”;路径 B 新增 / 更新“目标优化记录”并按需修正相关小节。
246
+ - `docs/design-brief.md` — 原 brief 继续追加。路径 A 写 `Iteration 2 Packaging Build Log`;路径 B 写 `Iteration 2 Target Optimization Log`。
247
+
248
+ ## 评价(退出判据)
249
+
250
+ 对应 spec `ideate.exit`:
251
+
252
+ - 已明确本轮采用路径 A 包装构建或路径 B 目标优化,并在 brief / handoff 中写明依据。
253
+ - 路径 A: `docs/design.md` 补齐 hook、包装、关卡补充、关卡意图、引导、成功 / 失败升级、布局可读性、完整体验流程、包装叙事和基础玩法边界。
254
+ - 路径 B: `docs/design.md` 明确保持不变项、本轮修正项、用户输入处理和设计边界;没有无依据重写整套包装。
255
+ - `docs/design-brief.md` 记录本阶段新增判断;如有用户输入影响玩法,以 `[USER]` 来源记录并优先生效。
256
+ - 成功 / 失败不只是条件,还说明反馈、趣味、情绪和下一步动机;若目标优化不触碰成功 / 失败,需说明保持不变。
257
+ - 如当前信息不足且不能合理默认,已通过 handoff 明确待确认问题、推荐判断和影响范围;调度者已区分为自行结论或真实用户确认。
258
+ - 调度者确认本阶段可进入 context,并设置 `pipeline.userConfirm=confirmed`。
259
+
260
+ ## 反模式
261
+
262
+ - 不判断进入路径,直接套用同一套包装步骤。
263
+ - 路径 A 只写包装主题,不补关卡、引导、成功 / 失败。
264
+ - 路径 B 把用户反馈当成重新发散理由,无依据重写整套设计。
265
+ - 创建 `design_v2.md` / `design_v3.md` 等新设计文件。
266
+ - 在 ideate 阶段执行 docs 快照覆盖,或把 context 阶段的差异拆 TODO 提前塞进设计师任务。
267
+ - 有用户输入但 brief 不记录,或与用户输入相冲突。
@@ -0,0 +1,164 @@
1
+ # 迭代2 · optimize flow(完整游戏优化)
2
+
3
+ > 阶段执行序文档。角色:developer。被 `pipeline/iteration-2-wrap.mjs` 的 `optimize.flowRef` 引用。
4
+
5
+ ## 目标
6
+
7
+ optimize 阶段验证并修正迭代2包装后的完整游戏体验。它承接 generate 已落地的任务卡,不重新设计、不新增包装方向。
8
+
9
+ 本阶段做两类确认:
10
+
11
+ - **实现一致性** — 已完成内容是否遵守 `docs/todo_list.md` 中每个迭代2任务卡的 Work / Context / Reference / Implementation Notes。
12
+ - **完整游戏质量** — build、contract、first win、fusion、autoplay、record 通过后,录像能证明包装后的 playable 清晰、有趣、可完成。
13
+
14
+ ## 输入
15
+
16
+ - `docs/todo_list.md` — 迭代2任务卡、差异覆盖矩阵、TODO 历史总览。
17
+ - `docs/design.md` — 迭代2包装构建或目标优化设计。
18
+ - `docs/design-brief.md` — 迭代2路径、用户输入、设计取舍。
19
+ - 当前 `game/**` / `assets/**` — generate 已实现内容。
20
+ - validate / recordings 目录 — 本阶段产出的验证证据。
21
+
22
+ ## 关键步骤
23
+
24
+ ### 1. 回读任务卡和路径
25
+
26
+ - 确认本轮是 `Packaging Build` 还是 `Target Optimization`。
27
+ - 回读所有迭代2 done todo 的任务卡,抽取:
28
+ - Work 是否都已落地。
29
+ - Context.Keep 是否应保持。
30
+ - Reference / Implementation Notes 是否有必须遵守的 API (Application Programming Interface, 应用程序编程接口)、event、config、asset binding。
31
+ - 如果发现实现与任务卡冲突,先按任务卡修正;如果任务卡本身与 design 冲突,STOP 写 blocker 回 context / ideate,不要在 optimize 重新设计。
32
+
33
+ ### 2. build 与接线修复
34
+
35
+ 运行:
36
+
37
+ ```bash
38
+ npm run build
39
+ ```
40
+
41
+ 只修复构建、资源链路、事件接线、类型错误或包装接线问题。不得借修错重写玩法目标。
42
+
43
+ ### 3. 合约与 first win
44
+
45
+ 运行:
46
+
47
+ ```bash
48
+ npm run verify:contract
49
+ npm run verify:firstwin
50
+ npm run verify:lifecycle
51
+ ```
52
+
53
+ 检查重点:
54
+
55
+ - playable runtime 合约不破。
56
+ - first win 仍可达。
57
+ - `verify:lifecycle` 确认 phase path 从 HOOK 出发并经过连续阶段到达 ENDCARD,中间不跳过;如果 phasePath 缺失 TUTORIAL 或 WIN/FAIL,说明状态机骨架不完整,路由回 generate 修复 `packaging-scene-fsm`。
58
+ - `Packaging Build` 路径: first win 应经过迭代2新增或确认的 hook / 引导 / 成功反馈。
59
+ - `Target Optimization` 路径: first win 不应被本轮局部修正破坏;若本轮目标影响 first win,必须能看到对应修正。
60
+
61
+ ### 4. fusion 检查
62
+
63
+ 运行:
64
+
65
+ ```bash
66
+ npm run verify:fusion
67
+ ```
68
+
69
+ 如果 fusion 对本项目是 no-op,在 handoff 中明确说明 no-op 原因。
70
+
71
+ ### 5. autoplay 与录像
72
+
73
+ - 确认 autoplay 能完整演示包装后的游戏路径。
74
+ - 运行:
75
+
76
+ ```bash
77
+ npm run record:mp4
78
+ ```
79
+
80
+ 录像目的不是证明某个按钮能点,而是证明完整 playable 成立。
81
+
82
+ ### 6. 完整游戏评价
83
+
84
+ 按现有 verify 脚本和 project-template 验证标准判断,不要发明另一套孤立检查。
85
+
86
+ 视频分段检查:
87
+
88
+ | segment | 检查重点 |
89
+ | -------- | ---------------------------------------------------- |
90
+ | HOOK | 0-3s 目标是否清晰,无空白 / 占位 / 错位 |
91
+ | TUTORIAL | 3-8s 首步引导是否可见、可执行 |
92
+ | GAMEPLAY | 核心操作是否有效,反馈是否有趣,失败 / 风险是否可读 |
93
+ | ENDCARD | 成功 / 失败后的 CTA 前状态是否清楚,CTA 不被 HUD 抢戏 |
94
+
95
+ 完整游戏 8 角度评价(每角度失败时的 routeTo):
96
+
97
+ | 角度 | 检查重点 | 失败时 routeTo |
98
+ | ------------------ | -------------------------------------------------------------------------------- | ----------------------------------------------- |
99
+ | MDA / Mechanics | 规则、可做 / 不可做动作清楚 | generate(对应功能 todo) |
100
+ | MDA / Dynamics | 连续操作后的节奏、风险、反馈循环成立 | generate(重写或优化 todo) |
101
+ | MDA / Aesthetics | 情绪来源明确,不只写”好玩”;hook 触发机制是否在录像中可感知 | ideate(路径 B 目标优化) |
102
+ | Game Feel / Juice | 输入、成功、失败反馈有强度;核心动作反馈与 ideate 定义的规格基本一致 | generate(反馈引擎 todo 或对应功能 todo) |
103
+ | Visual Readability | 目标、可操作对象、风险、进度一眼可读;引导层不遮挡游戏内容 | generate(分层渲染架构 todo 或引导 todo) |
104
+ | Level Progression | first win、教学点、挑战点、near-win 或高潮帧明确;关卡差异化可感知 | generate(关卡 todo) 或 ideate(关卡地图设计缺口) |
105
+ | Playable Ad Flow | Hook → Tutorial → Gameplay → EndCard 短时闭环成立;lifecycle phasePath 完整无跳跃 | generate(packaging-scene-fsm 修复) |
106
+ | Data Derivation | 没有从数据结构反推玩法;数据只服务设计 | generate(对应 todo) |
107
+
108
+ 路径差异:
109
+
110
+ - `Packaging Build` — 重点确认包装层把基础玩法补成完整游戏;8 角度都要评价。
111
+ - `Target Optimization` — 重点确认用户输入 / 执行反馈影响的目标已被修正,且未引入无关变化;只评价受影响角度,其余标注”unchanged”。
112
+
113
+ ### 7. DoD (Definition of Done, 完成定义) 检查
114
+
115
+ 运行:
116
+
117
+ ```bash
118
+ npm run dod:check
119
+ ```
120
+
121
+ 无脚本 DoD 由调度者明确写入 `gate.stageDoD`。若某项失败,按失败类型路由:
122
+
123
+ - 构建 / 合约 / 资源链路问题:留在 optimize 修复。
124
+ - 单个任务卡实现缺失:回 generate 补对应 todo 或追加本阶段范围内 todo。
125
+ - 设计目标冲突或用户信息不足:回 ideate / context,不要在 optimize 直接改设计。
126
+
127
+ ## handoff
128
+
129
+ handoff 应记录:
130
+
131
+ - build / contract / first win / lifecycle / fusion / autoplay / record 结果。
132
+ - lifecycle phasePath 完整路径(HOOK → … → ENDCARD)。
133
+ - 录像路径和关键观察。
134
+ - 包装构建或目标优化的完整游戏评价摘要(8 角度每项 pass / fail / unchanged,fail 时写 routeTo)。
135
+ - 如有失败,写明 routeTo: optimize / generate / context / ideate。
136
+
137
+ ## 产出物
138
+
139
+ - `game/**` / `assets/**` — 修复后的完整包装版本。
140
+ - `recordings/*.mp4` 或实际 record 输出路径 — 录像证据。
141
+ - `validate/**` — 校验报告 / 证据,按实际脚本输出。
142
+ - handoff — 验证结果、录像观察、路由建议。
143
+
144
+ ## 评价(退出判据)
145
+
146
+ 对应 spec `optimize.exit`:
147
+
148
+ - build 通过。
149
+ - contract 通过。
150
+ - first win 通过,且符合本轮路径要求。
151
+ - lifecycle 通过:phasePath 从 HOOK 出发,包含 TUTORIAL 和 GAMEPLAY,到达 ENDCARD,无跳跃。
152
+ - fusion 检查通过或明确 no-op。
153
+ - autoplay 能跑完完整游戏路径。
154
+ - 录像产出,并能从完整游戏角度看到 hook、引导、成功 / 失败和基础玩法闭环。
155
+ - 任务卡 Work / Context / Reference 没有被实现偏离。
156
+ - 8 角度评价已逐项记录 pass / fail / unchanged;所有 fail 项有明确 routeTo;P0 级问题已修复,P1/P2 有 nextAction。
157
+
158
+ ## 反模式
159
+
160
+ - 录像只证明某个功能点存在,看不出完整游戏。
161
+ - 为通过 first win 跳过引导或成功 / 失败表达。
162
+ - optimize 阶段重新设计包装方向。
163
+ - 目标优化阶段引入与用户输入无关的大改。
164
+ - 验证失败时直接改 design / brief。
@@ -0,0 +1,115 @@
1
+ # 迭代2 · wrapup flow(迭代整理)
2
+
3
+ > 阶段执行序文档。无角色派发(`dispatchableRoles: []`),由脚本/编排执行。被 `pipeline/iteration-2-wrap.mjs` 的 `wrapup.flowRef` 引用。
4
+
5
+ ## 目标
6
+
7
+ wrapup 只在迭代2真实跑完后执行。它负责回收运行态副作用、确认文档链可追溯、刷新当前项目入口信息,并在第二轮结束后把完整包装结果交给用户确认。
8
+
9
+ 补模板流程规则时不要执行本阶段动作,尤其不要提前改 `CLAUDE.md`。
10
+
11
+ ## 输入
12
+
13
+ - `docs/project-state.json` / `docs/project-state.md` — 当前机器态与人读状态。
14
+ - `docs-last/` — 进入迭代2前的 docs 快照。
15
+ - `docs/design.md` / `docs/design-brief.md` — 迭代2设计和决策记录。
16
+ - `docs/todo_list.md` — 迭代2任务卡和 TODO 历史总览。
17
+ - optimize handoff / validate / recordings — 完整游戏验证证据。
18
+ - 当前 `game/**` / `assets/**` — 真实落地后的项目状态。
19
+
20
+ ## 关键步骤
21
+
22
+ ### 1. 回收测试资源、释放端口占用
23
+
24
+ - 关闭 optimize 阶段启动的 dev server、record 进程、临时 watcher。
25
+ - 确认端口未被本轮测试进程占用。
26
+ - 清理无需留存的临时校验产物,保留关键录像、validate 报告和 handoff 证据。
27
+
28
+ ### 2. 确认 todo 清空
29
+
30
+ - 当前 iteration todo 必须全部 `done`。
31
+ - 有 `failed` / `pending` / `in_progress` 时不得 wrapup。
32
+ - 如果 todo 池状态与 `docs/todo_list.md` 历史不一致,先由调度者修正状态或补历史记录。
33
+
34
+ ### 3. 确认 docs 差异链可追溯
35
+
36
+ 必须能从以下链路追到本轮变化:
37
+
38
+ - `docs-last/` — 迭代2进入前的历史状态。
39
+ - `docs/design.md` — 迭代2路径 A 包装构建或路径 B 目标优化章节。
40
+ - `docs/design-brief.md` — Entry Decision、Packaging Build Log 或 Target Optimization Log。
41
+ - `docs/todo_list.md` — 迭代2任务卡、差异覆盖矩阵、参考变化、TODO 依赖关系。
42
+ - handoff / validate / recordings — generate 和 optimize 的落地证据。
43
+
44
+ 不要删除 `docs-last/`。它是 context 差异和 wrapup 审计的依据。
45
+
46
+ ### 4. 确认 TODO 历史总览
47
+
48
+ `docs/todo_list.md` 必须包含当前 todo 与之前 todo 合并后的“TODO 历史总览”:
49
+
50
+ ```markdown
51
+ ## TODO 历史总览
52
+
53
+ | iteration | todoId | 类型 | 状态 | 交付摘要 | artifactRefs |
54
+ | --------- | ------ | ---- | ---- | -------- | ------------ |
55
+ ```
56
+
57
+ 如果 generate 阶段尚未整理,wrapup 阶段由调度者补齐。这里只整理历史,不改变任务卡原语义。
58
+
59
+ ### 5. 刷新 `CLAUDE.md`
60
+
61
+ 仅在迭代2真实完成后执行。刷新内容应来自当前目录事实:
62
+
63
+ - 当前 pipeline iteration / stage / status。
64
+ - 当前 playable 是否已形成完整包装版本。
65
+ - design / brief / todo / docs-last 的实际存在状态。
66
+ - 当前 `game/**`、`assets/**`、validate / recordings 的关键状态。
67
+ - 高影响已知缺口。
68
+
69
+ 不要写:
70
+
71
+ - 完整 todo 池。
72
+ - handoff 全历史。
73
+ - 未来迭代计划。
74
+ - 尚未真实发生的流程假设。
75
+
76
+ ### 6. 第二轮结束用户确认
77
+
78
+ 迭代1结束后可自动进入迭代2;迭代2结束后需要把完整包装结果交给用户确认。
79
+
80
+ 确认信息应基于 optimize 证据,至少包含:
81
+
82
+ - 当前包装版本做到了什么。
83
+ - 录像 / validate 证据在哪里。
84
+ - 是否存在 P1 / P2 遗留问题和建议下一步。
85
+ - 需要用户确认的是“接受当前完整 playable 包装结果”还是“提出新的目标优化输入”。
86
+
87
+ 用户确认前,不得无条件进入下一轮目标优化或后续迭代。
88
+
89
+ ## 产出物
90
+
91
+ 无新设计产物。副作用:
92
+
93
+ - 测试进程关闭、端口干净。
94
+ - `docs/todo_list.md` 有完整 TODO 历史总览。
95
+ - `CLAUDE.md` 已按真实项目状态刷新。
96
+ - 调度者已向用户发出第二轮结束确认,或记录需要用户确认的 pending 状态。
97
+
98
+ ## 评价(退出判据)
99
+
100
+ 对应 spec `wrapup.exit`:
101
+
102
+ - 测试资源回收完成,无本轮遗留端口占用。
103
+ - 当前 iteration todo 全部 done。
104
+ - docs 差异链完整可追溯。
105
+ - TODO 历史总览已合并当前 todo 与之前 todo。
106
+ - 包装流程真实落地后,`CLAUDE.md` 已反映当前工程状态。
107
+ - 第二轮结束确认已面向用户发起,或机器态记录为等待用户确认。
108
+
109
+ ## 反模式
110
+
111
+ - 只补模板流程规则时提前改 `CLAUDE.md`。
112
+ - todo 未清空就进入下一迭代。
113
+ - 删除 `docs-last/` 导致无法追溯迭代2差异。
114
+ - 没有 optimize 证据就宣称包装完成。
115
+ - 迭代2结束后不经用户确认直接进入下一轮。