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
package/README.md CHANGED
@@ -1,206 +1,87 @@
1
- # NCCGS — New Claude Code Game Studio
2
-
3
- **2.1.1** is the prepared local release for standalone game-development
4
- orchestration in **Claude Code**, derived from the accepted local R11 r05
5
- baseline. The registry already contains a different `nccgs@2.1.0` tarball. This prepared
6
- 2.1.1 package derives from the accepted local R11 r05 qualification; it does not
7
- replace or retroactively qualify the registry artifact. No npm tags are changed.
8
-
9
- It retains handoff automation, bounded task slicing and Unity repair, protected
10
- final-review allocation, managed Unity settlement and exact first-import output
11
- declarations. New repair steps block unsaved loaded scenes before execution.
12
- See [handoff operations](docs/HANDOFF-AUTOMATION.md), [bounded repair](docs/BOUNDED-REPAIR.md),
13
- [task slicing](docs/TASK-SLICING.md), [uninstallation](docs/UNINSTALL.md) and [release notes](CHANGELOG.md).
14
-
15
- Claude Code handles intake, planning, specialist dispatch, testing, independent
16
- review and reporting. External review can be configured separately. This major
17
- version introduces standalone defaults and explicit execution-policy migration
18
- from the older compatibility workflow; existing task obligations remain preserved.
19
-
20
- ## Validation and limits
21
-
22
- The frozen exact RC4 archive was exercised through actual Claude Code on a
23
- controlled Unity scene repair: dirty-scene refusal preserved unsaved content,
24
- a fresh worker repaired the target, deterministic PARTIAL handoff required no
25
- continuation, all five checks and 28 criteria/385 assertions passed, and a fresh
26
- independent reviewer returned unconditional PASS before normal task closure.
27
- This is scoped workflow evidence, not broad game-quality or productivity proof.
28
-
29
- Version 2.0.0 keeps those runtime guards and adds a receipt publisher so external
30
- Editor stop evidence is available inside the reviewer's project. It does not
31
- operate processes or alter acceptance. See [Editor evidence](docs/EDITOR-SESSION-EVIDENCE.md).
32
- The exact 2.0.0 archive subsequently passed its scoped native Unity qualification
33
- and was published on 2026-10-28. Frozen release receipts retain its tests and
34
- independent reviews. The accepted local R11 r05 baseline accounts for 353 passing
35
- top-level cases and 13 explicitly host-skipped link cases, with independent Fable
36
- static review PASS and no mandatory conditions. The 2.1.1 preparation changes
37
- package identity and current guidance only; runtime code, profiles, role ceilings,
38
- guards and budgets remain unchanged. Its exact package/release checks are recorded
39
- in the accompanying qualification receipts. Effective native effort stays UNKNOWN;
40
- this does not claim managed-worker completion or a new Claude Code/Unity run.
41
- Earlier negative verdicts remain unchanged in their separate receipts.
42
- Frozen history remains intact.
43
- See [release status](docs/RELEASE-STATUS.md), [upgrading](UPGRADING.md),
44
- [Vietnamese quick start](docs/HUONG-DAN-MIGRATE-VA-SU-DUNG.md) and [decisions](MEMORY.md).
45
-
46
- ## What changed
47
-
48
- Standalone `/design`, `/design-review` and `/story-readiness` now load the
49
- [design lifecycle](.claude/nccgs/protocols/design-lifecycle.md). New installs require
50
- a reviewed design handoff before dependent feature implementation; criteria and
51
- their source/threshold authority are pinned across that handoff. The fixed
52
- `task design-validate` command supports plan tasks without granting arbitrary
53
- shell execution. Existing policies and frozen evaluations retain their obligations;
54
- see [upgrading](UPGRADING.md). Schema validation is not semantic or gameplay acceptance.
55
-
56
-
57
-
58
- NCCGS includes a [shared Ponytail package](.claude/nccgs/packages/ponytail/README.md)
59
- for technical planning, implementation, supplementary complexity review and known
60
- code limits. The coordinator and agents load it by assignment through their common
61
- contracts. It borrows selected guidance from DietrichGebert/Ponytail under MIT;
62
- the [original license](.claude/nccgs/packages/ponytail/LICENSE) and
63
- [attribution/change notice](.claude/nccgs/packages/ponytail/NOTICE.md) ship with every
64
- installation. It preserves full design and QA obligations; no separate Ponytail
65
- plugin or global hooks are installed. Broad comparative effectiveness remains unmeasured.
66
-
67
- - Separate execution policy, model profile and external review (`off`, `advisory`,
68
- `required`); project updates preserve existing obligations.
69
- - Task contracts for `implement`, `audit` and `plan`, with conservative
70
- FAST/STANDARD/CONTROLLED classification, reasons, inputs and acceptance gates.
71
- - Durable dispatch reservations, path ownership checks, two-worker ceiling,
72
- independent reviewer slot, ancestor quotas and recovery without budget refunds.
73
- - Final evidence tied to task, source, contract, runtime invocation and raw source.
74
- Missing model/effort/usage is explicit; requested settings do not prove execution.
75
- - Reports for success, partial, blocked and failed outcomes; strict successful
76
- closure, optional external receipts and explicit acceptance when configured.
77
- - Execution migration with dry-run, archived configuration and guarded rollback.
78
-
79
- The studio retains 47 roles (13 active by default, including Game Designer), 36 NCCGS workflows, scoped
80
- rules, lifecycle hooks and unmodified official Unity Skills. Enable specialists
81
- when their expertise resolves a concrete problem; do not dispatch the whole studio.
82
-
83
- ## Try the local 2.1.1 package
84
-
85
- Requirements: Claude Code and Node.js 18+. Unity CLI/Pipeline is needed for live
86
- Unity operations. Run against a disposable Unity project first:
87
-
88
- Use the locally prepared archive and its accompanying SHA-256 manifest:
89
-
90
- ```powershell
91
- $NccgsArchive = "D:\path\to\nccgs-2.1.1.tgz"
92
- npx --yes --package "$NccgsArchive" nccgs install --project "D:\path\to\UnityProject" --dry-run
93
- npx --yes --package "$NccgsArchive" nccgs install --project "D:\path\to\UnityProject"
94
- npx --yes --package "$NccgsArchive" nccgs doctor --project "D:\path\to\UnityProject"
95
- ```
96
-
97
- Before 2.1.1 publication, use this exact local archive. The registry's existing
98
- 2.1.0 has different bytes and is not the accepted local R11 r05 archive. Published
99
- nccgs@2.0.0 does not include the uninstall command. Use update for an existing installation only after reviewing its
100
- dry run and backup. See [the tested upgrade matrix](docs/UPGRADE-QUALIFICATION.md) and its limits.
101
- The installer preserves customized files and unrelated Claude settings, records
102
- overrides and backs up replacements. Do not use --force as an ordinary update path.
103
-
104
- New installs default to standalone with `claude-standalone`. Existing installations
105
- without execution.json remain compatibility. To migrate explicitly:
106
-
107
- ```powershell
108
- npx --yes --package "$NccgsArchive" nccgs migrate-execution --project "D:\path\to\UnityProject" --to standalone --model-profile claude-standalone --dry-run
109
- ```
110
-
111
- Inspect the dry run, then remove `--dry-run`. Omitting `--model-profile` preserves
112
- existing model routes. See [upgrading](UPGRADING.md) for rollback and historical
113
- task handling. Updating files never converts an old approval into a new one.
114
-
115
- ## Operating flow
116
-
117
- Start a task session with native permissions already selected:
118
-
119
- ```powershell
120
- npx --yes --package "$NccgsArchive" nccgs run --project "D:\path\to\UnityProject"
121
- ```
122
-
123
- New installations default to task autonomy `full`. Existing installations keep
124
- their setting; use `update --autonomy full` to select it explicitly. For a resumed
125
- session, append `-- --resume SESSION_ID`. If Claude is not on PATH, pass
126
- `--claude "C:\path\to\claude.exe"` before the separator. Model and tool settings
127
- are inherited. Ordinary Bash, report writing and task work outside the project
128
- need no repeated permission; explicit deny rules and integrity/destructive-action
129
- guards remain effective. See [task autonomy](.claude/nccgs/protocols/task-autonomy.md).
130
-
131
- ```text
132
- User request -> bounded contract + mode + risk
133
- -> reserved Claude Code worker(s)
134
- -> targeted evidence + independent internal review
135
- -> honest report of outcome and unresolved findings
136
- -> configured external/manual/acceptance gates -> DONE
137
- ```
138
-
139
- | Workflow | Outcome |
140
- |---|---|
141
- | `/work` | Implement a feature, fix, refactor, tool or content change |
142
- | `/design` | Plan design and requirements |
143
- | `/audit` | Examine the project without source edits |
144
- | `/migrate-project` | Review and apply authorized project adoption changes |
145
- | `/test` | Verify declared requirements |
146
- | `/review` | Independent review |
147
- | `/release` | Prepare a verified release candidate |
148
- | `/status` | Read state, evidence, blockers and next action |
149
-
150
- FAST uses Sonnet/high; STANDARD uses Opus/high; CONTROLLED uses Opus/xhigh.
151
- Leadership requests Opus/xhigh. Independent review uses Fable/high. These aliases are requested routes. Real Claude
152
- model resolution and provider access must be verified in the target session.
153
- Historical `astra-claude` routes remain available under compatibility execution.
154
-
155
- ## Remove NCCGS when it is no longer needed
156
-
157
- Close Claude Code sessions, then preview and apply from an external terminal:
158
-
159
- ```powershell
160
- npx --yes --package "$NccgsArchive" nccgs uninstall --project "D:\path\to\UnityProject" --dry-run
161
- npx --yes --package "$NccgsArchive" nccgs uninstall --project "D:\path\to\UnityProject"
162
- ```
163
-
164
- This also supports an existing 2.0.0 installation without updating it first.
165
- Game source, customized files and `.nccgs` history/budgets remain. The command
166
- removes unchanged managed files and exact framework hooks/imports, saves a backup
167
- and refuses active or uncertain work. Use `uninstall --rollback ID` to restore
168
- that backup when no later edits conflict. Shared permission/model settings stay
169
- because their ownership was not recorded by earlier installers.
170
- See [details and recovery](docs/UNINSTALL.md).
171
-
172
- ## Maintainer verification and limits
173
-
174
- These commands run from a source/package checkout. They are not extra steps for
175
- users installing with npx, and do not initiate a Claude Code game run.
176
-
177
- ```text
178
- npm run policy:build
179
- npm run policy:check
180
- npm run validate
181
- npm test
182
- node scripts/benchmark-v15.mjs --out PATH_TO_JSON
183
- npm pack --dry-run
184
- ```
185
-
186
- Generated catalogs, workflow wrappers and agents come from pipeline.json and the
187
- agent library. Do not patch generated model pins directly. Official Unity Skills
188
- remain the source for generic Editor/asset mechanics.
189
-
190
- Reservations and direct edit hooks enforce declared path ownership. Arbitrary
191
- implementation shell/MCP tools are not filesystem-sandboxed; review actual changes.
192
- Background or uncertain workers retain slots until final correlated evidence or
193
- external reconciliation. Worker telemetry has explicit coverage and excludes
194
- unobserved coordinator/human/provider activity. It is not account-wide billing.
195
-
196
- See [the Claude Code pilot and benchmark protocol](docs/NCCGS-1.5-PILOT.md),
197
- [the standalone workflow](.claude/nccgs/protocols/standalone.md), and
198
- [the 1.4.1 integrity guide](docs/NCCGS-1.4.1.md).
199
-
200
- ## Direct Unity transport
201
-
202
- Unity uses CLI/Pipeline only. `nccgs run` supplies `--strict-mcp-config --mcp-config '{"mcpServers":{}}'` by default, preserving prompt/model/permission policy. An external operator may explicitly supply a JSON non-Unity MCP configuration or JSON-file path; Unity/Coplay/AnkleBreaker server identities and routes are rejected. Global MCP settings and plugins are never edited. The universal transport hook also refuses Unity MCP tools and ordinary registration/launch shell commands before task/profile routing.
203
-
204
- Generic Unity Skills retain their upstream hashes and licenses. Their optional MCP examples do not override this package's [Unity boundary](.claude/nccgs/protocols/unity-boundary.md). These checks do not sandbox arbitrary/encoded programs or a hostile client. Actual source review, native permissions and measured runtime evidence remain necessary.
205
-
206
- R07 review repair: Claude Code declares its MCP-config option variadic. The one validated config is therefore placed at argv end or immediately before the explicit option terminator, preserving positional prompts and preventing an unchecked second config. Recovery requires that canonical boundary without rewriting retained state. Ordinary Claude/Codex Unity MCP registration is denied; non-Unity community server/method names remain available. Provider instruction-pattern warnings remain fail-closed; qualification handoffs describe settings in prose instead of reproducing configuration JSON.
1
+ # NCCGS 3
2
+
3
+ A Unity-first evidence loop for Claude Code. A task is done when the game has run and been looked at, not when the code has been written.
4
+
5
+ ```
6
+ brief → options for the user → contract → edit → run (tests, Play Mode, screenshots, console, playtest)
7
+ → look → fix or ask → independent review → close → one-page report with real token cost
8
+ ```
9
+
10
+ **3.0.0-rc.2.** Built and verified on Unity 6000.3 and 6000.6 with Unity CLI 1.0.0-beta.14 and com.unity.pipeline 0.9, Claude Code 2.1.3xx, Windows. The sample game (a 2D endless runner) went from an empty scene to a vertical slice in four tasks with this loop; its reports are the reference for what a closed task looks like.
11
+
12
+ ## Requirements
13
+
14
+ Node 20+, Claude Code 2.1.295+, Unity 6.0+ with `com.unity.pipeline` in the project (`unity pipeline install --project-path <project>`), the Unity CLI on PATH. Windows, macOS and Linux; on Windows the optional `koffi` dependency gives Job Object process control (installed automatically by `npx`).
15
+
16
+ ## Install
17
+
18
+ ```
19
+ npx nccgs install --project D:\Games\MyGame --dry-run
20
+ npx nccgs install --project D:\Games\MyGame
21
+ npx nccgs doctor --project D:\Games\MyGame
22
+ npx nccgs run --project D:\Games\MyGame
23
+ ```
24
+
25
+ `install` adds `CLAUDE.md` (kept if you have one), `.claude/skills/` (11 NCCGS skills + 35 official Unity Skills), `.claude/agents/nccgs-*.md`, `.claude/nccgs/` (runtime, protocols, Ponytail) and `.nccgs/` (project config, tasks, evidence, reports). It merges hooks into `.claude/settings.json` without touching your other settings. `update` replaces managed files you did not change and records the ones you did; `uninstall` removes managed files, keeps `.nccgs/` and backs up what it removes. `run` launches Claude Code with the permission mode and MCP policy NCCGS expects (`acceptEdits` by default; `--autonomy full` for `bypassPermissions`).
26
+
27
+ ## Daily use
28
+
29
+ Open the project in the Editor (screenshots and live tests need it; without it tests run in a batch Editor pinned to the project's own version), run `nccgs run`, then:
30
+
31
+ | Skill | When | Output |
32
+ | --- | --- | --- |
33
+ | `/work` | any change to code, scenes, prefabs or assets | a closed task with `.nccgs/reports/<id>.md` + `.html` |
34
+ | `/test` | run tests and observe without changing anything | measurements under `.nccgs/evidence/` |
35
+ | `/status` | where are we | `.nccgs/project.html` and ten lines of status |
36
+ | `/brainstorm` → `/map-systems` → `/vertical-slice` | a new game or a multi-task feature | `brief.md`, `systems.md`, `slice.json`, then one `/work` per planned task |
37
+ | `/unity-foundation` | a fresh project, or tests cannot run | asmdefs, test assemblies, input, pipeline as a measured task |
38
+ | `/playtest` | does it feel right, tuning, difficulty | telemetry artifact, the playtester's judgement, your decision |
39
+ | `/art-bible`, `/asset-spec` | before and after art | visual rules; import settings checked against them |
40
+ | `/feedback` | something went wrong, or after a few days of use | a local bundle (`.nccgs/feedback/`) of what ran, failed and was blocked, to send for review |
41
+
42
+ The loop refuses to lie: `task close --outcome success` is rejected when a criterion fails, the source changed after the last verify, or the review is missing; `partial` and `blocked` are always allowed and reported as such.
43
+
44
+ ## What a task carries
45
+
46
+ - **Contract**: files in scope, criteria as assertions on artifacts `task verify` produces (`eq | gte | lte | exists | contains | range | image`), rigor (`prototype`: no review, 6 fix rounds · `production`: one review, 4 · `release`: two reviews, 2), a manual criterion for anything only a person can judge.
47
+ - **Evidence**, written only by the runtime: `tests` (EditMode/PlayMode, live Pipeline or batch), `observe` (Play Mode, keys, screenshots at exact milliseconds with `--shots`, console, performance), `console`, `playtest` (scripted keys or reactive rules, probes sampled at 10 Hz), `assets` (importer settings vs the art bible), `command`.
48
+ - **Review** by a fresh-context reviewer whose verdict must name the screenshots it looked at; `PASS` cannot carry an unresolved HIGH/BLOCKER; MEDIUM/LOW are closed with `task review --resolve ... --reason ...` and the report shows who closed what.
49
+ - **Report**: criteria, tests per run, changes with scope marks, findings, screenshots with game time, and the token cost per agent and model read from the Claude Code transcripts (USD only when `pricing` in `.nccgs/project.json` has a row). `nccgs status` rewrites `project.html`; `nccgs release --from <tag|date> --to <tag|date|now>` writes a changelog from the tasks closed in the range.
50
+
51
+ ## Modes
52
+
53
+ `FAST`, `BALANCE` (default) and `PERFORMANCE` set model and effort per agent (coordinator, implementer, reviewer, fast-fix, scout, playtester). They are read-only; copy one and edit the copy:
54
+
55
+ ```
56
+ npx nccgs mode create --from PERFORMANCE --name mine --project .
57
+ npx nccgs mode set --name mine --agent reviewer --model opus --effort xhigh --project .
58
+ npx nccgs mode use mine --project .
59
+ ```
60
+
61
+ `PERFORMANCE` asks for Fable for review and falls back to Opus/xhigh when the account does not have it; the report records which model reviewed. `nccgs doctor --check-models` probes the current mode's models.
62
+
63
+ ## Unity facts the runtime relies on
64
+
65
+ Verified live, kept in `.claude/nccgs/protocols/unity-cli-notes.md` and `docs/EVIDENCE-VERIFICATION.md`: Pipeline command names are discovered at runtime, never hard-coded; `--editor-version` is always pinned from `ProjectVersion.txt`; entering Play Mode drops the Pipeline server for ~3 s on 6.3 and the runtime waits; PlayMode tests run async and are polled; `simulate_key` delivers key-down and key-up in one input update, so input is read through `InputAction`s; every Pipeline round trip costs ~0.9 s, so anything that must happen within a second of a key press is scheduled inside the Editor by one `script eval`; Run In Background is switched on for every run so an unfocused Editor does not freeze.
66
+
67
+ ## Layout
68
+
69
+ ```
70
+ .claude/nccgs/runtime/ task CLI, Unity wrapper, hooks (managed)
71
+ .claude/nccgs/protocols/ evidence.md, review.md, playtest.md, unity-cli-notes.md
72
+ .claude/nccgs/ponytail/ engineering.md, complexity-review.md (MIT, adapted)
73
+ .claude/skills/ NCCGS skills + official Unity Skills (do not edit; `nccgs update --skills-only`)
74
+ .nccgs/ project.json, modes.json, state.md, design/, tasks/, evidence/, reports/, project.html
75
+ ```
76
+
77
+ ## Feedback
78
+
79
+ Failures are recorded locally in `.nccgs/diagnostics.jsonl` (task CLI errors, failed verifications, failed Unity calls, hook blocks). A bundle (`nccgs feedback`) holds versions, doctor, per-task numbers and diagnostics grouped by cause — no code, screenshots, transcripts or credentials; project name and task titles are included. The first session where something fails asks you once: `auto` sends bundles to the maintainers by itself when an issue is detected or every 7 days, `manual` only suggests `/feedback`, `off` never does either. Change it any time with `npx nccgs feedback --project . --consent <auto|manual|off>`; every send is listed in `.nccgs/feedback/sent.jsonl` and a copy stays local.
80
+
81
+ ## Updating
82
+
83
+ `nccgs doctor --check-updates` reports newer NCCGS, Unity Skills, Unity CLI and Pipeline versions; nothing is applied on its own. `nccgs update` refreshes managed files; `--skills-only` refreshes just the vendored Unity Skills (pinned to an upstream commit in `unity-skills/manifest.json`).
84
+
85
+ ## Licenses
86
+
87
+ MIT for NCCGS (LacBird). Vendored Unity Skills: Unity Companion License (see `THIRD_PARTY_NOTICES.md`). Ponytail material: MIT, DietrichGebert.
@@ -1,38 +1,10 @@
1
1
  # Third-party notices
2
2
 
3
- ## Ponytail
3
+ ## Official Unity Skills (vendored, unmodified)
4
+ The directories listed in `unity-skills/manifest.json` are an unmodified snapshot of https://github.com/Unity-Technologies/skills, licensed under the Unity Companion License for Unity-dependent projects (https://unity3d.com/legal/licenses/unity_companion_license). They are installed into `.claude/skills/` and must not be edited there; NCCGS carries its own guidance in `.claude/nccgs/protocols/`.
4
5
 
5
- The shared package under `.claude/nccgs/packages/ponytail/` borrows and adapts
6
- engineering, complexity-review and deliberate-simplification guidance from
7
- **Ponytail by DietrichGebert**, v4.10.3, commit
8
- `c982cd411abb53323c4baa1baa3c2f020b8d0b08`.
6
+ ## Ponytail (adapted)
7
+ `template/ponytail/engineering.md` and `complexity-review.md` adapt material from Ponytail by DietrichGebert, v4.10.3, commit c982cd411abb53323c4baa1baa3c2f020b8d0b08, MIT License. The complete license and the attribution/change notice ship in `template/ponytail/LICENSE` and `NOTICE.md`.
9
8
 
10
- Source: https://github.com/DietrichGebert/ponytail
11
-
12
- Copyright (c) 2026 DietrichGebert. Licensed under the **MIT License**. The complete
13
- original [license](.claude/nccgs/packages/ponytail/LICENSE) and
14
- [attribution with adaptation details](.claude/nccgs/packages/ponytail/NOTICE.md)
15
- are included and installed with the shared package. Retain them on redistribution.
16
- This is an NCCGS adaptation, not the unmodified Ponytail plugin.
17
-
18
- ## Claude Code Game Studios
19
-
20
- NCCGS was informed by the workflow, traceability, brownfield adoption, and QA
21
- ideas in Donchitos/Claude-Code-Game-Studios. The supplied source is MIT licensed.
22
- NCCGS replaces its multi-engine agent hierarchy rather than redistributing that
23
- hierarchy verbatim.
24
-
25
- Source: https://github.com/Donchitos/Claude-Code-Game-Studios
26
-
27
- ## Unity Skills
28
-
29
- The directories identified in `.claude/nccgs/unity-skills-manifest.json` are an
30
- unmodified snapshot of Unity Technologies' Unity Skills. Unity Skills are
31
- copyright Unity Technologies and are governed by the Unity Companion License for
32
- Unity-dependent projects.
33
-
34
- Source: https://github.com/Unity-Technologies/skills
35
-
36
- License: https://unity3d.com/legal/licenses/unity_companion_license
37
-
38
- Do not remove this notice when redistributing NCCGS with the vendored snapshot.
9
+ ## Prior work
10
+ NCCGS 3 is a fresh implementation informed by NCCGS 2.x (LacBird) and by Donchitos/Claude-Code-Game-Studios (MIT). No code is copied from either.
package/bin/nccgs.mjs ADDED
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env node
2
+ // nccgs CLI: install | update | doctor | run | uninstall | mode | task | version | help
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { spawn } from "node:child_process";
6
+ import { projectRoot } from "../runtime/core/project.mjs";
7
+ import { readText } from "../runtime/core/fs.mjs";
8
+ import { PKG, TEMPLATE, install } from "../cli/install.mjs";
9
+ import { doctor } from "../cli/doctor.mjs";
10
+ import { launch } from "../cli/run.mjs";
11
+ import { uninstall } from "../cli/uninstall.mjs";
12
+ import { allModes, createMode, setModeAgent, useMode, BUILTIN } from "../runtime/core/modes.mjs";
13
+ import { renderProject } from "../runtime/task/project.mjs";
14
+ import { release } from "../cli/release.mjs";
15
+ import { feedback } from "../cli/feedback.mjs";
16
+
17
+ const argv = process.argv.slice(2);
18
+ const command = argv[0];
19
+ const sep = argv.indexOf("--");
20
+ const own = sep < 0 ? argv.slice(1) : argv.slice(1, sep);
21
+ const forwarded = sep < 0 ? [] : argv.slice(sep + 1);
22
+ const opt = {}; const positional = [];
23
+ for (let i = 0; i < own.length; i++) {
24
+ const a = own[i];
25
+ if (a.startsWith("--")) { const n = own[i + 1]; if (n === undefined || n.startsWith("--")) opt[a.slice(2)] = true; else { opt[a.slice(2)] = n; i++; } }
26
+ else positional.push(a);
27
+ }
28
+ const root = projectRoot(opt.project === true ? undefined : opt.project);
29
+ const out = v => process.stdout.write(JSON.stringify(v, null, 2) + "\n");
30
+ const die = m => { process.stderr.write(`nccgs ${command}: ${m}\n`); process.exit(1); };
31
+
32
+ const HELP = `nccgs ${PKG.version} - Unity-first evidence loop for Claude Code
33
+
34
+ nccgs install --project DIR [--mode BALANCE] [--rigor production] [--autonomy guarded] [--dry-run]
35
+ nccgs update --project DIR [--dry-run] [--force] [--skills-only]
36
+ nccgs doctor --project DIR [--check-models] [--check-updates]
37
+ nccgs run --project DIR [--mode M] [--autonomy guarded|full] [--dry-run] [-- claude args]
38
+ nccgs uninstall --project DIR [--dry-run] [--force]
39
+ nccgs mode list | show NAME | create --from BALANCE --name X | set --name X --agent reviewer --model opus --effort high | use NAME
40
+ nccgs task <open|verify|review|close|inspect|list|fix|report|project> ... (same as node .claude/nccgs/runtime/task/task.mjs)
41
+ nccgs status --project DIR writes .nccgs/project.html (all tasks, open findings, cost) and prints the summary
42
+ nccgs feedback --project DIR [--since 14] [--note "..."] [--with-reports] [--send] [--consent auto|manual|off] bundle of what ran, failed and was blocked; --send posts it
43
+ nccgs release --project DIR [--from TAG|DATE] [--to TAG|DATE|now] [--name v1.2.0] changelog from tasks closed in the range
44
+ `;
45
+
46
+ try {
47
+ switch (command) {
48
+ case undefined: case "help": case "--help": case "-h": process.stdout.write(HELP); break;
49
+ case "version": case "--version": case "-v": process.stdout.write(PKG.version + "\n"); break;
50
+ case "install": out(install(root, { dryRun: !!opt["dry-run"], force: !!opt.force, mode: str(opt.mode), autonomy: str(opt.autonomy), rigor: str(opt.rigor) })); break;
51
+ case "update": out(install(root, { update: true, dryRun: !!opt["dry-run"], force: !!opt.force, skillsOnly: !!opt["skills-only"] })); break;
52
+ case "doctor": {
53
+ const r = await doctor(root, { checkModels: !!opt["check-models"], checkUpdatesNow: !!opt["check-updates"] });
54
+ for (const c of r.checks) process.stderr.write(`${c.status.toUpperCase().padEnd(4)} ${c.id.padEnd(20)} ${c.message}\n`);
55
+ if (r.summary) process.stderr.write(`\n${r.summary.pass} pass · ${r.summary.warn} warn · ${r.summary.fail} fail\n`);
56
+ if (opt.json) out(r);
57
+ process.exit(r.summary?.fail ? 1 : 0);
58
+ }
59
+ case "run": { const r = await launch(root, { mode: str(opt.mode), autonomy: str(opt.autonomy), dryRun: !!opt["dry-run"], forwarded }); if (opt["dry-run"]) out(r); process.exit(r.exitCode ?? 0); }
60
+ case "uninstall": out(uninstall(root, { dryRun: !!opt["dry-run"], force: !!opt.force })); break;
61
+ case "status": {
62
+ const r = renderProject(root);
63
+ const m = r.model;
64
+ process.stderr.write(`${m.project.name} · ${m.success.length}/${m.closed.length} closed SUCCESS · ${m.open.length} open · findings H ${m.bySeverity.BLOCKER + m.bySeverity.HIGH} / M ${m.bySeverity.MEDIUM} / L ${m.bySeverity.LOW}\n${r.file}\n`);
65
+ if (opt.json) out({ file: r.file, closed: m.closed.length, success: m.success.length, open: m.open.map(x => x.task.id), findings: m.bySeverity, tokens: m.tokens });
66
+ break;
67
+ }
68
+ case "feedback": {
69
+ const r = await feedback(root, { sinceDays: Number(opt.since) || 14, note: str(opt.note) ?? "", withReports: !!opt["with-reports"], runDoctor: !opt["no-doctor"], send: !!opt.send, consent: str(opt.consent) ?? null, dryRun: !!opt["dry-run"] });
70
+ if (r.consent) { process.stdout.write(`feedback consent: ${r.consent.consent}\n`); break; }
71
+ process.stderr.write(`${r.mdFile}\n${r.jsonFile}\n${r.sent ? (r.sent.ok ? `sent (id ${r.sent.id ?? "?"}, ${r.sent.bytes} bytes)` : `not sent: ${r.sent.reason ?? r.sent.status}`) : "not sent (add --send)"}\n`);
72
+ if (opt.json) out({ md: r.mdFile, json: r.jsonFile, totals: r.bundle.totals, sent: r.sent ?? null, decision: r.decision }); else process.stdout.write(readText(r.mdFile));
73
+ break;
74
+ }
75
+ case "release": { const r = release(root, { from: str(opt.from), to: str(opt.to) ?? "now", name: str(opt.name), write: !opt["dry-run"] }); process.stdout.write(r.markdown); if (r.file) process.stderr.write(`\n${r.file}\n`); break; }
76
+ case "mode": {
77
+ const sub = positional[0];
78
+ if (!sub || sub === "list") { const modes = allModes(root); out(Object.fromEntries(Object.entries(modes).map(([k, v]) => [k, { description: v.description, custom: !!v.custom, ...Object.fromEntries(BUILTIN.agents.map(a => [a, v[a] ? `${v[a].model}/${v[a].effort ?? "-"}` : "-"])) }]))); }
79
+ else if (sub === "show") out(allModes(root)[positional[1] ?? str(opt.name)] ?? die("mode not found"));
80
+ else if (sub === "create") out(createMode(root, { name: str(opt.name) ?? positional[1], from: str(opt.from) ?? "BALANCE" }));
81
+ else if (sub === "set") out(setModeAgent(root, { name: str(opt.name), agent: str(opt.agent), model: str(opt.model), effort: opt.effort === undefined ? undefined : str(opt.effort), fallback: opt.fallback === undefined ? undefined : (opt.fallback === "none" ? "none" : { model: str(opt.fallback), effort: str(opt["fallback-effort"]) ?? "high" }) }));
82
+ else if (sub === "use") out(useMode(root, positional[1] ?? str(opt.name), { templateDir: TEMPLATE }));
83
+ else die(`unknown mode subcommand ${sub}`);
84
+ break;
85
+ }
86
+ case "task": {
87
+ const script = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "runtime", "task", "task.mjs");
88
+ const child = spawn(process.execPath, [script, ...argv.slice(1), ...(opt.project ? [] : ["--project", root])], { stdio: "inherit" });
89
+ child.on("close", code => process.exit(code ?? 1));
90
+ break;
91
+ }
92
+ default: die(`unknown command ${command}\n${HELP}`);
93
+ }
94
+ } catch (error) { die(error.message); }
95
+
96
+ function str(v) { return v === undefined || v === true ? undefined : String(v); }
package/cli/doctor.mjs ADDED
@@ -0,0 +1,82 @@
1
+ // nccgs doctor: facts about this machine and project, with pass | warn | fail per check.
2
+ import path from "node:path";
3
+ import { spawnToolSync } from "./spawn.mjs";
4
+ import { readJson as readJsonFile } from "../runtime/core/fs.mjs";
5
+ import path2 from "node:path";
6
+ import { TEMPLATE } from "./install.mjs";
7
+ import { readJson, exists, sha256File } from "../runtime/core/fs.mjs";
8
+ import { at, isUnityProject, loadConfig, editorVersion, pipelineVersion, versionLine } from "../runtime/core/project.mjs";
9
+ import { allModes, BUILTIN, validateAgentSetting } from "../runtime/core/modes.mjs";
10
+ import * as unity from "../runtime/unity/unity.mjs";
11
+ import { PKG } from "./install.mjs";
12
+ import { checkUpdates } from "./update-check.mjs";
13
+ import { available as jobObjectAvailable } from "../runtime/core/job-object.mjs";
14
+
15
+ const MIN_CLAUDE = [2, 1, 295];
16
+ const cmp = (a, b) => { for (let i = 0; i < 3; i++) { if ((a[i] ?? 0) !== (b[i] ?? 0)) return (a[i] ?? 0) - (b[i] ?? 0); } return 0; };
17
+ const ver = s => (String(s).match(/(\d+)\.(\d+)\.(\d+)/) ?? []).slice(1, 4).map(Number);
18
+
19
+ export async function doctor(root, { checkModels = false, checkUpdatesNow = false } = {}) {
20
+ const checks = [];
21
+ const add = (id, status, message, data) => checks.push({ id, status, message, ...(data ? { data } : {}) });
22
+ add("node", cmp(ver(process.version), [20, 0, 0]) >= 0 ? "pass" : "fail", `Node ${process.version} (needs >= 20)`);
23
+ if (process.platform === "win32") { const jo = await jobObjectAvailable(); add("process-tree", jo ? "pass" : "warn", jo ? "Windows Job Object available (koffi): timed-out Editors die with their whole tree" : "koffi not installed: falling back to taskkill /T + ppid walk (run `npm install` in the nccgs package, or `npx nccgs` installs it)"); }
24
+ else add("process-tree", "pass", `${process.platform}: process group + NCCGS_TREE tag + ppid walk`);
25
+ const claude = spawnToolSync("claude", ["--version"], { encoding: "utf8", windowsHide: true, timeout: 15000 });
26
+ const claudeVersion = claude.status === 0 ? claude.stdout.trim() : null;
27
+ add("claude", claudeVersion ? (cmp(ver(claudeVersion), MIN_CLAUDE) >= 0 ? "pass" : "warn") : "fail", claudeVersion ? `Claude Code ${claudeVersion}` : "claude not on PATH");
28
+ const cliVersion = await unity.cliVersion();
29
+ add("unity-cli", cliVersion ? "pass" : "fail", cliVersion ? `Unity CLI ${cliVersion}` : "unity CLI not on PATH (install: https://unity.com/en/blog/meet-the-unity-cli)");
30
+ if (!isUnityProject(root)) { add("project", "fail", `${root} is not a Unity project`); return { root, checks }; }
31
+ add("project", "pass", versionLine(root, cliVersion));
32
+ add("pipeline-package", pipelineVersion(root) ? "pass" : "fail", pipelineVersion(root) ? `com.unity.pipeline ${pipelineVersion(root)}` : "com.unity.pipeline missing: run `unity pipeline install --project-path <project>` in Unity 6.0+");
33
+ const state = exists(at(root, "installState")) ? readJson(at(root, "installState")) : null;
34
+ add("installed", state ? (state.version === PKG.version ? "pass" : "warn") : "fail", state ? `NCCGS ${state.version} installed${state.version !== PKG.version ? ` (package is ${PKG.version}: run update)` : ""}` : "NCCGS not installed");
35
+ if (state) {
36
+ const drift = [];
37
+ for (const [rel, sha] of Object.entries(state.files ?? {})) { const f = path.join(root, rel); if (!exists(f)) drift.push(`missing ${rel}`); else if (sha256File(f) !== sha) drift.push(`changed ${rel}`); }
38
+ add("inventory", drift.length ? "warn" : "pass", drift.length ? `${drift.length} managed file(s) differ: ${drift.slice(0, 5).join(", ")}${drift.length > 5 ? "…" : ""}` : "managed files match the inventory", { drift, overrides: state.overrides });
39
+ }
40
+ const settings = exists(at(root, "settings")) ? readJson(at(root, "settings")) : {};
41
+ const hookCount = Object.values(settings.hooks ?? {}).flat().filter(e => (e.hooks ?? []).some(h => (h.args ?? []).some(a => String(a).includes("/.claude/nccgs/runtime/hooks/")))).length;
42
+ const expectedHooks = Object.values(readJsonFile(path2.join(TEMPLATE, "settings.fragment.json")).hooks).flat().length;
43
+ add("hooks", hookCount >= expectedHooks ? "pass" : "fail", `${hookCount}/${expectedHooks} NCCGS hook entries in .claude/settings.json`);
44
+ const config = loadConfig(root);
45
+ const modes = allModes(root);
46
+ if (!modes[config.mode]) add("mode", "fail", `mode ${config.mode} not found`);
47
+ else {
48
+ const warnings = BUILTIN.agents.flatMap(a => modes[config.mode][a] ? validateAgentSetting(modes[config.mode][a]).map(w => `${a}: ${w}`) : []);
49
+ add("mode", "pass", `mode ${config.mode}${modes[config.mode].custom ? " (custom)" : ""} · rigor ${config.rigor} · autonomy ${config.autonomy}`, warnings.length ? { warnings } : undefined);
50
+ }
51
+ for (const agent of BUILTIN.agents.filter(a => a !== "coordinator")) {
52
+ if (!exists(path.join(at(root, "agents"), `nccgs-${agent}.md`))) add(`agent-${agent}`, "fail", `.claude/agents/nccgs-${agent}.md missing (run \`nccgs mode use ${config.mode}\`)`);
53
+ }
54
+ const instance = cliVersion ? await unity.instanceFor(root) : null;
55
+ add("editor", instance ? (instance.state === "ready" ? "pass" : "warn") : "warn", instance ? `Editor ${instance.editorVersion ?? instance.version} ${instance.state} on port ${instance.port} (live verify available)` : "no Editor open for this project (verify will use a batch Editor; open the project for screenshots)");
56
+ if (instance?.state === "ready") {
57
+ const cat = await unity.catalog(root, { refresh: true });
58
+ add("pipeline-commands", cat.commands.length ? "pass" : "fail", cat.commands.length ? `${cat.commands.length} Pipeline commands discovered (package ${cat.version})` : `cannot list Pipeline commands: ${cat.error}`);
59
+ for (const cap of ["playStart", "screenshot", "consoleGet", "testRun", "eval"]) {
60
+ const name = await unity.resolve(root, cap);
61
+ if (!name) add(`capability-${cap}`, "fail", `no Pipeline command for ${cap}`);
62
+ }
63
+ }
64
+ const skillsManifest = exists(path.join(root, ".claude/nccgs/unity-skills-manifest.json")) ? readJson(path.join(root, ".claude/nccgs/unity-skills-manifest.json")) : null;
65
+ if (skillsManifest) {
66
+ const age = Math.floor((Date.now() - Date.parse(skillsManifest.synced_at)) / 86400000);
67
+ add("unity-skills", age > 60 ? "warn" : "pass", `${skillsManifest.skills.length} vendored Unity skills, synced ${age} days ago (${skillsManifest.source_revision})`);
68
+ }
69
+ if (checkModels && claudeVersion) {
70
+ const mode = modes[config.mode];
71
+ for (const agent of ["reviewer", "implementer"]) {
72
+ const m = mode?.[agent]?.model; if (!m || m === "inherit") continue;
73
+ const probe = spawnToolSync("claude", ["-p", "Reply with OK", "--model", m, "--max-turns", "1", "--output-format", "text"], { encoding: "utf8", windowsHide: true, timeout: 90000 });
74
+ add(`model-${agent}`, probe.status === 0 ? "pass" : "warn", probe.status === 0 ? `${agent}: ${m} answered` : `${agent}: ${m} not available on this account (${(probe.stderr || probe.stdout).trim().slice(0, 120)})`);
75
+ }
76
+ }
77
+ if (checkUpdatesNow) {
78
+ const u = await checkUpdates(root, { force: true, cliVersion });
79
+ add("updates", u.notices.length ? "warn" : "pass", u.notices.length ? u.notices.map(n => `${n.component} ${n.current} -> ${n.latest}`).join("; ") : "everything current (or unreachable)", u);
80
+ }
81
+ return { root, version: PKG.version, checks, summary: { pass: checks.filter(c => c.status === "pass").length, warn: checks.filter(c => c.status === "warn").length, fail: checks.filter(c => c.status === "fail").length } };
82
+ }
@@ -0,0 +1,13 @@
1
+ // nccgs feedback: build the local bundle (with doctor), send it or set consent. See runtime/task/feedback.mjs.
2
+ import { buildBundle, sendBundle } from "../runtime/task/feedback.mjs";
3
+ import { evaluate, setConsent, CONSENT_TEXT } from "../runtime/core/feedback-policy.mjs";
4
+ import { readText } from "../runtime/core/fs.mjs";
5
+ import { doctor } from "./doctor.mjs";
6
+
7
+ export async function feedback(root, { sinceDays = 14, note = "", withReports = false, runDoctor = true, send = false, consent = null, dryRun = false } = {}) {
8
+ if (consent) return { consent: setConsent(root, consent), text: CONSENT_TEXT.en };
9
+ const r = await buildBundle(root, { sinceDays, note, withReports, doctor: runDoctor ? doctor : null, trigger: "manual", reasons: evaluate(root).reasons });
10
+ if (send && !dryRun) r.sent = await sendBundle(root, { bundle: r.bundle, markdown: readText(r.mdFile, "") });
11
+ r.decision = evaluate(root);
12
+ return r;
13
+ }