@playcraft/cli 0.0.53 → 0.0.56

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 (242) hide show
  1. package/README.md +21 -0
  2. package/REMIX.md +103 -19
  3. package/dist/atom-tree/fusion-hints.js +8 -3
  4. package/dist/atom-tree/fusion-intent.js +62 -0
  5. package/dist/atom-tree/selection.js +3 -1
  6. package/dist/commands/create.js +439 -159
  7. package/dist/commands/image.js +79 -69
  8. package/dist/commands/levels.js +29 -0
  9. package/dist/commands/patterns.js +75 -0
  10. package/dist/commands/remix.js +47 -0
  11. package/dist/commands/skills.js +48 -17
  12. package/dist/index.js +13 -6
  13. package/dist/remix/clone-source.js +208 -0
  14. package/dist/remix/clone.js +255 -0
  15. package/dist/scaffold/templates.js +35 -0
  16. package/dist/utils/agent-api-client.js +10 -3
  17. package/dist/utils/remix-image-attachments.js +4 -32
  18. package/dist/utils/sandbox-path.js +20 -0
  19. package/package.json +3 -3
  20. package/project-template/.claude/agents/creative-director.md +114 -0
  21. package/project-template/.claude/agents/developer.md +5 -2
  22. package/project-template/.claude/agents/game-designer.md +41 -20
  23. package/project-template/.claude/agents/refs/README.md +8 -0
  24. package/project-template/.claude/agents/refs/creative-director-guide.md +35 -0
  25. package/project-template/.claude/agents/refs/creative-director-kickoff-guide.md +52 -0
  26. package/project-template/.claude/agents/refs/creative-discovery-guide.md +76 -0
  27. package/project-template/.claude/agents/refs/creative-north-star-examples.md +82 -0
  28. package/project-template/.claude/agents/refs/developer-dev-handoff.md +1 -1
  29. package/project-template/.claude/agents/refs/game-designer-fusion-depth-playbook.md +28 -0
  30. package/project-template/.claude/agents/refs/game-designer-gameplay-sufficiency.md +4 -4
  31. package/project-template/.claude/agents/reviewer.md +11 -0
  32. package/project-template/.claude/hooks/README.md +12 -12
  33. package/project-template/.claude/hooks/block-developer-preflight.mjs +49 -13
  34. package/project-template/.claude/hooks/block-ring1-tasklist.mjs +1 -1
  35. package/project-template/.claude/hooks/user-prompt.mjs +3 -13
  36. package/project-template/.claude/hooks/validate-workflow-stop.mjs +209 -12
  37. package/project-template/.claude/settings.json +2 -2
  38. package/project-template/.claude/skills/playcraft-playable-optimization/SKILL.md +20 -20
  39. package/project-template/.claude/skills/session-analyzer/scripts/resolve-session.mjs +0 -1
  40. package/project-template/.claude/snapshot.mjs +0 -1
  41. package/project-template/.codebuddy/settings.json +1 -1
  42. package/project-template/.cursor/rules/playcraft-orchestrator.mdc +1 -1
  43. package/project-template/CLAUDE.md +9 -9
  44. package/project-template/docs/project-state.md +1 -1
  45. package/project-template/docs/team/agent-conduct.md +18 -18
  46. package/project-template/docs/team/collaboration.md +19 -7
  47. package/project-template/docs/team/workflow-changelog.md +15 -0
  48. package/project-template/fusion-patterns/catalog.json +77 -0
  49. package/project-template/package.json +2 -0
  50. package/project-template/skills/_shared/scripts/create-playable.mjs +31 -11
  51. package/project-template/skills/_shared/scripts/dev-start.mjs +3 -3
  52. package/project-template/skills/_shared/scripts/disclosure-config.mjs +65 -39
  53. package/project-template/skills/_shared/scripts/harness-smoke.mjs +3 -1
  54. package/project-template/skills/_shared/scripts/lib/fusion-intent.mjs +88 -0
  55. package/project-template/skills/_shared/scripts/lib/skill-fidelity.mjs +185 -0
  56. package/project-template/skills/_shared/scripts/slice-set.mjs +29 -2
  57. package/project-template/skills/_shared/scripts/state-get.mjs +124 -7
  58. package/project-template/skills/_shared/scripts/state-store.mjs +25 -2
  59. package/project-template/skills/_shared/scripts/validate-level-sketch.mjs +444 -0
  60. package/project-template/skills/_shared/scripts/verify-design-consistency.mjs +728 -0
  61. package/project-template/skills/playable-record/scripts/lib/dev-server.mjs +46 -11
  62. package/project-template/skills/playable-record/scripts/record-playable.mjs +2 -1
  63. package/project-template/skills/playable-record/scripts/verify-contract.mjs +4 -4
  64. package/project-template/skills/playable-record/scripts/verify-firstwin.mjs +3 -3
  65. package/project-template/skills/playable-record/scripts/verify-fusion.mjs +37 -2
  66. package/project-template/skills/playable-record/scripts/verify-slice.mjs +2 -2
  67. package/project-template/templates/design-brief.template.md +34 -0
  68. package/project-template/templates/design-methodology.md +1 -2
  69. package/project-template/templates/design.template.md +65 -0
  70. package/project-template/templates/developer-log.template.md +12 -1
  71. package/project-template/templates/five-axis-framework.md +12 -0
  72. package/project-template/templates/game-designer-creative-process.template.md +99 -0
  73. package/project-template/templates/level-sketch.template.json +56 -0
  74. package/project-template/templates/north-star.template.md +43 -0
  75. package/project-template/templates/project-state.template.md +1 -1
  76. package/project-template/vite.config.ts +4 -5
  77. package/project-templates/phaser/.claude/agents/creative-director.md +114 -0
  78. package/project-templates/phaser/.claude/agents/game-designer.md +41 -20
  79. package/project-templates/phaser/.claude/agents/refs/creative-director-guide.md +35 -0
  80. package/project-templates/phaser/.claude/agents/refs/creative-director-kickoff-guide.md +52 -0
  81. package/project-templates/phaser/.claude/agents/refs/creative-discovery-guide.md +76 -0
  82. package/project-templates/phaser/.claude/agents/refs/creative-north-star-examples.md +82 -0
  83. package/project-templates/phaser/.claude/agents/refs/developer-dev-handoff.md +1 -1
  84. package/project-templates/phaser/.claude/agents/refs/game-designer-fusion-depth-playbook.md +28 -0
  85. package/project-templates/phaser/.claude/agents/reviewer.md +11 -0
  86. package/project-templates/phaser/.claude/hooks/block-ring1-tasklist.mjs +2 -2
  87. package/project-templates/phaser/.claude/hooks/user-prompt.mjs +17 -18
  88. package/project-templates/phaser/.claude/hooks/validate-workflow-stop.mjs +209 -12
  89. package/project-templates/phaser/.claude/skills/playcraft-playable-optimization/SKILL.md +20 -20
  90. package/project-templates/phaser/.cursor/rules/playcraft-orchestrator.mdc +1 -1
  91. package/project-templates/phaser/CLAUDE.md +88 -54
  92. package/project-templates/phaser/docs/DESIGN.md +25 -0
  93. package/project-templates/phaser/docs/project-state.md +1 -1
  94. package/project-templates/phaser/docs/team/collaboration.md +19 -7
  95. package/project-templates/phaser/docs/team/workflow-changelog.md +14 -0
  96. package/project-templates/phaser/fusion-patterns/catalog.json +77 -0
  97. package/project-templates/phaser/package.json +3 -1
  98. package/project-templates/phaser/skills/_shared/scripts/dev-start.mjs +3 -3
  99. package/project-templates/phaser/skills/_shared/scripts/disclosure-config.mjs +65 -39
  100. package/project-templates/phaser/skills/_shared/scripts/harness-smoke.mjs +3 -1
  101. package/project-templates/phaser/skills/_shared/scripts/lib/fusion-intent.mjs +88 -0
  102. package/project-templates/phaser/skills/_shared/scripts/lib/skill-fidelity.mjs +185 -0
  103. package/project-templates/phaser/skills/_shared/scripts/state-get.mjs +124 -7
  104. package/project-templates/phaser/skills/_shared/scripts/state-store.mjs +25 -2
  105. package/project-templates/phaser/skills/_shared/scripts/validate-level-sketch.mjs +444 -0
  106. package/project-templates/phaser/skills/_shared/scripts/verify-design-consistency.mjs +728 -0
  107. package/project-templates/phaser/skills/playable-record/scripts/lib/dev-server.mjs +46 -11
  108. package/project-templates/phaser/skills/playable-record/scripts/record-playable.mjs +2 -1
  109. package/project-templates/phaser/skills/playable-record/scripts/verify-contract.mjs +4 -4
  110. package/project-templates/phaser/skills/playable-record/scripts/verify-firstwin.mjs +3 -3
  111. package/project-templates/phaser/skills/playable-record/scripts/verify-fusion.mjs +37 -2
  112. package/project-templates/phaser/skills/playable-record/scripts/verify-slice.mjs +2 -2
  113. package/project-templates/phaser/templates/design-brief.template.md +42 -11
  114. package/project-templates/phaser/templates/design-methodology.md +1 -2
  115. package/project-templates/phaser/templates/design.template.md +77 -0
  116. package/project-templates/phaser/templates/five-axis-framework.md +50 -1
  117. package/project-templates/phaser/templates/game-designer-creative-process.template.md +99 -0
  118. package/project-templates/phaser/templates/level-sketch.template.json +56 -0
  119. package/project-templates/phaser/templates/north-star.template.md +43 -0
  120. package/project-templates/phaser/templates/project-state.template.md +1 -1
  121. package/project-templates/phaser/vite.config.ts +4 -5
  122. package/project-templates/playable-template-phaser/.playcraftignore +10 -0
  123. package/project-templates/playable-template-phaser/CLAUDE.md +178 -0
  124. package/project-templates/playable-template-phaser/PLAYCRAFT-MIGRATION.md +328 -0
  125. package/project-templates/playable-template-phaser/README.md +381 -0
  126. package/project-templates/playable-template-phaser/assets/brain.png +0 -0
  127. package/project-templates/playable-template-phaser/assets/button.png +0 -0
  128. package/project-templates/playable-template-phaser/assets/interact.png +0 -0
  129. package/project-templates/playable-template-phaser/assets/logo.webp +0 -0
  130. package/project-templates/playable-template-phaser/assets/warn_brain.png +0 -0
  131. package/project-templates/playable-template-phaser/builds.config.js +12 -0
  132. package/project-templates/playable-template-phaser/globals.d.ts +2 -0
  133. package/project-templates/playable-template-phaser/index.html +12 -0
  134. package/project-templates/playable-template-phaser/package.json +45 -0
  135. package/project-templates/playable-template-phaser/scripts/base64-to-mp3.js +340 -0
  136. package/project-templates/playable-template-phaser/scripts/convert-to-webp.js +370 -0
  137. package/project-templates/playable-template-phaser/src/Game.ts +154 -0
  138. package/project-templates/playable-template-phaser/src/config/LoadingConfig.ts +40 -0
  139. package/project-templates/playable-template-phaser/src/config/ThemeConfig.ts +81 -0
  140. package/project-templates/playable-template-phaser/src/index.css +18 -0
  141. package/project-templates/playable-template-phaser/src/index.html +9 -0
  142. package/project-templates/playable-template-phaser/src/index.ts +30 -0
  143. package/project-templates/playable-template-phaser/src/json5.d.ts +4 -0
  144. package/project-templates/playable-template-phaser/src/managers/AudioManager.ts +559 -0
  145. package/project-templates/playable-template-phaser/src/scenes/MainScene.ts +301 -0
  146. package/project-templates/playable-template-phaser/src/scenes/PreloadScene.ts +256 -0
  147. package/project-templates/playable-template-phaser/src/theme/README.md +194 -0
  148. package/project-templates/playable-template-phaser/src/theme/blue-theme/assets/.gitkeep +24 -0
  149. package/project-templates/playable-template-phaser/src/theme/blue-theme/index.ts +27 -0
  150. package/project-templates/playable-template-phaser/src/theme/blue-theme/theme.data.json5 +19 -0
  151. package/project-templates/playable-template-phaser/src/theme/green-theme/assets/.gitkeep +3 -0
  152. package/project-templates/playable-template-phaser/src/theme/green-theme/index.ts +20 -0
  153. package/project-templates/playable-template-phaser/src/theme/green-theme/theme.data.json5 +19 -0
  154. package/project-templates/playable-template-phaser/src/theme/index.ts +1 -0
  155. package/project-templates/playable-template-phaser/src/theme/red-theme/assets/.gitkeep +3 -0
  156. package/project-templates/playable-template-phaser/src/theme/red-theme/index.ts +20 -0
  157. package/project-templates/playable-template-phaser/src/theme/red-theme/theme.data.json5 +19 -0
  158. package/project-templates/playable-template-phaser/src/theme/theme.metadata.md +60 -0
  159. package/project-templates/playable-template-phaser/src/theme/theme.schema.json5 +149 -0
  160. package/project-templates/playable-template-phaser/src/ui/BrainAgeUI.ts +681 -0
  161. package/project-templates/playable-template-phaser/src/ui/CountdownUI.ts +565 -0
  162. package/project-templates/playable-template-phaser/src/ui/PlayButton.ts +51 -0
  163. package/project-templates/playable-template-phaser/src/ui/ScoreUI.ts +207 -0
  164. package/project-templates/playable-template-phaser/src/ui/SuccessUI.ts +43 -0
  165. package/project-templates/playable-template-phaser/src/ui/index.ts +15 -0
  166. package/project-templates/playable-template-phaser/tsconfig.json +26 -0
  167. package/project-templates/playable-template-phaser/vite.config.ts +64 -0
  168. package/project-templates/playable-template-phaser//346/226/260/346/211/213/345/274/200/345/217/221/346/214/207/345/215/227.md +209 -0
  169. package/project-templates/playable-template-three/README.md +795 -0
  170. package/project-templates/playable-template-three/assets/Stork.glb +0 -0
  171. package/project-templates/playable-template-three/assets/button.png +0 -0
  172. package/project-templates/playable-template-three/assets/logo.webp +0 -0
  173. package/project-templates/playable-template-three/build.json +7 -0
  174. package/project-templates/playable-template-three/builds.config.example.js +151 -0
  175. package/project-templates/playable-template-three/builds.config.js +158 -0
  176. package/project-templates/playable-template-three/package.json +36 -0
  177. package/project-templates/playable-template-three/scripts/convert-to-webp.js +370 -0
  178. package/project-templates/playable-template-three/scripts/theme-builds.js +514 -0
  179. package/project-templates/playable-template-three/src/Game.ts +215 -0
  180. package/project-templates/playable-template-three/src/config/LoadingConfig.ts +27 -0
  181. package/project-templates/playable-template-three/src/config/ThemeConfig.ts +36 -0
  182. package/project-templates/playable-template-three/src/global.d.ts +108 -0
  183. package/project-templates/playable-template-three/src/index.css +18 -0
  184. package/project-templates/playable-template-three/src/index.html +9 -0
  185. package/project-templates/playable-template-three/src/index.ts +20 -0
  186. package/project-templates/playable-template-three/src/managers/AudioManager.ts +538 -0
  187. package/project-templates/playable-template-three/src/scenes/PreloadScene.ts +305 -0
  188. package/project-templates/playable-template-three/src/theme/README.md +225 -0
  189. package/project-templates/playable-template-three/src/theme/blue-theme/assets/.gitkeep +28 -0
  190. package/project-templates/playable-template-three/src/theme/blue-theme/index.ts +45 -0
  191. package/project-templates/playable-template-three/src/theme/current.ts +12 -0
  192. package/project-templates/playable-template-three/src/theme/green-theme/assets/.gitkeep +3 -0
  193. package/project-templates/playable-template-three/src/theme/green-theme/index.ts +34 -0
  194. package/project-templates/playable-template-three/src/theme/red-theme/assets/.gitkeep +3 -0
  195. package/project-templates/playable-template-three/src/theme/red-theme/index.ts +34 -0
  196. package/project-templates/playable-template-three/tsconfig.json +24 -0
  197. package/project-templates/threejs/.claude/agents/creative-director.md +114 -0
  198. package/project-templates/threejs/.claude/agents/game-designer.md +41 -20
  199. package/project-templates/threejs/.claude/agents/refs/creative-director-guide.md +35 -0
  200. package/project-templates/threejs/.claude/agents/refs/creative-director-kickoff-guide.md +52 -0
  201. package/project-templates/threejs/.claude/agents/refs/creative-discovery-guide.md +76 -0
  202. package/project-templates/threejs/.claude/agents/refs/creative-north-star-examples.md +82 -0
  203. package/project-templates/threejs/.claude/agents/refs/developer-dev-handoff.md +1 -1
  204. package/project-templates/threejs/.claude/agents/refs/game-designer-fusion-depth-playbook.md +28 -0
  205. package/project-templates/threejs/.claude/agents/reviewer.md +11 -0
  206. package/project-templates/threejs/.claude/hooks/block-ring1-tasklist.mjs +2 -2
  207. package/project-templates/threejs/.claude/hooks/user-prompt.mjs +17 -18
  208. package/project-templates/threejs/.claude/hooks/validate-workflow-stop.mjs +209 -12
  209. package/project-templates/threejs/.claude/skills/playcraft-playable-optimization/SKILL.md +20 -20
  210. package/project-templates/threejs/.cursor/rules/playcraft-orchestrator.mdc +1 -1
  211. package/project-templates/threejs/CLAUDE.md +88 -54
  212. package/project-templates/threejs/docs/DESIGN.md +25 -0
  213. package/project-templates/threejs/docs/project-state.md +1 -1
  214. package/project-templates/threejs/docs/team/collaboration.md +19 -7
  215. package/project-templates/threejs/docs/team/workflow-changelog.md +14 -0
  216. package/project-templates/threejs/fusion-patterns/catalog.json +77 -0
  217. package/project-templates/threejs/package.json +3 -1
  218. package/project-templates/threejs/skills/_shared/scripts/dev-start.mjs +3 -3
  219. package/project-templates/threejs/skills/_shared/scripts/disclosure-config.mjs +65 -39
  220. package/project-templates/threejs/skills/_shared/scripts/harness-smoke.mjs +3 -1
  221. package/project-templates/threejs/skills/_shared/scripts/lib/fusion-intent.mjs +88 -0
  222. package/project-templates/threejs/skills/_shared/scripts/lib/skill-fidelity.mjs +185 -0
  223. package/project-templates/threejs/skills/_shared/scripts/state-get.mjs +124 -7
  224. package/project-templates/threejs/skills/_shared/scripts/state-store.mjs +25 -2
  225. package/project-templates/threejs/skills/_shared/scripts/validate-level-sketch.mjs +444 -0
  226. package/project-templates/threejs/skills/_shared/scripts/verify-design-consistency.mjs +728 -0
  227. package/project-templates/threejs/skills/playable-record/scripts/lib/dev-server.mjs +46 -11
  228. package/project-templates/threejs/skills/playable-record/scripts/record-playable.mjs +2 -1
  229. package/project-templates/threejs/skills/playable-record/scripts/verify-contract.mjs +4 -4
  230. package/project-templates/threejs/skills/playable-record/scripts/verify-firstwin.mjs +3 -3
  231. package/project-templates/threejs/skills/playable-record/scripts/verify-fusion.mjs +37 -2
  232. package/project-templates/threejs/skills/playable-record/scripts/verify-slice.mjs +2 -2
  233. package/project-templates/threejs/templates/design-brief.template.md +42 -11
  234. package/project-templates/threejs/templates/design-methodology.md +1 -2
  235. package/project-templates/threejs/templates/design.template.md +77 -0
  236. package/project-templates/threejs/templates/five-axis-framework.md +50 -1
  237. package/project-templates/threejs/templates/game-designer-creative-process.template.md +99 -0
  238. package/project-templates/threejs/templates/level-sketch.template.json +56 -0
  239. package/project-templates/threejs/templates/north-star.template.md +43 -0
  240. package/project-templates/threejs/templates/project-state.template.md +1 -1
  241. package/project-templates/threejs/vite.config.ts +4 -5
  242. package/project-template/docs/DESIGN.md +0 -65
