nccgs 1.0.0

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 (278) hide show
  1. package/.claude/agents/nccgs-accessibility-specialist.md +26 -0
  2. package/.claude/agents/nccgs-adversarial-reviewer.md +26 -0
  3. package/.claude/agents/nccgs-ai-programmer.md +26 -0
  4. package/.claude/agents/nccgs-analytics-engineer.md +26 -0
  5. package/.claude/agents/nccgs-art-direction-lead.md +26 -0
  6. package/.claude/agents/nccgs-audio-direction-lead.md +26 -0
  7. package/.claude/agents/nccgs-creative-director.md +26 -0
  8. package/.claude/agents/nccgs-documentation-manager.md +26 -0
  9. package/.claude/agents/nccgs-economy-designer.md +26 -0
  10. package/.claude/agents/nccgs-engine-programmer.md +26 -0
  11. package/.claude/agents/nccgs-game-design-lead.md +26 -0
  12. package/.claude/agents/nccgs-game-designer.md +26 -0
  13. package/.claude/agents/nccgs-gameplay-programmer.md +26 -0
  14. package/.claude/agents/nccgs-level-designer.md +26 -0
  15. package/.claude/agents/nccgs-live-ops-designer.md +26 -0
  16. package/.claude/agents/nccgs-localization-lead.md +26 -0
  17. package/.claude/agents/nccgs-narrative-lead.md +26 -0
  18. package/.claude/agents/nccgs-network-programmer.md +26 -0
  19. package/.claude/agents/nccgs-performance-analyst.md +26 -0
  20. package/.claude/agents/nccgs-producer.md +26 -0
  21. package/.claude/agents/nccgs-production-coordinator.md +23 -0
  22. package/.claude/agents/nccgs-programming-lead.md +26 -0
  23. package/.claude/agents/nccgs-prototyper.md +26 -0
  24. package/.claude/agents/nccgs-qa-engineer.md +26 -0
  25. package/.claude/agents/nccgs-qa-lead.md +26 -0
  26. package/.claude/agents/nccgs-release-engineer.md +26 -0
  27. package/.claude/agents/nccgs-release-lead.md +26 -0
  28. package/.claude/agents/nccgs-security-engineer.md +26 -0
  29. package/.claude/agents/nccgs-sound-designer.md +26 -0
  30. package/.claude/agents/nccgs-systems-designer.md +26 -0
  31. package/.claude/agents/nccgs-technical-architect.md +26 -0
  32. package/.claude/agents/nccgs-technical-artist.md +26 -0
  33. package/.claude/agents/nccgs-technical-director.md +26 -0
  34. package/.claude/agents/nccgs-tools-programmer.md +26 -0
  35. package/.claude/agents/nccgs-ui-programmer.md +26 -0
  36. package/.claude/agents/nccgs-unity-build-specialist.md +26 -0
  37. package/.claude/agents/nccgs-unity-content-specialist.md +26 -0
  38. package/.claude/agents/nccgs-unity-implementer.md +26 -0
  39. package/.claude/agents/nccgs-unity-rendering-specialist.md +26 -0
  40. package/.claude/agents/nccgs-unity-systems-specialist.md +26 -0
  41. package/.claude/agents/nccgs-unity-ui-specialist.md +26 -0
  42. package/.claude/agents/nccgs-ux-designer.md +26 -0
  43. package/.claude/agents/nccgs-verification-engineer.md +26 -0
  44. package/.claude/agents/nccgs-world-builder.md +26 -0
  45. package/.claude/agents/nccgs-writer.md +26 -0
  46. package/.claude/nccgs/THIRD_PARTY_NOTICES.md +13 -0
  47. package/.claude/nccgs/VERSION +1 -0
  48. package/.claude/nccgs/constitution.md +131 -0
  49. package/.claude/nccgs/hooks/agent-audit.mjs +10 -0
  50. package/.claude/nccgs/hooks/common.mjs +41 -0
  51. package/.claude/nccgs/hooks/post-compact.mjs +1 -0
  52. package/.claude/nccgs/hooks/pre-compact.mjs +8 -0
  53. package/.claude/nccgs/hooks/protect-git.mjs +22 -0
  54. package/.claude/nccgs/hooks/protect-write.mjs +17 -0
  55. package/.claude/nccgs/hooks/session-start.mjs +15 -0
  56. package/.claude/nccgs/hooks/session-stop.mjs +7 -0
  57. package/.claude/nccgs/protocols/agent-contract.md +34 -0
  58. package/.claude/nccgs/protocols/context-packets.md +13 -0
  59. package/.claude/nccgs/protocols/evidence.md +15 -0
  60. package/.claude/nccgs/protocols/model-routing.md +22 -0
  61. package/.claude/nccgs/protocols/orchestration.md +26 -0
  62. package/.claude/nccgs/protocols/unity-boundary.md +11 -0
  63. package/.claude/nccgs/settings.fragment.json +77 -0
  64. package/.claude/nccgs/studio.json +347 -0
  65. package/.claude/nccgs/tools/configure-models.mjs +39 -0
  66. package/.claude/nccgs/unity-skills-manifest.json +727 -0
  67. package/.claude/nccgs/workflow-catalog.json +317 -0
  68. package/.claude/rules/nccgs-canonical-docs.md +19 -0
  69. package/.claude/rules/nccgs-editor-tools.md +12 -0
  70. package/.claude/rules/nccgs-localization.md +12 -0
  71. package/.claude/rules/nccgs-networking.md +13 -0
  72. package/.claude/rules/nccgs-performance.md +14 -0
  73. package/.claude/rules/nccgs-rendering.md +16 -0
  74. package/.claude/rules/nccgs-security.md +13 -0
  75. package/.claude/rules/nccgs-tests.md +18 -0
  76. package/.claude/rules/nccgs-ui.md +14 -0
  77. package/.claude/rules/nccgs-unity-assets.md +21 -0
  78. package/.claude/rules/nccgs-unity-code.md +22 -0
  79. package/.claude/skills/accessibility-review/SKILL.md +14 -0
  80. package/.claude/skills/architecture-decision/SKILL.md +14 -0
  81. package/.claude/skills/asset-audit/SKILL.md +14 -0
  82. package/.claude/skills/audit/SKILL.md +16 -0
  83. package/.claude/skills/audit/references/dimensions.md +46 -0
  84. package/.claude/skills/balance-review/SKILL.md +14 -0
  85. package/.claude/skills/bug-triage/SKILL.md +14 -0
  86. package/.claude/skills/build-live-game/SKILL.md +317 -0
  87. package/.claude/skills/build-live-game/references/achievements.md +779 -0
  88. package/.claude/skills/build-live-game/references/apis.md +280 -0
  89. package/.claude/skills/build-live-game/references/authentication.md +437 -0
  90. package/.claude/skills/build-live-game/references/battlepass.md +860 -0
  91. package/.claude/skills/build-live-game/references/cloud-code.md +563 -0
  92. package/.claude/skills/build-live-game/references/cloud-save.md +474 -0
  93. package/.claude/skills/build-live-game/references/deployment.md +216 -0
  94. package/.claude/skills/build-live-game/references/player-account.md +813 -0
  95. package/.claude/skills/build-live-game/references/remote-config.md +96 -0
  96. package/.claude/skills/build-live-game/references/tooling.md +431 -0
  97. package/.claude/skills/closure/SKILL.md +14 -0
  98. package/.claude/skills/code-review/SKILL.md +14 -0
  99. package/.claude/skills/compatibility-review/SKILL.md +14 -0
  100. package/.claude/skills/context-pack/SKILL.md +14 -0
  101. package/.claude/skills/dependency-review/SKILL.md +14 -0
  102. package/.claude/skills/design/SKILL.md +20 -0
  103. package/.claude/skills/design-review/SKILL.md +14 -0
  104. package/.claude/skills/evidence-review/SKILL.md +14 -0
  105. package/.claude/skills/hotfix/SKILL.md +14 -0
  106. package/.claude/skills/implement-in-app-purchases/README.md +233 -0
  107. package/.claude/skills/implement-in-app-purchases/SKILL.md +158 -0
  108. package/.claude/skills/implement-in-app-purchases/references/api-notes.md +562 -0
  109. package/.claude/skills/implement-in-app-purchases/references/codeless-catalog.md +331 -0
  110. package/.claude/skills/implement-in-app-purchases/references/convert-adapty.md +268 -0
  111. package/.claude/skills/implement-in-app-purchases/references/convert-essentialkit.md +239 -0
  112. package/.claude/skills/implement-in-app-purchases/references/convert-revenuecat.md +275 -0
  113. package/.claude/skills/implement-in-app-purchases/references/convert-unipay.md +145 -0
  114. package/.claude/skills/implement-in-app-purchases/references/migration-v4-to-v5.md +204 -0
  115. package/.claude/skills/implement-in-app-purchases/references/path-add-iap-to-new-project.md +198 -0
  116. package/.claude/skills/implement-in-app-purchases/references/path-convert-native-google-billing.md +356 -0
  117. package/.claude/skills/implement-in-app-purchases/references/path-convert-native-storekit.md +446 -0
  118. package/.claude/skills/implement-in-app-purchases/references/path-implement-iap-d2c.md +680 -0
  119. package/.claude/skills/implement-in-app-purchases/references/platform-notes.md +204 -0
  120. package/.claude/skills/implement-in-app-purchases/references/pre-check.md +205 -0
  121. package/.claude/skills/incident-recovery/SKILL.md +14 -0
  122. package/.claude/skills/initialize-ai-navigation/SKILL.md +95 -0
  123. package/.claude/skills/initialize-ai-navigation/references/navigation-system.md +794 -0
  124. package/.claude/skills/levelplay-unity-integration/CHANGELOG.md +57 -0
  125. package/.claude/skills/levelplay-unity-integration/README.md +74 -0
  126. package/.claude/skills/levelplay-unity-integration/SKILL.md +1126 -0
  127. package/.claude/skills/levelplay-unity-integration/references/banner-api.md +920 -0
  128. package/.claude/skills/levelplay-unity-integration/references/best-practices.md +536 -0
  129. package/.claude/skills/levelplay-unity-integration/references/ilrd-api.md +337 -0
  130. package/.claude/skills/levelplay-unity-integration/references/initialization-api.md +630 -0
  131. package/.claude/skills/levelplay-unity-integration/references/interstitial-api.md +899 -0
  132. package/.claude/skills/levelplay-unity-integration/references/ios-setup.md +491 -0
  133. package/.claude/skills/levelplay-unity-integration/references/migration-sdk-9.md +666 -0
  134. package/.claude/skills/levelplay-unity-integration/references/privacy-settings.md +608 -0
  135. package/.claude/skills/levelplay-unity-integration/references/rewarded-api.md +902 -0
  136. package/.claude/skills/localization/SKILL.md +135 -0
  137. package/.claude/skills/localization/references/api-notes.md +76 -0
  138. package/.claude/skills/localization/resources/L10nBatchProcessor.cs +69 -0
  139. package/.claude/skills/localization/resources/LocalizedFontAsset.cs +18 -0
  140. package/.claude/skills/localize-game/SKILL.md +14 -0
  141. package/.claude/skills/migrate-project/SKILL.md +21 -0
  142. package/.claude/skills/migrate-project/references/procedure.md +63 -0
  143. package/.claude/skills/milestone-review/SKILL.md +14 -0
  144. package/.claude/skills/new-unity-project/SKILL.md +179 -0
  145. package/.claude/skills/optimize-audio/SKILL.md +199 -0
  146. package/.claude/skills/optimize-audio/resources/audio-import-api.md +146 -0
  147. package/.claude/skills/optimize-audio/resources/platform-settings.md +48 -0
  148. package/.claude/skills/optimize-text-mesh-pro/SKILL.md +182 -0
  149. package/.claude/skills/optimize-web/SKILL.md +393 -0
  150. package/.claude/skills/optimize-web/resources/WebOptimizer.cs +21 -0
  151. package/.claude/skills/optimize-web/resources/toktx-examples.sh +11 -0
  152. package/.claude/skills/performance-audit/SKILL.md +14 -0
  153. package/.claude/skills/physics-3d-collision/SKILL.md +442 -0
  154. package/.claude/skills/physics-3d-collision/references/troubleshooting.md +41 -0
  155. package/.claude/skills/physics-3d-collision/resources/CollisionDebugger.cs +33 -0
  156. package/.claude/skills/plan-feature/SKILL.md +14 -0
  157. package/.claude/skills/playtest/SKILL.md +14 -0
  158. package/.claude/skills/project-stage/SKILL.md +14 -0
  159. package/.claude/skills/prototype-feature/SKILL.md +14 -0
  160. package/.claude/skills/qa-plan/SKILL.md +14 -0
  161. package/.claude/skills/release/SKILL.md +18 -0
  162. package/.claude/skills/release-readiness/SKILL.md +14 -0
  163. package/.claude/skills/retrospective/SKILL.md +14 -0
  164. package/.claude/skills/review/SKILL.md +16 -0
  165. package/.claude/skills/security-audit/SKILL.md +14 -0
  166. package/.claude/skills/setup-multiplayer-services/SKILL.md +39 -0
  167. package/.claude/skills/setup-multiplayer-services/references/dgs-entrypoint.md +79 -0
  168. package/.claude/skills/setup-multiplayer-services/references/entrypoints.md +213 -0
  169. package/.claude/skills/setup-multiplayer-services/references/examples.md +33 -0
  170. package/.claude/skills/setup-multiplayer-services/references/implementation-fit.md +30 -0
  171. package/.claude/skills/setup-multiplayer-services/references/underlying-services.md +11 -0
  172. package/.claude/skills/setup-multiplayer-services/references/workflows-prerequisites.md +17 -0
  173. package/.claude/skills/setup-vivox-voice-chat/SKILL.md +118 -0
  174. package/.claude/skills/setup-vivox-voice-chat/evals/.env.example +6 -0
  175. package/.claude/skills/setup-vivox-voice-chat/evals/README.md +101 -0
  176. package/.claude/skills/setup-vivox-voice-chat/evals/promptfooconfig.yaml +32 -0
  177. package/.claude/skills/setup-vivox-voice-chat/evals/tests/init-and-login.yaml +76 -0
  178. package/.claude/skills/setup-vivox-voice-chat/evals/tests/text-chat.yaml +65 -0
  179. package/.claude/skills/setup-vivox-voice-chat/evals/tests/voice-channels.yaml +74 -0
  180. package/.claude/skills/setup-vivox-voice-chat/references/events-and-participants.md +79 -0
  181. package/.claude/skills/setup-vivox-voice-chat/references/init-and-login.md +92 -0
  182. package/.claude/skills/setup-vivox-voice-chat/references/text-chat.md +93 -0
  183. package/.claude/skills/setup-vivox-voice-chat/references/troubleshooting.md +47 -0
  184. package/.claude/skills/setup-vivox-voice-chat/references/voice-channels.md +90 -0
  185. package/.claude/skills/shader-graph-create-custom-node/SKILL.md +25 -0
  186. package/.claude/skills/shader-graph-create-custom-node/resources/all_hints.hlsl +182 -0
  187. package/.claude/skills/sprint-plan/SKILL.md +14 -0
  188. package/.claude/skills/sprite-editor/SKILL.md +66 -0
  189. package/.claude/skills/sprite-editor/references/api_reference.md +151 -0
  190. package/.claude/skills/sprite-editor/references/background.md +112 -0
  191. package/.claude/skills/sprite-editor/references/templates.md +72 -0
  192. package/.claude/skills/sprite-editor/scripts/AutomaticSliceTexture.cs +40 -0
  193. package/.claude/skills/sprite-editor/scripts/GenerateNewSpriteRects.cs +200 -0
  194. package/.claude/skills/sprite-editor/scripts/GetTextureSourceImageSize.cs +32 -0
  195. package/.claude/skills/sprite-editor/scripts/GetTextureToSlice.cs +55 -0
  196. package/.claude/skills/sprite-editor/scripts/GridSliceTexture.cs +40 -0
  197. package/.claude/skills/sprite-editor/scripts/IsometricSliceTexture.cs +141 -0
  198. package/.claude/skills/sprite-editor/scripts/README.md +134 -0
  199. package/.claude/skills/sprite-editor/scripts/SetPivotExample.cs +58 -0
  200. package/.claude/skills/sprite-editor/scripts/SpriteToPng.cs +88 -0
  201. package/.claude/skills/status/SKILL.md +16 -0
  202. package/.claude/skills/story-readiness/SKILL.md +14 -0
  203. package/.claude/skills/test/SKILL.md +16 -0
  204. package/.claude/skills/ui/SKILL.md +142 -0
  205. package/.claude/skills/ui-imgui/SKILL.md +186 -0
  206. package/.claude/skills/ui-imgui/references/gui-elements.md +156 -0
  207. package/.claude/skills/ui-imgui/references/templates.md +141 -0
  208. package/.claude/skills/ui-review/SKILL.md +14 -0
  209. package/.claude/skills/ui-ugui/SKILL.md +282 -0
  210. package/.claude/skills/ui-ugui/references/scrollview-setup.md +29 -0
  211. package/.claude/skills/ui-uitk/SKILL.md +235 -0
  212. package/.claude/skills/ui-uitk/references/common-issues.md +74 -0
  213. package/.claude/skills/ui-uitk/references/custom-elements.md +241 -0
  214. package/.claude/skills/ui-uitk/references/painter2d.md +282 -0
  215. package/.claude/skills/ui-uitk/references/pointermanipulator-guide.md +94 -0
  216. package/.claude/skills/ui-uitk/references/svg-icons.md +136 -0
  217. package/.claude/skills/ui-uitk/references/ui-runtime-binding.md +234 -0
  218. package/.claude/skills/ui-uitk/references/uss-guide.md +138 -0
  219. package/.claude/skills/unity-cli/CHANGELOG.md +233 -0
  220. package/.claude/skills/unity-cli/SECURITY.md +22 -0
  221. package/.claude/skills/unity-cli/SKILL.md +414 -0
  222. package/.claude/skills/unity-cli/references/auth-license-cloud.md +146 -0
  223. package/.claude/skills/unity-cli/references/build-run-test.md +349 -0
  224. package/.claude/skills/unity-cli/references/collaboration.md +472 -0
  225. package/.claude/skills/unity-cli/references/config-hub.md +103 -0
  226. package/.claude/skills/unity-cli/references/diagnostics-maintenance.md +326 -0
  227. package/.claude/skills/unity-cli/references/editors-install.md +327 -0
  228. package/.claude/skills/unity-cli/references/integration-advanced.md +472 -0
  229. package/.claude/skills/unity-cli/references/projects-templates.md +574 -0
  230. package/.claude/skills/unity-package-management/SKILL.md +304 -0
  231. package/.claude/skills/unity-package-management/references/select-packages.md +108 -0
  232. package/.claude/skills/urp-postprocessing/SKILL.md +188 -0
  233. package/.claude/skills/urp-postprocessing/references/code-templates.md +119 -0
  234. package/.claude/skills/urp-postprocessing/references/effect-reference.md +86 -0
  235. package/.claude/skills/validate-urp-render-graph-renderer-feature/SKILL.md +269 -0
  236. package/.claude/skills/work/SKILL.md +36 -0
  237. package/.claude/skills/work/references/classification.md +41 -0
  238. package/.claude/skills/work/references/closure.md +50 -0
  239. package/.claude/skills/work/references/feature-contracts.md +32 -0
  240. package/.claude/skills/work/references/verification.md +26 -0
  241. package/CLAUDE.md +6 -0
  242. package/LICENSE +21 -0
  243. package/README.md +162 -0
  244. package/THIRD_PARTY_NOTICES.md +23 -0
  245. package/UPGRADING.md +32 -0
  246. package/VERSION +1 -0
  247. package/docs/ARCHITECTURE.md +73 -0
  248. package/docs/HUONG-DAN-MIGRATE-VA-SU-DUNG.md +324 -0
  249. package/docs/MIGRATION-MATRIX.md +23 -0
  250. package/docs/PROJECT-POLICY.md +67 -0
  251. package/docs/WORKFLOWS.md +61 -0
  252. package/package-assets/setup-vivox-voice-chat-evals.gitignore +7 -0
  253. package/package.json +41 -0
  254. package/scaffold/.nccgs/bugs/.gitkeep +1 -0
  255. package/scaffold/.nccgs/closures/.gitkeep +1 -0
  256. package/scaffold/.nccgs/context/.gitkeep +1 -0
  257. package/scaffold/.nccgs/decisions/.gitkeep +1 -0
  258. package/scaffold/.nccgs/evidence/.gitkeep +1 -0
  259. package/scaffold/.nccgs/features/.gitkeep +1 -0
  260. package/scaffold/.nccgs/migrations/.gitkeep +1 -0
  261. package/scaffold/.nccgs/playtests/.gitkeep +1 -0
  262. package/scaffold/.nccgs/project.yaml +103 -0
  263. package/scaffold/.nccgs/requirements.yaml +10 -0
  264. package/scaffold/.nccgs/reviews/.gitkeep +1 -0
  265. package/scaffold/.nccgs/state.md +40 -0
  266. package/scaffold/.nccgs/templates/agent-handoff.md +25 -0
  267. package/scaffold/.nccgs/templates/architecture-decision.md +27 -0
  268. package/scaffold/.nccgs/templates/closure-record.md +51 -0
  269. package/scaffold/.nccgs/templates/context-packet.yaml +17 -0
  270. package/scaffold/.nccgs/templates/evidence-record.md +23 -0
  271. package/scaffold/.nccgs/templates/feature-contract.md +35 -0
  272. package/scaffold/.nccgs/templates/migration-plan.md +40 -0
  273. package/scaffold/.nccgs/templates/waiver.md +11 -0
  274. package/scripts/cli.mjs +56 -0
  275. package/scripts/install.mjs +267 -0
  276. package/scripts/sync-unity-skills.mjs +126 -0
  277. package/scripts/validate.mjs +205 -0
  278. package/tests/framework.test.mjs +121 -0
