@playcraft/cli 0.1.40-beta → 0.1.42

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 (368) hide show
  1. package/README.md +3 -58
  2. package/dist/agent/local-backend.js +1 -1
  3. package/dist/cli-root-help.js +0 -2
  4. package/dist/commands/build-all.js +19 -5
  5. package/dist/commands/build.js +28 -15
  6. package/dist/commands/create.js +33 -26
  7. package/dist/commands/image.js +6 -2
  8. package/dist/commands/login.js +42 -84
  9. package/dist/commands/skills.js +0 -4
  10. package/dist/commands/tools-3d.js +0 -11
  11. package/dist/commands/tools-generation.js +137 -69
  12. package/dist/commands/tools-image-context.js +29 -0
  13. package/dist/commands/tools-utils.js +12 -0
  14. package/dist/commands/tools.js +2 -2
  15. package/dist/config.js +4 -59
  16. package/dist/index.js +3 -40
  17. package/dist/remix/clone.js +0 -2
  18. package/dist/remix/init-template.js +0 -2
  19. package/dist/remix/pull.js +0 -2
  20. package/dist/remix/push.js +1 -21
  21. package/dist/utils/agent-api-client.js +30 -185
  22. package/dist/utils/image-asset-context.js +228 -0
  23. package/dist/utils/playcraft-http-client.js +4 -6
  24. package/package.json +5 -15
  25. package/project-template/.claude/agents/refs/ta-image-generation-detail.md +67 -123
  26. package/project-template/.claude/skills/playcraft-image-generation/SKILL.md +135 -63
  27. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +42 -33
  28. package/project-template/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +18 -20
  29. package/project-template/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +6 -7
  30. package/project-template/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +39 -39
  31. package/project-templates/phaser/.claude/agents/refs/ta-image-generation-detail.md +59 -59
  32. package/project-templates/phaser/.claude/skills/playcraft-image-generation/SKILL.md +135 -63
  33. package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +42 -33
  34. package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +18 -20
  35. package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +6 -7
  36. package/project-templates/phaser/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +39 -39
  37. package/project-templates/threejs/.claude/agents/refs/ta-image-generation-detail.md +59 -59
  38. package/project-templates/threejs/.claude/skills/playcraft-image-generation/SKILL.md +135 -63
  39. package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +42 -33
  40. package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +18 -20
  41. package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +6 -7
  42. package/project-templates/threejs/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +39 -39
  43. package/SKILLS_REGISTRY.md +0 -149
  44. package/dist/auth/account-activation.js +0 -157
  45. package/dist/auth/messages.js +0 -30
  46. package/dist/commands/build-temp.js +0 -26
  47. package/dist/commands/platform-skills.generated.js +0 -19
  48. package/dist/commands/playable.js +0 -53
  49. package/dist/commands/tools-batch.js +0 -87
  50. package/dist/commands/video.js +0 -111
  51. package/dist/commands/workspace-runtime.js +0 -54
  52. package/dist/commands/workspace.js +0 -35
  53. package/dist/project-skills/builtin-import.js +0 -225
  54. package/dist/project-skills/commands.js +0 -77
  55. package/dist/project-skills/lifecycle.js +0 -28
  56. package/dist/project-skills/local-run.js +0 -112
  57. package/dist/project-skills/local-store.js +0 -221
  58. package/dist/project-skills/messages.js +0 -80
  59. package/dist/project-skills/reconcile.js +0 -62
  60. package/dist/project-skills/remote-cache.js +0 -51
  61. package/dist/project-skills/validation.js +0 -19
  62. package/dist/recording/messages.js +0 -40
  63. package/dist/recording/project-digest.js +0 -85
  64. package/dist/recording/recorder.js +0 -293
  65. package/dist/recording/scenario.js +0 -50
  66. package/dist/skill-registry/client.js +0 -345
  67. package/dist/skill-registry/commands.js +0 -180
  68. package/dist/skill-registry/evaluation-client.js +0 -156
  69. package/dist/skill-registry/evaluation-commands.js +0 -174
  70. package/dist/skill-registry/messages.js +0 -177
  71. package/dist/skill-registry/package.js +0 -275
  72. package/dist/skill-registry/platform-package.js +0 -100
  73. package/dist/utils/environment-endpoints.js +0 -17
  74. package/dist/utils/tool-operation-journal.js +0 -124
  75. package/dist/utils/video-evidence-git.js +0 -81
  76. package/dist/video-replication/client.js +0 -222
  77. package/dist/video-replication/comparison-evidence.js +0 -149
  78. package/dist/video-replication/comparison-files.js +0 -57
  79. package/dist/video-replication/comparison-log.js +0 -72
  80. package/dist/video-replication/comparison-messages.js +0 -104
  81. package/dist/video-replication/comparison-output.js +0 -63
  82. package/dist/video-replication/comparison-preflight.js +0 -66
  83. package/dist/video-replication/comparison.js +0 -216
  84. package/dist/video-replication/evidence.js +0 -165
  85. package/dist/video-replication/media.js +0 -111
  86. package/dist/video-replication/messages.js +0 -89
  87. package/dist/workspace/messages.js +0 -35
  88. package/dist/workspace/transfer-client.js +0 -174
  89. package/dist/workspace-runtime/codex/app-server.js +0 -1040
  90. package/dist/workspace-runtime/codex/compact.js +0 -46
  91. package/dist/workspace-runtime/codex/config-toml.js +0 -107
  92. package/dist/workspace-runtime/codex/jsonrpc-stdio.js +0 -145
  93. package/dist/workspace-runtime/codex/launcher-client.js +0 -177
  94. package/dist/workspace-runtime/codex/loopback.js +0 -146
  95. package/dist/workspace-runtime/codex/mcp-config.js +0 -39
  96. package/dist/workspace-runtime/codex/model-broker.js +0 -263
  97. package/dist/workspace-runtime/codex/native-adapter.js +0 -9
  98. package/dist/workspace-runtime/codex/permissions.js +0 -70
  99. package/dist/workspace-runtime/codex/thread-image.js +0 -38
  100. package/dist/workspace-runtime/codex/ui-instructions.js +0 -4
  101. package/dist/workspace-runtime/codex/ui-tools.js +0 -183
  102. package/dist/workspace-runtime/codex/work-mode.js +0 -15
  103. package/dist/workspace-runtime/main.js +0 -10
  104. package/dist/workspace-runtime/persistence/journal.js +0 -365
  105. package/dist/workspace-runtime/persistence/native-subagents.js +0 -162
  106. package/dist/workspace-runtime/persistence/sqlite-client.js +0 -77
  107. package/dist/workspace-runtime/persistence/sqlite-worker.js +0 -1161
  108. package/dist/workspace-runtime/persistence/stopped-execution.js +0 -77
  109. package/dist/workspace-runtime/previews/output.js +0 -36
  110. package/dist/workspace-runtime/previews/publish.js +0 -262
  111. package/dist/workspace-runtime/previews/single-file.js +0 -43
  112. package/dist/workspace-runtime/processes/managed-writes.js +0 -69
  113. package/dist/workspace-runtime/production/content-changes.js +0 -36
  114. package/dist/workspace-runtime/production/contracts.js +0 -19
  115. package/dist/workspace-runtime/production/controller.js +0 -218
  116. package/dist/workspace-runtime/production/dependencies.js +0 -60
  117. package/dist/workspace-runtime/production/native.js +0 -212
  118. package/dist/workspace-runtime/production/processes.js +0 -102
  119. package/dist/workspace-runtime/production/save-command.js +0 -35
  120. package/dist/workspace-runtime/production/source-archive.js +0 -137
  121. package/dist/workspace-runtime/production/source-copy.js +0 -91
  122. package/dist/workspace-runtime/production/stages.js +0 -334
  123. package/dist/workspace-runtime/production/storage.js +0 -75
  124. package/dist/workspace-runtime/serve.js +0 -214
  125. package/dist/workspace-runtime/server/auth.js +0 -21
  126. package/dist/workspace-runtime/server/connectivity.js +0 -201
  127. package/dist/workspace-runtime/server/desktop-host.js +0 -429
  128. package/dist/workspace-runtime/server/desktop-preview-config.js +0 -81
  129. package/dist/workspace-runtime/server/desktop-preview-service.js +0 -157
  130. package/dist/workspace-runtime/server/desktop-preview-static.js +0 -53
  131. package/dist/workspace-runtime/server/desktop-preview.js +0 -189
  132. package/dist/workspace-runtime/server/dispatch.js +0 -1217
  133. package/dist/workspace-runtime/server/endpoints.js +0 -21
  134. package/dist/workspace-runtime/server/execution-group.js +0 -90
  135. package/dist/workspace-runtime/server/http.js +0 -1243
  136. package/dist/workspace-runtime/server/lock.js +0 -53
  137. package/dist/workspace-runtime/server/rfb-watch-gate.js +0 -168
  138. package/dist/workspace-runtime/server/source-uploader.js +0 -138
  139. package/dist/workspace-runtime/server/terminal-host.js +0 -366
  140. package/dist/workspace-runtime/server/types.js +0 -1
  141. package/dist/workspace-runtime/server/workspace-transfer.js +0 -99
  142. package/dist/workspace-runtime/workspaces/archive.js +0 -207
  143. package/dist/workspace-runtime/workspaces/artifact-events.js +0 -55
  144. package/dist/workspace-runtime/workspaces/artifact-files.js +0 -197
  145. package/dist/workspace-runtime/workspaces/artifact-receipts.js +0 -89
  146. package/dist/workspace-runtime/workspaces/artifacts.js +0 -282
  147. package/dist/workspace-runtime/workspaces/attachment-content.js +0 -123
  148. package/dist/workspace-runtime/workspaces/attachments.js +0 -185
  149. package/dist/workspace-runtime/workspaces/batch-commit.js +0 -142
  150. package/dist/workspace-runtime/workspaces/cli-context.js +0 -23
  151. package/dist/workspace-runtime/workspaces/cli-credentials.js +0 -111
  152. package/dist/workspace-runtime/workspaces/composer-context.js +0 -147
  153. package/dist/workspace-runtime/workspaces/context-error.js +0 -2
  154. package/dist/workspace-runtime/workspaces/dependencies.js +0 -264
  155. package/dist/workspace-runtime/workspaces/developer-command.js +0 -64
  156. package/dist/workspace-runtime/workspaces/directories.js +0 -133
  157. package/dist/workspace-runtime/workspaces/directory-access.js +0 -37
  158. package/dist/workspace-runtime/workspaces/directory-attachments.js +0 -245
  159. package/dist/workspace-runtime/workspaces/directory-maintenance.js +0 -111
  160. package/dist/workspace-runtime/workspaces/directory-stats.js +0 -49
  161. package/dist/workspace-runtime/workspaces/disk-snapshot.js +0 -31
  162. package/dist/workspace-runtime/workspaces/empty-template.js +0 -42
  163. package/dist/workspace-runtime/workspaces/files-search.js +0 -116
  164. package/dist/workspace-runtime/workspaces/files.js +0 -138
  165. package/dist/workspace-runtime/workspaces/git-credential-broker.js +0 -312
  166. package/dist/workspace-runtime/workspaces/git-credential-helper.js +0 -68
  167. package/dist/workspace-runtime/workspaces/git-direct-store.js +0 -155
  168. package/dist/workspace-runtime/workspaces/git.js +0 -670
  169. package/dist/workspace-runtime/workspaces/instructions.js +0 -56
  170. package/dist/workspace-runtime/workspaces/json5-edit.js +0 -170
  171. package/dist/workspace-runtime/workspaces/library-attachments.js +0 -268
  172. package/dist/workspace-runtime/workspaces/optional-platform-skills.js +0 -14
  173. package/dist/workspace-runtime/workspaces/parameters.js +0 -272
  174. package/dist/workspace-runtime/workspaces/prepare.js +0 -278
  175. package/dist/workspace-runtime/workspaces/registry.js +0 -251
  176. package/dist/workspace-runtime/workspaces/remix-references.js +0 -301
  177. package/dist/workspace-runtime/workspaces/revisions.js +0 -31
  178. package/dist/workspace-runtime/workspaces/session-image.js +0 -104
  179. package/dist/workspace-runtime/workspaces/shared-git.js +0 -40
  180. package/dist/workspace-runtime/workspaces/skill-artifact-loader.js +0 -95
  181. package/dist/workspace-runtime/workspaces/skills.js +0 -191
  182. package/dist/workspace-runtime/workspaces/transfer.js +0 -288
  183. package/dist/workspace-runtime/workspaces/turn-changes.js +0 -75
  184. package/dist/workspace-runtime/workspaces/video-attachments.js +0 -49
  185. package/project-template/.claude/skills/playcraft-replica-validation/SKILL.md +0 -25
  186. package/project-template/.claude/skills/playcraft-replica-validation/references/contracts.md +0 -79
  187. package/project-template/.claude/skills/playcraft-video-understanding/SKILL.md +0 -29
  188. package/project-template/.claude/skills/playcraft-video-understanding/references/contracts.md +0 -37
  189. package/project-template-v2/.claude/agents/artist.md +0 -82
  190. package/project-template-v2/.claude/agents/developer.md +0 -153
  191. package/project-template-v2/.claude/agents/game-designer.md +0 -264
  192. package/project-template-v2/.claude/agents/refs/artist-art-style-catalog.md +0 -533
  193. package/project-template-v2/.claude/agents/refs/artist-color-audio-recipes.md +0 -153
  194. package/project-template-v2/.claude/agents/refs/artist-dimension-axis.md +0 -27
  195. package/project-template-v2/.claude/agents/refs/artist-master-composite-recipes.md +0 -208
  196. package/project-template-v2/.claude/agents/refs/atom-skill-library.md +0 -81
  197. package/project-template-v2/.claude/agents/refs/developer-impl-cookbook.md +0 -432
  198. package/project-template-v2/.claude/agents/refs/framework-5-component-filter.md +0 -252
  199. package/project-template-v2/.claude/agents/refs/framework-game-feel-juice.md +0 -266
  200. package/project-template-v2/.claude/agents/refs/framework-mda.md +0 -147
  201. package/project-template-v2/.claude/agents/refs/game-designer-gameplay-sufficiency.md +0 -123
  202. package/project-template-v2/.claude/agents/refs/ta-3d-flip-recipe.md +0 -88
  203. package/project-template-v2/.claude/agents/refs/ta-atlas-deliverable-standard.md +0 -67
  204. package/project-template-v2/.claude/agents/refs/ta-batch-pipeline-recipes.md +0 -120
  205. package/project-template-v2/.claude/agents/refs/ta-image-generation-detail.md +0 -300
  206. package/project-template-v2/.claude/agents/refs/ta-image-ops-reference.md +0 -495
  207. package/project-template-v2/.claude/agents/refs/ta-pipeline-cookbook.md +0 -1141
  208. package/project-template-v2/.claude/agents/refs/ta-tools-reference.md +0 -111
  209. package/project-template-v2/.claude/agents/refs/ta-vfx-preset-catalog.md +0 -365
  210. package/project-template-v2/.claude/agents/refs/threejs-cannon-pitfalls.md +0 -412
  211. package/project-template-v2/.claude/agents/reviewer.md +0 -75
  212. package/project-template-v2/.claude/agents/technical-artist.md +0 -86
  213. package/project-template-v2/.claude/hooks/snapshot-milestone.mjs +0 -243
  214. package/project-template-v2/.claude/hooks/user-prompt.mjs +0 -133
  215. package/project-template-v2/.claude/settings.json +0 -33
  216. package/project-template-v2/.claude/skills/brainstorming/SKILL.md +0 -161
  217. package/project-template-v2/.claude/skills/brainstorming/scripts/frame-template.html +0 -270
  218. package/project-template-v2/.claude/skills/brainstorming/scripts/helper.js +0 -177
  219. package/project-template-v2/.claude/skills/brainstorming/scripts/server.cjs +0 -354
  220. package/project-template-v2/.claude/skills/brainstorming/scripts/start-server.sh +0 -148
  221. package/project-template-v2/.claude/skills/brainstorming/scripts/stop-server.sh +0 -56
  222. package/project-template-v2/.claude/skills/brainstorming/scripts/wait-for-selection.sh +0 -62
  223. package/project-template-v2/.claude/skills/brainstorming/spec-document-reviewer-prompt.md +0 -49
  224. package/project-template-v2/.claude/skills/brainstorming/visual-companion.md +0 -309
  225. package/project-template-v2/.claude/skills/playcraft-ad-psychology/SKILL.md +0 -182
  226. package/project-template-v2/.claude/skills/playcraft-art-style-guide/SKILL.md +0 -123
  227. package/project-template-v2/.claude/skills/playcraft-asset-state-sheet/SKILL.md +0 -205
  228. package/project-template-v2/.claude/skills/playcraft-audio-generation/SKILL.md +0 -280
  229. package/project-template-v2/.claude/skills/playcraft-batch-pipeline/SKILL.md +0 -184
  230. package/project-template-v2/.claude/skills/playcraft-build-optimizer/SKILL.md +0 -306
  231. package/project-template-v2/.claude/skills/playcraft-image-generation/SKILL.md +0 -298
  232. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/build-sprite-sheet.template.mjs +0 -123
  233. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/compare-style.template.mjs +0 -254
  234. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch-sprite.template.mjs +0 -324
  235. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-batch.template.mjs +0 -97
  236. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/gen-edit-variants.template.mjs +0 -118
  237. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/process-batch.template.mjs +0 -137
  238. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/prompt-cookbook.md +0 -397
  239. package/project-template-v2/.claude/skills/playcraft-image-generation/reference/validate-sprite-sheet.template.mjs +0 -296
  240. package/project-template-v2/.claude/skills/playcraft-image-ops/SKILL.md +0 -122
  241. package/project-template-v2/.claude/skills/playcraft-image-processing/SKILL.md +0 -219
  242. package/project-template-v2/.claude/skills/playcraft-masking/SKILL.md +0 -373
  243. package/project-template-v2/.claude/skills/playcraft-playable-optimization/SKILL.md +0 -161
  244. package/project-template-v2/.claude/skills/playcraft-research/SKILL.md +0 -215
  245. package/project-template-v2/.claude/skills/playcraft-skill-recommender/SKILL.md +0 -382
  246. package/project-template-v2/.claude/skills/playcraft-sprite-generation/SKILL.md +0 -423
  247. package/project-template-v2/.claude/skills/playcraft-sprite-remix/SKILL.md +0 -158
  248. package/project-template-v2/.claude/skills/playcraft-sprite-sheet/SKILL.md +0 -100
  249. package/project-template-v2/.claude/skills/playcraft-storyboard/SKILL.md +0 -167
  250. package/project-template-v2/.claude/skills/playcraft-style-qa/SKILL.md +0 -270
  251. package/project-template-v2/.claude/skills/playcraft-text-rendering/SKILL.md +0 -236
  252. package/project-template-v2/.claude/skills/playcraft-vfx-animation/SKILL.md +0 -130
  253. package/project-template-v2/.claude/skills/playwright-cli/SKILL.md +0 -390
  254. package/project-template-v2/.claude/skills/playwright-cli/references/element-attributes.md +0 -23
  255. package/project-template-v2/.claude/skills/playwright-cli/references/playwright-tests.md +0 -39
  256. package/project-template-v2/.claude/skills/playwright-cli/references/request-mocking.md +0 -87
  257. package/project-template-v2/.claude/skills/playwright-cli/references/running-code.md +0 -240
  258. package/project-template-v2/.claude/skills/playwright-cli/references/session-management.md +0 -226
  259. package/project-template-v2/.claude/skills/playwright-cli/references/spec-driven-testing.md +0 -308
  260. package/project-template-v2/.claude/skills/playwright-cli/references/storage-state.md +0 -275
  261. package/project-template-v2/.claude/skills/playwright-cli/references/test-generation.md +0 -134
  262. package/project-template-v2/.claude/skills/playwright-cli/references/tracing.md +0 -142
  263. package/project-template-v2/.claude/skills/playwright-cli/references/video-recording.md +0 -153
  264. package/project-template-v2/.claude/skills/session-analyzer/SKILL.md +0 -386
  265. package/project-template-v2/.claude/skills/session-analyzer/scripts/execution-breakdown.mjs +0 -182
  266. package/project-template-v2/.claude/skills/session-analyzer/scripts/find-turns.mjs +0 -72
  267. package/project-template-v2/.claude/skills/session-analyzer/scripts/heavy-output.mjs +0 -121
  268. package/project-template-v2/.claude/skills/session-analyzer/scripts/resolve-session.mjs +0 -102
  269. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-stats.mjs +0 -127
  270. package/project-template-v2/.claude/skills/session-analyzer/scripts/subagent-tool-timeline.mjs +0 -106
  271. package/project-template-v2/.claude/skills/session-analyzer/scripts/time-gaps.mjs +0 -128
  272. package/project-template-v2/.claude/skills/session-analyzer/scripts/turn-timeline.mjs +0 -67
  273. package/project-template-v2/.claude/snapshot.mjs +0 -263
  274. package/project-template-v2/.playcraft/skills.lock.json +0 -152
  275. package/project-template-v2/CLAUDE.md +0 -146
  276. package/project-template-v2/assets/audio/bgm/.gitkeep +0 -0
  277. package/project-template-v2/assets/audio/sfx/.gitkeep +0 -0
  278. package/project-template-v2/assets/bundles/.gitkeep +0 -0
  279. package/project-template-v2/assets/images/bg/.gitkeep +0 -0
  280. package/project-template-v2/assets/images/reference/.gitkeep +0 -0
  281. package/project-template-v2/assets/images/storyboard/.gitkeep +0 -0
  282. package/project-template-v2/assets/images/tiles/.gitkeep +0 -0
  283. package/project-template-v2/assets/images/ui/.gitkeep +0 -0
  284. package/project-template-v2/assets/images/vfx/.gitkeep +0 -0
  285. package/project-template-v2/assets/models/.gitkeep +0 -0
  286. package/project-template-v2/docs/harness/iteration-1/context-flow.md +0 -254
  287. package/project-template-v2/docs/harness/iteration-1/generate-flow.md +0 -91
  288. package/project-template-v2/docs/harness/iteration-1/ideate-flow.md +0 -214
  289. package/project-template-v2/docs/harness/iteration-1/optimize-flow.md +0 -75
  290. package/project-template-v2/docs/harness/iteration-1/wrapup-flow.md +0 -63
  291. package/project-template-v2/docs/harness/iteration-2/context-flow.md +0 -223
  292. package/project-template-v2/docs/harness/iteration-2/generate-flow.md +0 -129
  293. package/project-template-v2/docs/harness/iteration-2/ideate-flow.md +0 -267
  294. package/project-template-v2/docs/harness/iteration-2/optimize-flow.md +0 -164
  295. package/project-template-v2/docs/harness/iteration-2/wrapup-flow.md +0 -115
  296. package/project-template-v2/docs/harness/orchestrator-flow.md +0 -364
  297. package/project-template-v2/docs/project-state.json +0 -60
  298. package/project-template-v2/docs/project-state.md +0 -72
  299. package/project-template-v2/docs/standards/README.md +0 -225
  300. package/project-template-v2/docs/standards/agent-behavior-standards.md +0 -174
  301. package/project-template-v2/docs/standards/artifacts/design-brief.md +0 -19
  302. package/project-template-v2/docs/standards/artifacts/design.md +0 -22
  303. package/project-template-v2/docs/standards/artifacts/game-code.md +0 -41
  304. package/project-template-v2/docs/standards/artifacts/todo-list.md +0 -41
  305. package/project-template-v2/docs/standards/iter1-agent-behavior-standards.md +0 -343
  306. package/project-template-v2/game/index.ts +0 -18
  307. package/project-template-v2/globals.d.ts +0 -51
  308. package/project-template-v2/index.css +0 -34
  309. package/project-template-v2/index.html +0 -18
  310. package/project-template-v2/main.ts +0 -9
  311. package/project-template-v2/package.json +0 -46
  312. package/project-template-v2/skills/_shared/scripts/dispatch-clear.mjs +0 -31
  313. package/project-template-v2/skills/_shared/scripts/dispatch-set.mjs +0 -86
  314. package/project-template-v2/skills/_shared/scripts/dod-check.mjs +0 -153
  315. package/project-template-v2/skills/_shared/scripts/handoff-append.mjs +0 -70
  316. package/project-template-v2/skills/_shared/scripts/lib/validator-artifacts.mjs +0 -91
  317. package/project-template-v2/skills/_shared/scripts/pipeline/dod-config.mjs +0 -131
  318. package/project-template-v2/skills/_shared/scripts/pipeline/index.mjs +0 -80
  319. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-1-core.mjs +0 -90
  320. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-2-wrap.mjs +0 -93
  321. package/project-template-v2/skills/_shared/scripts/pipeline/iteration-3-visual.mjs +0 -23
  322. package/project-template-v2/skills/_shared/scripts/render-project-state.mjs +0 -230
  323. package/project-template-v2/skills/_shared/scripts/state-advance-stage.mjs +0 -58
  324. package/project-template-v2/skills/_shared/scripts/state-get.mjs +0 -339
  325. package/project-template-v2/skills/_shared/scripts/state-handoff.mjs +0 -39
  326. package/project-template-v2/skills/_shared/scripts/state-set.mjs +0 -94
  327. package/project-template-v2/skills/_shared/scripts/state-store.mjs +0 -783
  328. package/project-template-v2/skills/_shared/scripts/todo-add.mjs +0 -88
  329. package/project-template-v2/skills/_shared/scripts/todo-get.mjs +0 -130
  330. package/project-template-v2/skills/_shared/scripts/todo-remove.mjs +0 -33
  331. package/project-template-v2/skills/_shared/scripts/todo-set.mjs +0 -47
  332. package/project-template-v2/skills/_shared/scripts/verify-asset-code-sync.mjs +0 -268
  333. package/project-template-v2/skills/_shared/scripts/verify-env.mjs +0 -285
  334. package/project-template-v2/skills/_shared/scripts/verify-placeholders.mjs +0 -161
  335. package/project-template-v2/skills/playable-autoplay/SKILL.md +0 -176
  336. package/project-template-v2/skills/playable-autoplay/agents/openai.yaml +0 -4
  337. package/project-template-v2/skills/playable-debug/SKILL.md +0 -116
  338. package/project-template-v2/skills/playable-debug/agents/openai.yaml +0 -4
  339. package/project-template-v2/skills/playable-debug/references/debug-config.md +0 -40
  340. package/project-template-v2/skills/playable-record/SKILL.md +0 -140
  341. package/project-template-v2/skills/playable-record/scripts/lib/dev-server.mjs +0 -104
  342. package/project-template-v2/skills/playable-record/scripts/lib/record-audio-bridge.js +0 -141
  343. package/project-template-v2/skills/playable-record/scripts/record-playable.mjs +0 -425
  344. package/project-template-v2/skills/playable-record/scripts/verify-contract.mjs +0 -261
  345. package/project-template-v2/skills/playable-record/scripts/verify-firstwin.mjs +0 -398
  346. package/project-template-v2/skills/playable-record/scripts/verify-fusion.mjs +0 -322
  347. package/project-template-v2/skills/playable-record/scripts/verify-lifecycle.mjs +0 -105
  348. package/project-template-v2/skills/playable-record/scripts/verify-vlm-video.mjs +0 -230
  349. package/project-template-v2/skills/playable-validate/SKILL.md +0 -61
  350. package/project-template-v2/skills/playable-validate/validation-rules.md +0 -14
  351. package/project-template-v2/skills/playable-verify-ui/SKILL.md +0 -63
  352. package/project-template-v2/skills/playable-verify-ui/scripts/lib/__init__.py +0 -1
  353. package/project-template-v2/skills/playable-verify-ui/scripts/lib/config_expr.js +0 -218
  354. package/project-template-v2/skills/playable-verify-ui/scripts/lib/node_utils.js +0 -51
  355. package/project-template-v2/skills/playable-verify-ui/scripts/lib/profile_loader.py +0 -59
  356. package/project-template-v2/skills/playable-verify-ui/scripts/lib/report.py +0 -106
  357. package/project-template-v2/skills/playable-verify-ui/scripts/lib/runtime_contract.js +0 -116
  358. package/project-template-v2/skills/playable-verify-ui/scripts/verify_fetch_antipatterns.py +0 -59
  359. package/project-template-v2/skills/playable-verify-ui/scripts/verify_hardcoded_layout.js +0 -64
  360. package/project-template-v2/skills/playable-verify-ui/scripts/verify_runtime_contract.js +0 -58
  361. package/project-template-v2/skills/playable-verify-ui/scripts/verify_text_overlap.py +0 -333
  362. package/project-template-v2/ta-workspace/scripts/.gitkeep +0 -0
  363. package/project-template-v2/tsconfig.json +0 -20
  364. package/project-template-v2/vite.config.ts +0 -27
  365. package/project-templates/batch-locks/phaser.yaml +0 -922
  366. package/project-templates/batch-locks/threejs.yaml +0 -978
  367. package/project-templates/empty/AGENTS.md +0 -41
  368. package/project-templates/empty/gitignore +0 -33
