@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,75 @@
1
+ # 迭代1 · optimize flow(优化)
2
+
3
+ > 阶段执行序文档。角色:developer。被 `pipeline/iteration-1-core.mjs` 的 `optimize.flowRef` 引用。
4
+
5
+ ## 目标
6
+
7
+ 把 generate 产出的 game 打磨成**可自动演示并录像**的交付物,并确认实现没有偏离 `docs/design.md` 的最小核心交互循环。DoD (Definition of Done, 完成定义) 当前保持运行时/视频闭环:build 通过 → runtime contract 通过 → autoplay 能复现核心路径 → first win 通过 → fusion 检查 → 录像产出。autoplay 只作为行为外挂模拟用户行为,用于驱动真实玩家路径;它不应侵入玩法规则。脚本绿灯是基础证据,不是玩法语义的全部结论。
8
+
9
+ ## 关键步骤(DoD 三步序)
10
+
11
+ 1. **build & 修错**
12
+ - `npm run build`,有报错就定位修复。
13
+ 2. **接入 autoplay**
14
+ - 把游戏接成可自动演示(无需人手操作即可跑完一局核心闭环)。autoplay 是可复现的玩家路径执行器:通过公开合约 / 输入层 / 外层控制器模拟用户行为,作为行为外挂驱动真实玩法路径,不是直接通关开关。
15
+ - 正常情况下,generate 末尾的系统 todo `firstwin-harness` 已完成最小 runtime harness 接线;本阶段优先重跑和修复,不要重新设计通关路径。
16
+ - 如需暴露 hook,只暴露玩家动作等价入口(如 tap / drag / release)和状态观察点;不要在核心玩法里新增 `autoplay` 分支、测试专用胜利条件、跳规则 shortcut 或直接写终态的逻辑。
17
+ - 先跑 `npm run verify:contract`,确认 `window.__playable` 合约已接线。
18
+ - 跑 `npm run verify:firstwin`,确认自动演示从初始状态出发,经过至少一次核心玩家动作等价步骤,产生设计中声明的反馈 / 进度变化,再到达成功或 ENDCARD。
19
+ - 跑 `npm run verify:fusion`,确认多玩法融合设计与源码接线不冲突。
20
+ 3. **设计回查 + 实际路径检查**
21
+ - 回读 `docs/design.md` 的最小核心交互循环,把"玩家意图 / 动作 / 系统响应 / 反馈或进度 / 成功失败"逐项对照当前实现。
22
+ - 至少尝试一次真实点击 / 输入路径,确认人工玩家路径不是只靠 autoplay 才能成立。记录操作步骤、观察到的反馈和偏离项。
23
+ - 如果录屏或运行路径没有体现核心动作、反馈或进度变化,即使 contract / firstwin / record 为绿,也要记录 blocker 后修复。
24
+ 4. **build & 录像**
25
+ - 依赖 atom skill **`playable-record`**:headed 60fps 录像(`record:mp4 --headed --fps=60`),产出交付证据 MP4 (MPEG-4 Part 14, 视频容器格式)。
26
+ - 需要语义视频评审时跑 `npm run verify:vlm-video`。
27
+
28
+ 5. **跑 DoD 检查** — 上述步骤走完后,本阶段以 DoD 检查收尾(不是单个 verifier):
29
+ ```bash
30
+ npm run dod:check
31
+ ```
32
+ 在 handoff summary 里逐项报告 build / autoplay / record 的 pass/fail。`autoplay` 当前是无脚本 DoD;确认自动演示能跑完整闭环后,由 orchestrator 显式写入:
33
+ ```bash
34
+ npm run state:set -- gatePatch='{"stageDoD":{"autoplay":"passed"}}'
35
+ ```
36
+
37
+ ## 产出物
38
+
39
+ - `game/**`(可自动演示)
40
+ - `recordings/*.mp4`(录像证据)
41
+ - `validate/**`(校验报告/证据,按实际 verifier 输出)
42
+
43
+ ## 评价(退出判据)
44
+
45
+ 对应 spec `optimize.exit` / DoD: `build` / `contract` / `firstLevelWin` / `fusion` / `autoplay` / `record`:
46
+
47
+ - build 通过(无报错)。
48
+ - contract 通过(`window.__playable` 可用)。
49
+ - autoplay 能通过玩家动作等价入口复现核心路径,不是直接设置终态或调用胜利函数。
50
+ - first win 通过(自动演示经过核心动作 / 反馈 / 进度后到达成功或 ENDCARD)。
51
+ - fusion 检查通过或明确 no-op。
52
+ - 录像产出。
53
+ - 已回查 `docs/design.md`,并记录真实点击 / 输入路径的观察结果。
54
+
55
+ ## Skill 接入状态
56
+
57
+ 本阶段接入运行时/视频相关 skill。UI (User Interface, 用户界面) / focus playground 等质量环路后移。
58
+
59
+ | skill | 干啥 | 对应 DoD 步 |
60
+ | ------------------- | -------------------------------------------------------- | ---------------- |
61
+ | `playable-autoplay` | autoPlay / firstwin harness 的实现方法 | ② first win 接线 |
62
+ | `playable-debug` | autoPlay / 一键通关排障说明 | ② first win 排障 |
63
+ | `playable-record` | runtime contract / first win / fusion + headed 60fps MP4 | ②/③ 验证 + 录像 |
64
+ | `playable-validate` | 当前最小 video validation loop | ③ 录像后语义评审 |
65
+
66
+ 注意:本阶段仍聚焦运行时交付验证(build / contract / firstwin / fusion / autoplay / record / vlm-video)。`verify:lifecycle`、`verify:ui`、focus playground 暂不迁入。
67
+
68
+ ## 反模式
69
+
70
+ - 跳过 autoplay 直接录人手操作。
71
+ - autoplay 或 firstwin 直接设置 ENDCARD / win 状态,跳过核心玩家动作和反馈。
72
+ - 为 autoplay 在玩法代码里新增快捷通关分支、隐藏胜利条件或绕过规则的状态写入。
73
+ - build 有报错就标 DoD 通过。
74
+ - 在 optimize 阶段改玩法(应只打磨,不改 design 已定的核心玩法)。
75
+ - 只看 contract / firstwin / record 是否绿,不回查 design,也不实际尝试玩家路径。
@@ -0,0 +1,63 @@
1
+ # 迭代1 · wrapup flow(迭代整理)
2
+
3
+ > 阶段执行序文档。无角色派发(`dispatchableRoles: []`),由脚本/编排执行。被 `pipeline/iteration-1-core.mjs` 的 `wrapup.flowRef` 引用。
4
+
5
+ ## 目标
6
+
7
+ 迭代收尾:清理本迭代留下的运行态副作用,并把 `CLAUDE.md` 刷新成后续 agent 的导航索引。它帮助别人快速找到状态、设计、代码、证据和缺口,不是验收报告或成果总结。
8
+
9
+ ## 关键步骤
10
+
11
+ 1. **回收测试资源、释放端口占用**
12
+ - 关闭 optimize 阶段起的 dev server / record 占用的端口。
13
+ - 清理临时录像/校验产物中无需留存的部分(保留交付证据 MP4)。
14
+ 2. **刷新 CLAUDE.md 项目入口卡片**
15
+ - 因为本迭代新增了 design.md / todo_list.md / game/ 等文件,项目目录状态已变。
16
+ - 本阶段先按下面"入口卡片刷新规则"手工更新 CLAUDE.md;后续再沉淀成 `playcraft-project-entry-refresh` skill 与脚本。
17
+ - CLAUDE.md 只描述当前工程身份、目录地图、状态入口、关键产物位置、验证证据状态与全员边界;不复制调度剧本、不写完整 todo 池、不写 handoff 历史、不写主观质量结论。
18
+
19
+ ## CLAUDE.md 入口卡片刷新规则(迭代1手工版)
20
+
21
+ 把 CLAUDE.md 当成项目速览 / 导航索引:它应帮助任何 agent 在 30 秒内知道"这是哪类工程、从哪里读状态、目录怎么走、常用命令是什么、关键设计/任务/证据在哪里、有哪些全员边界"。它不是调度剧本,不是第二份状态源,也不是质量评价报告。
22
+
23
+ ### 收集顺序
24
+
25
+ 1. **包与命令** — 读 `package.json` 的项目名、模板版本、核心 scripts。只记录可稳定复用的命令:dev/build/typecheck/state/todo/handoff/DoD。不存在或尚未接入的验证脚本要标明是缺口。
26
+ 2. **入口与运行时** — 查 `index.html`、`main.ts`、`game/index.ts`、`.playcraft-engine`(若存在),说明当前是 placeholder 还是已应用 engine pack。
27
+ 3. **状态与设计产物** — 通过 `npm run state:get` 读取轻量摘要:iteration、stage、engine、coreAction、devStatus;再列关键产物是否存在,如 `docs/design.md`、`docs/design-brief.md`、`docs/atom-tree.json`、`docs/todo_list.md`。`docs/project-state.json` 只是过程文件,不要把直接读取 JSON 当成常规入口。
28
+ 4. **目录地图** — 列 `game/`、`assets/`、`docs/`、`docs/harness/`、`docs/harness/orchestrator-flow.md`、`skills/_shared/scripts/`、`.claude/agents/`、`.claude/skills/` 的用途。只解释目录职责,不展开全部文件。
29
+ 5. **验证与证据索引** — 列当前可用证据位置和状态,如 `validate/**`、`recordings/*.mp4`、DoD 结果、autoplay / firstwin / record 是否已验证。证据缺失就写 missing / pending,不要改写成完成。
30
+ 6. **工程约定** — 写全员可见的状态规则和 agent 边界:主会话执行 `npm run state:get` 后始终作为 orchestrator;具名 subagent 只读 `npm run state:get -- --json dispatch`;subagent 不升级成 orchestrator,也不自行 `todo:set`;写状态走脚本。
31
+ 7. **关键缺口** — 只保留 2-4 条会影响继续制作的高层缺口,并链接到具体文件或证据位置。
32
+
33
+ ### 写入标准
34
+
35
+ - 写具体事实,少写口号。例如"game/index.ts 仍是 engine placeholder",不要写"工程结构清晰"。
36
+ - 记录当前工程形态,不是未来计划。未来计划只用链接指向 harness 文档。
37
+ - 只写事实和证据状态,不要写"质量很好"、"玩法完成"、"已充分验证"这类无法从 state / artifact 直接证明的判断。
38
+ - 如果 DoD、录像、autoplay 或设计回查证据不足,如实写 missing / pending / blocker。
39
+ - 保留入口分流规则:主会话读 global state 并保持 orchestrator;具名 subagent 只读 dispatch,匹配 role 才执行。
40
+ - 每次 wrapup 只刷新工程速览和关键缺口;不要把每次 handoff、todo 明细、用户确认细节写进来。
41
+
42
+ ### 不要写入
43
+
44
+ - `stageExit` / `dispatchableRoles` / `canWriteTodo` 等调度者专属信息。
45
+ - 完整 todo 列表、完整 handoff 历史、未来迭代细节。
46
+ - role card 的职责全文或 pipeline spec 全文。
47
+ - 成果宣传、主观质量评价、没有证据支撑的完成判断。
48
+
49
+ ## 产出物
50
+
51
+ 无新设计产物。副作用:
52
+
53
+ - 端口干净、无悬挂进程。
54
+ - CLAUDE.md 已按当前目录刷新为导航索引。
55
+
56
+ ## 评价(退出判据)
57
+
58
+ 对应 spec `wrapup.exit`:
59
+
60
+ - 端口回收完成(无悬挂 dev/record 进程)。
61
+ - CLAUDE.md 已按入口卡片规则刷新,能定位状态、设计、代码、证据和缺口。
62
+
63
+ 满足后,advanceStage 在 wrapup→下一迭代边界会再次校验 `todosCleared`(本迭代 todo 必须已清空),通过后进入迭代2 的 ideate。
@@ -0,0 +1,223 @@
1
+ # 迭代2 · context flow(差异上下文构建)
2
+
3
+ > 阶段执行序文档。角色:game-designer。被 `pipeline/iteration-2-wrap.mjs` 的 `context.flowRef` 引用。
4
+
5
+ ## 目标
6
+
7
+ context 阶段接收 ideate 已经明确的进入路径和设计信息,直接读取 `docs-last/` 与当前 `docs/` 的差异,把差异转换成下游可执行的 TODO 上下文。
8
+
9
+ 本阶段只回答三件事:
10
+
11
+ - **要做什么** — 从 design 差异推导出的玩家可感知工作。
12
+ - **上下文是什么** — 这项工作来自哪个设计章节、brief 决策、历史状态和当前代码区域。
13
+ - **参考是什么** — 可复用 / 必须保留 / 必须避开的 atom、skill、API (Application Programming Interface, 应用程序编程接口)、event、config、asset binding。
14
+
15
+ 本阶段不写 `docs/design-brief.md`,不补设计结论,不提前侵入 verifier 或 optimize 验证体系。如果 design / brief 信息不足,STOP 写 blocker,路由回 ideate。
16
+
17
+ ## 输入
18
+
19
+ - `docs-last/` — 进入迭代2前的 docs 快照,用于读取历史状态和差异来源。
20
+ - `docs/design.md` — 已由 ideate 按路径 A 包装构建或路径 B 目标优化更新。
21
+ - `docs/design-brief.md` — 已记录 ideate 路径判断、用户输入、设计取舍。
22
+ - `docs/todo_list.md` — 原 todo 文档,本阶段继续追加迭代2任务卡,不创建 `todo_list_v2.md`。
23
+ - `docs/atom-tree.json` — Atom 引入中间文件;如存在,根据迭代2意图更新或补充参考。
24
+ - `.claude/skills/**` / `skills/**` / `.claude/agents/refs/atom-skill-library.md` — skill 库与本地参考索引,用于查找可复用能力。
25
+ - 当前 `game/**` — 用来判断工作应落到哪些系统/文件区域;context 阶段不实现。
26
+
27
+ ## 关键步骤
28
+
29
+ ### 1. 读取 ideate 路径
30
+
31
+ 从 `docs/design.md` 与 `docs/design-brief.md` 确认本轮是:
32
+
33
+ - `Packaging Build` — 核心玩法完成后的包装构建。
34
+ - `Target Optimization` — 已执行一轮后的目标优化。
35
+
36
+ 如果路径不明确,STOP 写 blocker 回 ideate。context 不自行补判定。
37
+
38
+ ### 2. 读取 docs 差异
39
+
40
+ - 比较 `docs-last/design.md` 与 `docs/design.md`,找出本轮新增 / 改写的设计目标。
41
+ - 比较 `docs-last/design-brief.md` 与 `docs/design-brief.md`,确认新增决策、用户输入和取舍来源。
42
+ - 比较 `docs-last/todo_list.md` 与 `docs/todo_list.md`(如存在),避免重复派发已完成或已存在任务。
43
+
44
+ 差异读取目的不是重新设计,而是确认“这次目标变化要求开发做什么”。
45
+
46
+ ### 3. 按意图区分任务粒度
47
+
48
+ **3a. 功能差异分类**
49
+
50
+ | 类型 | 判断标准 | 分发粒度 |
51
+ | -------- | ------------------------------------------------------------ | ----------------------------------------------------------- |
52
+ | 重写 | 改动会替换已实现的核心状态、关卡流程、胜负表达或主要事件顺序 | 单独 todo,范围窄,上下文必须写清旧状态和新状态 |
53
+ | 优化 | 不改变规则,但提升反馈、节奏、引导、文案、可读性或趣味 | 可合并同一玩家路径上的小优化,上下文必须说明玩家观察到的变化 |
54
+ | 功能补充 | 新增关卡、引导、失败恢复、成功演出、包装反馈等玩家可感知能力 | 一个功能闭环一个 todo,上下文必须写清进入条件和完成条件 |
55
+
56
+ 路径 A 通常会产生多个包装构建 todo;路径 B 通常只产生受用户输入或执行反馈影响的少量优化 / 重写 todo。不要因为进入迭代2就重新拆完整游戏。
57
+
58
+ **3b. 技术维度评估(动态确认,非固定清单)**
59
+
60
+ 在确认功能差异之后,评估当前 game 代码是否已有以下技术基础设施。**每项只问"已有/缺失/部分"**,对缺失项判断是否会阻塞功能 todo 的实现——若会阻塞,则作为独立的基础设施 todo 优先排入;若不会阻塞(可在功能 todo 内顺带建立),则并入对应功能 todo 并在 Context 小节说明。
61
+
62
+ | 技术维度 | 评估问题 | 如果缺失且阻塞 |
63
+ | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
64
+ | **Scene 状态机骨架** | game 中是否已有 HOOK / TUTORIAL / GAMEPLAY / WIN / FAIL / ENDCARD 六个阶段的状态机入口和转换触发?autoPlay 能否驱动完整路径? | 独立 todo `packaging-scene-fsm`,必须先于其他包装 todo 完成 |
65
+ | **分层渲染架构** | 是否定义了 Game Layer / HUD Layer / Overlay Layer / Effect Layer / EndCard Layer 的 z-index 层级?引导层和 endcard 层是否会遮挡游戏内容? | 独立 todo `packaging-layer-arch`,先于需要叠加 UI 的功能 todo |
66
+ | **输入控制分层** | Tutorial 阶段是否能限制输入只响应引导区域?是否有统一的输入开关入口? | 可并入 Tutorial 功能 todo,但必须在 Context 里说明接入点 |
67
+ | **声音状态机** | BGM 是否随 scene 切换有淡入淡出?SFX 是否按事件触发而非分散 if-else?Win/Fail 音效是否与视觉同步? | 可并入对应 scene 功能 todo,但必须在 Context 里说明接入点 |
68
+ | **反馈引擎** | 核心动作的视觉反馈(闪光/粒子/形变)是否有统一调用入口?是否与 ideate 定义的反馈规格有对应关系? | 可并入核心动作相关 todo,但必须说明统一入口或已有分散实现的清点 |
69
+ | **资产加载策略** | 包装层新增资产(hook frame / win 演出 / endcard 背景)是否已规划首帧必须 vs lazy load?资产加载是否会影响 HOOK scene 时长? | 可并入 packaging-scene-fsm 或首个触达该资产的 todo |
70
+
71
+ 评估结果写入 `docs/todo_list.md` 的"迭代2技术基础设施评估"小节:每项标注状态(已有/缺失-阻塞/缺失-不阻塞)和处理方式(独立 todo ID / 并入哪个功能 todo)。不要跳过这步——没有评估的技术维度将在 generate 阶段产生不可预期的接线冲突。
72
+
73
+ ### 4. 查找并更新参考上下文
74
+
75
+ - 根据新的 design 意图检查 `docs/atom-tree.json` 的 Atom 引入中间状态是否仍匹配。
76
+ - 如果现有参考不足,从 skill 库继续查找:
77
+ - 先查 `.claude/agents/refs/atom-skill-library.md`、`.claude/skills/*/SKILL.md`、`skills/*/SKILL.md` 的名称、Tags、DESC、使用场景。
78
+ - 可用 `rg` 按 design 关键词搜索 skill / reference / scripts,例如 hook、tutorial、feedback、level、vfx、sprite、audio、record、playable。
79
+ - 不要批量深读;只把强相关候选纳入下一步。
80
+ - 对强相关参考深读:
81
+ - `SKILL.md` 的触发条件、输入、输出、限制。
82
+ - `references/`、`ref/`、模板文件、scripts 中是否有可执行实现流程。
83
+ - 如有代码实现过程,提取流程步骤、入口文件、命令、API / event / config / asset binding、可复用片段和注意事项。
84
+ - 如只有概念参考没有实现过程,也要说明“concept only”,避免 developer 误以为已有代码路径。
85
+ - 可基于当前意图刷新或补充 `docs/atom-tree.json`,但只维护 match / selectedAtoms / link 所需 metadata,不把任务计划、执行日志或 handoff 状态写进去。
86
+ - 如果参考内容发生变化,必须在 `docs/todo_list.md` 的“迭代2参考变化”中明确指出:
87
+ - 新增参考是什么。
88
+ - 替换 / 废弃了什么。
89
+ - 变化原因来自哪个 design 差异。
90
+ - 是否存在代码实现过程或模板。
91
+ - 下游 developer 必须保留或避开的 API / event / config / asset binding。
92
+ - 如果参考变化暴露设计缺口,STOP 写 blocker 回 ideate;不要在本阶段补 brief。
93
+
94
+ ### 5. 追加 `docs/todo_list.md`
95
+
96
+ 不创建 `docs/todo_list_v2.md`。在原文件追加独立章节:
97
+
98
+ ```markdown
99
+ ## 迭代2:玩法包装 TODO
100
+
101
+ ### 本轮路径
102
+
103
+ - Entry Mode: Packaging Build / Target Optimization
104
+ - Source: `docs/design.md#...`; `docs/design-brief.md#...`
105
+ - Summary: {本轮 design 变化的摘要}
106
+
107
+ ### 迭代2技术基础设施评估
108
+
109
+ | 技术维度 | 状态 | 处理方式 |
110
+ | ---------------- | ------------------------------ | ------------------------------------------------------------------ |
111
+ | Scene 状态机骨架 | 已有 / 缺失-阻塞 / 缺失-不阻塞 | 独立 todo `packaging-scene-fsm` / 并入 `<todo-id>` / 已有无需处理 |
112
+ | 分层渲染架构 | 已有 / 缺失-阻塞 / 缺失-不阻塞 | 独立 todo `packaging-layer-arch` / 并入 `<todo-id>` / 已有无需处理 |
113
+ | 输入控制分层 | 已有 / 缺失-阻塞 / 缺失-不阻塞 | 并入 `<todo-id>` / 已有无需处理 |
114
+ | 声音状态机 | 已有 / 缺失-阻塞 / 缺失-不阻塞 | 并入 `<todo-id>` / 已有无需处理 |
115
+ | 反馈引擎 | 已有 / 缺失-阻塞 / 缺失-不阻塞 | 并入 `<todo-id>` / 已有无需处理 |
116
+ | 资产加载策略 | 已有 / 缺失-阻塞 / 缺失-不阻塞 | 并入 `<todo-id>` / 已有无需处理 |
117
+
118
+ ### 差异总览
119
+
120
+ | diffId | 来源章节 | 类型(重写/优化/功能补充) | 玩家影响 | 分发策略 |
121
+ | ------ | -------- | ------------------------ | -------- | -------- |
122
+
123
+ ### 迭代2参考变化
124
+
125
+ | reference | change | reason | implementation process | downstream constraint |
126
+ | --------- | ------ | ------ | ---------------------- | --------------------- |
127
+
128
+ ### 差异覆盖矩阵
129
+
130
+ | diffId | todoId | 类型 | 覆盖状态 |
131
+ | ------ | ------ | ---- | -------- |
132
+
133
+ ### TODO 依赖关系
134
+
135
+ | todoId | dependsOn | 可并行 | 原因 |
136
+ | ------ | --------- | ------ | ---- |
137
+
138
+ ### TODO <id> — <玩家可感知任务名>
139
+
140
+ #### Work
141
+
142
+ - Do: {下游需要完成什么}
143
+ - Type: 重写 / 优化 / 功能补充
144
+ - Player Impact: {玩家会看到或感受到什么变化}
145
+ - Entry / Completion: {如是功能补充,写清进入条件和完成条件}
146
+
147
+ #### Context
148
+
149
+ - Design Source: `docs/design.md#...`
150
+ - Brief Source: `docs/design-brief.md#...`
151
+ - History Source: `docs-last/<source-file>#...`
152
+ - Current Code Area: `game/...` / `assets/...` / other
153
+ - Keep: {必须保持不变的核心动作、胜负语义、合约或已完成能力}
154
+ - Avoid: {禁止顺手重写或越界处理的内容}
155
+
156
+ #### Reference
157
+
158
+ | reference | reuseLevel | implementation process | mustKeep | note |
159
+ | --------- | ---------- | ---------------------- | -------- | ---- |
160
+
161
+ #### Implementation Notes
162
+
163
+ - Existing Process: {如 skill / reference / script 提供了实现过程,写路径和步骤;没有则写 none / concept only}
164
+ - Code Entry: {可参考的文件、模板、脚本或 API;没有则写 none}
165
+ - Integration Notes: {developer 需要知道的接入点、约束、避免事项}
166
+ ```
167
+
168
+ 任务卡里不要写 `Verifier` 小节。不要把 `Acceptance` 写成验证脚本清单。下游需要知道的是任务、上下文和参考;验证由 generate / optimize / 调度执行层按阶段标准处理。
169
+
170
+ ### 6. seed 机器态 todo 池
171
+
172
+ 每个 todo 的 `requiredContext` 第一项必须回到 `docs/todo_list.md#todo-<id>`,保证 developer 执行时能读到 context 阶段生产的完整任务卡。
173
+
174
+ 机器态 todo 只存摘要:
175
+
176
+ - `doWhat` — 对应任务卡 `Work.Do` 的一句话。
177
+ - `requiredContext` — 任务卡全文 + design / brief / docs-last / reference / skill 实现过程路径。
178
+ - `acceptance` — 如脚本字段需要,只写”完成任务卡 Work 中定义的玩家可感知变化,并保持 Context.Keep 不变”这类最小约束,不要写 verifier 细节。
179
+ - `verifier` — 不在 context 中指定;如脚本默认写入,不把它作为任务卡内容或设计判断。
180
+
181
+ **系统 todo `packaging-scene-fsm` 由调度者注入,不由 game-designer seed**。context 阶段只在技术基础设施评估表里标注 Scene 状态机骨架的状态(已有 / 缺失-阻塞 / 缺失-不阻塞)即可;调度者读到”缺失-阻塞”后负责追加该 todo,并确保它在其他包装功能 todo 之前执行。
182
+
183
+ 示例:
184
+
185
+ ```bash
186
+ npm run todo:add -- id=wrap-success-failure-context role=developer \
187
+ doWhat="Implement the success/failure packaging work described in the iteration-2 task card" \
188
+ acceptance="complete Work in docs/todo_list.md#todo-wrap-success-failure-context;keep Context.Keep unchanged" \
189
+ requiredContext="docs/todo_list.md#todo-wrap-success-failure-context;docs/design.md#迭代2玩法包装升级;docs/design-brief.md#iteration-2-packaging-build-log;docs-last/design.md" \
190
+ createdBy=game-designer
191
+ ```
192
+
193
+ ## 产出物
194
+
195
+ - `docs/todo_list.md` — 原文件追加“迭代2:玩法包装 TODO”章节,包含工作、上下文、参考。
196
+ - 当前 iteration todo 池 — seed 完成,机器态 todo 指回任务卡全文。
197
+ - `docs/atom-tree.json` — 如 Atom 参考变化,已按新意图更新中间状态;若无需变化,在 todo_list 中明确说明 no-op。
198
+
199
+ ## 评价(退出判据)
200
+
201
+ 对应 spec `context.exit`:
202
+
203
+ - 已读取 ideate 路径,并在 todo_list 中记录 `Packaging Build` 或 `Target Optimization`。
204
+ - 每个 todo 都来自明确 docs 差异点,并标注重写 / 优化 / 功能补充。
205
+ - 每个 todo 都清楚说明要做什么、上下文是什么、参考是什么。
206
+ - todo 粒度与差异类型匹配;路径 B 没有无依据重拆完整包装。
207
+ - 如参考树发生变化,`docs/todo_list.md` 明确说明变化原因、是否有代码实现过程和下游约束。
208
+ - `docs/todo_list.md` 有差异覆盖矩阵和 TODO 依赖关系。
209
+ - 当前 iteration todo 池非空,且每个 todo 的 `requiredContext` 指回对应任务卡全文。
210
+ - 本阶段未写 `docs/design-brief.md`;设计缺口以 blocker 形式回 ideate。
211
+
212
+ ## 反模式
213
+
214
+ - 无视 ideate 路径,直接凭感觉拆 todo。
215
+ - 无视 `docs-last/`,不说明目标变化来源。
216
+ - 把所有差异都按同一种粒度拆。
217
+ - 创建 `todo_list_v2.md`。
218
+ - 在任务卡中写 `Verifier` 或提前指定 optimize 验证脚本。
219
+ - 只沿用旧 atom-tree,没有按迭代2 design 意图去 skill 库查找新参考。
220
+ - 把 atom-tree 当成迭代2任务计划或执行记录来手写维护。
221
+ - 找到 skill 但不检查是否有 references / scripts / templates 里的实现过程。
222
+ - 参考内容变化但不告知下游。
223
+ - context 阶段补写 brief 或新增设计结论。
@@ -0,0 +1,129 @@
1
+ # 迭代2 · generate flow(包装生成)
2
+
3
+ > 阶段执行序文档。角色:developer。被 `pipeline/iteration-2-wrap.mjs` 的 `generate.flowRef` 引用。
4
+
5
+ ## 目标
6
+
7
+ 按当前 dispatch 对应的 `docs/todo_list.md` 迭代2任务卡实现包装升级。generate 不重新拆任务、不重写设计,只把 context 阶段产出的 **Work / Context / Reference / Implementation Notes** 落到代码里。
8
+
9
+ 本阶段的评价视角是完整游戏:包装构建要让核心玩法变成清晰、有趣、可完成的 playable;目标优化只修改用户输入或执行反馈影响到的部分,不能无依据重做整套包装。
10
+
11
+ ## 调度关系
12
+
13
+ developer 只处理当前 dispatch。调度者从 todo 池挑一个 todo 写入 `state.dispatch`,developer 通过:
14
+
15
+ ```bash
16
+ npm run state:get -- --json dispatch
17
+ ```
18
+
19
+ 读取当前工单。完成后只追加 handoff;todo 状态由调度者读取 handoff 后更新。
20
+
21
+ ## 任务循环(每个 dispatch 走一遍)
22
+
23
+ ### 1. 读取任务卡全文
24
+
25
+ 先读 dispatch 的 `requiredContext`,第一项必须是 `docs/todo_list.md#todo-<id>`。从任务卡中提取:
26
+
27
+ - `Work` — 当前要做什么、类型是重写 / 优化 / 功能补充、玩家影响、进入 / 完成条件。
28
+ - `Context` — design / brief / docs-last 来源、当前代码区域、必须保持不变的内容、禁止越界的内容。
29
+ - `Reference` — 可复用或必须避开的 atom / skill / API (Application Programming Interface, 应用程序编程接口) / event / config / asset binding。
30
+ - `Implementation Notes` — skill / reference / script / template 是否提供代码实现过程、入口文件和接入注意事项。
31
+
32
+ 如果任务卡缺少 Work、Context 或 Reference,STOP 写 blocker,不要凭 dispatch 摘要硬做。
33
+
34
+ ### 2. 确认本轮路径和执行边界
35
+
36
+ - `Packaging Build` — 可以实现包装构建任务卡中定义的 hook、关卡、引导、成功 / 失败、反馈或流程闭环,但不能改坏迭代1核心动作和胜负语义。
37
+ - `Target Optimization` — 只改任务卡中列出的保持不变项之外的受影响部分;不要顺手重写完整包装。
38
+
39
+ 再按类型确认边界:
40
+
41
+ | 类型 | developer 应做 | 必须避免 |
42
+ | -------- | ------------------------------------------------------ | ---------------------- |
43
+ | 重写 | 替换任务卡指定旧行为,避免新旧逻辑并存 | 顺手重构无关系统 |
44
+ | 优化 | 保持规则不变,增强玩家可观察反馈 / 节奏 / 引导 / 可读性 | 改变核心规则或胜负条件 |
45
+ | 功能补充 | 实现进入条件、运行路径、反馈、完成条件 | 只有入口没有闭环 |
46
+
47
+ ### 3. 读取参考实现过程
48
+
49
+ 对任务卡 Reference / Implementation Notes 中列出的强相关参考,先读后改:
50
+
51
+ - 如有 `SKILL.md`,读取触发条件、输入输出、限制。
52
+ - 如有 `references/`、`ref/`、templates、scripts,读取与当前任务相关的实现步骤或代码入口。
53
+ - 如任务卡标记 `concept only`,只吸收设计原则,不要假设已有可复制代码。
54
+ - 如参考提供 API / event / config / asset binding,实现时必须沿用任务卡指定约束。
55
+
56
+ 如果参考路径缺失、实现过程与当前代码冲突,或任务卡引用的 API 不存在,STOP 写 blocker 给调度者;不要临时发明替代协议。
57
+
58
+ ### 4. 实现 scoped closure
59
+
60
+ - 只修改当前任务卡允许的代码区域。
61
+ - 保留 `Context.Keep` 中的核心动作、胜负语义、运行时合约和已完成能力。
62
+ - 遵守 `Context.Avoid`,不做 CTA、视觉大改、无关资产流程或后续阶段工作。
63
+ - 对重写任务,先定位旧行为并替换;对优化任务,在原路径上增强;对功能补充任务,实现一个玩家可感知闭环。
64
+ - 保持 `window.__playable` 等 playable runtime 合约不破。
65
+
66
+ ### 5. 本地自检
67
+
68
+ generate 阶段可以做必要的轻量检查,但不把 optimize 的验证体系前置到任务卡里。
69
+
70
+ 至少自检:
71
+
72
+ - 当前 Work 是否完成。
73
+ - Context.Keep 是否仍成立。
74
+ - Reference / Implementation Notes 中的接入约束是否被遵守。
75
+ - 完整游戏视角下,玩家是否仍能理解目标、完成 first win,并看到成功 / 失败或对应优化反馈。
76
+
77
+ 如 dispatch 或项目已有 verifier 字段 / 脚本,可按调度者提供的工单执行;没有时不要自行补写 verifier 规则。完整录像、自动游玩和阶段 DoD (Definition of Done, 完成定义) 留给 optimize。
78
+
79
+ ### 6. handoff
80
+
81
+ developer 不自行 `todo:set`。完成或阻塞都追加 handoff:
82
+
83
+ - `summary` — 做了什么,对应哪个 Work。
84
+ - `artifactRefs` — 修改的文件。
85
+ - `selfCheck` — Work / Context.Keep / Reference 约束 / 完整游戏视角的结果。
86
+ - `blockers` — 如有,说明缺失的设计信息、参考实现、代码入口或调度决策。
87
+
88
+ ## 开发完成后的 TODO 历史整理
89
+
90
+ 这是调度者动作,不是单个 developer dispatch 的工作。
91
+
92
+ 当前 iteration todo 全部 done 后,调度者把迭代1 todo 与迭代2 todo 合并成完整历史视图,写回 `docs/todo_list.md` 的“TODO 历史总览”章节:
93
+
94
+ ```markdown
95
+ ## TODO 历史总览
96
+
97
+ | iteration | todoId | 类型 | 状态 | 交付摘要 | artifactRefs |
98
+ | --------- | ------ | ---- | ---- | -------- | ------------ |
99
+ ```
100
+
101
+ 这一步只整理历史,不改变已完成任务卡语义。如果已有脚本化历史导出,优先用脚本;没有脚本时由调度者按 state + handoff 整理。
102
+
103
+ ## 产出物
104
+
105
+ - `game/**` / `assets/**` — 当前任务卡要求的包装实现。
106
+ - handoff — 每个 todo 的产出、阻塞或自检结果。
107
+ - `docs/todo_list.md` — 所有迭代2 todo 完成后,由调度者追加 TODO 历史总览。
108
+
109
+ ## 评价(退出判据)
110
+
111
+ 对应 spec `generate.exit`:
112
+
113
+ - 当前 iteration todo 全部 `done`,无 pending / in_progress / failed。
114
+ - 每个 done 都能回链到 `docs/todo_list.md` 的迭代2任务卡。
115
+ - 每个实现都遵守任务卡的 Work / Context / Reference / Implementation Notes。
116
+ - 包装构建任务让 game 作为完整游戏更清晰、有趣、可完成;目标优化任务只修改受影响目标,没有无依据重做整套包装。
117
+ - 重写没有遗留旧行为冲突;优化有玩家可观察改善;功能补充有完整闭环。
118
+ - `docs/todo_list.md` 已合并当前 todo 与之前 todo,形成完整历史视图。
119
+
120
+ ## 反模式
121
+
122
+ - 只读 dispatch 摘要,不读任务卡全文。
123
+ - 忽略 Implementation Notes,不查 skill / reference / script / template 的实现过程。
124
+ - 把 `concept only` 参考当成可复制代码。
125
+ - 目标优化任务顺手重写完整包装。
126
+ - 重写任务留下新旧逻辑并存。
127
+ - 优化任务没有玩家可观察变化。
128
+ - 功能补充只有入口,没有完成条件或反馈。
129
+ - developer 自行标记 todo done。