@@ -0,0 +1,131 @@
1
+ # NCCGS constitution
2
+
3
+ NCCGS is a Unity-first studio operating system. It combines project governance,
4
+ specialized studio roles, composable workflows, official Unity Skills, objective
5
+ evidence, and Product Owner authority.
6
+
7
+ ## Authority order
8
+
9
+ When instructions disagree, use this order:
10
+
11
+ 1. the user's explicit current instruction;
12
+ 2. recorded Product Owner decisions and canonical project documents;
13
+ 3. `.nccgs/project.yaml` and accepted architecture decisions;
14
+ 4. the active feature contract and requirement registry;
15
+ 5. established project code and test patterns;
16
+ 6. NCCGS protocols, workflows, and role contracts;
17
+ 7. generic recommendations from official Unity Skills;
18
+ 8. model inference.
19
+
20
+ Never let generic advice silently override project truth.
21
+
22
+ ## Project bootstrap
23
+
24
+ For meaningful project work:
25
+
26
+ 1. read `.nccgs/project.yaml` and `.nccgs/state.md` when present;
27
+ 2. create or refresh a focused context packet for STANDARD or CONTROLLED work;
28
+ 3. load only the canonical sections, decisions, code, and tests routed by that
29
+ packet;
30
+ 4. inspect repository status and preserve unrelated work;
31
+ 5. use `/migrate-project` if project policy is still a template.
32
+
33
+ Do not read every GDD, ADR, report, or Unity reference by default. Full-source reads
34
+ are justified only by missing summaries, contradictions, audits, or CONTROLLED risk.
35
+
36
+ ## Product Owner authority
37
+
38
+ An implementation request authorizes ordinary reversible code/content edits, safe
39
+ refactors, tests, technical documentation synchronization, Unity Editor operations,
40
+ runtime inspection, and relevant regression. Do not request approval file by file.
41
+
42
+ Escalate before changing gameplay semantics, canon, scope, subjective acceptance,
43
+ public architecture contracts, save/serialization compatibility, network authority,
44
+ dependencies/services, or irreversible migrations. Batch related decisions and keep
45
+ safe independent work moving.
46
+
47
+ ## Risk and routing
48
+
49
+ Classify work as FAST, STANDARD, or CONTROLLED. Select roles by domain and risk,
50
+ not by title alone.
51
+
52
+ - **FAST**: local and unambiguous; normally one implementer and targeted evidence.
53
+ - **STANDARD**: meaningful feature or multi-file change; context packet, focused
54
+ specialists, independent verification, and closure.
55
+ - **CONTROLLED**: architecture, compatibility, dependency, migration, security,
56
+ release, or unresolved design risk; deep reasoning, impact analysis, recorded
57
+ decisions, adversarial review, and full relevant gates.
58
+
59
+ The primary session owns the execution graph. Keep subagent depth at one unless
60
+ project policy explicitly permits otherwise. Use parallel roles only when their
61
+ inputs and write ownership are independent. Never assign two writers to the same
62
+ path in one batch.
63
+
64
+ Read `.claude/nccgs/protocols/orchestration.md` when composing a multi-role team and
65
+ `.claude/nccgs/protocols/model-routing.md` when selecting or escalating models.
66
+
67
+ ## Role contract
68
+
69
+ Every NCCGS agent must follow `.claude/nccgs/protocols/agent-contract.md` and return
70
+ a bounded handoff: findings or changes, evidence, decisions needed, risks, and next
71
+ owner. Agents do not simulate management chains or recursively delegate work.
72
+
73
+ Specialization is valuable when it isolates expertise and failure modes. Do not
74
+ collapse distinct gameplay, engine, UI, networking, security, performance, content,
75
+ QA, or release responsibilities into a generic implementation opinion.
76
+
77
+ ## Unity boundary
78
+
79
+ Official Unity Skills are the canonical source for generic Unity operation mechanics.
80
+ Use the relevant skill, especially `unity-cli`, for CLI/Pipeline, connected Editor,
81
+ build, test, runtime, scene, prefab, asset, and serialized-object operations.
82
+
83
+ NCCGS roles decide intent, architecture, ownership, acceptance, and evidence. Unity
84
+ Skills decide how to perform Unity operations. Project policy overrides generic
85
+ recommendations. Do not hand-edit `.unity`, `.prefab`, `.asset`, or `.meta`
86
+ serialization as a shortcut.
87
+
88
+ Read `.claude/nccgs/protocols/unity-boundary.md` for Unity work spanning multiple
89
+ roles or official skills.
90
+
91
+ ## Evidence and independence
92
+
93
+ Keep these states distinct:
94
+
95
+ - **IMPLEMENTED**: requested change exists;
96
+ - **VERIFIED**: objective evidence matches the approved specification;
97
+ - **VALIDATED**: required subjective experience has been accepted;
98
+ - **DONE**: every configured technical, artifact, and Product Owner gate is closed.
99
+
100
+ Implementation is not its own proof. Verification should be independent for
101
+ STANDARD and CONTROLLED work when practical. Evidence may include compilation,
102
+ EditMode/PlayMode tests, runtime state, console state, serialized references,
103
+ builds, profiling, security checks, and targeted regression.
104
+
105
+ Read `.claude/nccgs/protocols/evidence.md` for evidence strength and review rules.
106
+
107
+ ## Closure and traceability
108
+
109
+ Every feature has one canonical closure record. Project policy may require linked
110
+ implementation reports, registers, evidence files, checklists, or manual gates. A
111
+ canonical entry point does not erase those safeguards.
112
+
113
+ Apply `lean`, `linked`, or `strict` closure exactly as configured. A waiver must name
114
+ the blocked item, rationale, scope, authority, and date; silence is never a waiver.
115
+
116
+ Assign stable requirement IDs to meaningful player-visible contracts, technical
117
+ invariants, acceptance criteria, and cross-system dependencies. Do not change canon
118
+ to match divergent implementation without Product Owner authority.
119
+
120
+ ## Git and ownership safety
121
+
122
+ Respect protected paths, user-owned content, local settings, and generated assets.
123
+ Inspect the final diff before closure. Do not use destructive resets, force pushes,
124
+ broad cleans, unexplained reverts, or amendment of user commits.
125
+
126
+ ## Workflow entrypoints
127
+
128
+ The main entrypoints are `/work`, `/design`, `/audit`, `/migrate-project`, `/test`,
129
+ `/review`, `/release`, and `/status`. They compose specialist skills and roles from
130
+ the catalogs under `.claude/nccgs/`; the user should not have to manually coordinate
131
+ the studio.
@@ -0,0 +1,10 @@
1
+ import { appendRuntime, readInput } from "./common.mjs";
2
+
3
+ const input = await readInput();
4
+ appendRuntime({
5
+ timestamp: new Date().toISOString(),
6
+ event: process.argv[2] === "stop" ? "agent_stop" : "agent_start",
7
+ sessionId: input.session_id ?? null,
8
+ agentId: input.agent_id ?? null,
9
+ agentType: input.agent_type ?? "unknown"
10
+ });
@@ -0,0 +1,41 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { spawnSync } from "node:child_process";
4
+
5
+ export async function readInput() {
6
+ let text = "";
7
+ for await (const chunk of process.stdin) text += chunk;
8
+ if (!text.trim()) return {};
9
+ try { return JSON.parse(text); } catch { return {}; }
10
+ }
11
+
12
+ export function projectRoot() {
13
+ return process.cwd();
14
+ }
15
+
16
+ export function readText(relative, limit = 12000) {
17
+ const file = path.join(projectRoot(), relative);
18
+ if (!fs.existsSync(file)) return "";
19
+ return fs.readFileSync(file, "utf8").slice(0, limit);
20
+ }
21
+
22
+ export function git(args) {
23
+ const result = spawnSync("git", args, { cwd: projectRoot(), encoding: "utf8", timeout: 5000 });
24
+ return result.status === 0 ? (result.stdout ?? "").trim() : "";
25
+ }
26
+
27
+ export function appendRuntime(event) {
28
+ try {
29
+ const directory = path.join(projectRoot(), ".nccgs", "runtime");
30
+ fs.mkdirSync(directory, { recursive: true });
31
+ fs.appendFileSync(path.join(directory, "events.jsonl"), `${JSON.stringify(event)}\n`, "utf8");
32
+ } catch {
33
+ // Audit logging is best-effort and must never block project work.
34
+ }
35
+ }
36
+
37
+ export function yamlValue(text, section, key) {
38
+ const block = text.match(new RegExp(`^${section}:\\s*$([\\s\\S]*?)(?=^[A-Za-z_][A-Za-z0-9_]*:\\s*$|\\Z)`, "m"));
39
+ if (!block) return "";
40
+ return block[1].match(new RegExp(`^\\s+${key}:\\s*([^#\\r\\n]+)`, "m"))?.[1]?.trim() ?? "";
41
+ }
@@ -0,0 +1 @@
1
+ console.log("NCCGS: recover from .nccgs/state.md, then the active context packet and exact working set before continuing.");
@@ -0,0 +1,8 @@
1
+ import { git, readText } from "./common.mjs";
2
+
3
+ console.log("NCCGS recovery checkpoint before compaction");
4
+ const state = readText(".nccgs/state.md", 8000);
5
+ console.log(state || "No .nccgs/state.md found.");
6
+ const changed = git(["status", "--short"]);
7
+ console.log("Working tree:\n" + (changed || "clean"));
8
+ console.log("After compaction, read state, the active context packet, and its exact working set; do not reload all canonical documents.");
@@ -0,0 +1,22 @@
1
+ import { git, readInput, readText } from "./common.mjs";
2
+
3
+ const input = await readInput();
4
+ const command = input?.tool_input?.command ?? "";
5
+ const blocked = [
6
+ /(^|\s)git\s+reset\s+--hard(?:\s|$)/i,
7
+ /(^|\s)git\s+clean\s+-[^\s]*f/i,
8
+ /(^|\s)git\s+push\b[^\n]*(?:--force|-f)(?:\s|$)/i,
9
+ /(^|\s)(?:rm|rmdir)\s+[^\n]*(?:-rf|-fr)(?:\s|$)/i
10
+ ];
11
+ if (blocked.some((pattern) => pattern.test(command))) {
12
+ console.error("BLOCKED by NCCGS: destructive Git/filesystem command requires an explicit, exact Product Owner request and a recoverable target.");
13
+ process.exit(2);
14
+ }
15
+
16
+ if (/^\s*git\s+push\b/i.test(command)) {
17
+ const branch = git(["branch", "--show-current"]);
18
+ const policy = readText(".nccgs/project.yaml");
19
+ if (["main", "master"].includes(branch) || policy.includes(`- ${branch}`)) {
20
+ console.error(`NCCGS warning: pushing protected branch '${branch}'. Confirm release/test gates and repository scope.`);
21
+ }
22
+ }
@@ -0,0 +1,17 @@
1
+ import path from "node:path";
2
+ import { readInput, readText } from "./common.mjs";
3
+
4
+ const input = await readInput();
5
+ const raw = input?.tool_input?.file_path ?? input?.tool_input?.path ?? "";
6
+ const normalized = raw.replaceAll("\\", "/");
7
+ if (!normalized.includes("/.claude/skills/") && !normalized.startsWith(".claude/skills/")) process.exit(0);
8
+
9
+ const relative = normalized.split("/.claude/skills/")[1] ?? normalized.slice(".claude/skills/".length);
10
+ const skill = relative.split("/")[0];
11
+ const manifestText = readText(".claude/nccgs/unity-skills-manifest.json", 200000);
12
+ let names = [];
13
+ try { names = JSON.parse(manifestText).skills?.map((item) => item.name) ?? []; } catch {}
14
+ if (names.includes(skill)) {
15
+ console.error(`BLOCKED by NCCGS: '${skill}' is a vendored official Unity Skill. Put project-specific guidance in .nccgs/project.yaml or update the upstream snapshot through the sync workflow.`);
16
+ process.exit(2);
17
+ }
@@ -0,0 +1,15 @@
1
+ import { git, readText, yamlValue } from "./common.mjs";
2
+
3
+ const version = readText(".claude/nccgs/VERSION", 100).trim() || "unknown";
4
+ const policy = readText(".nccgs/project.yaml");
5
+ const state = readText(".nccgs/state.md", 6000);
6
+ const branch = git(["branch", "--show-current"]) || "not-a-git-repository";
7
+ const changes = git(["status", "--short"]).split(/\r?\n/).filter(Boolean).length;
8
+ const model = yamlValue(policy, "models", "profile") || "unconfigured";
9
+
10
+ console.log(`NCCGS ${version} | branch ${branch} | ${changes} working-tree change(s) | model profile ${model}`);
11
+ if (state) {
12
+ console.log("Read .nccgs/state.md and the active context packet before resuming meaningful work.");
13
+ } else {
14
+ console.log("No NCCGS state found; run /migrate-project review or /status.");
15
+ }
@@ -0,0 +1,7 @@
1
+ import { readText } from "./common.mjs";
2
+
3
+ const state = readText(".nccgs/state.md", 10000);
4
+ const blockers = state.match(/## Blockers and gates\s*([\s\S]*?)(?=\n## |$)/)?.[1]?.trim();
5
+ if (blockers && !/^- None recorded\s*$/m.test(blockers)) {
6
+ console.log("NCCGS session ending with recorded blockers/gates:\n" + blockers.slice(0, 3000));
7
+ }
@@ -0,0 +1,34 @@
1
+ # NCCGS agent contract
2
+
3
+ All studio agents use this contract in addition to their role file.
4
+
5
+ ## Inputs
6
+
7
+ Before acting, obtain the task objective and risk tier, project authority and
8
+ ownership, the focused context packet for STANDARD or CONTROLLED work, exact owned
9
+ files/evidence, dependencies, and unresolved Product Owner decisions.
10
+
11
+ If an input is absent, inspect only enough to recover it. Do not broaden the task or
12
+ load every project document.
13
+
14
+ ## Boundaries
15
+
16
+ - Stay inside the role's domain and assigned write set.
17
+ - Do not recursively spawn or delegate to another agent. Return a handoff to the
18
+ primary orchestrator when another specialty is needed.
19
+ - Do not make gameplay, canon, scope, dependency, compatibility, or subjective
20
+ acceptance decisions reserved for the Product Owner.
21
+ - Do not overwrite another active role's paths.
22
+ - Preserve unrelated changes and report discovered overlap.
23
+
24
+ ## Work standard
25
+
26
+ Separate facts, inferences, recommendations, edits, and evidence. Follow project
27
+ patterns before generic preferences. Use official Unity Skills for Unity operation
28
+ mechanics. Record deviations instead of silently normalizing the project.
29
+
30
+ ## Required handoff
31
+
32
+ Return: **Outcome**, **Changed/produced**, **Evidence**, **Risks and deviations**,
33
+ **Decisions needed**, and **Next owner**. Do not claim `DONE`; only the closure
34
+ workflow evaluates final project gates.
@@ -0,0 +1,13 @@
1
+ # Context packet protocol
2
+
3
+ A context packet is a task-specific map, not a copy of project documentation. Store
4
+ it under `.nccgs/context/<feature-id>.yaml` for STANDARD or CONTROLLED work.
5
+
6
+ Include objective, risk tier, domains, accountable owner, requirement IDs, exact
7
+ canonical sections, decision summaries with source anchors, affected/protected paths,
8
+ approved semantics, out-of-scope boundaries, dependencies, verification, PO gates,
9
+ source revisions, and contradictions.
10
+
11
+ Prefer anchors, IDs, paths, and hashes over pasted prose. Update the packet when its
12
+ sources change. Read a full source only when the packet records why its summary is
13
+ insufficient.
@@ -0,0 +1,15 @@
1
+ # Evidence protocol
2
+
3
+ Evidence must address an acceptance criterion or risk; volume is not quality.
4
+
5
+ Strength order: deterministic automated tests; controlled runtime/build observation;
6
+ compiler/analyzer/profiler/security output; serialized configuration inspection;
7
+ static source inspection; unsupported implementation claims.
8
+
9
+ For STANDARD work, verify from requirements and the final diff rather than the
10
+ implementer's rationale. CONTROLLED work also receives adversarial review. Record
11
+ test counts, skips, baselines, environment, failures, and relevant Unity console or
12
+ build state. A changed baseline must be explained before closure.
13
+
14
+ Subjective experience remains a Product Owner gate. Provide a reproducible scenario
15
+ and what to observe; never fabricate validation.
@@ -0,0 +1,22 @@
1
+ # Model routing protocol
2
+
3
+ Model choice is a quality and compatibility policy, not a status symbol.
4
+
5
+ ## Capability classes
6
+
7
+ - `lightweight`: indexing, state, formatting, deterministic documentation updates;
8
+ - `standard`: implementation, focused design, tests, ordinary domain analysis;
9
+ - `deep`: architecture, migration, adversarial reasoning, cross-domain conflicts;
10
+ - `leadership`: product-wide creative, technical, or production synthesis.
11
+
12
+ The package ships with a `quality` profile: lightweight uses Haiku, standard uses
13
+ Sonnet, and deep/leadership use Opus. `balanced` moves routine leadership to Sonnet.
14
+ `inherit` removes agent model pins and uses the session model.
15
+
16
+ Select the role first, then apply project model policy. Do not call Opus merely
17
+ because a role sounds senior. Escalate when evidence shows cross-system ambiguity,
18
+ irreversible risk, security implications, conflicting canon, or repeated failed
19
+ hypotheses.
20
+
21
+ If a pinned model is unavailable or incompatible with the current context mode, use
22
+ the configured inherit fallback and report it. Model failure is not task failure.
@@ -0,0 +1,26 @@
1
+ # Orchestration protocol
2
+
3
+ Use this protocol when work benefits from more than one studio role.
4
+
5
+ 1. Identify the smallest complete set of domains required by the approved outcome.
6
+ 2. Separate decision work, implementation work, and independent verification.
7
+ 3. Assign one accountable owner to every output and writable path.
8
+ 4. Express dependencies as a directed acyclic graph.
9
+ 5. Run independent read-only analysis in parallel; serialize overlapping writes.
10
+ 6. Stop dependent work when an upstream contract is unresolved.
11
+
12
+ Default maximum subagent depth is one. The primary session composes the graph,
13
+ passes context packets, merges handoffs, and owns closure. Agents return requests for
14
+ another specialty instead of spawning their own hierarchy.
15
+
16
+ ## Team sizing
17
+
18
+ - FAST: normally no subagent or one specialist.
19
+ - STANDARD: one accountable implementer plus independent verification; add a design
20
+ or domain specialist only when the feature actually needs it.
21
+ - CONTROLLED: decision owner, affected specialists, implementer, verification, and
22
+ adversarial reviewer. Avoid ceremonial roles with no distinct deliverable.
23
+
24
+ Pass a context packet path and exact responsibility. Do not paste full GDDs, ADRs,
25
+ or chat history into every prompt. Surface blocked nodes immediately and preserve
26
+ completed independent outputs.
@@ -0,0 +1,11 @@
1
+ # Unity responsibility boundary
2
+
3
+ Studio roles own player intent, architecture, subsystem boundaries, project truth,
4
+ test strategy, risk, acceptance, and closure. Official Unity Skills own current Unity
5
+ CLI/Pipeline syntax and Editor, scene, prefab, asset, package, build, test, runtime,
6
+ and service procedures covered by their descriptions.
7
+
8
+ Do not duplicate official operational instructions inside NCCGS roles. Do not allow
9
+ an official skill to choose gameplay semantics, add a service, or override protected
10
+ settings. The role defines outcome and constraints; the official skill performs the
11
+ operation and returns evidence.
@@ -0,0 +1,77 @@
1
+ {
2
+ "permissions": {
3
+ "deny": [
4
+ "Bash(rm -rf *)",
5
+ "Bash(git reset --hard*)",
6
+ "Bash(git clean -f*)",
7
+ "Bash(git push --force*)",
8
+ "Bash(git push -f *)",
9
+ "Bash(*>.env*)",
10
+ "Read(**/.env*)"
11
+ ]
12
+ },
13
+ "hooks": {
14
+ "SessionStart": [
15
+ {
16
+ "matcher": "",
17
+ "hooks": [
18
+ { "type": "command", "command": "node .claude/nccgs/hooks/session-start.mjs", "timeout": 10 }
19
+ ]
20
+ }
21
+ ],
22
+ "PreToolUse": [
23
+ {
24
+ "matcher": "Bash",
25
+ "hooks": [
26
+ { "type": "command", "command": "node .claude/nccgs/hooks/protect-git.mjs", "timeout": 10 }
27
+ ]
28
+ },
29
+ {
30
+ "matcher": "Write|Edit",
31
+ "hooks": [
32
+ { "type": "command", "command": "node .claude/nccgs/hooks/protect-write.mjs", "timeout": 10 }
33
+ ]
34
+ }
35
+ ],
36
+ "PreCompact": [
37
+ {
38
+ "matcher": "",
39
+ "hooks": [
40
+ { "type": "command", "command": "node .claude/nccgs/hooks/pre-compact.mjs", "timeout": 10 }
41
+ ]
42
+ }
43
+ ],
44
+ "PostCompact": [
45
+ {
46
+ "matcher": "",
47
+ "hooks": [
48
+ { "type": "command", "command": "node .claude/nccgs/hooks/post-compact.mjs", "timeout": 10 }
49
+ ]
50
+ }
51
+ ],
52
+ "SubagentStart": [
53
+ {
54
+ "matcher": "",
55
+ "hooks": [
56
+ { "type": "command", "command": "node .claude/nccgs/hooks/agent-audit.mjs start", "timeout": 5 }
57
+ ]
58
+ }
59
+ ],
60
+ "SubagentStop": [
61
+ {
62
+ "matcher": "",
63
+ "hooks": [
64
+ { "type": "command", "command": "node .claude/nccgs/hooks/agent-audit.mjs stop", "timeout": 5 }
65
+ ]
66
+ }
67
+ ],
68
+ "Stop": [
69
+ {
70
+ "matcher": "",
71
+ "hooks": [
72
+ { "type": "command", "command": "node .claude/nccgs/hooks/session-stop.mjs", "timeout": 10 }
73
+ ]
74
+ }
75
+ ]
76
+ }
77
+ }