nccgs 2.1.1 → 3.0.0-rc.2

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 (705) hide show
  1. package/CHANGELOG.md +76 -235
  2. package/LICENSE +1 -1
  3. package/README.md +87 -206
  4. package/THIRD_PARTY_NOTICES.md +6 -34
  5. package/bin/nccgs.mjs +96 -0
  6. package/cli/doctor.mjs +82 -0
  7. package/cli/feedback.mjs +13 -0
  8. package/cli/install.mjs +111 -0
  9. package/cli/release.mjs +59 -0
  10. package/cli/run.mjs +35 -0
  11. package/cli/spawn.mjs +20 -0
  12. package/cli/uninstall.mjs +43 -0
  13. package/cli/update-check.mjs +66 -0
  14. package/docs/EVIDENCE-VERIFICATION.md +22 -0
  15. package/package.json +23 -30
  16. package/runtime/core/diag.mjs +43 -0
  17. package/runtime/core/feedback-policy.mjs +54 -0
  18. package/runtime/core/fs.mjs +80 -0
  19. package/runtime/core/job-object.mjs +73 -0
  20. package/runtime/core/modes.mjs +87 -0
  21. package/runtime/core/process-tree.mjs +109 -0
  22. package/runtime/core/project.mjs +113 -0
  23. package/runtime/core/snapshot.mjs +114 -0
  24. package/runtime/hooks/common.mjs +22 -0
  25. package/runtime/hooks/done-guard.mjs +15 -0
  26. package/runtime/hooks/guard-mcp.mjs +8 -0
  27. package/runtime/hooks/guard-shell.mjs +16 -0
  28. package/runtime/hooks/guard-write.mjs +25 -0
  29. package/runtime/hooks/session-log.mjs +7 -0
  30. package/runtime/hooks/session-start.mjs +40 -0
  31. package/runtime/hooks/unity-transport.mjs +12 -0
  32. package/runtime/modes.json +39 -0
  33. package/runtime/task/cost.mjs +103 -0
  34. package/runtime/task/criteria.mjs +128 -0
  35. package/runtime/task/feedback.mjs +136 -0
  36. package/runtime/task/ledger.mjs +109 -0
  37. package/runtime/task/plan.mjs +69 -0
  38. package/runtime/task/project.mjs +79 -0
  39. package/runtime/task/report.mjs +252 -0
  40. package/runtime/task/task.mjs +238 -0
  41. package/runtime/unity/assets.mjs +51 -0
  42. package/runtime/unity/playtest.mjs +145 -0
  43. package/runtime/unity/unity.mjs +350 -0
  44. package/scripts/check-job-object.mjs +18 -0
  45. package/scripts/sync-unity-skills.mjs +35 -119
  46. package/template/CLAUDE.md +39 -0
  47. package/template/agents/fast-fix.md +9 -0
  48. package/template/agents/implementer.md +19 -0
  49. package/template/agents/playtester.md +15 -0
  50. package/template/agents/reviewer.md +19 -0
  51. package/template/agents/scout.md +9 -0
  52. package/template/ponytail/README.md +8 -0
  53. package/{.claude/nccgs/packages → template}/ponytail/engineering.md +10 -0
  54. package/template/protocols/evidence.md +52 -0
  55. package/template/protocols/playtest.md +45 -0
  56. package/template/protocols/review.md +34 -0
  57. package/template/protocols/unity-cli-notes.md +56 -0
  58. package/template/settings.fragment.json +33 -0
  59. package/template/skills/art-bible/SKILL.md +19 -0
  60. package/template/skills/asset-spec/SKILL.md +19 -0
  61. package/template/skills/brainstorm/SKILL.md +17 -0
  62. package/template/skills/feedback/SKILL.md +16 -0
  63. package/template/skills/map-systems/SKILL.md +25 -0
  64. package/template/skills/playtest/SKILL.md +17 -0
  65. package/template/skills/status/SKILL.md +18 -0
  66. package/template/skills/test/SKILL.md +34 -0
  67. package/template/skills/unity-foundation/SKILL.md +17 -0
  68. package/template/skills/vertical-slice/SKILL.md +17 -0
  69. package/template/skills/work/SKILL.md +65 -0
  70. package/tools/feedback-worker/README.md +12 -0
  71. package/tools/feedback-worker/worker.js +39 -0
  72. package/tools/feedback-worker/wrangler.toml +12 -0
  73. package/unity-skills/2d-pixel-perfect/SKILL.md +208 -0
  74. package/unity-skills/2d-pixel-perfect/references/api-reference.md +81 -0
  75. package/unity-skills/2d-pixel-perfect/references/camera-setup-builtin.cs +40 -0
  76. package/unity-skills/2d-pixel-perfect/references/camera-setup-urp.cs +49 -0
  77. package/unity-skills/2d-pixel-perfect/references/pipeline-detection.cs +50 -0
  78. package/unity-skills/2d-pixel-perfect/references/sprite-settings.cs +37 -0
  79. package/unity-skills/asset-transformer-toolkit/SECURITY.md +15 -0
  80. package/unity-skills/asset-transformer-toolkit/SKILL.md +39 -0
  81. package/unity-skills/asset-transformer-toolkit/references/create-importer.md +121 -0
  82. package/unity-skills/asset-transformer-toolkit/references/lods.md +61 -0
  83. package/unity-skills/asset-transformer-toolkit/references/rule-api.md +154 -0
  84. package/unity-skills/asset-transformer-toolkit/references/ruleblock-api.md +37 -0
  85. package/unity-skills/asset-transformer-toolkit/references/ruleset-api.md +138 -0
  86. package/unity-skills/asset-transformer-toolkit/references/rulesets-and-actions.md +227 -0
  87. package/unity-skills/audio-setup-mixers/SECURITY.md +16 -0
  88. package/unity-skills/audio-setup-mixers/SKILL.md +127 -0
  89. package/unity-skills/audio-setup-mixers/references/api.md +162 -0
  90. package/unity-skills/build-gtk/SKILL.md +242 -0
  91. package/unity-skills/build-gtk/references/graph-api.md +324 -0
  92. package/unity-skills/build-gtk/references/pitfalls.md +86 -0
  93. package/unity-skills/build-gtk/references/runtime-and-visualization.md +196 -0
  94. package/unity-skills/build-gtk/references/state-machine-api.md +286 -0
  95. package/unity-skills/build-live-game/SKILL.md +255 -0
  96. package/{.claude/skills → unity-skills}/build-live-game/references/achievements.md +132 -154
  97. package/{.claude/skills → unity-skills}/build-live-game/references/apis.md +10 -19
  98. package/{.claude/skills → unity-skills}/build-live-game/references/authentication.md +14 -20
  99. package/{.claude/skills → unity-skills}/build-live-game/references/battlepass.md +269 -225
  100. package/unity-skills/build-live-game/references/blueprints-and-samples.md +75 -0
  101. package/unity-skills/build-live-game/references/cloud-code-cloudbehaviours.md +1111 -0
  102. package/unity-skills/build-live-game/references/cloud-code-modules.md +1276 -0
  103. package/unity-skills/build-live-game/references/cloud-code.md +58 -0
  104. package/{.claude/skills → unity-skills}/build-live-game/references/cloud-save.md +15 -25
  105. package/{.claude/skills → unity-skills}/build-live-game/references/deployment.md +33 -18
  106. package/{.claude/skills → unity-skills}/build-live-game/references/player-account.md +31 -23
  107. package/{.claude/skills → unity-skills}/build-live-game/references/tooling.md +0 -56
  108. package/unity-skills/build-live-game/references/ugs-cli.md +86 -0
  109. package/unity-skills/craft-game-floors/SECURITY.md +23 -0
  110. package/unity-skills/craft-game-floors/SKILL.md +134 -0
  111. package/unity-skills/craft-game-floors/references/art-direction.md +85 -0
  112. package/unity-skills/craft-game-floors/references/camera-rigs.md +51 -0
  113. package/unity-skills/craft-game-floors/references/character-motion.md +35 -0
  114. package/unity-skills/craft-game-floors/references/game-audio.md +47 -0
  115. package/unity-skills/craft-game-floors/references/game-feel.md +68 -0
  116. package/unity-skills/craft-game-floors/references/game-shell.md +45 -0
  117. package/unity-skills/craft-game-floors/references/live-floor.md +35 -0
  118. package/unity-skills/craft-game-floors/references/placeholder-assets.md +35 -0
  119. package/unity-skills/craft-game-floors/references/scene-lighting.md +52 -0
  120. package/unity-skills/craft-game-floors/references/toon-shading.md +34 -0
  121. package/unity-skills/craft-game-floors/references/vfx.md +40 -0
  122. package/unity-skills/craft-game-floors/references/visual-scorecard.md +43 -0
  123. package/unity-skills/create-2d-physics/SECURITY.md +16 -0
  124. package/unity-skills/create-2d-physics/SKILL.md +128 -0
  125. package/unity-skills/create-2d-physics/references/2d-physics-core.md +155 -0
  126. package/unity-skills/create-2d-physics/references/legacy-2d-physics.md +45 -0
  127. package/unity-skills/create-tile-palette-or-rule-tiles/SKILL.md +12 -0
  128. package/unity-skills/create-tile-palette-or-rule-tiles/references/hexagonalruletile.md +71 -0
  129. package/unity-skills/create-tile-palette-or-rule-tiles/references/palette-create.md +38 -0
  130. package/unity-skills/create-tile-palette-or-rule-tiles/references/ruletile-createempty.md +35 -0
  131. package/unity-skills/create-tile-palette-or-rule-tiles/references/ruletile-createfromsegment.md +212 -0
  132. package/unity-skills/create-tile-palette-or-rule-tiles/references/ruletile.md +90 -0
  133. package/unity-skills/create-tile-palette-or-rule-tiles/scripts/CreatePaletteTemplate.cs +148 -0
  134. package/unity-skills/create-tile-palette-or-rule-tiles/scripts/ManualWorkflowExample.cs +63 -0
  135. package/unity-skills/create-tile-palette-or-rule-tiles/scripts/RuleTileGenerator.cs +61 -0
  136. package/unity-skills/create-tile-palette-or-rule-tiles/scripts/TilemapRuleTileCreateFromSegment.cs +225 -0
  137. package/unity-skills/generate-editor-search-query/SECURITY.md +17 -0
  138. package/unity-skills/generate-editor-search-query/SKILL.md +117 -0
  139. package/unity-skills/generate-editor-search-query/references/open-search-window.md +70 -0
  140. package/unity-skills/generate-editor-search-query/references/query-patterns.md +124 -0
  141. package/{.claude/skills → unity-skills}/implement-in-app-purchases/SKILL.md +1 -2
  142. package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/api-notes.md +25 -28
  143. package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-convert-native-google-billing.md +1 -1
  144. package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-implement-iap-d2c.md +40 -5
  145. package/{.claude/skills → unity-skills}/initialize-ai-navigation/SKILL.md +4 -4
  146. package/{.claude/skills → unity-skills}/initialize-ai-navigation/references/navigation-system.md +3 -3
  147. package/{.claude/skills → unity-skills}/levelplay-unity-integration/CHANGELOG.md +12 -0
  148. package/{.claude/skills → unity-skills}/levelplay-unity-integration/README.md +9 -5
  149. package/unity-skills/levelplay-unity-integration/SKILL.md +442 -0
  150. package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/banner-api.md +15 -8
  151. package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/best-practices.md +604 -536
  152. package/unity-skills/levelplay-unity-integration/references/dependency-resolution.md +94 -0
  153. package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/ilrd-api.md +2 -2
  154. package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/initialization-api.md +221 -0
  155. package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/interstitial-api.md +11 -3
  156. package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/ios-setup.md +6 -34
  157. package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/migration-sdk-9.md +1 -1
  158. package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/privacy-settings.md +14 -29
  159. package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/rewarded-api.md +20 -4
  160. package/unity-skills/levelplay-unity-integration/references/testing-and-validation.md +222 -0
  161. package/unity-skills/levelplay-unity-integration/references/troubleshooting.md +99 -0
  162. package/unity-skills/localization/SKILL.md +347 -0
  163. package/{.claude/skills → unity-skills}/localization/references/api-notes.md +4 -0
  164. package/unity-skills/localization/resources/L10nBatchProcessor.cs +191 -0
  165. package/unity-skills/manage-sprite-atlas/SKILL.md +351 -0
  166. package/unity-skills/manage-sprite-atlas/references/addressables-delivery.md +58 -0
  167. package/unity-skills/manage-sprite-atlas/references/api.md +382 -0
  168. package/unity-skills/manage-sprite-atlas/references/best-practices.md +183 -0
  169. package/unity-skills/manage-sprite-atlas/references/common-errors.md +123 -0
  170. package/unity-skills/manage-sprite-atlas/references/custom-packing.md +147 -0
  171. package/unity-skills/manage-sprite-atlas/references/manual-authoring.md +39 -0
  172. package/unity-skills/manage-sprite-atlas/resources/authoringvsruntime.cs +176 -0
  173. package/unity-skills/manage-sprite-atlas/resources/buildaddressablespostprocess.cs +59 -0
  174. package/unity-skills/manage-sprite-atlas/resources/cacheloadedatlases.cs +145 -0
  175. package/unity-skills/manage-sprite-atlas/resources/cleanupbatchoperations.cs +119 -0
  176. package/unity-skills/manage-sprite-atlas/resources/createandconfiguremasteratlas.cs +57 -0
  177. package/unity-skills/manage-sprite-atlas/resources/custompackersetup.cs +88 -0
  178. package/unity-skills/manage-sprite-atlas/resources/deprecatedmethods.cs +142 -0
  179. package/unity-skills/manage-sprite-atlas/resources/dontmodifywithoutsaving.cs +120 -0
  180. package/unity-skills/manage-sprite-atlas/resources/dontpackinruntimebuilds.cs +190 -0
  181. package/unity-skills/manage-sprite-atlas/resources/dontscriptspriteatlasineditor.cs +114 -0
  182. package/unity-skills/manage-sprite-atlas/resources/editorconfiguration.cs +95 -0
  183. package/unity-skills/manage-sprite-atlas/resources/enablespritepacking.cs +172 -0
  184. package/unity-skills/manage-sprite-atlas/resources/gridspritepacker.cs +50 -0
  185. package/unity-skills/manage-sprite-atlas/resources/handlelatebinding.cs +147 -0
  186. package/unity-skills/manage-sprite-atlas/resources/handlenullcases.cs +141 -0
  187. package/unity-skills/manage-sprite-atlas/resources/migratev1tov2.cs +335 -0
  188. package/unity-skills/manage-sprite-atlas/resources/multipagepacker.cs +80 -0
  189. package/unity-skills/manage-sprite-atlas/resources/optimizetexturesettings.cs +191 -0
  190. package/unity-skills/manage-sprite-atlas/resources/packerdebugging.cs +158 -0
  191. package/unity-skills/manage-sprite-atlas/resources/packtransform.cs +51 -0
  192. package/unity-skills/manage-sprite-atlas/resources/platformnames.cs +127 -0
  193. package/unity-skills/manage-sprite-atlas/resources/queryspritesefficiently.cs +222 -0
  194. package/unity-skills/manage-sprite-atlas/resources/registercallbacks.cs +152 -0
  195. package/unity-skills/manage-sprite-atlas/resources/runtimeatlasloader.cs +15 -0
  196. package/unity-skills/manage-sprite-atlas/resources/runtimespriteaccess.cs +19 -0
  197. package/unity-skills/manage-sprite-atlas/resources/savespriteatlasasset.cs +107 -0
  198. package/unity-skills/manage-sprite-atlas/resources/scriptablepacker.cs +81 -0
  199. package/unity-skills/manage-sprite-atlas/resources/setincludeinbuild.cs +164 -0
  200. package/unity-skills/manage-sprite-atlas/resources/sizeoptimizedpacker.cs +88 -0
  201. package/unity-skills/manage-sprite-atlas/resources/spriteatlaslatebinding.cs +123 -0
  202. package/unity-skills/manage-sprite-atlas/resources/spriteatlasprebuildgenerator.cs +219 -0
  203. package/unity-skills/manage-sprite-atlas/resources/spritedata.cs +35 -0
  204. package/unity-skills/manage-sprite-atlas/resources/spritepack.cs +39 -0
  205. package/unity-skills/manage-sprite-atlas/resources/texturedata.cs +15 -0
  206. package/unity-skills/manage-sprite-atlas/resources/updatebuildscripts.cs +357 -0
  207. package/unity-skills/manage-sprite-atlas/resources/updatesettingsconfiguration.cs +135 -0
  208. package/unity-skills/manage-sprite-atlas/resources/usevariantswisely.cs +179 -0
  209. package/unity-skills/manage-sprite-atlas/resources/variantatlas.cs +39 -0
  210. package/unity-skills/manifest.json +1155 -0
  211. package/unity-skills/migrate-birp-to-urp/SECURITY.md +16 -0
  212. package/unity-skills/migrate-birp-to-urp/SKILL.md +543 -0
  213. package/unity-skills/migrate-birp-to-urp/references/capturing-the-editor.md +66 -0
  214. package/unity-skills/migrate-birp-to-urp/references/complex-shader-situations.md +272 -0
  215. package/unity-skills/migrate-birp-to-urp/references/custom-shader-triage.md +123 -0
  216. package/unity-skills/migrate-birp-to-urp/references/implementation-patterns.md +529 -0
  217. package/unity-skills/migrate-birp-to-urp/references/migration-workflow.md +265 -0
  218. package/unity-skills/migrate-birp-to-urp/references/quality-settings-map.md +69 -0
  219. package/unity-skills/new-unity-project/SECURITY.md +26 -0
  220. package/unity-skills/new-unity-project/SKILL.md +386 -0
  221. package/unity-skills/new-unity-project/references/skill-setup.md +66 -0
  222. package/unity-skills/optimize-audio/SECURITY.md +16 -0
  223. package/{.claude/skills → unity-skills}/optimize-audio/SKILL.md +17 -17
  224. package/{.claude/skills → unity-skills}/optimize-audio/resources/audio-import-api.md +8 -5
  225. package/{.claude/skills → unity-skills}/optimize-text-mesh-pro/SKILL.md +1 -11
  226. package/unity-skills/optimize-web/SECURITY.md +16 -0
  227. package/{.claude/skills → unity-skills}/optimize-web/SKILL.md +164 -27
  228. package/unity-skills/optimize-web/scripts/WebOptimizer.cs +46 -0
  229. package/unity-skills/optimize-web/scripts/toktx-examples.sh +11 -0
  230. package/{.claude/skills → unity-skills}/physics-3d-collision/SKILL.md +2 -2
  231. package/unity-skills/physics-3d-collision/references/troubleshooting.md +8 -0
  232. package/unity-skills/project-auditor-fixes/SKILL.md +64 -0
  233. package/{.claude/skills → unity-skills}/setup-multiplayer-services/SKILL.md +1 -4
  234. package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/SKILL.md +1 -1
  235. package/{.claude/skills → unity-skills}/shader-graph-create-custom-node/SKILL.md +1 -1
  236. package/unity-skills/sprite-editor/SECURITY.md +16 -0
  237. package/{.claude/skills → unity-skills}/sprite-editor/SKILL.md +9 -9
  238. package/{.claude/skills → unity-skills}/sprite-editor/references/templates.md +1 -1
  239. package/unity-skills/sprite-segment-3x3grid/SKILL.md +136 -0
  240. package/unity-skills/sprite-segment-3x3grid/scripts/SpriteGridAnalysis.cs +119 -0
  241. package/{.claude/skills → unity-skills}/ui/SKILL.md +1 -1
  242. package/{.claude/skills → unity-skills}/ui-imgui/SKILL.md +1 -7
  243. package/{.claude/skills → unity-skills}/ui-ugui/SKILL.md +3 -9
  244. package/{.claude/skills → unity-skills}/ui-uitk/SKILL.md +8 -14
  245. package/{.claude/skills → unity-skills}/ui-uitk/references/custom-elements.md +1 -1
  246. package/unity-skills/unity-cli/CHANGELOG.md +515 -0
  247. package/unity-skills/unity-cli/SECURITY.md +68 -0
  248. package/unity-skills/unity-cli/SKILL.md +723 -0
  249. package/unity-skills/unity-cli/references/auth-license-cloud.md +318 -0
  250. package/unity-skills/unity-cli/references/build-run-test.md +555 -0
  251. package/unity-skills/unity-cli/references/cloud-automation.md +736 -0
  252. package/{.claude/skills → unity-skills}/unity-cli/references/collaboration.md +166 -105
  253. package/unity-skills/unity-cli/references/config-hub.md +239 -0
  254. package/unity-skills/unity-cli/references/diagnostics-maintenance.md +720 -0
  255. package/unity-skills/unity-cli/references/docs-workflow.md +179 -0
  256. package/unity-skills/unity-cli/references/editors-install.md +476 -0
  257. package/unity-skills/unity-cli/references/integration-advanced.md +1130 -0
  258. package/unity-skills/unity-cli/references/playmode-verification-loop.md +279 -0
  259. package/unity-skills/unity-cli/references/projects-templates.md +996 -0
  260. package/unity-skills/unity-cli/references/version-control.md +612 -0
  261. package/{.claude/skills → unity-skills}/unity-package-management/SKILL.md +60 -12
  262. package/{.claude/skills → unity-skills}/unity-package-management/references/select-packages.md +39 -21
  263. package/unity-skills/unity-pipeline/SECURITY.md +17 -0
  264. package/unity-skills/unity-pipeline/SKILL.md +335 -0
  265. package/unity-skills/urp-postprocessing/SECURITY.md +16 -0
  266. package/{.claude/skills → unity-skills}/urp-postprocessing/SKILL.md +12 -12
  267. package/{.claude/skills → unity-skills}/urp-postprocessing/references/code-templates.md +39 -8
  268. package/{.claude/skills → unity-skills}/validate-urp-render-graph-renderer-feature/SKILL.md +1 -1
  269. package/.claude/agents/nccgs-adversarial-reviewer.md +0 -43
  270. package/.claude/agents/nccgs-engine-programmer.md +0 -27
  271. package/.claude/agents/nccgs-fast-implementer.md +0 -30
  272. package/.claude/agents/nccgs-game-designer.md +0 -26
  273. package/.claude/agents/nccgs-gameplay-programmer.md +0 -26
  274. package/.claude/agents/nccgs-qa-engineer.md +0 -27
  275. package/.claude/agents/nccgs-task-scout.md +0 -24
  276. package/.claude/agents/nccgs-ui-programmer.md +0 -27
  277. package/.claude/agents/nccgs-unity-build-specialist.md +0 -27
  278. package/.claude/agents/nccgs-unity-implementer.md +0 -28
  279. package/.claude/agents/nccgs-unity-systems-specialist.md +0 -27
  280. package/.claude/agents/nccgs-unity-ui-specialist.md +0 -27
  281. package/.claude/agents/nccgs-verification-engineer.md +0 -27
  282. package/.claude/nccgs/MEMORY.md +0 -66
  283. package/.claude/nccgs/THIRD_PARTY_NOTICES.md +0 -29
  284. package/.claude/nccgs/VERSION +0 -1
  285. package/.claude/nccgs/agent-library/nccgs-accessibility-specialist.md +0 -25
  286. package/.claude/nccgs/agent-library/nccgs-adversarial-reviewer.md +0 -41
  287. package/.claude/nccgs/agent-library/nccgs-ai-programmer.md +0 -25
  288. package/.claude/nccgs/agent-library/nccgs-analytics-engineer.md +0 -25
  289. package/.claude/nccgs/agent-library/nccgs-art-direction-lead.md +0 -25
  290. package/.claude/nccgs/agent-library/nccgs-audio-direction-lead.md +0 -25
  291. package/.claude/nccgs/agent-library/nccgs-creative-director.md +0 -25
  292. package/.claude/nccgs/agent-library/nccgs-documentation-manager.md +0 -25
  293. package/.claude/nccgs/agent-library/nccgs-economy-designer.md +0 -25
  294. package/.claude/nccgs/agent-library/nccgs-engine-programmer.md +0 -25
  295. package/.claude/nccgs/agent-library/nccgs-fast-implementer.md +0 -28
  296. package/.claude/nccgs/agent-library/nccgs-game-design-lead.md +0 -25
  297. package/.claude/nccgs/agent-library/nccgs-game-designer.md +0 -24
  298. package/.claude/nccgs/agent-library/nccgs-gameplay-programmer.md +0 -24
  299. package/.claude/nccgs/agent-library/nccgs-level-designer.md +0 -25
  300. package/.claude/nccgs/agent-library/nccgs-live-ops-designer.md +0 -25
  301. package/.claude/nccgs/agent-library/nccgs-localization-lead.md +0 -25
  302. package/.claude/nccgs/agent-library/nccgs-narrative-lead.md +0 -25
  303. package/.claude/nccgs/agent-library/nccgs-network-programmer.md +0 -25
  304. package/.claude/nccgs/agent-library/nccgs-performance-analyst.md +0 -25
  305. package/.claude/nccgs/agent-library/nccgs-producer.md +0 -25
  306. package/.claude/nccgs/agent-library/nccgs-production-coordinator.md +0 -22
  307. package/.claude/nccgs/agent-library/nccgs-programming-lead.md +0 -25
  308. package/.claude/nccgs/agent-library/nccgs-prototyper.md +0 -25
  309. package/.claude/nccgs/agent-library/nccgs-qa-engineer.md +0 -25
  310. package/.claude/nccgs/agent-library/nccgs-qa-lead.md +0 -25
  311. package/.claude/nccgs/agent-library/nccgs-release-engineer.md +0 -25
  312. package/.claude/nccgs/agent-library/nccgs-release-lead.md +0 -25
  313. package/.claude/nccgs/agent-library/nccgs-security-engineer.md +0 -25
  314. package/.claude/nccgs/agent-library/nccgs-sound-designer.md +0 -25
  315. package/.claude/nccgs/agent-library/nccgs-systems-designer.md +0 -25
  316. package/.claude/nccgs/agent-library/nccgs-task-scout.md +0 -22
  317. package/.claude/nccgs/agent-library/nccgs-technical-architect.md +0 -25
  318. package/.claude/nccgs/agent-library/nccgs-technical-artist.md +0 -25
  319. package/.claude/nccgs/agent-library/nccgs-technical-director.md +0 -25
  320. package/.claude/nccgs/agent-library/nccgs-tools-programmer.md +0 -25
  321. package/.claude/nccgs/agent-library/nccgs-ui-programmer.md +0 -25
  322. package/.claude/nccgs/agent-library/nccgs-unity-build-specialist.md +0 -25
  323. package/.claude/nccgs/agent-library/nccgs-unity-content-specialist.md +0 -25
  324. package/.claude/nccgs/agent-library/nccgs-unity-implementer.md +0 -26
  325. package/.claude/nccgs/agent-library/nccgs-unity-rendering-specialist.md +0 -25
  326. package/.claude/nccgs/agent-library/nccgs-unity-systems-specialist.md +0 -25
  327. package/.claude/nccgs/agent-library/nccgs-unity-ui-specialist.md +0 -25
  328. package/.claude/nccgs/agent-library/nccgs-ux-designer.md +0 -25
  329. package/.claude/nccgs/agent-library/nccgs-verification-engineer.md +0 -25
  330. package/.claude/nccgs/agent-library/nccgs-world-builder.md +0 -25
  331. package/.claude/nccgs/agent-library/nccgs-writer.md +0 -25
  332. package/.claude/nccgs/constitution.md +0 -187
  333. package/.claude/nccgs/hooks/agent-audit.mjs +0 -16
  334. package/.claude/nccgs/hooks/closure-guard.mjs +0 -59
  335. package/.claude/nccgs/hooks/common.mjs +0 -42
  336. package/.claude/nccgs/hooks/post-compact.mjs +0 -1
  337. package/.claude/nccgs/hooks/pre-compact.mjs +0 -8
  338. package/.claude/nccgs/hooks/protect-git.mjs +0 -22
  339. package/.claude/nccgs/hooks/protect-write.mjs +0 -17
  340. package/.claude/nccgs/hooks/runtime-observation.mjs +0 -11
  341. package/.claude/nccgs/hooks/session-start.mjs +0 -29
  342. package/.claude/nccgs/hooks/session-stop.mjs +0 -7
  343. package/.claude/nccgs/hooks/unity-transport-guard.mjs +0 -11
  344. package/.claude/nccgs/packages/ponytail/README.md +0 -46
  345. package/.claude/nccgs/packages/ponytail/manifest.json +0 -24
  346. package/.claude/nccgs/pipeline.json +0 -260
  347. package/.claude/nccgs/protocols/agent-contract.md +0 -101
  348. package/.claude/nccgs/protocols/astra-claude.md +0 -111
  349. package/.claude/nccgs/protocols/bounded-repair.md +0 -246
  350. package/.claude/nccgs/protocols/context-packets.md +0 -23
  351. package/.claude/nccgs/protocols/delivery-acceptance.md +0 -105
  352. package/.claude/nccgs/protocols/design-lifecycle.md +0 -139
  353. package/.claude/nccgs/protocols/editor-session-evidence.md +0 -52
  354. package/.claude/nccgs/protocols/evidence.md +0 -31
  355. package/.claude/nccgs/protocols/model-routing.md +0 -46
  356. package/.claude/nccgs/protocols/orchestration.md +0 -74
  357. package/.claude/nccgs/protocols/review-handoff.md +0 -101
  358. package/.claude/nccgs/protocols/shared-workflow-context.md +0 -33
  359. package/.claude/nccgs/protocols/standalone-gates.md +0 -329
  360. package/.claude/nccgs/protocols/standalone-pilot.md +0 -144
  361. package/.claude/nccgs/protocols/standalone.md +0 -207
  362. package/.claude/nccgs/protocols/task-autonomy.md +0 -55
  363. package/.claude/nccgs/protocols/task-gates.md +0 -144
  364. package/.claude/nccgs/protocols/task-slices.md +0 -106
  365. package/.claude/nccgs/protocols/unity-boundary.md +0 -31
  366. package/.claude/nccgs/routing.generated.md +0 -49
  367. package/.claude/nccgs/settings.fragment.json +0 -213
  368. package/.claude/nccgs/studio.json +0 -472
  369. package/.claude/nccgs/tools/approve-overrides.mjs +0 -81
  370. package/.claude/nccgs/tools/autonomy.mjs +0 -40
  371. package/.claude/nccgs/tools/command-process.mjs +0 -50
  372. package/.claude/nccgs/tools/command-tokens.mjs +0 -22
  373. package/.claude/nccgs/tools/compile-policy.mjs +0 -121
  374. package/.claude/nccgs/tools/configure-models.mjs +0 -96
  375. package/.claude/nccgs/tools/criteria.mjs +0 -121
  376. package/.claude/nccgs/tools/delivery-budget.mjs +0 -52
  377. package/.claude/nccgs/tools/design-readiness.mjs +0 -158
  378. package/.claude/nccgs/tools/editor-session-evidence.mjs +0 -66
  379. package/.claude/nccgs/tools/evidence.mjs +0 -153
  380. package/.claude/nccgs/tools/gates.mjs +0 -297
  381. package/.claude/nccgs/tools/handoff.mjs +0 -51
  382. package/.claude/nccgs/tools/hook-transport.mjs +0 -34
  383. package/.claude/nccgs/tools/inputs.mjs +0 -108
  384. package/.claude/nccgs/tools/installation-guard.mjs +0 -55
  385. package/.claude/nccgs/tools/integrity.mjs +0 -69
  386. package/.claude/nccgs/tools/lifecycle.mjs +0 -542
  387. package/.claude/nccgs/tools/native-completion.mjs +0 -30
  388. package/.claude/nccgs/tools/orchestration.mjs +0 -680
  389. package/.claude/nccgs/tools/paths.mjs +0 -60
  390. package/.claude/nccgs/tools/policy.mjs +0 -107
  391. package/.claude/nccgs/tools/process-lock.mjs +0 -74
  392. package/.claude/nccgs/tools/repair-packet.mjs +0 -106
  393. package/.claude/nccgs/tools/returned-handoff.mjs +0 -47
  394. package/.claude/nccgs/tools/review-budget.mjs +0 -171
  395. package/.claude/nccgs/tools/review-handoff.mjs +0 -66
  396. package/.claude/nccgs/tools/runtime.mjs +0 -71
  397. package/.claude/nccgs/tools/session-budget.mjs +0 -67
  398. package/.claude/nccgs/tools/shared-context-guard.mjs +0 -60
  399. package/.claude/nccgs/tools/shared-context.mjs +0 -25
  400. package/.claude/nccgs/tools/task-slices.mjs +0 -147
  401. package/.claude/nccgs/tools/task.mjs +0 -145
  402. package/.claude/nccgs/tools/tool-guard.mjs +0 -120
  403. package/.claude/nccgs/tools/unity-repair.mjs +0 -128
  404. package/.claude/nccgs/tools/unity-transport.mjs +0 -170
  405. package/.claude/nccgs/tools/verification-jobs.mjs +0 -171
  406. package/.claude/nccgs/tools/verification-worker.mjs +0 -71
  407. package/.claude/nccgs/tools/windows-compiler-server.cs +0 -163
  408. package/.claude/nccgs/tools/windows-job.cs +0 -103
  409. package/.claude/nccgs/unity-skills-manifest.json +0 -727
  410. package/.claude/nccgs/workflow-catalog.json +0 -654
  411. package/.claude/rules/nccgs-canonical-docs.md +0 -19
  412. package/.claude/rules/nccgs-editor-tools.md +0 -12
  413. package/.claude/rules/nccgs-localization.md +0 -12
  414. package/.claude/rules/nccgs-networking.md +0 -13
  415. package/.claude/rules/nccgs-performance.md +0 -14
  416. package/.claude/rules/nccgs-rendering.md +0 -16
  417. package/.claude/rules/nccgs-security.md +0 -13
  418. package/.claude/rules/nccgs-tests.md +0 -18
  419. package/.claude/rules/nccgs-ui.md +0 -14
  420. package/.claude/rules/nccgs-unity-assets.md +0 -21
  421. package/.claude/rules/nccgs-unity-code.md +0 -22
  422. package/.claude/skills/accessibility-review/SKILL.md +0 -22
  423. package/.claude/skills/accessibility-review/references/astra.md +0 -17
  424. package/.claude/skills/accessibility-review/references/legacy.md +0 -7
  425. package/.claude/skills/architecture-decision/SKILL.md +0 -22
  426. package/.claude/skills/architecture-decision/references/astra.md +0 -12
  427. package/.claude/skills/architecture-decision/references/legacy.md +0 -7
  428. package/.claude/skills/asset-audit/SKILL.md +0 -22
  429. package/.claude/skills/asset-audit/references/astra.md +0 -17
  430. package/.claude/skills/asset-audit/references/legacy.md +0 -7
  431. package/.claude/skills/audit/SKILL.md +0 -22
  432. package/.claude/skills/audit/references/astra.md +0 -17
  433. package/.claude/skills/audit/references/dimensions.md +0 -46
  434. package/.claude/skills/audit/references/legacy.md +0 -9
  435. package/.claude/skills/balance-review/SKILL.md +0 -22
  436. package/.claude/skills/balance-review/references/astra.md +0 -17
  437. package/.claude/skills/balance-review/references/legacy.md +0 -7
  438. package/.claude/skills/bug-triage/SKILL.md +0 -22
  439. package/.claude/skills/bug-triage/references/astra.md +0 -27
  440. package/.claude/skills/bug-triage/references/legacy.md +0 -7
  441. package/.claude/skills/build-live-game/SKILL.md +0 -317
  442. package/.claude/skills/build-live-game/references/cloud-code.md +0 -563
  443. package/.claude/skills/closure/SKILL.md +0 -22
  444. package/.claude/skills/closure/references/astra.md +0 -15
  445. package/.claude/skills/closure/references/legacy.md +0 -7
  446. package/.claude/skills/compatibility-review/SKILL.md +0 -22
  447. package/.claude/skills/compatibility-review/references/astra.md +0 -17
  448. package/.claude/skills/compatibility-review/references/legacy.md +0 -7
  449. package/.claude/skills/context-pack/SKILL.md +0 -22
  450. package/.claude/skills/context-pack/references/astra.md +0 -12
  451. package/.claude/skills/context-pack/references/legacy.md +0 -7
  452. package/.claude/skills/dependency-review/SKILL.md +0 -22
  453. package/.claude/skills/dependency-review/references/astra.md +0 -17
  454. package/.claude/skills/dependency-review/references/legacy.md +0 -7
  455. package/.claude/skills/design/SKILL.md +0 -24
  456. package/.claude/skills/design/references/astra.md +0 -12
  457. package/.claude/skills/design/references/legacy.md +0 -13
  458. package/.claude/skills/design-review/SKILL.md +0 -24
  459. package/.claude/skills/design-review/references/astra.md +0 -17
  460. package/.claude/skills/design-review/references/legacy.md +0 -7
  461. package/.claude/skills/evidence-review/SKILL.md +0 -22
  462. package/.claude/skills/evidence-review/references/astra.md +0 -17
  463. package/.claude/skills/evidence-review/references/legacy.md +0 -7
  464. package/.claude/skills/hotfix/SKILL.md +0 -22
  465. package/.claude/skills/hotfix/references/astra.md +0 -30
  466. package/.claude/skills/hotfix/references/legacy.md +0 -7
  467. package/.claude/skills/incident-recovery/SKILL.md +0 -22
  468. package/.claude/skills/incident-recovery/references/astra.md +0 -27
  469. package/.claude/skills/incident-recovery/references/legacy.md +0 -7
  470. package/.claude/skills/levelplay-unity-integration/SKILL.md +0 -1126
  471. package/.claude/skills/localization/SKILL.md +0 -135
  472. package/.claude/skills/localization/resources/L10nBatchProcessor.cs +0 -69
  473. package/.claude/skills/localize-game/SKILL.md +0 -22
  474. package/.claude/skills/localize-game/references/astra.md +0 -27
  475. package/.claude/skills/localize-game/references/legacy.md +0 -7
  476. package/.claude/skills/migrate-project/SKILL.md +0 -22
  477. package/.claude/skills/migrate-project/references/astra.md +0 -30
  478. package/.claude/skills/migrate-project/references/legacy.md +0 -19
  479. package/.claude/skills/migrate-project/references/procedure.md +0 -96
  480. package/.claude/skills/milestone-review/SKILL.md +0 -22
  481. package/.claude/skills/milestone-review/references/astra.md +0 -12
  482. package/.claude/skills/milestone-review/references/legacy.md +0 -7
  483. package/.claude/skills/nccgs-code-review/SKILL.md +0 -22
  484. package/.claude/skills/nccgs-code-review/references/astra.md +0 -21
  485. package/.claude/skills/nccgs-code-review/references/legacy.md +0 -7
  486. package/.claude/skills/new-unity-project/SKILL.md +0 -179
  487. package/.claude/skills/performance-audit/SKILL.md +0 -22
  488. package/.claude/skills/performance-audit/references/astra.md +0 -17
  489. package/.claude/skills/performance-audit/references/legacy.md +0 -7
  490. package/.claude/skills/physics-3d-collision/references/troubleshooting.md +0 -41
  491. package/.claude/skills/plan-feature/SKILL.md +0 -22
  492. package/.claude/skills/plan-feature/references/astra.md +0 -12
  493. package/.claude/skills/plan-feature/references/legacy.md +0 -7
  494. package/.claude/skills/playtest/SKILL.md +0 -22
  495. package/.claude/skills/playtest/references/astra.md +0 -31
  496. package/.claude/skills/playtest/references/legacy.md +0 -7
  497. package/.claude/skills/project-stage/SKILL.md +0 -22
  498. package/.claude/skills/project-stage/references/astra.md +0 -12
  499. package/.claude/skills/project-stage/references/legacy.md +0 -7
  500. package/.claude/skills/prototype-feature/SKILL.md +0 -22
  501. package/.claude/skills/prototype-feature/references/astra.md +0 -31
  502. package/.claude/skills/prototype-feature/references/legacy.md +0 -7
  503. package/.claude/skills/qa-plan/SKILL.md +0 -22
  504. package/.claude/skills/qa-plan/references/astra.md +0 -12
  505. package/.claude/skills/qa-plan/references/legacy.md +0 -7
  506. package/.claude/skills/release/SKILL.md +0 -22
  507. package/.claude/skills/release/references/astra.md +0 -30
  508. package/.claude/skills/release/references/legacy.md +0 -11
  509. package/.claude/skills/release-readiness/SKILL.md +0 -22
  510. package/.claude/skills/release-readiness/references/astra.md +0 -17
  511. package/.claude/skills/release-readiness/references/legacy.md +0 -7
  512. package/.claude/skills/retrospective/SKILL.md +0 -22
  513. package/.claude/skills/retrospective/references/astra.md +0 -12
  514. package/.claude/skills/retrospective/references/legacy.md +0 -7
  515. package/.claude/skills/review/SKILL.md +0 -22
  516. package/.claude/skills/review/references/astra.md +0 -21
  517. package/.claude/skills/review/references/legacy.md +0 -9
  518. package/.claude/skills/security-audit/SKILL.md +0 -22
  519. package/.claude/skills/security-audit/references/astra.md +0 -17
  520. package/.claude/skills/security-audit/references/legacy.md +0 -7
  521. package/.claude/skills/sprint-plan/SKILL.md +0 -22
  522. package/.claude/skills/sprint-plan/references/astra.md +0 -12
  523. package/.claude/skills/sprint-plan/references/legacy.md +0 -7
  524. package/.claude/skills/status/SKILL.md +0 -22
  525. package/.claude/skills/status/references/astra.md +0 -19
  526. package/.claude/skills/status/references/legacy.md +0 -9
  527. package/.claude/skills/story-readiness/SKILL.md +0 -24
  528. package/.claude/skills/story-readiness/references/astra.md +0 -17
  529. package/.claude/skills/story-readiness/references/legacy.md +0 -7
  530. package/.claude/skills/test/SKILL.md +0 -22
  531. package/.claude/skills/test/references/astra.md +0 -27
  532. package/.claude/skills/test/references/legacy.md +0 -9
  533. package/.claude/skills/ui-review/SKILL.md +0 -22
  534. package/.claude/skills/ui-review/references/astra.md +0 -17
  535. package/.claude/skills/ui-review/references/legacy.md +0 -7
  536. package/.claude/skills/unity-cli/CHANGELOG.md +0 -233
  537. package/.claude/skills/unity-cli/SECURITY.md +0 -22
  538. package/.claude/skills/unity-cli/SKILL.md +0 -414
  539. package/.claude/skills/unity-cli/references/auth-license-cloud.md +0 -146
  540. package/.claude/skills/unity-cli/references/build-run-test.md +0 -349
  541. package/.claude/skills/unity-cli/references/config-hub.md +0 -103
  542. package/.claude/skills/unity-cli/references/diagnostics-maintenance.md +0 -326
  543. package/.claude/skills/unity-cli/references/editors-install.md +0 -327
  544. package/.claude/skills/unity-cli/references/integration-advanced.md +0 -472
  545. package/.claude/skills/unity-cli/references/projects-templates.md +0 -574
  546. package/.claude/skills/work/SKILL.md +0 -22
  547. package/.claude/skills/work/references/astra.md +0 -32
  548. package/.claude/skills/work/references/classification.md +0 -41
  549. package/.claude/skills/work/references/closure.md +0 -60
  550. package/.claude/skills/work/references/feature-contracts.md +0 -36
  551. package/.claude/skills/work/references/legacy.md +0 -29
  552. package/.claude/skills/work/references/verification.md +0 -26
  553. package/CLAUDE.md +0 -10
  554. package/MEMORY.md +0 -109
  555. package/UPGRADING.md +0 -130
  556. package/VERSION +0 -1
  557. package/docs/ARCHITECTURE.md +0 -131
  558. package/docs/ASSET-PRODUCTION-GRAPHIFY-PLAN.md +0 -230
  559. package/docs/BOUNDED-REPAIR.md +0 -80
  560. package/docs/EDITOR-SESSION-EVIDENCE.md +0 -52
  561. package/docs/HANDOFF-AUTOMATION.md +0 -144
  562. package/docs/HUONG-DAN-MIGRATE-VA-SU-DUNG.md +0 -117
  563. package/docs/MIGRATION-MATRIX.md +0 -23
  564. package/docs/NCCGS-1.3.md +0 -13
  565. package/docs/NCCGS-1.4.1.md +0 -149
  566. package/docs/NCCGS-1.4.md +0 -184
  567. package/docs/NCCGS-1.5-IMPLEMENTATION-PLAN.md +0 -378
  568. package/docs/NCCGS-1.5-PILOT.md +0 -130
  569. package/docs/NCCGS-1.5.md +0 -237
  570. package/docs/PHASE-1-OPERATIONS.md +0 -278
  571. package/docs/PHASE-2-OPERATIONS.md +0 -183
  572. package/docs/PROJECT-POLICY.md +0 -94
  573. package/docs/RELEASE-STATUS.md +0 -150
  574. package/docs/TASK-SLICING.md +0 -57
  575. package/docs/UNINSTALL.md +0 -134
  576. package/docs/UPGRADE-QUALIFICATION.md +0 -45
  577. package/docs/WFK17-HOOK-REPAIR.md +0 -71
  578. package/docs/WORKFLOWS.md +0 -85
  579. package/package-assets/nccgs-project.gitignore +0 -2
  580. package/package-assets/setup-vivox-voice-chat-evals.gitignore +0 -7
  581. package/scaffold/.nccgs/autonomy.json +0 -4
  582. package/scaffold/.nccgs/bugs/.gitkeep +0 -1
  583. package/scaffold/.nccgs/closures/.gitkeep +0 -1
  584. package/scaffold/.nccgs/context/.gitkeep +0 -1
  585. package/scaffold/.nccgs/decisions/.gitkeep +0 -1
  586. package/scaffold/.nccgs/evidence/.gitkeep +0 -1
  587. package/scaffold/.nccgs/execution.json +0 -10
  588. package/scaffold/.nccgs/features/.gitkeep +0 -1
  589. package/scaffold/.nccgs/gates.json +0 -7
  590. package/scaffold/.nccgs/inputs.json +0 -6
  591. package/scaffold/.nccgs/migrations/.gitkeep +0 -1
  592. package/scaffold/.nccgs/playtests/.gitkeep +0 -1
  593. package/scaffold/.nccgs/project.yaml +0 -109
  594. package/scaffold/.nccgs/requirements.yaml +0 -10
  595. package/scaffold/.nccgs/reviews/.gitkeep +0 -1
  596. package/scaffold/.nccgs/state.md +0 -40
  597. package/scaffold/.nccgs/templates/agent-handoff.md +0 -37
  598. package/scaffold/.nccgs/templates/architecture-decision.md +0 -27
  599. package/scaffold/.nccgs/templates/closure-record.md +0 -62
  600. package/scaffold/.nccgs/templates/context-packet.yaml +0 -17
  601. package/scaffold/.nccgs/templates/design-contract.json +0 -34
  602. package/scaffold/.nccgs/templates/evidence-record.md +0 -23
  603. package/scaffold/.nccgs/templates/feature-contract.md +0 -60
  604. package/scaffold/.nccgs/templates/implementation-report.md +0 -52
  605. package/scaffold/.nccgs/templates/migration-plan.md +0 -40
  606. package/scaffold/.nccgs/templates/repair-packet.json +0 -14
  607. package/scaffold/.nccgs/templates/repair-unity-code.json +0 -18
  608. package/scaffold/.nccgs/templates/repair-unity-editor.json +0 -21
  609. package/scaffold/.nccgs/templates/task-slices.json +0 -28
  610. package/scaffold/.nccgs/templates/waiver.md +0 -11
  611. package/scripts/benchmark-snapshot.mjs +0 -205
  612. package/scripts/benchmark-v15.mjs +0 -173
  613. package/scripts/cli.mjs +0 -205
  614. package/scripts/doctor.mjs +0 -261
  615. package/scripts/install.mjs +0 -530
  616. package/scripts/recover-session.mjs +0 -89
  617. package/scripts/run.mjs +0 -86
  618. package/scripts/supervise.mjs +0 -152
  619. package/scripts/uninstall.mjs +0 -292
  620. package/scripts/validate.mjs +0 -285
  621. package/scripts/work-handoff.mjs +0 -38
  622. package/tests/autonomy.test.mjs +0 -126
  623. package/tests/benchmark-v15.test.mjs +0 -65
  624. package/tests/design-readiness.test.mjs +0 -200
  625. package/tests/editor-session-evidence.test.mjs +0 -45
  626. package/tests/evidence.test.mjs +0 -186
  627. package/tests/fixtures/compiler-shutdown.cs +0 -67
  628. package/tests/fixtures/native-provider.mjs +0 -61
  629. package/tests/framework.test.mjs +0 -740
  630. package/tests/gates.test.mjs +0 -479
  631. package/tests/hook-repair.test.mjs +0 -106
  632. package/tests/lifecycle-v15.test.mjs +0 -346
  633. package/tests/native-completion-notices.test.mjs +0 -181
  634. package/tests/orchestration-v15.test.mjs +0 -596
  635. package/tests/phase1.test.mjs +0 -427
  636. package/tests/phase2.test.mjs +0 -250
  637. package/tests/policy-v15.test.mjs +0 -234
  638. package/tests/ponytail-package.test.mjs +0 -75
  639. package/tests/returned-handoff-notices.test.mjs +0 -170
  640. package/tests/review-budget.test.mjs +0 -177
  641. package/tests/runtime-v15.test.mjs +0 -1198
  642. package/tests/session-budget.test.mjs +0 -34
  643. package/tests/task-slices.test.mjs +0 -285
  644. package/tests/uninstall.test.mjs +0 -477
  645. package/tests/unity-generated.test.mjs +0 -140
  646. package/tests/unity-transport.test.mjs +0 -348
  647. /package/{.claude/nccgs/packages → template}/ponytail/LICENSE +0 -0
  648. /package/{.claude/nccgs/packages → template}/ponytail/NOTICE.md +0 -0
  649. /package/{.claude/nccgs/packages → template}/ponytail/complexity-review.md +0 -0
  650. /package/{.claude/skills → unity-skills}/build-live-game/references/remote-config.md +0 -0
  651. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/README.md +0 -0
  652. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/codeless-catalog.md +0 -0
  653. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-adapty.md +0 -0
  654. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-essentialkit.md +0 -0
  655. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-revenuecat.md +0 -0
  656. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-unipay.md +0 -0
  657. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/migration-v4-to-v5.md +0 -0
  658. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-add-iap-to-new-project.md +0 -0
  659. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-convert-native-storekit.md +0 -0
  660. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/platform-notes.md +0 -0
  661. /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/pre-check.md +0 -0
  662. /package/{.claude/skills → unity-skills}/localization/resources/LocalizedFontAsset.cs +0 -0
  663. /package/{.claude/skills → unity-skills}/optimize-audio/resources/platform-settings.md +0 -0
  664. /package/{.claude/skills → unity-skills}/optimize-web/resources/WebOptimizer.cs +0 -0
  665. /package/{.claude/skills → unity-skills}/optimize-web/resources/toktx-examples.sh +0 -0
  666. /package/{.claude/skills → unity-skills}/physics-3d-collision/resources/CollisionDebugger.cs +0 -0
  667. /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/dgs-entrypoint.md +0 -0
  668. /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/entrypoints.md +0 -0
  669. /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/examples.md +0 -0
  670. /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/implementation-fit.md +0 -0
  671. /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/underlying-services.md +0 -0
  672. /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/workflows-prerequisites.md +0 -0
  673. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/.env.example +0 -0
  674. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/README.md +0 -0
  675. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/promptfooconfig.yaml +0 -0
  676. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/tests/init-and-login.yaml +0 -0
  677. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/tests/text-chat.yaml +0 -0
  678. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/tests/voice-channels.yaml +0 -0
  679. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/events-and-participants.md +0 -0
  680. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/init-and-login.md +0 -0
  681. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/text-chat.md +0 -0
  682. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/troubleshooting.md +0 -0
  683. /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/voice-channels.md +0 -0
  684. /package/{.claude/skills → unity-skills}/shader-graph-create-custom-node/resources/all_hints.hlsl +0 -0
  685. /package/{.claude/skills → unity-skills}/sprite-editor/references/api_reference.md +0 -0
  686. /package/{.claude/skills → unity-skills}/sprite-editor/references/background.md +0 -0
  687. /package/{.claude/skills → unity-skills}/sprite-editor/scripts/AutomaticSliceTexture.cs +0 -0
  688. /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GenerateNewSpriteRects.cs +0 -0
  689. /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GetTextureSourceImageSize.cs +0 -0
  690. /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GetTextureToSlice.cs +0 -0
  691. /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GridSliceTexture.cs +0 -0
  692. /package/{.claude/skills → unity-skills}/sprite-editor/scripts/IsometricSliceTexture.cs +0 -0
  693. /package/{.claude/skills → unity-skills}/sprite-editor/scripts/README.md +0 -0
  694. /package/{.claude/skills → unity-skills}/sprite-editor/scripts/SetPivotExample.cs +0 -0
  695. /package/{.claude/skills → unity-skills}/sprite-editor/scripts/SpriteToPng.cs +0 -0
  696. /package/{.claude/skills → unity-skills}/ui-imgui/references/gui-elements.md +0 -0
  697. /package/{.claude/skills → unity-skills}/ui-imgui/references/templates.md +0 -0
  698. /package/{.claude/skills → unity-skills}/ui-ugui/references/scrollview-setup.md +0 -0
  699. /package/{.claude/skills → unity-skills}/ui-uitk/references/common-issues.md +0 -0
  700. /package/{.claude/skills → unity-skills}/ui-uitk/references/painter2d.md +0 -0
  701. /package/{.claude/skills → unity-skills}/ui-uitk/references/pointermanipulator-guide.md +0 -0
  702. /package/{.claude/skills → unity-skills}/ui-uitk/references/svg-icons.md +0 -0
  703. /package/{.claude/skills → unity-skills}/ui-uitk/references/ui-runtime-binding.md +0 -0
  704. /package/{.claude/skills → unity-skills}/ui-uitk/references/uss-guide.md +0 -0
  705. /package/{.claude/skills → unity-skills}/urp-postprocessing/references/effect-reference.md +0 -0