@@ -1,412 +0,0 @@
1
- # Three.js + Cannon-es 游戏开发踩坑指南
2
-
3
- > **定位**:本文档记录在用 Three.js r160 + Cannon-es 0.20 复刻 Wood Screw Puzzle 过程中遇到的真实问题、根因和修复方案。
4
- > 适用于所有使用 Three.js + Cannon-es 制作俯视 2D 物理玩法的 Playable Ad 项目。
5
-
6
- ---
7
-
8
- ## 一、Cannon-es 物理引擎
9
-
10
- ### 坑1:Body 类型常量值与直觉相反
11
-
12
- **现象**:板激活后视觉不动,物理完全哑火。
13
-
14
- **根因**:Cannon-es 里 `DYNAMIC=1`,`STATIC=2`——与常识相反。代码里硬编码 `type === 2` 来检测 DYNAMIC body,实际检测的是 STATIC body。
15
-
16
- ```typescript
17
- // ❌ 错误:魔法数字
18
- if (plate.body.type === 2) {
19
- plate.syncMesh();
20
- }
21
-
22
- // ✅ 正确:永远用常量
23
- if (plate.body.type === CANNON.Body.DYNAMIC) {
24
- plate.syncMesh();
25
- }
26
-
27
- // 实际值备忘:DYNAMIC=1, STATIC=2, KINEMATIC=4
28
- ```
29
-
30
- ---
31
-
32
- ### 坑2:STATIC body 完全忽略约束力
33
-
34
- **现象**:给 plate body 加了 LockConstraint,但板纹丝不动,约束像没有一样。
35
-
36
- **根因**:Cannon-es 的 STATIC body 不参与约束求解,所有施加在它上面的约束力都被忽略。
37
-
38
- **修复**:受约束的物体必须是 DYNAMIC,用高 damping 维持稳定:
39
-
40
- ```typescript
41
- // ❌ 错误:STATIC body + 约束 = 约束无效
42
- const body = new CANNON.Body({ mass: 0, type: CANNON.Body.STATIC });
43
- world.addConstraint(new CANNON.LockConstraint(body, anchor));
44
-
45
- // ✅ 正确:受约束的物体用 DYNAMIC,高 damping 防抖
46
- const body = new CANNON.Body({
47
- mass: 0.1,
48
- type: CANNON.Body.DYNAMIC,
49
- linearDamping: 0.8,
50
- angularDamping: 0.8,
51
- });
52
- ```
53
-
54
- ---
55
-
56
- ### 坑3:LockConstraint 锁死旋转,不适合铰接场景
57
-
58
- **现象**:解除板的一个约束后,板不绕另一个约束旋转,像被焊死。
59
-
60
- **根因**:`LockConstraint` 锁定全6自由度(位置+旋转)。即使只剩一个约束,板也无法旋转。
61
-
62
- **规则**:
63
-
64
- - `LockConstraint` → 完全固定(焊接)
65
- - `PointToPointConstraint` → 只锁位置,旋转自由(铰接、螺丝穿板)
66
-
67
- ```typescript
68
- // 铰接场景用 PointToPointConstraint
69
- // pivotA = 接触点在 bodyA 本地坐标系的位置
70
- const r = (plateRotation * Math.PI) / 180;
71
- const pivotA = new CANNON.Vec3(
72
- Math.cos(r) * lx - Math.sin(r) * ly, // 旋转后的 local offset
73
- Math.sin(r) * lx + Math.cos(r) * ly,
74
- 0,
75
- );
76
- // anchorBody 放在接触点世界坐标,pivotB = (0,0,0)
77
- const constraint = new CANNON.PointToPointConstraint(
78
- plate.body,
79
- pivotA,
80
- anchorBody,
81
- new CANNON.Vec3(0, 0, 0),
82
- );
83
- ```
84
-
85
- ---
86
-
87
- ### 坑4:3D 物理引擎模拟俯视 2D 游戏必须锁 X/Y 轴旋转
88
-
89
- **现象**:板在物理模拟中绕 X/Y 轴翻转,从俯视相机看变成一条线。
90
-
91
- **根因**:Cannon-es 是 3D 物理,body 默认可绕任意轴旋转。Unity Rigidbody2D 天然只允许 Z 轴旋转,移植时需手动复现。
92
-
93
- ```typescript
94
- // 初始化时锁定 X/Y 轴角速度
95
- body.angularFactor.set(0, 0, 1) // 只允许 Z 轴旋转
96
-
97
- // syncMesh 时只取 Z 分量,彻底隔离渲染层
98
- syncMesh(): void {
99
- this.group.position.copy(this.body.position as unknown as THREE.Vector3)
100
- const q = this.body.quaternion as unknown as THREE.Quaternion
101
- const euler = new THREE.Euler().setFromQuaternion(q, 'ZYX')
102
- euler.x = 0
103
- euler.y = 0
104
- this.group.quaternion.setFromEuler(euler)
105
- // 同时清除物理层的 X/Y 角速度,防止累积
106
- this.body.angularVelocity.x = 0
107
- this.body.angularVelocity.y = 0
108
- }
109
- ```
110
-
111
- ---
112
-
113
- ### 坑5:allowSleep 会让 body 静默忽略新施加的力
114
-
115
- **现象**:约束释放、velocity 设置后,板仍然不动。
116
-
117
- **根因**:`world.allowSleep = true` 时,body 进入睡眠后不会因为 velocity 赋值自动醒来,需要显式 `wakeUp()`。
118
-
119
- ```typescript
120
- // ✅ 正确顺序:先设 velocity,再 wakeUp
121
- body.allowSleep = false; // 对不应睡眠的 body 彻底禁用
122
- body.velocity.set(vx, -0.5, 0);
123
- body.angularVelocity.set(0, 0, sign * 4.0);
124
- body.wakeUp(); // 最后调用
125
- ```
126
-
127
- ---
128
-
129
- ### 坑6:静态 Floor(Plane)会真实拦截物体
130
-
131
- **现象**:板掉到 y=-8 就永久停住,永远不到 y=-10 的 dispose 阈值。
132
-
133
- **根因**:`CANNON.Plane` 是无限大的面,会真实产生碰撞。原意是"兜底接住再 dispose",实际变成了永久拦截。
134
-
135
- ```typescript
136
- // ❌ 不要放 Floor,让板自由落下
137
- // world.addBody(floorBody) // 删掉这行
138
-
139
- // ✅ 在 GameLoop 里检测 y 阈值直接 dispose
140
- if (plate.body.position.y < -10) {
141
- plate.dispose(scene);
142
- }
143
- ```
144
-
145
- ---
146
-
147
- ### 坑7:同柱多板的 Z 间距必须大于碰撞体厚度之和
148
-
149
- **现象**:一根螺丝穿过两块板时,板互相碰撞、抖动乱飞。
150
-
151
- **根因**:`layerZ` 步长(0.02)< Box 碰撞体厚度×2(0.08×2=0.16),相邻板的碰撞盒重叠。
152
-
153
- ```typescript
154
- // ❌ 错误:步长 0.02 < 碰撞体厚度 0.16
155
- layerZ = score * 0.02;
156
- body.addShape(new CANNON.Box(new CANNON.Vec3(w / 2, h / 2, 0.08)));
157
-
158
- // ✅ 正确:步长 > 碰撞体厚度×2,通常缩小碰撞体厚度更简洁
159
- layerZ = score * 0.15; // 间距足够
160
- body.addShape(new CANNON.Box(new CANNON.Vec3(w / 2, h / 2, 0.01))); // 薄碰撞体
161
- // 0.15 >> 0.01×2=0.02,不再重叠
162
- ```
163
-
164
- ---
165
-
166
- ## 二、Three.js 场景节点层级
167
-
168
- ### 坑8:固定在世界坐标的元素不能是会动的 Group 的子节点
169
-
170
- **现象**:screw group 播放移动动画时,孔洞图标(holeMesh)跟着飞走,原位置变空白。
171
-
172
- **根因**:holeMesh 是 group 的子节点,group 移动时子节点一起移动。
173
-
174
- **规则**:
175
-
176
- - 跟随动画的元素 → `group.add()`
177
- - 固定在世界坐标的元素 → `scene.add()` + 手动设置世界坐标
178
-
179
- ```typescript
180
- // ❌ 错误:holeMesh 跟着 group 飞走
181
- this.group.add(this.holeMesh);
182
-
183
- // ✅ 正确:直接加到 scene,固定在 post 原始世界位置
184
- this.holeMesh.position.set(this.wx, this.wy, 0.02);
185
- scene.add(this.holeMesh); // 永远不动
186
- ```
187
-
188
- 同样适用于 hitMesh(点击检测区域)。
189
-
190
- ---
191
-
192
- ### 坑9:Raycaster 点击目标太小导致命中率低
193
-
194
- **现象**:明确点击了螺丝位置,但游戏无响应。
195
-
196
- **根因**:功能 Mesh(stubMesh)只有 0.5×0.5 世界单位(约 26px),很难精确点中。
197
-
198
- ```typescript
199
- // ❌ 用功能 Mesh 做点击目标,太小
200
- const hits = raycaster.intersectObjects([this.stubMesh]);
201
-
202
- // ✅ 专门建一个不可见的大 Mesh 做点击区
203
- const hitGeo = new THREE.PlaneGeometry(1.4, 1.4); // 约 3 倍大
204
- const hitMat = new THREE.MeshBasicMaterial({ visible: false, side: THREE.DoubleSide });
205
- this.hitMesh = new THREE.Mesh(hitGeo, hitMat);
206
- this.hitMesh.position.set(this.wx, this.wy, 0);
207
- scene.add(this.hitMesh); // 固定世界坐标
208
-
209
- const hits = raycaster.intersectObjects(screws.map((s) => s.hitMesh));
210
- ```
211
-
212
- ---
213
-
214
- ### 坑10:正交俯视相机下 CylinderGeometry 显示为黑色矩形轮廓
215
-
216
- **现象**:螺丝柱显示为黑色矩形,而不是圆形木柱。
217
-
218
- **根因**:正交俯视相机看 CylinderGeometry 时,看到的是侧面轮廓(一个矩形),不是顶部圆形。
219
-
220
- **规则:正交俯视场景里所有对象用 PlaneGeometry + 顶视图贴图,不用任何 3D 几何体。**
221
-
222
- ```typescript
223
- // ❌ 错误:俯视看到侧面矩形轮廓
224
- new THREE.CylinderGeometry(0.25, 0.25, 0.5);
225
-
226
- // ✅ 正确:PlaneGeometry + 顶视图 PNG
227
- const geo = new THREE.PlaneGeometry(0.5, 0.5);
228
- const mat = new THREE.MeshBasicMaterial({
229
- map: screwTopViewTexture,
230
- transparent: true,
231
- });
232
- ```
233
-
234
- ---
235
-
236
- ### 坑11:板上的孔用 ShaderMaterial discard,不要叠加 Hole 贴图
237
-
238
- **现象**:叠加 Hole.png 时,板旋转后孔位偏移;深度排序导致孔图片有时被遮挡。
239
-
240
- **根因**:叠加贴图方式需要把孔的 local 坐标转换到世界坐标再回到屏幕坐标,旋转的板计算容易出错;而且是"遮挡"不是"透明"。
241
-
242
- **修复**:在 ShaderMaterial 的片段着色器里用 `discard` 直接挖洞,孔坐标在模型空间计算,永远准确:
243
-
244
- ```glsl
245
- // 顶点着色器:传递模型空间 XY
246
- varying vec2 vLocalPos;
247
- void main() {
248
- vLocalPos = position.xy; // 与孔坐标系(hs[i].x/y)一致
249
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
250
- }
251
-
252
- // 片段着色器:在模型空间打孔
253
- uniform vec2 uHoles[4];
254
- uniform int uHoleCount;
255
- uniform float uHoleRadius; // 0.28 世界单位
256
- void main() {
257
- for (int i = 0; i < 4; i++) {
258
- if (i >= uHoleCount) break;
259
- vec2 d = vLocalPos - uHoles[i];
260
- if (dot(d, d) < uHoleRadius * uHoleRadius) discard;
261
- }
262
- gl_FragColor = texture2D(uTexture, vUv) * vec4(uColor, 1.0);
263
- }
264
- ```
265
-
266
- 孔坐标直接传 `hs[i].x, hs[i].y`(板本地坐标),无需任何旋转变换。
267
-
268
- ---
269
-
270
- ## 三、Tween 动画
271
-
272
- ### 坑12:async 动画函数异常时状态永久锁死
273
-
274
- **现象**:某次操作后游戏完全无响应,所有点击都没有反应。
275
-
276
- **根因**:`animating = true` 设置后,async 函数中抛出异常,`animating = false` 永远执行不到。
277
-
278
- ```typescript
279
- // ❌ 危险:异常时 animating 永久为 true
280
- canvas.addEventListener('pointerdown', () => {
281
- this.handleClick(index) // 没有错误处理
282
- })
283
-
284
- // ✅ 正确:两层保障
285
- // 1. 调用处 .catch() 兜底
286
- canvas.addEventListener('pointerdown', () => {
287
- this.handleClick(index).catch(err => {
288
- console.error(err)
289
- this.animating = false
290
- this.state = 'IDLE'
291
- })
292
- })
293
-
294
- // 2. 被调用的关键函数用 try/finally
295
- async moveScrew(...): Promise<void> {
296
- this.inputLocked = true
297
- try {
298
- await this._doMove(...)
299
- } catch (err) {
300
- console.error(err)
301
- } finally {
302
- this.inputLocked = false // 无论成功失败都释放
303
- }
304
- }
305
- ```
306
-
307
- ---
308
-
309
- ### 坑13:tween.js v21 的 .onComplete 回调参数类型不是 `() => void`
310
-
311
- ```typescript
312
- // ❌ TypeScript 报错:类型不匹配
313
- new TWEEN.Tween(obj).to(target, 430).onComplete(resolve);
314
-
315
- // ✅ 正确:包一层箭头函数
316
- new TWEEN.Tween(obj).to(target, 430).onComplete(() => resolve());
317
- ```
318
-
319
- ---
320
-
321
- ### 坑14:串行动画中同一动作不能重复播放
322
-
323
- **现象**:螺丝头永久漂浮在空中,playInTween 之后没有归位。
324
-
325
- **根因**:ClickHandler 播了一次 `playOutTween`(screwHead +0.8),`playMoveTween` 内部又播了一次(再 +0.8),`playInTween` 只降 0.8,净效果是永久上浮 0.8。
326
-
327
- ```typescript
328
- // ❌ 错误:playMoveTween 内部重复调用
329
- async playMoveTween(toX, toY) {
330
- await this.playOutTween() // ClickHandler 已经调过!
331
- await this.arcAnimation(toX, toY)
332
- await this.playInTween()
333
- }
334
-
335
- // ✅ 正确:每个动画函数只做一件事,调用方控制顺序
336
- // ClickHandler: await screw.playOutTween()
337
- // MoveManager: await screw.playMoveTween(toX, toY) // 只有弧线 + In
338
- async playMoveTween(toX, toY) {
339
- await this.arcAnimation(toX, toY) // 不再包含 Out
340
- await this.playInTween()
341
- }
342
- ```
343
-
344
- ---
345
-
346
- ## 四、游戏逻辑通用
347
-
348
- ### 坑15:setInterval 启动前必须先停止旧的
349
-
350
- **现象**:关卡切换后倒计时以数倍速度归零。
351
-
352
- **根因**:每次 `startCountdown` 都开了新的 setInterval,多个计时器并行叠加。
353
-
354
- ```typescript
355
- startCountdown(seconds: number): void {
356
- this.stopCountdown() // 先清除旧的,再开新的
357
- this.remaining = seconds
358
- this.timer = window.setInterval(() => { ... }, 1000)
359
- }
360
- ```
361
-
362
- ---
363
-
364
- ### 坑16:Unity local 坐标 → 世界坐标必须做旋转变换
365
-
366
- **现象**:第二关(板旋转 315°)的孔与螺丝位置完全无法匹配,约束建立失败。
367
-
368
- **根因**:孔的 offset `(hs.x, hs.y)` 是板本地坐标系的坐标,当板有旋转时不能直接加到板中心。
369
-
370
- ```typescript
371
- // ❌ 错误:忽略板旋转
372
- const holeWX = plate.x + hs.x;
373
- const holeWY = plate.y + hs.y;
374
-
375
- // ✅ 正确:先旋转 local offset,再平移到世界坐标
376
- const r = (plateRotation * Math.PI) / 180;
377
- const holeWX = plate.x + Math.cos(r) * hs.x - Math.sin(r) * hs.y;
378
- const holeWY = plate.y + Math.sin(r) * hs.x + Math.cos(r) * hs.y;
379
- ```
380
-
381
- 适用于所有 Unity/Cocos "本地坐标系 offset → 世界坐标" 的转换。
382
-
383
- ---
384
-
385
- ### 坑17:Vite 中旧 .js 文件会遮蔽新 .ts 文件
386
-
387
- **现象**:修改了 .ts 文件但游戏行为没有变化,像是没有生效。
388
-
389
- **根因**:Vite 解析模块时 `.js` 优先级高于 `.ts`,`src/` 下残留的旧 `.js` 文件被优先加载。
390
-
391
- ```bash
392
- # 修复:删除 src/ 下所有 .js 文件
393
- find src/ -name "*.js" -delete
394
- ```
395
-
396
- 开发时只保留 `.ts`,不要在 src 目录混放 `.js`。
397
-
398
- ---
399
-
400
- ## 五、从 C#/Unity 模块移植时的检查清单
401
-
402
- 移植前必须从参考模块中提取以下信息,避免重新踩坑:
403
-
404
- | 检查项 | 从哪里读 | 不检查的后果 |
405
- | ------------------------------------------ | ------------------------------ | ------------------------ |
406
- | 约束类型(Joint2D / Lock / Spring) | 约束建立代码 | 用错约束类型,板无法旋转 |
407
- | Body 初始类型(Dynamic/Static) | Rigidbody 初始化代码 | STATIC body 约束无效 |
408
- | 节点层级(Hole 是谁的子节点) | Prefab 层级或 Instantiate 代码 | 元素跟着错误父节点移动 |
409
- | 角速度初始值和随机逻辑 | 约束释放代码 | 需要重新猜测 |
410
- | 旋转约束(freezeRotation / angularFactor) | Rigidbody 设置 | 物体绕错误轴翻转 |
411
- | 匹配阈值(孔与螺丝的距离判定) | FindConnector 类代码 | 阈值过大/过小导致误匹配 |
412
- | Z 轴/层级管理方式 | LevelFactory 实例化顺序 | 多板碰撞或渲染顺序错误 |
@@ -1,75 +0,0 @@
1
- ---
2
- name: reviewer
3
- description: 'Reviewer: audits evidence packages and produces structured, evidence-cited verdicts without production edits.'
4
- tools:
5
- - 'Read'
6
- - 'Write'
7
- - 'Grep'
8
- - 'Glob'
9
- - 'Skill'
10
- - 'Bash'
11
- ---
12
-
13
- # Reviewer — Role Contract
14
-
15
- ## Role Essence
16
-
17
- You audit evidence packages and produce structured verdicts.
18
-
19
- Your stable responsibility is independent review: inspect the runtime, video, visual, and VLM (Vision Language Model, 视觉语言模型) evidence against the acceptance criteria, then judge precisely. A verdict must cite concrete evidence, not taste or intuition; missing evidence is never a pass. You review the evidence — you do not produce it.
20
-
21
- You are not a production participant. You do not implement fixes, generate assets, rewrite design, or decide process phase.
22
-
23
- ## Orchestration Contract
24
-
25
- You run inside a pipeline orchestration system. The orchestrator dispatches work to you and manages the overall flow — you only see and act on your assigned workticket.
26
-
27
- **On start** — read your workticket:
28
-
29
- ```bash
30
- npm run state:get -- --json dispatch
31
- ```
32
-
33
- Key fields:
34
-
35
- - `role` — must be `reviewer` for you to act; if it is empty or another role, stop and report no assigned workticket
36
- - `goal` / `guidance` — what you are here to do and how
37
- - `allowedFiles` — the only paths you may write (hard boundary)
38
- - `forbiddenTasks` — things explicitly out of scope for this run
39
- - `acceptance` — the conditions that define done; stop when these are met, no more
40
- - `activeTodoId` — the todo or stage task assigned to you this run
41
-
42
- **Before STOP** — record what you did:
43
-
44
- ```bash
45
- npm run handoff:append -- role=reviewer summary="<verdict in one sentence>" artifactRefs="<produced files>"
46
- ```
47
-
48
- If the work failed or is blocked, include the blocker in `summary` and pass `blockers="<reason>"`.
49
- The orchestrator reads your handoff and decides todo status and what comes next — do not call `todo:set`, route the next role, or promote yourself to orchestrator.
50
-
51
- Additional permissions (e.g. `todo:add` for filing follow-up issues) are granted per-run by the orchestrator in the flow notes. Do not use them unless explicitly listed there.
52
-
53
- ## Review Method
54
-
55
- These hold across every review you run:
56
-
57
- - **Independent audit stance** — read the artifacts fresh and judge against the criteria. Do not assume the work is correct because it exists, and do not inherit the producer's framing; a long production pass drifts, and only an uninherited reading catches the drift.
58
- - **Evidence over impression** — every verdict cites a concrete artifact (a runtime log line, a screenshot, a code reference). Taste or intuition is not a finding, and missing evidence is a fail, never a pass.
59
- - **Promise equals usage** — anything the design or plan declared (a mechanic, a reused atom, an asset) must actually be wired and used in the code. A declared-but-unused promise is a finding.
60
- - **Attribute every issue** — each failed item names the responsible role to route to, so the fix lands with the right owner rather than defaulting to whoever ran last.
61
- - **Layered checking** — pass items against the light acceptance criteria first; only load the full source or spec for an item that fails, so a clean review stays cheap.
62
-
63
- ## Outputs
64
-
65
- - a structured pass/fail verdict
66
- - a concise problem list, each item attributed to a responsible role
67
-
68
- ## Forbidden Ownership
69
-
70
- You must not:
71
-
72
- - modify game code
73
- - generate or replace assets
74
- - rewrite design intent
75
- - accept missing evidence as a pass
@@ -1,86 +0,0 @@
1
- ---
2
- name: technical-artist
3
- description: 'Technical Artist: makes asset readiness, production manifests, and integration blockers executable and verifiable.'
4
- tools:
5
- - 'Read'
6
- - 'Write'
7
- - 'Grep'
8
- - 'Glob'
9
- - 'Skill'
10
- - 'Bash'
11
- ---
12
-
13
- # Technical Artist — Role Contract
14
-
15
- ## Role Essence
16
-
17
- You make asset readiness work executable and verifiable.
18
-
19
- Your stable responsibility is production manifest clarity, asset path readiness, blocker classification, and integration handoff for runtime developers. No production-file claim may be made without on-disk evidence; blockers must name the blocker and the owner to route to.
20
-
21
- You are not the gameplay designer, Artist, Developer, Reviewer, or orchestrator.
22
-
23
- ## Orchestration Contract
24
-
25
- You run inside a pipeline orchestration system. The orchestrator dispatches work to you and manages the overall flow — you only see and act on your assigned workticket.
26
-
27
- **On start** — read your workticket:
28
-
29
- ```bash
30
- npm run state:get -- --json dispatch
31
- ```
32
-
33
- Key fields:
34
-
35
- - `role` — must be `technical-artist` for you to act; if it is empty or another role, stop and report no assigned workticket
36
- - `goal` / `guidance` — what you are here to do and how
37
- - `allowedFiles` — the only paths you may write (hard boundary)
38
- - `forbiddenTasks` — things explicitly out of scope for this run
39
- - `acceptance` — the conditions that define done; stop when these are met, no more
40
- - `activeTodoId` — the todo or stage task assigned to you this run
41
-
42
- **Before STOP** — record what you did:
43
-
44
- ```bash
45
- npm run handoff:append -- role=technical-artist summary="<what you did in one sentence>" artifactRefs="<produced files>"
46
- ```
47
-
48
- If the work failed or is blocked, include the blocker in `summary` and pass `blockers="<reason>"`.
49
- The orchestrator reads your handoff and decides todo status and what comes next — do not call `todo:set`, route the next role, or promote yourself to orchestrator.
50
-
51
- Additional permissions are granted per-run by the orchestrator in the flow notes. Do not use them unless explicitly listed there.
52
-
53
- ## Inputs
54
-
55
- - `docs/layout-spec.md` or asset mapping files
56
- - Artist artifact refs
57
- - existing asset paths in scope
58
-
59
- ## Outputs
60
-
61
- - production manifest status
62
- - path mapping readiness
63
- - blocker list with owner and reason
64
- - asset refs that exist on disk
65
-
66
- ## Domain References
67
-
68
- Read the one matching the production task; they carry the command details, presets, and pipeline steps:
69
-
70
- - `refs/ta-tools-reference.md` — full command reference for all TA tools.
71
- - `refs/ta-image-ops-reference.md` — `playcraft image` CLI parameter reference (resize, crop, extract, atlas).
72
- - `refs/ta-image-generation-detail.md` — image generation parameters and detail control.
73
- - `refs/ta-pipeline-cookbook.md` — production pipeline steps for the mass-production wave.
74
- - `refs/ta-batch-pipeline-recipes.md` — batch processing recipes for asset sets.
75
- - `refs/ta-atlas-deliverable-standard.md` — atlas/sheet deliverable standard and metadata.
76
- - `refs/ta-vfx-preset-catalog.md` — VFX/animation preset catalog and recipes.
77
- - `refs/ta-3d-flip-recipe.md` — 3D flip animation recipe.
78
-
79
- ## Forbidden Ownership
80
-
81
- You must not:
82
-
83
- - design gameplay
84
- - create style direction
85
- - implement runtime integration
86
- - review final playable quality