@@ -12,11 +12,10 @@ export default defineConfig(({ command }) => ({
12
12
  },
13
13
  server: {
14
14
  host: "0.0.0.0",
15
- // Preferred port; strictPort:false (the default, set explicitly here for
16
- // intent) lets Vite auto-increment when 3000 is taken. The harness scripts
17
- // (dev:start / verify:* / record:mp4) parse Vite's actual "Local:" URL, so
18
- // port drift never needs to be tracked by hand. See dev-start.mjs.
19
- port: 3000,
15
+ // Preferred port; avoid 6000 (Chromium ERR_UNSAFE_PORT). strictPort:false
16
+ // lets Vite auto-increment when 5173 is taken. Harness scripts parse the
17
+ // actual "Local:" URL. See dev-start.mjs.
18
+ port: 5173,
20
19
  strictPort: false,
21
20
  open: true,
22
21
  },
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: creative-director
3
+ description: 'Creative Director: Ring 1 creative discovery — Micro-Story Spine + north star + creative-process before spec work.'
4
+ tools:
5
+ - 'Read'
6
+ - 'Write'
7
+ - 'Grep'
8
+ - 'Glob'
9
+ - 'WebSearch'
10
+ - 'WebFetch'
11
+ - 'Bash(npm run state:set:*)'
12
+ - 'Bash(npm run state:get:*)'
13
+ - 'Bash(playcraft skills read:*)'
14
+ ---
15
+
16
+ # Creative Director — Role Contract
17
+
18
+ > **Workflow spec**: growth-rings-v1 · Ring 1 creative discovery subagent (fresh context).
19
+
20
+ ## Role Essence
21
+
22
+ You are the **15-second playable-ad Creative Director**. You own **creative discovery only**: diverge gameplay core-moment candidates, adversarial review, commitment, and a readable **Creative North Star** with a **Micro-Story Spine**.
23
+
24
+ You do **not** match skills, write `DESIGN.md`, build level-sketch, seed slices, or run design verifiers. That is `@game-designer` spec mode after you STOP.
25
+
26
+ **Mechanism-first wrap:** `@game-designer` already locked `handoffContext.primaryGameplaySkill`. **Step 0:** `playcraft skills read <primaryGameplaySkill>` — PGS (PlayCraft Gameplay Schema, 玩法模式) is the authority. Your story must **wrap** slide-out / tray / blocking moments; **do not invent** a new core verb (e.g. rotate-to-aim replacing path slide).
27
+
28
+ **Persona:** Default **L1–L2** narrative (light story that fits the mechanic). L0 (pure mechanic) **only** when the user explicitly opts out of story — record their exact words in Phase 3. You decide Narrative Level; orchestrator hints are not binding.
29
+
30
+ **MDA reverse (within PGS):** Start from Fantasy / Challenge / Urgency, then land on **PGS step names** (pathClick / slideOut / flyToTray / matchDetection) — not a different core loop.
31
+
32
+ **Micro-Story Spine is non-negotiable:** L1/L2 require Who + Situation + Stakes + Payoff image. L0 requires Situation + Payoff + Phase 3 opt-out quote.
33
+
34
+ **One-liner bar:** Answer _who is in what situation, betting on what_ — not _which buttons they press_.
35
+
36
+ ## Dispatch Contract
37
+
38
+ Start every run with:
39
+
40
+ ```bash
41
+ npm run state:get -- --json dispatchPacket contextPacket referenceReads
42
+ ```
43
+
44
+ Read **`referenceReads`** from `state:get` for methodology files (five-axis, design-methodology, examples). Do not hard-code paths — the disclosure layer is the single source of truth.
45
+
46
+ If `dispatchPacket.role` is `creative-director`, execute only that packet:
47
+
48
+ - Obey `doWhat`, `flow`, `allowedFiles`, `forbiddenTasks`, and `acceptance`.
49
+ - Do not infer spec-phase work from file names or validator docs.
50
+ - Write state through `npm run state:set`; do not edit generated state markdown.
51
+
52
+ Execution guide: `.claude/agents/refs/creative-discovery-guide.md` (read on start).
53
+
54
+ ## Four-Phase Creative Process
55
+
56
+ Before STOP, produce:
57
+
58
+ 1. **`docs/creative-process.md`** — Phases 1–3 complete + Phase 4 **Design Intent** line only (from `templates/game-designer-creative-process.template.md`).
59
+ 2. **`docs/north-star.md`** — from `templates/north-star.template.md` (includes **Micro-Story Spine** before One-liner).
60
+
61
+ | Phase | Name | Forbidden |
62
+ | ----- | ------------------------------------- | --------------------------- |
63
+ | 0 | Skills read primary PGS | No DESIGN.md |
64
+ | 1 | Radical diverge (≥3 candidates) | No DESIGN.md |
65
+ | 2 | Adversarial review (five questions) | No aesthetic veto |
66
+ | 3 | Commitment (pick 1 + Narrative level) | No skills match |
67
+ | 4 | Design Intent line | No level-sketch / atom-tree |
68
+
69
+ **Five adversarial questions (phase 2):**
70
+
71
+ 1. After the first moment passes, why keep tapping?
72
+ 2. Can the player ignore core rules and still win?
73
+ 3. White-box: with art/audio removed, is the rule still fun?
74
+ 4. Depth ceiling: how fast does a skilled player finish — and does it feel like "that's it?"
75
+ 5. Strip story — remove Who and Situation; does the player still care?
76
+
77
+ ## One-liner quality (non-negotiable)
78
+
79
+ **Good (L1/L2):** names Who or Situation + tension — e.g. "Help the night-shift loader race the closing gate before the cargo bay locks."
80
+
81
+ **Bad:** mechanism chain or abstract metaphor alone — "Tap the path, watch debt grow, match three…" / "Play the nerve of debt before it bursts."
82
+
83
+ If your one-liner only lists actions, UI nouns, or tension words without a story anchor, rewrite before STOP.
84
+
85
+ ## Forbidden
86
+
87
+ - Read or write `docs/DESIGN.md`, `docs/level-sketch.json` (except scratch forbidden)
88
+ - Run `playcraft skills match`, `playcraft patterns match`, `init-atom-tree` — **read only** the locked primary skill
89
+ - Run `npm run verify:design`, `npm run verify:fusion`, `npm run levels:validate`
90
+ - Seed or update `sliceState`
91
+ - Open validator scripts or `templates/design.template.md` for "what to pass"
92
+
93
+ ## Outputs
94
+
95
+ - `docs/north-star.md` — standalone Creative North Star with Micro-Story Spine (source of truth for §0)
96
+ - `docs/creative-process.md` — audit trail Phases 1–4 Design Intent
97
+ - `handoffContext.northStarSummary` — ≤80 words for orchestrator
98
+ - Optional scratch in `docs/design-brief.md` **Creative Angle** only if packet allows
99
+
100
+ ## STOP Contract
101
+
102
+ Before STOP:
103
+
104
+ - Confirm `docs/north-star.md` has complete **Micro-Story Spine**, non-empty One-liner, System Dynamic, Why this fusion, ≥2 Rejected vibe, Design Intent **matching One-liner verbatim**.
105
+ - Confirm `docs/creative-process.md` has ≥3 Phase 1 candidates (each with Story hook), Phase 2 vulnerability list, Phase 3 **Narrative level** (+ L0 opt-out quote if L0).
106
+ - Set `subagent_stop: true`, `waiting_for: orchestrator`.
107
+ - Set `next_orchestrator_action` to: `Invoke @game-designer — ring 1 design spec (copy §0 from docs/north-star.md)`.
108
+ - Write `handoffContext.northStarSummary` via `npm run state:set`.
109
+ - Do **not** run verifiers.
110
+
111
+ ## Harness experiments
112
+
113
+ - **Treatment** (`CREATIVE_DIRECTOR_SPLIT=1`, default): you run first; Game Designer spec follows.
114
+ - **Control** (`CREATIVE_DIRECTOR_SPLIT=0`): orchestrator skips you — monolithic Game Designer only.
@@ -14,8 +14,7 @@ tools:
14
14
  - 'Bash(find:*)'
15
15
  - 'Bash(npm run state:set:*)'
16
16
  - 'Bash(npm run state:get:*)'
17
- - 'Bash(playcraft skills match:*)'
18
- - 'Bash(playcraft skills read:*)'
17
+ - 'Bash(playcraft skills:*)'
19
18
  - 'Bash(playcraft tools research:*)'
20
19
  - 'Bash(playcraft tools fetch-url:*)'
21
20
  - 'Bash(playcraft tools search-image:*)'
@@ -37,22 +36,32 @@ player intent -> playcraft skills init-atom-tree / match -> selected skill refs
37
36
 
38
37
  Do not seed `sliceState` before `docs/atom-tree.json` has been generated/refreshed by the PlayCraft skills CLI. The slice queue is derived from programmatic match refs and selected atoms; it is not invented directly from vibes.
39
38
 
40
- You are not an implementer, planner, artist, reviewer, or orchestrator. You do not choose process phase from project state. The orchestrator gives scope through `dispatchPacket`; you produce only the requested design artifact or slice queue.
39
+ You are not an implementer, planner, artist, reviewer, or orchestrator.
41
40
 
42
- ## Dispatch Contract
41
+ ## Research Contract (mandatory)
43
42
 
44
- Start every run with:
43
+ Before any brainstorm or slice seeding, complete two mandatory discovery passes:
45
44
 
46
- ```bash
47
- npm run state:get -- --json dispatchPacket sliceState
48
- ```
45
+ 1. **Web research** — understand real-world gameplay patterns and playable-ad references for this game type:
49
46
 
50
- If `dispatchPacket.role` is `game-designer`, execute only that packet:
47
+ ```bash
48
+ playcraft tools research --query "<game type> gameplay mechanics rules" --focus gameplay --json
49
+ ```
51
50
 
52
- - Obey `doWhat`, `flow`, `allowedFiles`, `forbiddenTasks`, and `acceptance`.
53
- - Do not infer a broader process phase from `iteration`, `loop`, file names, or old workflow docs.
54
- - Keep outputs compact enough for the next role to act without reading a long design essay.
55
- - Write state through `npm run state:set`; do not edit generated state markdown.
51
+ Supplement with `WebSearch` for fast factual checks (install numbers, ad format trends, competitor names, gameplay variants).
52
+
53
+ 2. **Skill library exploration** — load **`playcraft-skill-recommender`** to learn how to discover and evaluate skills from the library, then explore what gameplay patterns are available for this game type.
54
+
55
+ Record findings in `docs/design-brief.md` § Discovery Feed with `[WEB]`, `[SKILL]`, and `[USER]` source tags. These are mandatory regardless of genre familiarity — even familiar game types benefit from competitive reference and skill-library awareness.
56
+
57
+ ## Brainstorming Contract
58
+
59
+ After research, run structured brainstorm rounds with the user to lock the core gameplay direction. Load the **`brainstorming` skill** for the collaborative dialogue protocol.
60
+
61
+ - **Brainstorming is mandatory** — do not skip to writing DESIGN.md or seeding slices without confirmed gameplay direction.
62
+ - Use `AskUserQuestion` with concrete options (never open-ended text). Batch 2–4 related dimensions per turn.
63
+ - Self-answer when research gives a clear best answer. Lead with your recommendation.
64
+ - When you need to STOP with open questions, set `waiting_for=user_confirm` so the orchestrator can answer them.
56
65
 
57
66
  ## Discovery Reflection Contract
58
67
 
@@ -130,20 +139,34 @@ Use evidence depth intentionally:
130
139
  | Hook / CTA (Call To Action, 行动号召) work | `video-vlm` |
131
140
  | Production visual work | `video-vlm` plus visual gate evidence |
132
141
 
133
- Do not introduce Hook / CTA, style direction, layout tables, production asset mappings, or full feature plans unless the packet explicitly asks for them.
142
+ Do not introduce Hook / CTA, style direction, layout tables, production asset mappings, or full feature plans unless explicitly requested.
143
+
144
+ Optional discovery before `init-atom-tree`:
145
+
146
+ ```bash
147
+ playcraft patterns match --intent "<genre, core action>"
148
+ ```
149
+
150
+ ## Dispatch Contract
151
+
152
+ Start every run with:
153
+
154
+ ```bash
155
+ npm run state:get -- --json dispatchPacket sliceState
156
+ ```
157
+
158
+ Orchestrator invokes you with the user's original intent only. When `dispatchPacket` is present, execute that packet scope. Do not infer Ring / Gate / Loop, and do not expand into implementation or production work.
134
159
 
135
160
  ## Inputs
136
161
 
137
162
  Use the smallest useful set:
138
163
 
139
- - `dispatchPacket`
140
- - `sliceState`
141
164
  - user prompt / orchestrator notes
142
165
  - `docs/design-brief.md` when discovery already exists
143
166
  - `docs/DESIGN.md` when updating the playable seed
144
167
  - `docs/atom-tree.json` for programmatic skill match refs
145
168
 
146
- Do not read whole logs or future production docs unless `dispatchPacket.allowedFiles` or `requiredFiles` includes them.
169
+ Do not read whole logs or future production docs unless explicitly needed.
147
170
 
148
171
  ## Outputs
149
172
 
@@ -187,6 +210,4 @@ You must not:
187
210
 
188
211
  ## Legacy Fallback
189
212
 
190
- Only when `dispatchPacket` is null and `sliceState` is empty, follow [`refs/game-designer-legacy-fallback.md`](refs/game-designer-legacy-fallback.md).
191
-
192
- Legacy fallback does not apply to slice-axis dispatch.
213
+ Only when `dispatchPacket` is null and `sliceState` is empty, follow [game-designer-legacy-fallback.md](refs/game-designer-legacy-fallback.md).
@@ -0,0 +1,35 @@
1
+ # Creative Director Guide
2
+
3
+ > **Superseded for execution:** use [creative-discovery-guide.md](./creative-discovery-guide.md) — this file remains a short index.
4
+
5
+ ## Quick links
6
+
7
+ | Need | Read |
8
+ | --------------------------------- | -------------------------------------------------------------------------- |
9
+ | Step-by-step Ring 1 creative | [creative-discovery-guide.md](./creative-discovery-guide.md) |
10
+ | Good/bad North Star examples | [creative-north-star-examples.md](./creative-north-star-examples.md) |
11
+ | Narrative Level + Emotional Arc | `templates/five-axis-framework.md` (via `state:get` → `referenceReads`) |
12
+ | MDA + JTBD | `templates/design-methodology.md` (via `referenceReads`) |
13
+ | Orchestrator kickoff (not for CD) | [creative-director-kickoff-guide.md](./creative-director-kickoff-guide.md) |
14
+
15
+ ## Objective
16
+
17
+ Discover a **playable idea with soul** — Micro-Story Spine + System Dynamic the player can feel, not a mechanism chain disguised as a one-liner.
18
+
19
+ ## Forbidden reads (context pollution)
20
+
21
+ Do **not** open:
22
+
23
+ - `templates/design.template.md`
24
+ - `skills/_shared/scripts/verify-design-consistency.mjs`
25
+ - `.claude/agents/refs/skill-selector-guide.md`
26
+ - `docs/team/atom-tree-format.md`
27
+ - `docs/DESIGN.md`
28
+
29
+ Do **not** run `playcraft skills *`, `npm run verify:design`, or `npm run levels:validate`.
30
+
31
+ ## STOP contract
32
+
33
+ - Write `handoffContext.northStarSummary` (≤80 words) via `npm run state:set`.
34
+ - Set `next_orchestrator_action` to invoke `@game-designer` for ring 1 design spec.
35
+ - Do **not** seed `sliceState`, write `DESIGN.md`, or run verifiers.
@@ -0,0 +1,52 @@
1
+ # Creative Director Kickoff Guide — Orchestrator Only
2
+
3
+ > **Audience**: Orchestrator when spawning `@creative-director` for Ring 1 `loop: clarify` (`1:creative`).
4
+ > **Prerequisite**: `@game-designer` mechanism lock STOP — `handoffContext.primaryGameplaySkill` + `docs/atom-tree.json` `meta.skillsMatch`.
5
+ > **Not for CD**: the subagent reads `creative-discovery-guide.md` instead.
6
+
7
+ ## Before spawn
8
+
9
+ 1. Run `npm run state:get` — confirm `nextRole: creative-director`.
10
+ 2. Read this guide.
11
+ 3. **Do not** forward the user's mechanism spec verbatim as the only prompt.
12
+
13
+ ## Task prompt template
14
+
15
+ Copy into the `@creative-director` Task message:
16
+
17
+ ```markdown
18
+ You are @creative-director for this PlayCraft playable-ad project.
19
+
20
+ ## Mechanism seed(已锁定 PGS,不是自由发明)
21
+
22
+ Primary skill: `{handoffContext.primaryGameplaySkill from state:get}`
23
+
24
+ {paste user's high-level intent — e.g. arrow + tray match-3 fusion, 8×8}
25
+
26
+ ## Creative question(CD 必须回答)
27
+
28
+ 在 **已 read 的 primary gameplay PGS** 上:Hook 帧是什么?压力在玩家世界里意味着什么?Payoff 必须拍到 **path slide out / fly to tray / tray match** 中的至少一个核心瞬间 — 不得用 rotate 或纯棋盘 cascade 替换。
29
+
30
+ ## JTBD guess / Emotional arc hint(仅 hint,CD 可改)
31
+
32
+ {Stress Relief → Relaxation | Challenge → Urgency | …}
33
+ 注:Orchestrator **不预设 Narrative Level**;L0/L1/L2 由 CD 在 Phase 3 裁决。
34
+ 若用户明确要求「纯机制 / 不要故事」,在此原文标注,供 CD 走 L0。
35
+
36
+ ## Deliverables
37
+
38
+ docs/north-star.md(含 Micro-Story Spine)+ docs/creative-process.md
39
+
40
+ ## Read on start
41
+
42
+ .claude/agents/refs/creative-discovery-guide.md
43
+ npm run state:get -- --json referenceReads contextPacket
44
+ playcraft skills read {primaryGameplaySkill}
45
+ ```
46
+
47
+ ## Rules
48
+
49
+ - Translate user intent into a **Creative question** grounded in the **read PGS** — never spawn CD with only "build arrow match-3 on 8×8".
50
+ - Optional: write `handoffContext.creativeBrief` via `state:set` (hint for GD spec phase).
51
+ - Use `bypassPermissions` for nested subagent Bash if harness/live test (known P0).
52
+ - After CD STOP: invoke `@game-designer` for ring 1 design spec only — do not inline creative work.
@@ -0,0 +1,76 @@
1
+ # Creative Discovery Guide
2
+
3
+ > Purpose: step-by-step execution for `@creative-director` — produce **`docs/north-star.md`** (with Micro-Story Spine) + **`docs/creative-process.md`** before any spec work.
4
+ >
5
+ > Scope: creative discovery only. Does not define skills match, level-sketch, atom-tree, or DESIGN.md mechanics tables.
6
+
7
+ ## Step 0 — Read state + methodology
8
+
9
+ ```bash
10
+ npm run state:get -- --json dispatchPacket contextPacket referenceReads
11
+ ```
12
+
13
+ 1. Read orchestrator kickoff notes (Creative question, mechanism seed, JTBD/arc hints — hints only).
14
+ 2. Read every path in **`referenceReads`** (typically `templates/five-axis-framework.md` §4–§5, `templates/design-methodology.md` §A–B, `.claude/agents/refs/creative-north-star-examples.md`).
15
+ 3. Skim user prompt / `contextPacket` for explicit L0 opt-out ("纯机制", "no story", "pure mechanic showcase").
16
+
17
+ ## Step 1 — MDA reverse + Narrative Level
18
+
19
+ From user intent, pick:
20
+
21
+ - **2–3 target Aesthetics** (Fantasy, Challenge, Urgency, …) — see design-methodology §A.
22
+ - **Narrative Level** (you decide):
23
+ - **Default L1 or L2** — light story that fits the mechanic.
24
+ - **L0 only** if user explicitly opted out of story — quote their words in Phase 3.
25
+ - **Never L3** — downgrade to L2 if tempted.
26
+
27
+ Lock Emotional Arc (Axis 5): Urgency | Challenge | Competence | Curiosity | Relaxation.
28
+
29
+ ## Step 2 — Phase 1 diverge (≥3 candidates)
30
+
31
+ Use `templates/game-designer-creative-process.template.md`. Each candidate **must** include:
32
+
33
+ - Core moment
34
+ - **Story hook** (15s filmable frame)
35
+ - **Who / Stakes** (one line each)
36
+
37
+ Do not write DESIGN.md yet.
38
+
39
+ ## Step 3 — Phase 2 adversarial (five questions)
40
+
41
+ Fill the five-question table. Q5 is the anti-filler gate: _If you remove Who and Situation, does anyone care?_
42
+
43
+ Produce ≥2 falsifiable vulnerability bullets.
44
+
45
+ ## Step 4 — Phase 3 commitment
46
+
47
+ - Pick one candidate.
48
+ - Record **Narrative level** + reason (L0: paste user's opt-out quote).
49
+ - Write patch promises addressing vulnerabilities.
50
+
51
+ ## Step 5 — Write north-star + creative-process
52
+
53
+ **`docs/north-star.md`** from `templates/north-star.template.md`:
54
+
55
+ | Field | L1/L2 | L0 |
56
+ | ------------ | ---------------------------- | ------------------------------ |
57
+ | Who | Required — concrete identity | `n/a — pure mechanic showcase` |
58
+ | Situation | Required — Hook frame | Required — mechanism spectacle |
59
+ | Stakes | Required — narrative meaning | Required — missed experience |
60
+ | Payoff image | Required | Required |
61
+ | One-liner | Must name Who or Situation | Hook + mechanic payoff OK |
62
+
63
+ **`docs/creative-process.md`:** Phases 1–3 complete + Phase 4 Design Intent line (= One-liner verbatim).
64
+
65
+ ## Step 6 — Self-check before STOP
66
+
67
+ 1. Can you describe the Hook frame in one breath?
68
+ 2. Does removing Who/Situation kill the pitch? (L1/L2 must survive Q5.)
69
+ 3. Is the story **fitted to the mechanic**, not a generic mascot pasted on?
70
+ 4. Design Intent === One-liner character-for-character?
71
+ 5. Compare against Bronze/Silver/Gold in `creative-north-star-examples.md` — are you at least Silver?
72
+
73
+ ## STOP handoff
74
+
75
+ - `handoffContext.northStarSummary` ≤80 words (include Who + Hook).
76
+ - `next_orchestrator_action`: Invoke @game-designer — ring 1 design spec.
@@ -0,0 +1,82 @@
1
+ # Creative North Star — Examples (Micro-Story Spine)
2
+
3
+ > **Used by**: `@creative-director` via `referenceReads` on `state:get`.
4
+ > **Narrative Level** terms align with `templates/five-axis-framework.md` Axis 4 (L0–L2 only; L3 forbidden).
5
+
6
+ ---
7
+
8
+ ## Tier guide
9
+
10
+ | Tier | Meaning |
11
+ | ---------- | ---------------------------------------------- |
12
+ | **Bronze** | Passes tension-word lint but no filmable story |
13
+ | **Silver** | Strong metaphor but missing Who/Situation |
14
+ | **Gold** | Complete Micro-Story Spine — target for L1/L2 |
15
+
16
+ ---
17
+
18
+ ## Bronze — Arrow Debt Tray (live smoke v1)
19
+
20
+ **Narrative level**: L1 (claimed) — **incomplete**
21
+
22
+ | Field | Content |
23
+ | --------- | --------------------------------------------------------------------------------------------------------------------------- |
24
+ | Who | _(missing)_ |
25
+ | Situation | _(missing)_ |
26
+ | Stakes | Abstract "debt / burst" |
27
+ | Payoff | Abstract "cash in match-3" |
28
+ | One-liner | "Play the nerve of opening one-way escape routes while the tray's growing debt dares you to cash in just before it bursts." |
29
+
30
+ **Why Bronze:** tension vocabulary without a story object. Player cannot answer "who am I" or "what am I escaping."
31
+
32
+ ---
33
+
34
+ ## Silver — Arrow Elim Fusion (fixture)
35
+
36
+ **Narrative level**: L1 — **incomplete**
37
+
38
+ | Field | Content |
39
+ | --------- | -------------------------------------------------------------------------- |
40
+ | Who | _(missing)_ |
41
+ | Situation | _(missing)_ |
42
+ | Stakes | "颜色是债务" metaphor |
43
+ | Payoff | "走钢丝上排雷" |
44
+ | One-liner | "颜色是债务——每推一条箭头进托盘,都在为未来的自己挖坑,像在走钢丝上排雷。" |
45
+
46
+ **Why Silver:** memorable metaphor, still no filmable Hook frame or identity.
47
+
48
+ ---
49
+
50
+ ## Gold — Night-Shift Cargo Gate (arrow + tray fusion, L2)
51
+
52
+ **Narrative level**: L2
53
+
54
+ | Field | Content |
55
+ | ------------- | ------------------------------------------------------------------------------------------------------------------------------- |
56
+ | Who | Night-shift warehouse loader |
57
+ | Situation | One-way chutes jammed with color-coded crates; bay lights flash amber — gate closes in minutes |
58
+ | Stakes | Bay locks when staging slots fill — next truck and the loader are stuck inside |
59
+ | Payoff image | Third matching crate slides in, bay door hisses open, chute clears with a satisfying rush |
60
+ | Emotional arc | Urgency |
61
+ | One-liner | "Help the night loader beat the closing gate — every crate you push buys seconds until three matching colors pop the bay open." |
62
+
63
+ ---
64
+
65
+ ## Genre table (L1/L2 patterns)
66
+
67
+ | Genre | Narrative level | Who | Situation | Stakes | Payoff |
68
+ | ------------------------------ | --------------- | ------------------ | -------------------------------- | -------------------------- | ------------------------- |
69
+ | Arrow + tray fusion | L2 | Night-shift loader | Chutes jammed, bay nearly full | Gate locks, loader trapped | Triple match, door opens |
70
+ | Screw puzzle | L2 | Repair hand | Board pins reward corner peeking | Mechanism never clears | Last panel drops |
71
+ | Pure match-3 (L0 opt-out only) | L0 | n/a | Board one move from huge clear | Miss the "almost" cascade | Full-board chain reaction |
72
+ | Chase / runner | L2 | Fugitive | Pursuer visible behind | Caught at the gap | Narrow squeeze through |
73
+
74
+ ---
75
+
76
+ ## Anti-patterns (do not ship)
77
+
78
+ - **Generic mascot:** "Help the cute hamster" with no tie to mechanic pressure.
79
+ - **Abstract tension only:** debt / bet / burst / nerve without Who or Situation.
80
+ - **Mechanism chain one-liner:** "Tap arrow → tray → match three → win."
81
+ - **PGS core-loop replacement:** rotate 90° / clockwise aim / board-only cascade instead of path slide → tray match from the locked skill.
82
+ - **L0 without opt-out quote:** choosing pure mechanic when user never asked for it.
@@ -12,7 +12,7 @@ npm run dev:start # starts persistent dev server + records the real devUrl
12
12
  ```
13
13
 
14
14
  - **Not** `playcraft start`, and **not** a bare `npm run dev`. `dev:start` wraps the project's `scripts.dev` and additionally:
15
- - detects the actual listening port from Vite output (handles port drift when 3000 is taken),
15
+ - detects the actual listening port from Vite output (handles port drift when 5173 is taken),
16
16
  - appends `?debug=1`,
17
17
  - writes `devUrl` through the same programmatic state layer `state:set` uses.
18
18
  - **Do not** read a port from the terminal or hand-edit `devUrl` — `dev:start` is the source of truth for it.
@@ -0,0 +1,28 @@
1
+ # Game Designer — Fusion Depth Playbook
2
+
3
+ Lightweight narrative templates for Ring 1 fusion designs. Pick one spine and **add one variation axis** (tray pressure / phase unlock / segment density).
4
+
5
+ ## Template 1 — Path → Tray → Match
6
+
7
+ - **Board**: fixed 8×8; paths are polylines with blocked dependencies (DAG).
8
+ - **Gesture**: tap path head → slide_out along direction → fly_to_tray.
9
+ - **Payoff**: match_clear in tray when 3 same color; tray peak forces color order.
10
+ - **Variation axis**: {tray pressure curve | opening removable count | segment density}
11
+
12
+ ## Template 2 — Phase Unlock (same grid)
13
+
14
+ - **Board**: 8×8 with masked regions (`boardPhases` in level-sketch optional).
15
+ - **Unlock**: each match_clear or N paths removed reveals new paths in unlocked zone.
16
+ - **Variation axis**: unlock cadence vs tray pressure — not board resize.
17
+
18
+ ## Template 3 — Tray Pressure Puzzle
19
+
20
+ - **Board**: pure dependency puzzle; match-3 **only in tray**.
21
+ - **Failure**: tray full without match; success requires reading color order before tap.
22
+ - **Variation axis**: dependency depth (≥2 waves) + max opening removable (1–2).
23
+
24
+ ## Anti-patterns (do not ship)
25
+
26
+ - 8×8 with ≤4 paths or all-free opening
27
+ - Board swap match-3 + path tap without interaction contract
28
+ - DESIGN lists two parent skills with no **interaction contract**
@@ -109,6 +109,17 @@ You must not:
109
109
  - set user acceptance state
110
110
  - ask the user directly from a subagent
111
111
 
112
+ ## Ring 1 Design Adversarial (harness A2 / A3 only)
113
+
114
+ When `dispatchPacket.doWhat` or env `GD_CREATIVE_ARM` is `A2` or `A3`, and the packet asks for **design adversarial review**:
115
+
116
+ - **Read only**: `docs/creative-process.md` (phase 1 draft), `docs/design-brief.md`, optional partial `docs/DESIGN.md`
117
+ - **Do not** edit `game/**` or rewrite DESIGN — output a **vulnerability list** only
118
+ - Run the **four adversarial questions** on each candidate (second tap / ignore mechanism / white-box / depth ceiling)
119
+ - Format output as markdown section `## Design Adversarial Findings` in `logs/review-report.md` or append to `docs/creative-process.md` phase 2
120
+ - No aesthetic veto ("not fun enough") — only falsifiable logic gaps
121
+ - End with `PLAYCRAFT_STOP` — hand back to Game Designer for phase 3–4
122
+
112
123
  ## Legacy Fallback
113
124
 
114
125
  Only when `dispatchPacket` is null and `sliceState` is empty, follow [`refs/reviewer-legacy-fallback.md`](refs/reviewer-legacy-fallback.md).
@@ -26,7 +26,7 @@ const RING1_BLOCKED_TOOLS = new Set([
26
26
  ]);
27
27
 
28
28
  function resolveProjectDir() {
29
- const raw = process.env.CLAUDE_PROJECT_DIR || process.env.CURSOR_PROJECT_DIR || process.cwd();
29
+ const raw = process.env.CODEBUDDY_PROJECT_DIR || process.env.CLAUDE_PROJECT_DIR || process.env.CURSOR_PROJECT_DIR || process.cwd();
30
30
  if (process.platform === 'win32' && /^\/[a-zA-Z]\//.test(raw)) {
31
31
  return raw[1].toUpperCase() + ':' + raw.slice(2).replace(/\//g, '\\');
32
32
  }
@@ -85,7 +85,7 @@ async function main() {
85
85
 
86
86
  emitDeny(
87
87
  `Ring 1 Dispatch Path: internal Task lists are blocked during iteration 1 (${toolName}). `
88
- + `Use Task / @game-designer / temporary ref-flow atom-selection subagent / @developer spawn instead. Run npm run state:get and follow CLAUDE.md § Ring 1 Dispatch Path.`,
88
+ + `Use Task / @creative-director / @game-designer / temporary ref-flow atom-selection subagent / @developer spawn instead. Run npm run state:get and follow docs/team/collaboration.md § Ring 1 engine scaffold.`,
89
89
  );
90
90
  }
91
91