@@ -1,126 +1,42 @@
1
- import crypto from "node:crypto";
1
+ #!/usr/bin/env node
2
+ // Sync the vendored Unity skills from a local clone of Unity-Technologies/skills and pin the commit.
3
+ // git clone https://github.com/Unity-Technologies/skills upstream-skills
4
+ // node scripts/sync-unity-skills.mjs --from upstream-skills [--only unity-cli,ui]
2
5
  import fs from "node:fs";
3
- import os from "node:os";
4
6
  import path from "node:path";
7
+ import { spawnSync } from "node:child_process";
5
8
  import { fileURLToPath } from "node:url";
9
+ import { walk, sha256File, toPosix, writeJson, readJson } from "../runtime/core/fs.mjs";
6
10
 
7
- const scriptDir = path.dirname(fileURLToPath(import.meta.url));
8
- const root = path.resolve(scriptDir, "..");
11
+ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
9
12
  const args = process.argv.slice(2);
10
- const dryRun = args.includes("--dry-run");
11
- const sourceIndex = args.indexOf("--source");
12
-
13
- if (sourceIndex < 0 || !args[sourceIndex + 1]) {
14
- console.error("Usage: node scripts/sync-unity-skills.mjs --source <UnitySkills directory> [--dry-run]");
15
- process.exit(2);
16
- }
17
-
18
- const source = path.resolve(args[sourceIndex + 1]);
19
- if (!fs.existsSync(source) || !fs.statSync(source).isDirectory()) {
20
- console.error(`Unity Skills source directory does not exist: ${source}`);
21
- process.exit(2);
22
- }
23
-
24
- const reserved = new Set(["work", "design", "audit", "migrate-project", "test", "review", "release", "status"]);
25
- const skillNames = fs.readdirSync(source, { withFileTypes: true })
26
- .filter((entry) => entry.isDirectory() && fs.existsSync(path.join(source, entry.name, "SKILL.md")))
27
- .map((entry) => entry.name)
28
- .sort((a, b) => a.localeCompare(b));
29
-
30
- if (!skillNames.length) {
31
- console.error(`No Unity Skills containing SKILL.md were found in: ${source}`);
32
- process.exit(2);
33
- }
34
-
35
- for (const name of skillNames) {
36
- if (reserved.has(name)) {
37
- console.error(`Unity Skill collides with an NCCGS public skill: ${name}`);
38
- process.exit(2);
13
+ const val = f => { const i = args.indexOf(f); return i >= 0 ? args[i + 1] : undefined; };
14
+ const from = val("--from"); if (!from) { console.error("--from <clone of Unity-Technologies/skills> is required"); process.exit(2); }
15
+ const only = val("--only")?.split(",").map(s => s.trim()).filter(Boolean);
16
+ const srcSkills = path.join(from, "skills");
17
+ if (!fs.existsSync(srcSkills)) { console.error(`${srcSkills} not found`); process.exit(2); }
18
+ const rev = spawnSync("git", ["-C", from, "rev-parse", "HEAD"], { encoding: "utf8" }).stdout.trim() || "unknown-local-copy";
19
+ const out = path.join(root, "unity-skills");
20
+ const previous = readJson(path.join(out, "manifest.json"), { skills: [] });
21
+ const names = only ?? fs.readdirSync(srcSkills).filter(n => fs.existsSync(path.join(srcSkills, n, "SKILL.md")));
22
+ const skills = [];
23
+ for (const name of names) {
24
+ const dir = path.join(srcSkills, name);
25
+ if (!fs.existsSync(dir)) { console.error(`skip ${name}: not upstream`); continue; }
26
+ fs.rmSync(path.join(out, name), { recursive: true, force: true });
27
+ const files = [];
28
+ for (const file of walk(dir)) {
29
+ const rel = toPosix(path.relative(dir, file));
30
+ if (rel.startsWith(".git/") || rel === ".gitignore") continue;
31
+ const dst = path.join(out, name, rel);
32
+ fs.mkdirSync(path.dirname(dst), { recursive: true });
33
+ fs.copyFileSync(file, dst);
34
+ files.push({ path: rel, sha256: sha256File(dst) });
39
35
  }
36
+ skills.push({ name, files });
40
37
  }
41
-
42
- const skillsRoot = path.join(root, ".claude", "skills");
43
- const manifestPath = path.join(root, ".claude", "nccgs", "unity-skills-manifest.json");
44
- let previous = { skills: [] };
45
- if (fs.existsSync(manifestPath)) {
46
- previous = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
47
- }
48
- const previousNames = new Set((previous.skills ?? []).map((item) => item.name));
49
-
50
- for (const name of skillNames) {
51
- const destination = path.join(skillsRoot, name);
52
- if (fs.existsSync(destination) && !previousNames.has(name)) {
53
- console.error(`Destination collides with a non-vendored skill: .claude/skills/${name}`);
54
- process.exit(2);
55
- }
56
- }
57
-
58
- console.log(`${dryRun ? "Would sync" : "Syncing"} ${skillNames.length} Unity Skills from ${source}`);
59
- for (const name of skillNames) console.log(`- ${name}`);
60
- if (dryRun) process.exit(0);
61
-
62
- fs.mkdirSync(skillsRoot, { recursive: true });
63
- fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
64
-
65
- const stamp = new Date().toISOString().replace(/[:.]/g, "-");
66
- const stage = fs.mkdtempSync(path.join(os.tmpdir(), "nccgs-unity-skills-"));
67
- const backupRoot = path.join(root, ".nccgs-maintenance", "unity-skills-backups", stamp);
68
-
69
- try {
70
- for (const name of skillNames) {
71
- fs.cpSync(path.join(source, name), path.join(stage, name), { recursive: true });
72
- }
73
-
74
- for (const name of new Set([...previousNames, ...skillNames])) {
75
- const destination = path.join(skillsRoot, name);
76
- if (!fs.existsSync(destination)) continue;
77
- fs.mkdirSync(backupRoot, { recursive: true });
78
- fs.renameSync(destination, path.join(backupRoot, name));
79
- }
80
-
81
- for (const name of skillNames) {
82
- fs.cpSync(path.join(stage, name), path.join(skillsRoot, name), { recursive: true });
83
- }
84
-
85
- const manifest = {
86
- schema_version: 1,
87
- source_repository: "https://github.com/Unity-Technologies/skills",
88
- source_label: path.basename(source),
89
- source_revision: "unknown-local-copy",
90
- synced_at: new Date().toISOString(),
91
- license: "Unity Companion License for Unity-dependent projects",
92
- license_url: "https://unity3d.com/legal/licenses/unity_companion_license",
93
- policy: "Vendored files are upstream-managed and must remain unmodified.",
94
- skills: skillNames.map((name) => ({
95
- name,
96
- files: walk(path.join(skillsRoot, name)).map((file) => ({
97
- path: posix(path.relative(path.join(skillsRoot, name), file)),
98
- bytes: fs.statSync(file).size,
99
- sha256: crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex"),
100
- })),
101
- })),
102
- };
103
- fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
104
- console.log(`Unity Skills manifest written: ${manifestPath}`);
105
- if (fs.existsSync(backupRoot)) console.log(`Previous snapshot backed up: ${backupRoot}`);
106
- } catch (error) {
107
- console.error(`Unity Skills sync failed: ${error.message}`);
108
- console.error(`The package may be restored from: ${backupRoot}`);
109
- process.exit(1);
110
- } finally {
111
- if (fs.existsSync(stage)) fs.rmSync(stage, { recursive: true, force: true });
112
- }
113
-
114
- function walk(directory) {
115
- const output = [];
116
- for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
117
- const full = path.join(directory, entry.name);
118
- if (entry.isDirectory()) output.push(...walk(full));
119
- else if (entry.isFile()) output.push(full);
120
- }
121
- return output.sort((a, b) => a.localeCompare(b));
122
- }
123
-
124
- function posix(value) {
125
- return value.split(path.sep).join("/");
126
- }
38
+ // keep previously vendored skills that were not re-synced (when --only was used)
39
+ for (const s of previous.skills) if (!skills.some(x => x.name === s.name) && only) skills.push(s);
40
+ skills.sort((a, b) => a.name.localeCompare(b.name));
41
+ writeJson(path.join(out, "manifest.json"), { schema_version: 2, source_repository: "https://github.com/Unity-Technologies/skills", source_label: "UnitySkills", source_revision: rev, synced_at: new Date().toISOString(), license: "Unity Companion License for Unity-dependent projects", license_url: "https://unity3d.com/legal/licenses/unity_companion_license", policy: "Vendored files are upstream-managed and must remain unmodified.", skills });
42
+ console.log(`synced ${skills.length} skills at ${rev}`);
@@ -0,0 +1,39 @@
1
+ # NCCGS project rules
2
+
3
+ This Unity project runs under NCCGS 3: a task is done when the game has run and been looked at, not when the code has been written.
4
+
5
+ ## Source of truth, in this order
6
+ 1. The user's current instruction.
7
+ 2. `.nccgs/state.md` (decisions and recent tasks) and the project's own design documents.
8
+ 3. The open task's contract (`.nccgs/tasks/<id>.json`): criteria, files in scope, rigor.
9
+ 4. Existing project code and test patterns.
10
+ 5. `.claude/nccgs/protocols/*.md`, then the official Unity Skills in `.claude/skills/`, then your own inference.
11
+
12
+ ## Skills
13
+ `/brainstorm` → `/map-systems` → `/vertical-slice` for a new game or a multi-task feature (brief, systems map + slice plan, then `/work` per planned task). `/unity-foundation` on a fresh project. `/playtest` for feel and tuning (telemetry + playtester judgement + user decision). `/art-bible` and `/asset-spec` before and after art. `/status` for where we are. `/feedback` when something went wrong or after a few days of use.
14
+
15
+ ## The loop (skill `/work`)
16
+ Brief → options for the user when the decision is subjective → `task open` → edit → `task verify` → **look at the screenshots and console** → fix or ask → `task review` (rigor ≥ production) → `task close` → report.
17
+ `task close` is the only thing that makes a task DONE. Reporting `partial` or `blocked` honestly is always allowed.
18
+
19
+ ## Unity
20
+ - Transport is the Unity CLI and `com.unity.pipeline` only. Never install, configure or call a Unity MCP server.
21
+ - Discover Pipeline command names at runtime (`unity command --detail compact --format json --project-path .`); never hard-code them. Names changed in Pipeline 0.9 (`editor_play` → `editor.playmode start`). See `.claude/nccgs/protocols/unity-cli-notes.md`.
22
+ - Always pass `--editor-version` from `ProjectSettings/ProjectVersion.txt` to `unity test`/`run`/`open`; opening a project with a newer Editor upgrades it irreversibly.
23
+ - Prefer `unity command` (scene, prefab, component, asset groups) over hand-editing `.unity`/`.prefab`/`.asset`/`.meta`.
24
+ - After `editor.playmode start`, wait for `unity status` to report `ready` before the next command.
25
+
26
+ ## Code
27
+ - Read `.claude/nccgs/ponytail/engineering.md` before designing a change: understand the flow, reuse before writing, keep the whole contract.
28
+ - Simplicity rules apply to logic and infrastructure. They never apply to player feedback (VFX, audio, UI animation, juice).
29
+ - Every criterion in a contract has a test or a runtime measurement. Bug fixes get a regression test.
30
+ - Mark deliberate shortcuts `// ponytail: <limit>; revisit when <trigger>` so `task close` can list them.
31
+
32
+ ## Evidence
33
+ - Only `task verify` writes `.nccgs/evidence/measurements/` and `screens/`. You never author evidence.
34
+ - A verdict from the reviewer must name the screenshots it looked at.
35
+ - Observed model/effort is recorded separately from requested model/effort; unknown stays unknown.
36
+
37
+ ## Safety
38
+ - Hooks block destructive git, Unity MCP routes and edits to vendored skills/evidence; they warn on serialized-asset edits. They are guards, not a sandbox: review your own diff before closing.
39
+ - Do not commit, push, publish or change project settings/packages without being asked.
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: nccgs-fast-fix
3
+ description: "Small, local, reversible fix in one or two files while the main session continues other work. Not for gameplay semantics, saves, networking, dependencies or anything player-visible."
4
+ tools: Read, Glob, Grep, Bash, Write, Edit
5
+ model: {{model}}
6
+ {{effort_line}}maxTurns: 40
7
+ ---
8
+
9
+ Make the smallest change that satisfies the one requirement in your prompt (mode {{mode}}). Inspect the affected code and its direct callers, change it, run the targeted test with `node .claude/nccgs/runtime/task/task.mjs verify --id <task> --kind tests --filter <name>`, and report the diff and the result. If the fix needs a design decision, a new dependency, or touches a scene/prefab, stop and hand back instead.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: nccgs-implementer
3
+ description: "Implements one NCCGS task contract in a Unity project with a clean context: edits code and assets, runs `task verify`, looks at the results, fixes, and hands back. Use for tasks too large for the main session to hold."
4
+ tools: Read, Glob, Grep, Bash, Write, Edit
5
+ model: {{model}}
6
+ {{effort_line}}maxTurns: 150
7
+ ---
8
+
9
+ You implement one task contract (mode {{mode}}). The prompt gives you the task id, the criteria, the files in scope and how to try the result. Read `CLAUDE.md` and `.claude/nccgs/protocols/unity-cli-notes.md` first; read `.claude/nccgs/ponytail/engineering.md` before designing the change.
10
+
11
+ Loop until the criteria pass or you run out of fix rounds:
12
+
13
+ 1. Understand the affected flow before editing (callers, shared state, serialization).
14
+ 2. Edit only files in scope. Prefer `unity command` for scenes, prefabs and components over hand-editing YAML.
15
+ 3. Run `node .claude/nccgs/runtime/task/task.mjs verify --id <task> --kind tests` and, when the change is player-visible, `--kind observe --keys <keys>`.
16
+ 4. Look: open the screenshots the verify step produced and read the console summary. Decide from what you see, not from what you expect.
17
+ 5. Fix objective failures (`task fix --id <task>` counts the round). Subjective doubts go back to the coordinator as a question with 2-4 options, not a guess.
18
+
19
+ Hand back: what changed (files), the verify results, open questions, and what a person should try in the Editor. Do not declare DONE; the coordinator closes the task after review.
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: nccgs-playtester
3
+ description: "Reads playtest telemetry and screenshots and judges feel with evidence. Runs scripted playtests through the task CLI when asked. Does not edit code."
4
+ tools: Read, Glob, Grep, Bash
5
+ model: {{model}}
6
+ {{effort_line}}maxTurns: 60
7
+ ---
8
+
9
+ You judge how the game plays, from evidence, for the question in your prompt (for example "does forgiveness feel fair or too easy?"). Mode {{mode}}.
10
+
11
+ 1. If the prompt names a playtest spec and no artifact yet: `node .claude/nccgs/runtime/task/task.mjs verify --id <task> --kind playtest --spec <spec>`; for a visual question also `... --kind observe --shots <ms,...>`.
12
+ 2. Read the artifact under `.nccgs/evidence/measurements/`: `summary` first, then scan `samples` for the moments that matter (death, first jump, speed changes). Open every screenshot named with the Read tool.
13
+ 3. Compare runs when there are several (different patterns or seeds): same seed, different presses = what the player's timing changes.
14
+
15
+ Report in this order: what was run (presses, duration, seed), what the numbers say (distance, time of death and its cause if a probe shows it, counts), what the screens show, your judgement on the question with the evidence that supports it, then 2–4 concrete options for the person with the trade-off of each (tuning numbers, a rule change, keep as is). Do not change code or numbers yourself, do not leave Play Mode running, and never present a guess as a measurement.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: nccgs-reviewer
3
+ description: "Independent reviewer with a clean context. Reads the diff, the screenshots and the measurements for one NCCGS task and returns a verdict file. Never implements fixes."
4
+ tools: Read, Glob, Grep, Bash
5
+ model: {{model}}
6
+ {{effort_line}}maxTurns: 200
7
+ ---
8
+
9
+ You are the independent reviewer for an NCCGS task (mode {{mode}}). You did not write this change and you have not seen the conversation that produced it; that is the point.
10
+
11
+ Your input is a prompt file under `.nccgs/evidence/review/<task>-prompt.md`. Follow it exactly:
12
+
13
+ 1. Read every file in scope and every changed file it lists. Read the Unity scripts, not just the diff.
14
+ 2. Open every screenshot it lists with the Read tool and describe what you see before judging. A verdict that does not list the screens you viewed is rejected by the ledger.
15
+ 3. Check each criterion against the evidence artifacts (`.nccgs/evidence/measurements/*.json`): is the evidence real, produced by Unity, and does it match the snapshot in the prompt?
16
+ 4. Apply the complexity pass in `.claude/nccgs/ponytail/complexity-review.md` to logic and infrastructure code only. Never ask for less feedback to the player (VFX, audio, UI animation, juice) in the name of simplicity.
17
+ 5. Bash is for read-only inspection (`git diff`, `git log`, `unity command ... get/status`). Do not edit, do not run Play Mode, do not fix anything.
18
+
19
+ Write the verdict JSON exactly where the prompt says, with `verdict`, `snapshot`, `summary`, `screensViewed`, `findings[]` (severity BLOCKER | HIGH | MEDIUM | LOW, title, file, detail). PASS only when every criterion passes on that snapshot and no HIGH/BLOCKER finding is open. Then reply with two sentences: the verdict and the single most important finding.
@@ -0,0 +1,9 @@
1
+ ---
2
+ name: nccgs-scout
3
+ description: "Read-only scout: answers one factual question about the codebase or project (where is X, what calls Y, which prefab uses Z) without polluting the main context."
4
+ tools: Read, Glob, Grep, Bash
5
+ model: {{model}}
6
+ {{effort_line}}maxTurns: 30
7
+ ---
8
+
9
+ Answer the one question in your prompt with file paths and line references (mode {{mode}}). Bash is for read-only commands only (`grep`, `git log`, `unity command ... get/find`). Reply in at most ten lines: the answer, the evidence, and anything that contradicts it. Do not edit files.
@@ -0,0 +1,8 @@
1
+ # Ponytail (adapted) in NCCGS 3
2
+
3
+ Two modules borrowed and adapted from Ponytail by DietrichGebert (MIT, see LICENSE and NOTICE.md):
4
+
5
+ - `engineering.md` - read before designing or implementing a change: understand the flow, reuse before writing, keep the whole contract.
6
+ - `complexity-review.md` - the reviewer's extra pass on logic and infrastructure code.
7
+
8
+ NCCGS 3 additions (not upstream): simplicity never applies to player feedback (VFX, audio, UI animation, juice); the Unity reuse ladder prefers packages already in `Packages/manifest.json`, ScriptableObjects over custom config systems, and existing assembly definitions; `// ponytail:` markers are collected by `task close` into the report's deliberate-debt list; tests are never cut in the name of "only what the task needs".
@@ -66,3 +66,13 @@ Report what changed, reuse/root-cause rationale when material, executed evidence
66
66
  unverified behavior and remaining decisions. Keep the existing NCCGS handoff and
67
67
  status format, including COMPLETE versus product PASS. Do not impose a three-line
68
68
  limit, suppress failures or generate an extra report solely for this package.
69
+
70
+ ## NCCGS 3 additions
71
+
72
+ **Player feedback is exempt from simplification.** VFX, audio cues, UI animation, camera shake, hit-stop, particles and other "juice" are part of the requirement even when the brief does not list them. Do not remove or shrink them to shorten a diff; if they are missing from the brief, ask.
73
+
74
+ **Unity reuse ladder.** Before writing infrastructure: (1) a package already in `Packages/manifest.json` (Input System, Cinemachine, Addressables, Localization); (2) a ScriptableObject for data and tuning instead of a custom config system; (3) the existing assembly definitions and folder layout; (4) a built-in Unity feature (Animator, NavMesh, Physics layers) over a hand-rolled one. Verify the version in the manifest before relying on an API.
75
+
76
+ **Tests are not scope.** "Only what the task needs" never means fewer tests: every criterion keeps its test or measurement, and a bug fix keeps its regression test.
77
+
78
+ **Markers.** `// ponytail: <limit and affected behaviour>; revisit when <measurable trigger>; upgrade <path>` is collected by `task close` into the report.
@@ -0,0 +1,52 @@
1
+ # Evidence and criteria
2
+
3
+ A criterion is a claim about the game that an artifact produced by Unity can confirm. Claude writes the criteria at `task open`; `task verify` produces the artifacts; `task close` evaluates them on the current source snapshot.
4
+
5
+ ## Criteria JSON
6
+
7
+ ```json
8
+ [
9
+ {
10
+ "id": "dash-iframe",
11
+ "description": "No damage is taken during the first 0.2 s of a dash",
12
+ "assertions": [
13
+ { "artifact": ".nccgs/evidence/measurements/T-1-tests.json", "pointer": "/failed", "op": "eq", "value": 0 },
14
+ { "artifact": ".nccgs/evidence/measurements/T-1-tests.json", "pointer": "/passed", "op": "gte", "value": 1 }
15
+ ]
16
+ },
17
+ {
18
+ "id": "feel",
19
+ "description": "The dash feels responsive (person decides after playing)",
20
+ "kind": "manual"
21
+ }
22
+ ]
23
+ ```
24
+
25
+ Operators: `eq`, `gte`, `lte`, `range` (`min`/`max`), `contains` (string or array), `exists` (file present and non-empty), `image` (PNG at least 64 px; a single-colour image is valid - an empty scene is blue). `kind: "manual"` criteria are decided by a person at `task close --decide feel=accepted`.
26
+
27
+ ## Artifacts `task verify` produces
28
+
29
+ | `--kind` | Artifact | Fields |
30
+ |---|---|---|
31
+ | `tests` | `measurements/<id>-tests.json` (`--name X` writes `<id>-X.json`, e.g. `--mode playmode --name playmode`) | `source` (pipeline/batch), `total`, `passed`, `failed`, `skipped`, `failures[] {name, message}`, `durationSec`. A live PlayMode run starts async and polls `test status`; a Pipeline-level failure is `ok: false`, never 0/0 |
32
+ | `observe` | `measurements/<id>-observe.json` + `screens/<id>/NN.png` | `enteredPlayMode`, `exitedPlayMode`, `exceptionCount`, `compilationFailed`, `consoleCounts`, `screens[]`, `keys[]`, `keyPresses`, `logMatches` (count of Play Mode log entries matching `--match-log <regex>`), `performance {render, memory, frameTiming}`. `--keys A,B` are pressed once, after the first hold and before frame 1 (frame 1 = the reaction, frame 2 = settled); `--keys-every-frame` repeats them before every frame. **Timed mode** `--shots 380,1200 [--hold-key 60]`: one `script eval` schedules the key down at t=0, key up after `hold-key` ms and a `ScreenCapture` at each offset inside the Editor (`timed: true`, `screens[].atMs`); use it for anything that happens within ~1 s of a press, since each Pipeline round trip costs ~0.9 s. `atMs` counts from the moment the schedule ran, about 2 s after Play (`scheduleDelayMs`); `screens[].gameTimeS` is `Time.timeSinceLevelLoad` at each capture and is the number to quote. `matchLog` records the pattern `logMatches` counted. Run In Background is switched on for the run so an unfocused Editor does not freeze Play Mode |
33
+ | `console` | `measurements/<id>-console.json` | `counts`, `groundTruth.compilationFailed`, `entries[]` |
34
+ | `playtest` (`--spec file`) | `measurements/<id>-playtest-<name>.json` | `presses`, `ranS`, `stoppedEarly`, `summary` per probe (`final`, `min`/`max`, `initial`/`changedAtS`), `samples[]` at 10 Hz, `console`; see `protocols/playtest.md` |
35
+ | `assets` (`--spec file`) | `measurements/<id>-assets.json` | `checked`, `mismatchCount`, `mismatches[] {path, field, expected, actual}`, `assets[]` as the importer reports them |
36
+ | `command` | `measurements/<id>-<name>.json` | `exitCode`, `timedOut`, `stdout`, `stderr` |
37
+
38
+ Every artifact carries the snapshot it was produced on. A snapshot is a content hash of `Assets/`, `Packages/` and `ProjectSettings/` (files the Editor rewrites on its own, such as `ProjectSettings/ShaderGraphSettings.asset`, are excluded; see `files.volatile` in `.nccgs/project.json`), so entering Play Mode does not change it. An artifact older than the current source is `stale`; `task close --outcome success` refuses until `task verify` runs again.
39
+
40
+ Reviewer findings stay attached to the task. After you fix a MEDIUM or LOW finding, record it: `task review --id <id> --resolve <index or title words> --reason "what changed"`; the report shows who resolved it and why. HIGH and BLOCKER findings are resolved only by a new review verdict.
41
+
42
+ ## What makes evidence good
43
+
44
+ - Produced by Unity, not by Claude. Hooks block writes to `measurements/` and `screens/`.
45
+ - Tied to the player's experience: the observe criterion exists so that "tests pass" can never close a task whose scene does not load.
46
+ - Minimal: three to six criteria per task. More criteria mean more time looking at artifacts and less time looking at the game.
47
+ - Honest when missing: `UNVERIFIED` is a status, not a failure to hide.
48
+
49
+ ## Default observe criterion
50
+
51
+ Added automatically at rigor ≥ production when files in scope match scenes, prefabs, UI or shaders:
52
+ `enteredPlayMode == true`, `exceptionCount == 0`, `screens/<id>/01.png` is an image. You can add assertions (for example `performance/frameTiming/cpuFrameTimeMs lte 16.7`) but not remove these at production/release rigor.
@@ -0,0 +1,45 @@
1
+ # Playtest protocol
2
+
3
+ A playtest is a scripted run inside the live Editor with telemetry, produced by `task verify --kind playtest --spec <file>`. The Editor presses the keys, samples the probes and writes the data; nobody types numbers by hand.
4
+
5
+ ## Spec (`.nccgs/design/playtests/<name>.json`)
6
+
7
+ ```json
8
+ {
9
+ "name": "space-every-0.9s",
10
+ "durationS": 30,
11
+ "holdS": 1,
12
+ "sampleMs": 100,
13
+ "pattern": { "key": "Space", "everyS": 0.9, "fromS": 0.5, "holdMs": 60 },
14
+ "probes": [
15
+ { "name": "distance", "expr": "Runner.Instance.DistanceTravelled" },
16
+ { "name": "alive", "expr": "GameState.IsRunning" },
17
+ { "name": "speed", "expr": "Runner.Instance.speed" }
18
+ ],
19
+ "stopWhen": "!GameState.IsRunning",
20
+ "reset": "UnityEngine.SceneManagement.SceneManager.LoadScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene().name)",
21
+ "settleS": 0.5
22
+ }
23
+ ```
24
+
25
+ - The schedule lands 2–3 s after Play started (Pipeline round trips), so the game is already mid-run; `reset` is a C# statement run at schedule time (reload the scene, call your game's restart) and the timeline starts `settleS` later. Every sample carries `gameTime` (`Time.timeSinceLevelLoad`) beside `t`.
26
+
27
+ - `keys: [{ "at": 0.9, "key": "Space", "holdMs": 60 }, ...]` is an explicit timeline; `pattern` expands to one. Key names are Input System `Key` values.
28
+ - `probes[].expr` is a C# expression over the game's public static surface, evaluated every `sampleMs` inside the Editor. A probe that throws samples as `null` instead of failing the run. Keep probes cheap; they run on the main thread.
29
+ - `stopWhen` ends the run early (death, win, menu). `durationS` is the cap.
30
+ - `rules: [{ "name": "jump-near-hazard", "when": "<C# bool expr>", "key": "Space", "holdMs": 60, "cooldownS": 0.3 }]` is reactive input: the key is pressed whenever `when` holds (after the cooldown). A metronome pattern never lines up with hazards; a rule plays like a person. Example for a runner: `"when": "System.Array.Exists(UnityEngine.Object.FindObjectsByType<Hazard>(UnityEngine.FindObjectsSortMode.None), h => h.transform.position.x > -3f && h.transform.position.x < -0.8f)"`. The artifact reports presses per rule (`rulePresses`).
31
+
32
+ ## Artifact (`measurements/<id>-playtest-<name>.json`)
33
+
34
+ `presses`, `plannedPresses`, `ranS`, `stoppedEarly`, `stoppedAtS`, `summary` (`gameTimeStartS`/`gameTimeEndS` and (per probe: `final`, `min`/`max` for numbers, `initial`/`changedAtS` for booleans, so "death time" is `summary.alive.changedAtS`), `samples[]` (the full 10 Hz telemetry), `console` (warnings and errors logged during the run), `csv` (the raw file).
35
+
36
+ ## Criteria on a playtest
37
+
38
+ ```json
39
+ { "artifact": ".nccgs/evidence/measurements/<id>-playtest-space-every-0.9s.json", "pointer": "/summary/distance/final", "op": "gte", "value": 40 }
40
+ { "artifact": "...", "pointer": "/summary/alive/changedAtS", "op": "gte", "value": 8 }
41
+ ```
42
+
43
+ ## Judgement
44
+
45
+ Numbers say what happened; the `nccgs-playtester` agent reads the artifact (and the screenshots, if an observe ran) and answers the feel question with evidence, ending in 2–4 options for the person. Feel decisions are never made by the coordinator alone.
@@ -0,0 +1,34 @@
1
+ # Independent review
2
+
3
+ Review exists to catch what the author cannot see. It is independent because the reviewer runs in a fresh context (the `nccgs-reviewer` subagent) and receives only the ledger's prompt: contract, evidence, changed files, screenshots.
4
+
5
+ ## Flow
6
+
7
+ 1. Coordinator: `task review --id <id>` writes `.nccgs/evidence/review/<id>-prompt.md` and prints the snapshot the review is bound to.
8
+ 2. Coordinator invokes the `nccgs-reviewer` subagent with the prompt file's contents. Nothing else from the conversation.
9
+ 3. Reviewer reads code and artifacts, opens every screenshot, writes `.nccgs/evidence/review/<id>-verdict.json`.
10
+ 4. Coordinator: `task review --id <id> --import [--model <observed>]`. The ledger rejects a verdict that lacks `screensViewed` when screenshots exist, that is not bound to a snapshot, or that says PASS with an open HIGH/BLOCKER finding.
11
+ 5. CHANGES_REQUIRED → fix (`task fix`), `task verify`, new review. A review on an older snapshot does not count for `task close`.
12
+
13
+ ## Verdict file
14
+
15
+ ```json
16
+ {
17
+ "verdict": "PASS | CHANGES_REQUIRED | BLOCKED",
18
+ "snapshot": "<sha from the prompt>",
19
+ "summary": "Two sentences.",
20
+ "screensViewed": [".nccgs/evidence/screens/T-1/01.png"],
21
+ "findings": [
22
+ { "severity": "BLOCKER | HIGH | MEDIUM | LOW", "title": "", "file": "Assets/...", "detail": "", "resolved": false }
23
+ ],
24
+ "model": "the model the reviewer ran as, if known"
25
+ }
26
+ ```
27
+
28
+ ## Rigor
29
+
30
+ prototype: no review. production: one PASS on the current snapshot. release: two PASSes; the second reviewer should run on a different model than the implementer (set `review.model` in `.nccgs/project.json`).
31
+
32
+ ## Model
33
+
34
+ The reviewer's model comes from the active mode. When the requested model is unavailable (for example Fable on an account without it), the subagent call fails; re-run it with the mode's fallback and pass `--model` on import so the report records what actually reviewed. Requested and observed models are never conflated.
@@ -0,0 +1,56 @@
1
+ # Unity CLI notes
2
+
3
+ The official `unity-cli` and `unity-pipeline` skills (vendored, unmodified) are the reference for commands and parameters. This file is the NCCGS overlay: what we measured on real Editors that the skills do not say, and what the runtime relies on.
4
+
5
+ Read this right after the `unity-cli` skill. The vendored skill is upstream's text; this file carries what upstream has not caught up with yet (verified on 2026-11-04 with Unity CLI 1.0.0-beta.14 and com.unity.pipeline 0.9.x on Editors 6000.3.17f1 and 6000.6.7f1). When the skill and this file disagree, this file wins.
6
+
7
+ ## Pipeline 0.9 renamed every command
8
+
9
+ Commands are now `<group> <name>` (two argv tokens). Old flat names fail with "No command named 'editor_play' is available". Discover the catalog at runtime and never hard-code names:
10
+
11
+ ```
12
+ unity command --detail compact --limit 500 --format json --project-path <project> # 166 commands in 37 groups
13
+ unity command --query <text> --format json --project-path <project> # JSON schema per command
14
+ unity command --obsolete-command-names --format json --project-path <project> # old -> new table
15
+ ```
16
+
17
+ The renames you will meet most:
18
+
19
+ | Old | New |
20
+ |---|---|
21
+ | `editor_play` / `editor_stop` | `editor.playmode start` / `editor.playmode stop` |
22
+ | `screenshot` | `capture screenshot` (`--view game|scene --output <abs path> --width --height`) |
23
+ | `eval` / `eval_file` | `script eval --code "<C#>"` / `script eval_file` |
24
+ | `run_tests` / `test_status` / `list_tests` | `test run --mode editor|playmode [--filter]` / `test status` / `test list` |
25
+ | `get_console` / `console_status` / `clear_console` | `console get --tail --level log|warn|error --since` / `console status` / `console clear` |
26
+ | `get_scene_hierarchy` / `save_scene` / `open_scene` | `scene get_hierarchy` / `scene save` / `scene open` |
27
+ | `create_gameobject` / `find_gameobjects` / `set_transform` | `gameobject create` / `gameobject find` / `gameobject set_transform` |
28
+ | `add_component` / `attach_script` / `create_script` / `recompile` | `component add` / `script attach` / `script create` / `script recompile` |
29
+ | `instantiate_prefab` | `prefab instantiate` |
30
+ | `simulate_key` / `simulate_pointer` | `runtime simulate_key --key Space --action press` / `runtime simulate_pointer --x --y` |
31
+ | `batch` | `job batch` (transactional, one Undo step; `job wait` waits server-side for a condition) |
32
+ | `build` / `build_status` | `build run` / `build status` |
33
+
34
+ Other 0.9 changes: `[CliCommand]` takes the group first; Code Reload is now Method Reload (`[MethodReload]`, group `script.methodreload`); each command has its own default timeout and honours `--timeout`.
35
+
36
+ ## The live Editor is the primary target
37
+
38
+ - `unity test <project>` starts a **batch** Editor and fails with exit 6 "already open in a running Editor" when the project is open in the GUI. With an open Editor use Pipeline `test run` instead (returns `Summary {Total, Passed, Failed, Skipped}` and `Results[]` in seconds). NCCGS `task verify --kind tests` chooses automatically from `unity status`.
39
+ - `unity status --format json` lists instances with `projectPath`, `editorVersion`, `port`, `state`. A batch-mode Editor is not listed there; confirm it with `unity command --project-path`.
40
+ - After `editor.playmode start`, Unity 6.3 reloads the domain and the Pipeline server is gone for about 3 s (`EDITOR_NOT_RUNNING`, exit 12). Poll `unity status` until `ready` before the next command. 6.6 did not drop in our runs; wait anyway.
41
+ - Screenshots: `capture screenshot --view game --output <absolute path>` writes the file where you say. `capture game_view --save_path` writes **under `Assets/`** and pollutes the project; avoid it.
42
+ - Input: `runtime simulate_key` delivers key-down and key-up inside **one** Input System update, so polling `Keyboard.current.<key>.wasPressedThisFrame` in `Update` never sees it. Read input through an `InputAction` (`performed` callback) instead; it fires once per press for simulated and real keys alike (verified on 6000.3.17f1, Pipeline 0.9.1). Legacy `Input.GetKeyDown` is not driven at all.
43
+ - `script eval` code is a method body: no `using` directives; fully qualify everything outside `UnityEngine`/`UnityEditor` (`UnityEngine.InputSystem.Keyboard.current`). A lambda registered on `UnityEditor.EditorApplication.update` keeps running after the eval returns, which is how `observe --shots` times key-up and `ScreenCapture.CaptureScreenshot` to the millisecond. `runtime simulate_key --action down|up` exists too, but each call is a ~0.9 s round trip.
44
+ - Play Mode freezes when the Editor window loses focus unless Run In Background is on. `editor.playmode set_run_in_background --enable true|false` overrides the Player Setting for the session and restores it; `observe` does this around every run.
45
+ - `job wait --condition '{member, target?, findType?, op, value}' --on_met '{capture: {...}}'` captures in the same frame a condition first holds (e.g. `Runner.Instance.IsJumping equals true`) and `--return_history` samples the member over time; use it when a frame must match a game state rather than a time offset.
46
+ - PlayMode tests cannot run synchronously over the Pipeline (entering Play Mode drops the request): `test run --mode playmode --async_tests true` then poll `test status` until `completed`. `task verify --kind tests --mode playmode` does this.
47
+ - Console: `console status` gives ground truth without entries (`compilationFailed`, `consoleErrors`, `consoleWarnings`); `console get` returns entries plus a `cursor`/`session` pair to read only new entries next time. This replaces parsing `Editor.log` (`unity logs` is the CLI's own log, not the Editor's).
48
+ - Exit codes: `unity test` 0 pass, 8 tests failed (XML still written), 6 no verdict (compile error, license, project open), 14 timeout.
49
+
50
+ ## Editor versions on one machine
51
+
52
+ Always pass `--editor-version <m_EditorVersion from ProjectSettings/ProjectVersion.txt>` to `unity test`, `unity run` and `unity open`. Without it the CLI may pick a newer installed Editor, and opening a project with a newer Editor upgrades it irreversibly. Never add `--allow-install` to a project command. The Pipeline package needs Unity 6.0+; `capture editor_element`/`runtime_element` need 6000.7+.
53
+
54
+ ## Still true from the skill
55
+
56
+ Install (`unity editors install`), auth, projects, `unity pipeline install --project-path <project>`, build profiles (`build list_profiles` etc., Unity 6 only), and the `com.unity.pipeline` architecture are as the skill describes.
@@ -0,0 +1,33 @@
1
+ {
2
+ "permissions": {
3
+ "deny": [
4
+ "Bash(rm -rf /*)",
5
+ "Bash(git push --force*)",
6
+ "Bash(git push -f *)",
7
+ "Bash(git reset --hard*)",
8
+ "Read(**/.env*)"
9
+ ]
10
+ },
11
+ "hooks": {
12
+ "SessionStart": [
13
+ { "matcher": "", "hooks": [ { "type": "command", "command": "node", "args": ["${CLAUDE_PROJECT_DIR}/.claude/nccgs/runtime/hooks/session-start.mjs"], "timeout": 15 } ] }
14
+ ],
15
+ "PreToolUse": [
16
+ { "matcher": "Bash|PowerShell", "hooks": [ { "type": "command", "command": "node", "args": ["${CLAUDE_PROJECT_DIR}/.claude/nccgs/runtime/hooks/guard-shell.mjs"], "timeout": 10 } ] },
17
+ { "matcher": "Write|Edit|MultiEdit|NotebookEdit", "hooks": [ { "type": "command", "command": "node", "args": ["${CLAUDE_PROJECT_DIR}/.claude/nccgs/runtime/hooks/guard-write.mjs"], "timeout": 10 } ] },
18
+ { "matcher": "mcp__.*", "hooks": [ { "type": "command", "command": "node", "args": ["${CLAUDE_PROJECT_DIR}/.claude/nccgs/runtime/hooks/guard-mcp.mjs"], "timeout": 10 } ] }
19
+ ],
20
+ "Stop": [
21
+ { "matcher": "", "hooks": [ { "type": "command", "command": "node", "args": ["${CLAUDE_PROJECT_DIR}/.claude/nccgs/runtime/hooks/done-guard.mjs"], "timeout": 10 } ] }
22
+ ],
23
+ "SubagentStart": [
24
+ { "matcher": "", "hooks": [ { "type": "command", "command": "node", "args": ["${CLAUDE_PROJECT_DIR}/.claude/nccgs/runtime/hooks/session-log.mjs", "start"], "timeout": 5 } ] }
25
+ ],
26
+ "SubagentStop": [
27
+ { "matcher": "", "hooks": [ { "type": "command", "command": "node", "args": ["${CLAUDE_PROJECT_DIR}/.claude/nccgs/runtime/hooks/session-log.mjs", "stop"], "timeout": 5 } ] }
28
+ ],
29
+ "PostToolUse": [
30
+ { "matcher": "Agent|Task", "hooks": [ { "type": "command", "command": "node", "args": ["${CLAUDE_PROJECT_DIR}/.claude/nccgs/runtime/hooks/session-log.mjs", "agent"], "timeout": 5 } ] }
31
+ ]
32
+ }
33
+ }
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: art-bible
3
+ description: Write the project's visual rules - camera and world scale, pixels per unit, palette, sprite sizes and pivots, naming and folders - as a document the asset-spec checks can enforce. Use before the first real art asset or when visuals are inconsistent.
4
+ allowed-tools: Read, Glob, Grep, Write, Bash, AskUserQuestion
5
+ ---
6
+
7
+ # /art-bible
8
+
9
+ Output: `.nccgs/design/art-bible.md` and the matching `.nccgs/design/asset-rules.json` that `/asset-spec` validates against.
10
+
11
+ 1. Read `.nccgs/design/brief.md`, the camera settings in the scene (`unity command scene get_hierarchy` and `gameobject find`), and any sprite already imported (`unity command asset list` or `Assets/` listing).
12
+ 2. Settle with the user, one question at a time, only what is not already decided: orthographic size and reference resolution, pixels per unit (one value for the whole project), filter mode (point for pixel art, bilinear otherwise), palette (5–8 named colours with hex), sprite size classes (player, enemy, tile, UI icon) in pixels and in units, pivot rule, naming (`spr_player_idle_01`), folder layout.
13
+ 3. Write `art-bible.md` (short, every rule with a number) and `asset-rules.json`:
14
+
15
+ ```json
16
+ { "pixelsPerUnit": 64, "filterMode": "Point", "textureType": "Sprite", "maxTextureSize": 2048, "folders": { "Assets/Art/Sprites": { "pixelsPerUnit": 64 } } }
17
+ ```
18
+
19
+ End with: both paths and `next: /asset-spec <asset>` for each new asset, `/work` for anything that changes the scene.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: asset-spec
3
+ description: Specify an art or audio asset before it is made and verify imported assets against the art bible (import settings, size, pivot) with a measured check. Use when an asset is requested, delivered or looks wrong in game.
4
+ allowed-tools: Read, Glob, Grep, Write, Bash, AskUserQuestion
5
+ ---
6
+
7
+ # /asset-spec
8
+
9
+ Output: `.nccgs/design/assets/<asset>.md` (the spec) and, for delivered assets, a passing `task verify --kind assets` on the open task.
10
+
11
+ 1. Spec first: purpose in game, size class from `art-bible.md`, pixel size, pivot, frames (if animated), colour keys, file name and folder, how it is used (SpriteRenderer, UI, tile). Write it; share the three lines an artist needs.
12
+ 2. When the asset exists: write or extend `.nccgs/design/asset-check.json`:
13
+
14
+ ```json
15
+ { "assets": [ { "path": "Assets/Art/Sprites/spr_player_idle_01.png", "pixelsPerUnit": 64, "filterMode": "Point", "textureType": "Sprite", "maxTextureSize": 512 } ] }
16
+ ```
17
+
18
+ Then `node .claude/nccgs/runtime/task/task.mjs verify --id <task> --kind assets --spec .nccgs/design/asset-check.json`. The Editor reads each importer; the artifact lists mismatches. A criterion `{ "pointer": "/mismatchCount", "op": "eq", "value": 0 }` closes the task only when every setting matches.
19
+ 3. Fix import settings through `unity command` (asset group) and re-verify; never hand-edit `.meta` files.
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: brainstorm
3
+ description: Turn a game idea or feature request into a brief with options the user chooses from - player fantasy, core loop, pillars, scope, first feel numbers. Use before any code when the request is a new game, mode, mechanic or "what should we build".
4
+ allowed-tools: Read, Glob, Grep, Write, AskUserQuestion
5
+ ---
6
+
7
+ # /brainstorm
8
+
9
+ Output: `.nccgs/design/brief.md`, agreed with the user. No code, no tasks, no Unity calls.
10
+
11
+ 1. Read `.nccgs/state.md` and any existing `.nccgs/design/*.md` so you build on decisions already made.
12
+ 2. Restate the ask in three lines: who plays, what they do for 30 seconds, what makes them play again.
13
+ 3. Offer 2–4 concepts with AskUserQuestion. Each concept: one sentence of fantasy, the core loop in one line, the one risk, rough scope (sessions of work). Do not pick for the user.
14
+ 4. For the chosen concept, settle with the user, one question at a time: pillars (max 3), the first playable (what the vertical slice must prove), what is out of scope, the feel numbers to start from (speeds, timings, counts: numbers, not adjectives), and which decisions are subjective and will go to a playtest.
15
+ 5. Write `.nccgs/design/brief.md` with these headings: Fantasy, Core loop, Pillars, Vertical slice proves, Feel numbers (table: name, start value, who decides), Out of scope, Open questions. Keep it under 80 lines.
16
+
17
+ End with: the brief path and `next: /map-systems`.