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,96 @@
1
+ # Remote Config Reference
2
+
3
+ ## Table of Contents
4
+
5
+ - [Overview](#overview)
6
+ - [How It Works](#how-it-works)
7
+ - [FetchConfigsAsync API](#fetchconfigsasync-api)
8
+ - [.rc File Format](#rc-file-format)
9
+ - [Game Overrides](#game-overrides)
10
+ - [Common Patterns](#common-patterns)
11
+ - [Code Template -- Load JSON Config](#code-template--load-json-config)
12
+
13
+ ## Overview
14
+
15
+ Server-side game configuration. Store game definitions (achievement lists, battle pass tiers, shop catalogs) as JSON entries updatable without a client build. Accessed via `RemoteConfigService.Instance`.
16
+
17
+ - **Namespace:** `Unity.Services.RemoteConfig`
18
+ - **Package:** `com.unity.remote-config`
19
+
20
+ ## How It Works
21
+
22
+ - Configuration is stored as key-value entries in the Unity Dashboard or deployed via `.rc` files through the Deployment Window.
23
+ - The client fetches all config at once using `FetchConfigsAsync`.
24
+ - Values are strongly typed: `string`, `bool`, `int`, `float`, `long`, and `JSON`.
25
+
26
+ ## FetchConfigsAsync API
27
+
28
+ ```csharp
29
+ struct UserAttributes {}
30
+ struct AppAttributes {}
31
+ var result = await RemoteConfigService.Instance.FetchConfigsAsync(
32
+ new UserAttributes(), new AppAttributes());
33
+ // Access values:
34
+ string val = result.config.GetString("key");
35
+ int num = result.config.GetInt("key");
36
+ bool flag = result.config.GetBool("key");
37
+ // For JSON values:
38
+ var token = result.config["key"]; // JToken
39
+ var obj = token.ToObject<MyType>();
40
+ ```
41
+
42
+ - `UserAttributes` and `AppAttributes` are empty structs unless you use Game Overrides (audience targeting).
43
+ - Results are cached locally; subsequent calls return cached data unless you call with different attributes.
44
+
45
+ ## .rc File Format
46
+
47
+ ```json
48
+ {
49
+ "$schema": "https://ugs-config-schemas.unity3d.com/v1/remote-config.schema.json",
50
+ "entries": {
51
+ "my_string_key": "hello",
52
+ "my_int_key": 42,
53
+ "my_json_key": { "nested": true }
54
+ },
55
+ "types": {
56
+ "my_json_key": "JSON"
57
+ }
58
+ }
59
+ ```
60
+
61
+ - **Create via:** Right-click in Project window > Assets > Create > Services > Remote Config
62
+ - **Deploy via:** the Deployment Window (Services > Deployment)
63
+ - The `types` block is needed only for JSON entries; `string`, `int`, `bool`, `float`, and `long` are auto-detected.
64
+
65
+ ## Game Overrides
66
+
67
+ Game Overrides (via `com.unity.services.tooling`) override Remote Config values for specific player segments. Remote Config itself does not provide A/B testing -- Game Overrides layer on top of it.
68
+
69
+ - Game Overrides are defined as `.ugo` files.
70
+ - Used for A/B testing and audience targeting.
71
+ - Configured in the Unity Dashboard or deployed via `.ugo` files through the Deployment Window.
72
+ - When active, `FetchConfigsAsync` returns the overridden values automatically.
73
+
74
+ ## Common Patterns
75
+
76
+ - **Game definitions** (achievements, battle pass tiers) stored as JSON arrays under a single key.
77
+ - **Feature flags** stored as booleans for toggling game features server-side.
78
+ - **Version-specific config** with server-side updates -- change game balance without shipping a new client build.
79
+
80
+ ## Code Template -- Load JSON Config
81
+
82
+ ```csharp
83
+ using Unity.Services.RemoteConfig;
84
+ using Newtonsoft.Json.Linq;
85
+
86
+ struct UserAttributes {}
87
+ struct AppAttributes {}
88
+
89
+ async Task<List<T>> LoadJsonConfigAsync<T>(string key)
90
+ {
91
+ var result = await RemoteConfigService.Instance.FetchConfigsAsync(
92
+ new UserAttributes(), new AppAttributes());
93
+ var token = result.config[key];
94
+ return token.ToObject<List<T>>();
95
+ }
96
+ ```
@@ -0,0 +1,431 @@
1
+ # Tooling Reference
2
+
3
+ ## Table of Contents
4
+
5
+ - [Overview](#overview)
6
+ - [Access Control](#access-control)
7
+ - [`.ac` File Format](#ac-file-format)
8
+ - [URN Pattern Format](#urn-pattern-format)
9
+ - [URN Reference by Service](#urn-reference-by-service)
10
+ - [Recommended Pattern: Deny-All-Then-Allow](#recommended-pattern-deny-all-then-allow)
11
+ - [Game Overrides](#game-overrides)
12
+ - [`.ugo` File Format](#ugo-file-format)
13
+ - [Editor API Models](#editor-api-models)
14
+
15
+ Editor-only package. Registers **Access Control** (`.ac`) and **Game Overrides** (`.ugo`) file types with the Deployment Window (`com.unity.services.deployment`).
16
+
17
+ - **Package:** `com.unity.services.tooling`
18
+ - **Namespace:** `Unity.Services.Tooling.Editor.AccessControl.Authoring.Core.Model` / `Unity.Services.Tooling.Editor.GameOverrides.Authoring.Core.Model`
19
+
20
+ ---
21
+
22
+ ## Overview
23
+
24
+ Tooling provides two cloud resource file types deployed through the Deployment Window:
25
+
26
+ | File Type | Extension | Purpose |
27
+ |---|---|---|
28
+ | Access Control | `.ac` | Permit or deny player/service-account access to UGS services on a URN basis |
29
+ | Game Overrides | `.ugo` | A/B testing and audience targeting by overriding Remote Config values for player segments |
30
+
31
+ Both file types are created via right-click in the Project window → **Create > Unity Gaming Services** and deployed via **Services > Deployment**.
32
+
33
+ ---
34
+
35
+ ## Access Control
36
+
37
+ Access Control policies permit or deny access to UGS services on a **URN basis**. Each statement targets a resource URN pattern and applies a `Read`, `Write`, or `*` action for a principal (`Player` or `ServiceAccount`). **Deny takes precedence over Allow.**
38
+
39
+ | Concept | Description |
40
+ |---|---|
41
+ | **Effect** | `"Allow"` or `"Deny"` — Deny takes precedence over Allow |
42
+ | **Action** | `"Read"`, `"Write"`, or `"*"` (both) |
43
+ | **Principal** | `"Player"` (end user) or `"ServiceAccount"` (server/admin) |
44
+ | **Resource** | URN pattern — `urn:ugs:<service>:/<path>` with `*` and `**` wildcards |
45
+
46
+ Common use cases:
47
+ - Deny direct player writes to Cloud Save (force writes through Cloud Code)
48
+ - Deny player currency/inventory writes in Economy (only allow purchases)
49
+ - Restrict Cloud Code module/script invocation to specific endpoints
50
+ - Deny player account deletion or identity unlinking
51
+
52
+ ### `.ac` File Format
53
+
54
+ **Create via:** Right-click in Project window → **Create > Unity Gaming Services > Access Control**
55
+
56
+ ```json
57
+ {
58
+ "$schema": "https://ugs-config-schemas.unity3d.com/v1/project-access-policy.schema.json",
59
+ "statements": [
60
+ {
61
+ "Sid": "DenyPlayerCloudSaveWrites",
62
+ "Effect": "Deny",
63
+ "Action": ["Write"],
64
+ "Principal": "Player",
65
+ "Resource": "urn:ugs:cloud-save:/**"
66
+ }
67
+ ]
68
+ }
69
+ ```
70
+
71
+ | Field | Type | Description |
72
+ |---|---|---|
73
+ | `Sid` | `string` | Unique statement ID within the file |
74
+ | `Effect` | `string` | `"Allow"` or `"Deny"` — Deny wins over Allow |
75
+ | `Action` | `string` or `string[]` | `"Read"`, `"Write"`, or `"*"` (both) |
76
+ | `Principal` | `string` or `string[]` | `"Player"` (end user) or `"ServiceAccount"` (server/admin) |
77
+ | `Resource` | `string` or `string[]` | URN pattern — `urn:ugs:<service>:/<path>` |
78
+
79
+ ### URN Pattern Format
80
+
81
+ ```
82
+ urn:ugs:<service>:/<path>
83
+ ```
84
+
85
+ - `*` matches a single path segment
86
+ - `**` matches zero or more path segments (including nested)
87
+ - `/**/` is commonly used to skip environment/version segments in the URL
88
+
89
+ ### URN Reference by Service
90
+
91
+ #### Authentication (`player-auth`)
92
+
93
+ | URN Pattern | Description |
94
+ |---|---|
95
+ | `urn:ugs:player-auth:/*/authentication/anonymous**` | Anonymous sign-up |
96
+ | `urn:ugs:player-auth:/*/authentication/external-token**` | External token sign-in (social, platform) |
97
+ | `urn:ugs:player-auth:/*/authentication/session-token**` | Session token sign-in |
98
+ | `urn:ugs:player-auth:/*/authentication/link/**` | Link external identity |
99
+ | `urn:ugs:player-auth:/*/authentication/unlink/**` | Unlink external identity |
100
+ | `urn:ugs:player-auth:/*/users**` | Player info (Read) / Delete player (Write) |
101
+ | `urn:ugs:player-auth:/.well-known/**` | JWKS public keys |
102
+
103
+ #### Cloud Save (`cloud-save`)
104
+
105
+ | URN Pattern | Description |
106
+ |---|---|
107
+ | `urn:ugs:cloud-save:/**` | All Cloud Save (blanket) |
108
+ | `urn:ugs:cloud-save:/**/players/*/keys**` | List player data keys |
109
+ | `urn:ugs:cloud-save:/**/players/*/items**` | Read/write player data items (own data only) |
110
+ | `urn:ugs:cloud-save:/**/players/*/item-batch**` | Batch write player data items |
111
+ | `urn:ugs:cloud-save:/**/players/query**` | Query Default player data |
112
+ | `urn:ugs:cloud-save:/**/players/*/public/keys**` | Read another player's public keys |
113
+ | `urn:ugs:cloud-save:/**/players/*/public/items**` | Read another player's public items |
114
+ | `urn:ugs:cloud-save:/**/players/public/query**` | Query Public player data |
115
+ | `urn:ugs:cloud-save:/**/custom/*/items**` | Read game-wide (Custom) data items |
116
+
117
+ #### Economy (`economy`)
118
+
119
+ | URN Pattern | Description |
120
+ |---|---|
121
+ | `urn:ugs:economy:/**/players/*/config**` | Read player economy configuration |
122
+ | `urn:ugs:economy:/**/currencies**` | Player currencies (Read/Write) |
123
+ | `urn:ugs:economy:/**/inventory**` | Player inventory (Read/Write) |
124
+ | `urn:ugs:economy:/**/purchases/virtual**` | Virtual purchases |
125
+ | `urn:ugs:economy:/**/purchases/googleplaystore**` | Google Play Store purchases |
126
+ | `urn:ugs:economy:/**/purchases/appleappstore**` | Apple App Store purchases |
127
+
128
+ #### Leaderboards (`leaderboards`)
129
+
130
+ | URN Pattern | Description |
131
+ |---|---|
132
+ | `urn:ugs:leaderboards:/**/leaderboards/**` | All leaderboard operations |
133
+
134
+ #### Cloud Code (`cloud-code`)
135
+
136
+ | URN Pattern | Description |
137
+ |---|---|
138
+ | `urn:ugs:cloud-code:/**/modules/**` | Cloud Code module endpoints |
139
+ | `urn:ugs:cloud-code:/**/scripts/**` | Cloud Code scripts (legacy JS) |
140
+ | `urn:ugs:cloud-code:/**/subscriptions/tokens/**` | Subscription tokens |
141
+
142
+ ### Recommended Pattern: Deny-All-Then-Allow
143
+
144
+ Start with a blanket deny, then explicitly allow only what the player needs. This ensures new services are locked down by default.
145
+
146
+ ```json
147
+ {
148
+ "$schema": "https://ugs-config-schemas.unity3d.com/v1/project-access-policy.schema.json",
149
+ "statements": [
150
+ {
151
+ "Sid": "Deny-all-ugs-access",
152
+ "Effect": "Deny",
153
+ "Action": ["*"],
154
+ "Principal": "Player",
155
+ "Resource": "urn:ugs:*:/**"
156
+ },
157
+ {
158
+ "Sid": "Allow-Anonymous-SignUp",
159
+ "Effect": "Allow",
160
+ "Action": ["Write"],
161
+ "Principal": "Player",
162
+ "Resource": "urn:ugs:player-auth:/*/authentication/anonymous**"
163
+ },
164
+ {
165
+ "Sid": "Allow-External-Token-SignIn",
166
+ "Effect": "Allow",
167
+ "Action": ["Write"],
168
+ "Principal": "Player",
169
+ "Resource": "urn:ugs:player-auth:/*/authentication/external-token**"
170
+ },
171
+ {
172
+ "Sid": "Allow-Session-Token-SignIn",
173
+ "Effect": "Allow",
174
+ "Action": ["Write"],
175
+ "Principal": "Player",
176
+ "Resource": "urn:ugs:player-auth:/*/authentication/session-token**"
177
+ },
178
+ {
179
+ "Sid": "Allow-Link-External-Id",
180
+ "Effect": "Allow",
181
+ "Action": ["Write"],
182
+ "Principal": "Player",
183
+ "Resource": "urn:ugs:player-auth:/*/authentication/link/**"
184
+ },
185
+ {
186
+ "Sid": "Allow-Get-PlayerInfo",
187
+ "Effect": "Allow",
188
+ "Action": ["Read"],
189
+ "Principal": "Player",
190
+ "Resource": "urn:ugs:player-auth:/*/users**"
191
+ },
192
+ {
193
+ "Sid": "Allow-Get-JWKS",
194
+ "Effect": "Allow",
195
+ "Action": ["Read"],
196
+ "Principal": "Player",
197
+ "Resource": "urn:ugs:player-auth:/.well-known/**"
198
+ },
199
+ {
200
+ "Sid": "Allow-Read-Economy-Config",
201
+ "Effect": "Allow",
202
+ "Action": ["Read"],
203
+ "Principal": "Player",
204
+ "Resource": "urn:ugs:economy:/**/players/*/config**"
205
+ },
206
+ {
207
+ "Sid": "Allow-Read-Currencies",
208
+ "Effect": "Allow",
209
+ "Action": ["Read"],
210
+ "Principal": "Player",
211
+ "Resource": "urn:ugs:economy:/**/currencies**"
212
+ },
213
+ {
214
+ "Sid": "Allow-Read-Inventory",
215
+ "Effect": "Allow",
216
+ "Action": ["Read"],
217
+ "Principal": "Player",
218
+ "Resource": "urn:ugs:economy:/**/inventory**"
219
+ },
220
+ {
221
+ "Sid": "Allow-Virtual-Purchases",
222
+ "Effect": "Allow",
223
+ "Action": ["Write"],
224
+ "Principal": "Player",
225
+ "Resource": "urn:ugs:economy:/**/purchases/virtual**"
226
+ },
227
+ {
228
+ "Sid": "Allow-GooglePlay-Purchases",
229
+ "Effect": "Allow",
230
+ "Action": ["Write"],
231
+ "Principal": "Player",
232
+ "Resource": "urn:ugs:economy:/**/purchases/googleplaystore**"
233
+ },
234
+ {
235
+ "Sid": "Allow-AppStore-Purchases",
236
+ "Effect": "Allow",
237
+ "Action": ["Write"],
238
+ "Principal": "Player",
239
+ "Resource": "urn:ugs:economy:/**/purchases/appleappstore**"
240
+ },
241
+ {
242
+ "Sid": "Allow-Read-Leaderboards",
243
+ "Effect": "Allow",
244
+ "Action": ["Read"],
245
+ "Principal": "Player",
246
+ "Resource": "urn:ugs:leaderboards:/**/leaderboards/**"
247
+ },
248
+ {
249
+ "Sid": "Allow-Read-CloudSave-PlayerKeys",
250
+ "Effect": "Allow",
251
+ "Action": ["Read"],
252
+ "Principal": "Player",
253
+ "Resource": "urn:ugs:cloud-save:/**/players/*/keys**"
254
+ },
255
+ {
256
+ "Sid": "Allow-CloudSave-PlayerItems",
257
+ "Effect": "Allow",
258
+ "Action": ["*"],
259
+ "Principal": "Player",
260
+ "Resource": "urn:ugs:cloud-save:/**/players/*/items**"
261
+ },
262
+ {
263
+ "Sid": "Allow-CloudSave-PlayerItemBatch",
264
+ "Effect": "Allow",
265
+ "Action": ["Write"],
266
+ "Principal": "Player",
267
+ "Resource": "urn:ugs:cloud-save:/**/players/*/item-batch**"
268
+ },
269
+ {
270
+ "Sid": "Allow-Query-Default-PlayerData",
271
+ "Effect": "Allow",
272
+ "Action": ["Write"],
273
+ "Principal": "Player",
274
+ "Resource": "urn:ugs:cloud-save:/**/players/query**"
275
+ },
276
+ {
277
+ "Sid": "Allow-Read-Public-PlayerKeys",
278
+ "Effect": "Allow",
279
+ "Action": ["Read"],
280
+ "Principal": "Player",
281
+ "Resource": "urn:ugs:cloud-save:/**/players/*/public/keys**"
282
+ },
283
+ {
284
+ "Sid": "Allow-Read-Public-PlayerItems",
285
+ "Effect": "Allow",
286
+ "Action": ["Read"],
287
+ "Principal": "Player",
288
+ "Resource": "urn:ugs:cloud-save:/**/players/*/public/items**"
289
+ },
290
+ {
291
+ "Sid": "Allow-Query-Public-PlayerData",
292
+ "Effect": "Allow",
293
+ "Action": ["Write"],
294
+ "Principal": "Player",
295
+ "Resource": "urn:ugs:cloud-save:/**/players/public/query**"
296
+ },
297
+ {
298
+ "Sid": "Allow-Read-GameData",
299
+ "Effect": "Allow",
300
+ "Action": ["Read"],
301
+ "Principal": "Player",
302
+ "Resource": "urn:ugs:cloud-save:/**/custom/*/items**"
303
+ },
304
+ {
305
+ "Sid": "Allow-CloudCode-Modules",
306
+ "Effect": "Allow",
307
+ "Action": ["*"],
308
+ "Principal": "Player",
309
+ "Resource": "urn:ugs:cloud-code:/**/modules/**"
310
+ },
311
+ {
312
+ "Sid": "Allow-CloudCode-Scripts",
313
+ "Effect": "Allow",
314
+ "Action": ["*"],
315
+ "Principal": "Player",
316
+ "Resource": "urn:ugs:cloud-code:/**/scripts/**"
317
+ },
318
+ {
319
+ "Sid": "Allow-Subscription-Tokens",
320
+ "Effect": "Allow",
321
+ "Action": ["*"],
322
+ "Principal": "Player",
323
+ "Resource": "urn:ugs:cloud-code:/**/subscriptions/tokens/**"
324
+ }
325
+ ]
326
+ }
327
+ ```
328
+
329
+ This policy:
330
+ - **Denies** all UGS access by default
331
+ - **Allows** authentication (anonymous, external, session token sign-in; link external ID; read player info)
332
+ - **Denies** identity unlinking and player deletion (inherited from blanket deny)
333
+ - **Allows** economy reads (config, currencies, inventory) and purchases (virtual, Google Play, Apple App Store)
334
+ - **Denies** direct currency/inventory writes (inherited from blanket deny — use Cloud Code for server grants)
335
+ - **Allows** leaderboard reads
336
+ - **Allows** Cloud Save player data reads/writes for own data (Default items), public data reads, game-wide data reads
337
+ - **Denies** Cloud Save blanket writes (Protected data only writable via Cloud Code)
338
+ - **Allows** Cloud Code module, script, and subscription token access
339
+
340
+ ---
341
+
342
+ ## Game Overrides
343
+
344
+ Game Overrides are the A/B testing and audience targeting mechanism for UGS. They override **Remote Config** values for specific player segments (audiences). Remote Config itself does not provide A/B testing — Game Overrides layer on top of it.
345
+
346
+ Use cases:
347
+ - A/B test different XP multipliers for player segments
348
+ - Roll out features gradually to targeted audiences
349
+ - Run time-limited promotions with different reward values
350
+
351
+ ### `.ugo` File Format
352
+
353
+ **Create via:** Right-click in Project window → **Create > Unity Gaming Services > Game Override**
354
+
355
+ ```json
356
+ {
357
+ "GameOverrides": [
358
+ {
359
+ "id": "double-xp-weekend",
360
+ "name": "Double XP Weekend",
361
+ "enabled": true,
362
+ "audiences": ["high_engagement_players"],
363
+ "overrides": [
364
+ {
365
+ "key": "xp_multiplier",
366
+ "value": 2.0
367
+ }
368
+ ]
369
+ }
370
+ ]
371
+ }
372
+ ```
373
+
374
+ | Field | Type | Description |
375
+ |---|---|---|
376
+ | `id` | `string` | Unique override ID |
377
+ | `name` | `string` | Human-readable name |
378
+ | `enabled` | `bool` | Whether this override is active |
379
+ | `audiences` | `string[]` | Segment IDs from Unity Segmentation |
380
+ | `overrides[].key` | `string` | Remote Config key to override |
381
+ | `overrides[].value` | `any` | Replacement value |
382
+
383
+ ---
384
+
385
+ ## Editor API Models
386
+
387
+ ### Access Control
388
+
389
+ ```csharp
390
+ namespace Unity.Services.Tooling.Editor.AccessControl.Authoring.Core.Model
391
+ {
392
+ interface IProjectAccessFile
393
+ {
394
+ string Path { get; }
395
+ string Name { get; }
396
+ List<IAccessControlStatement> Statements { get; }
397
+ }
398
+
399
+ interface IAccessControlStatement
400
+ {
401
+ string Sid { get; } // Statement ID — unique within the file
402
+ string Effect { get; } // "Allow" or "Deny" — Deny takes precedence
403
+ List<string> Action { get; } // "Read", "Write", or "*" (both)
404
+ List<string> Principal { get; } // "Player" or "ServiceAccount"
405
+ List<string> Resource { get; } // URN pattern(s) the rule applies to
406
+ }
407
+ }
408
+ ```
409
+
410
+ ### Game Overrides
411
+
412
+ ```csharp
413
+ namespace Unity.Services.Tooling.Editor.GameOverrides.Authoring.Core.Model
414
+ {
415
+ interface IGameOverride
416
+ {
417
+ string Id { get; }
418
+ string Name { get; }
419
+ bool Enabled { get; }
420
+ List<string> Audiences { get; }
421
+ List<OverrideConfig> Overrides { get; }
422
+ }
423
+
424
+ class GameOverridesConfigFile
425
+ {
426
+ public List<IGameOverride> GameOverrides { get; }
427
+ }
428
+ }
429
+ ```
430
+
431
+ Both file types are discovered automatically by the Deployment Window when `com.unity.services.deployment` is installed.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: closure
3
+ description: Evaluates and records final IMPLEMENTED, VERIFIED, VALIDATED, DONE, or BLOCKED state using project closure mode, linked artifacts, evidence, manual gates, and explicit waivers.
4
+ allowed-tools: Read, Glob, Grep, Write, Edit, Bash
5
+ ---
6
+
7
+ # Closure
8
+
9
+ Read `.nccgs/project.yaml`, `.nccgs/state.md`, and the active context packet when present. Preserve Product Owner authority and unrelated work.
10
+
11
+ Read project closure policy, feature contract, context packet, final diff, evidence review, required linked artifacts, PO gates, and waivers. Apply lean, linked, or strict rules from [closure policy](../work/references/closure.md). Update one canonical closure record; link rather than duplicate reports and registers. A waiver applies only to its named item. Synchronize state and technical status, but never modify canon to legitimize divergence. Report the exact final state and blockers.
12
+
13
+ Return outcome, evidence, affected records, blockers or decisions, residual risk, and the exact next workflow. Do not claim DONE unless this is the `closure` skill and every configured gate passes.
14
+
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: code-review
3
+ description: Performs a read-only code review against requirements, architecture, Unity constraints, ownership, tests, performance, security, and regression risk.
4
+ allowed-tools: Read, Glob, Grep, Bash, Task
5
+ ---
6
+
7
+ # Code Review
8
+
9
+ Read `.nccgs/project.yaml`, `.nccgs/state.md`, and the active context packet when present. Preserve Product Owner authority and unrelated work.
10
+
11
+ Read the context packet, final diff, governing decisions, affected callers, and tests. Route distinct Unity, networking, security, performance, or UI lenses when needed. Report only actionable findings with severity, exact evidence, impact, and remediation direction. Verify that tests assert requirements and that serialized/lifecycle behavior is addressed. Do not edit or praise generally; state when no material issue is found.
12
+
13
+ Return outcome, evidence, affected records, blockers or decisions, residual risk, and the exact next workflow. Do not claim DONE unless this is the `closure` skill and every configured gate passes.
14
+
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: compatibility-review
3
+ description: Reviews save, serialization, API, network, content, platform, or migration compatibility and defines versioning, detection, fallback, tests, and rollback.
4
+ allowed-tools: Read, Glob, Grep, Bash, Task
5
+ ---
6
+
7
+ # Compatibility Review
8
+
9
+ Read `.nccgs/project.yaml`, `.nccgs/state.md`, and the active context packet when present. Preserve Product Owner authority and unrelated work.
10
+
11
+ Remain read-only unless a migration plan is requested. Inventory producers, consumers, stored/on-wire formats, versions, invariants, and failure modes. Identify breaking and ambiguous changes, old-data coverage, forward/backward expectations, migration idempotency, recovery, and telemetry. Return compatibility verdict, required tests, rollout/rollback, and Product Owner decisions.
12
+
13
+ Return outcome, evidence, affected records, blockers or decisions, residual risk, and the exact next workflow. Do not claim DONE unless this is the `closure` skill and every configured gate passes.
14
+
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: context-pack
3
+ description: Creates or refreshes a focused NCCGS context packet for STANDARD or CONTROLLED work, mapping requirements, canonical sections, decisions, ownership, dependencies, verification, and source revisions without copying whole documents.
4
+ allowed-tools: Read, Glob, Grep, Write, Edit
5
+ ---
6
+
7
+ # Context Pack
8
+
9
+ Read `.nccgs/project.yaml`, `.nccgs/state.md`, and the active context packet when present. Preserve Product Owner authority and unrelated work.
10
+
11
+ Read the [context packet protocol](../../nccgs/protocols/context-packets.md) and project policy. Resolve the feature ID, objective, classification, domains, and accountable owner. Map exact canonical sections and decision summaries with source revisions; list writable, read-only, protected, and generated paths; record dependencies, constraints, out-of-scope behavior, verification, and PO gates. Create or update `.nccgs/context/<feature-id>.yaml` from the template. Do not paste whole documents. Mark contradictions and the exact reason for any required full-source read. Report packet path and unresolved inputs.
12
+
13
+ Return outcome, evidence, affected records, blockers or decisions, residual risk, and the exact next workflow. Do not claim DONE unless this is the `closure` skill and every configured gate passes.
14
+
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: dependency-review
3
+ description: Evaluates a proposed Unity package, SDK, service, or external dependency for necessity, fit, licensing, security, maintenance, compatibility, lock-in, migration, and rollback before adoption.
4
+ allowed-tools: Read, Glob, Grep, Bash, Task, WebSearch, WebFetch
5
+ ---
6
+
7
+ # Dependency Review
8
+
9
+ Read `.nccgs/project.yaml`, `.nccgs/state.md`, and the active context packet when present. Preserve Product Owner authority and unrelated work.
10
+
11
+ Remain read-only. Define the capability need and compare build, buy, existing-project, and no-change options. Verify current authoritative documentation, supported Unity/platform versions, license, data/privacy, operational cost, update policy, failure behavior, transitive risk, and exit plan. Recommend with evidence. Adoption or replacement requires explicit Product Owner authority and an architecture decision.
12
+
13
+ Return outcome, evidence, affected records, blockers or decisions, residual risk, and the exact next workflow. Do not claim DONE unless this is the `closure` skill and every configured gate passes.
14
+
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: design
3
+ description: Designs or revises player-facing mechanics, systems, UX, levels, economy, narrative, content, or accessibility before implementation. Routes to focused design roles and preserves Product Owner control of subjective and canonical decisions.
4
+ allowed-tools: Read, Glob, Grep, Write, Edit, Task, AskUserQuestion, WebSearch, WebFetch
5
+ ---
6
+
7
+ # Design
8
+
9
+ Produce implementation-ready design truth with the smallest complete set of specialized perspectives.
10
+
11
+ Read policy, state, relevant pillars/canon, interacting requirements, and the code constraints needed for feasibility. Distinguish exploration, focused design, and CONTROLLED cross-system change.
12
+
13
+ Select the accountable design role and only the specialists required by the domain: systems, level, economy, UX, accessibility, narrative, art, audio, live ops, or prototyping. Use Opus leadership only for cross-creative conflict or product-wide synthesis.
14
+
15
+ Separate established facts from proposals and Product Owner decisions. Batch meaningful choices with real alternatives, tradeoffs, and a recommendation. Do not ask implementation trivia.
16
+
17
+ Define applicable rules, states, formulas, feedback, dependencies, edge cases, tuning surfaces, objective acceptance criteria, subjective gates, out-of-scope behavior, and traceable requirement IDs. Consult technical roles for feasibility without letting implementation redefine intended design.
18
+
19
+ Persist accepted changes in mapped canonical sources; do not create a parallel GDD tree. Run `/design-review` for STANDARD or CONTROLLED changes. If implementation is included and decisions are closed, hand the accepted contract to `/work`.
20
+
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: design-review
3
+ description: Reviews a proposed or changed game design for clarity, player intent, systemic interactions, balance, UX, accessibility, canon, feasibility, and testability without approving subjective choices.
4
+ allowed-tools: Read, Glob, Grep, Task
5
+ ---
6
+
7
+ # Design Review
8
+
9
+ Read `.nccgs/project.yaml`, `.nccgs/state.md`, and the active context packet when present. Preserve Product Owner authority and unrelated work.
10
+
11
+ Remain read-only. Review the target against pillars, canonical decisions, interacting systems, platform constraints, and implementation evidence only where relevant. Use focused specialists for economy, UX, accessibility, level, narrative, art, or audio lenses. Separate contradictions, exploitable/degenerate behavior, untestable requirements, and optional improvements. Return prioritized findings, PO decisions, and implementation-readiness verdict.
12
+
13
+ Return outcome, evidence, affected records, blockers or decisions, residual risk, and the exact next workflow. Do not claim DONE unless this is the `closure` skill and every configured gate passes.
14
+
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: evidence-review
3
+ description: Independently evaluates whether accumulated tests, runtime observations, builds, reports, and manual gates actually prove each requirement and support the claimed closure state.
4
+ allowed-tools: Read, Glob, Grep, Bash, Task
5
+ ---
6
+
7
+ # Evidence Review
8
+
9
+ Read `.nccgs/project.yaml`, `.nccgs/state.md`, and the active context packet when present. Preserve Product Owner authority and unrelated work.
10
+
11
+ Read the [evidence protocol](../../nccgs/protocols/evidence.md), requirements, evidence records, test outputs, runtime/build observations, baseline, and waivers. Map every criterion to PASS, FAIL, NOT PROVEN, PO GATE, or N/A. Detect stale source revisions, unexplained count/skip changes, evidence produced before the final diff, and claims based only on inspection. Return closure impact and exact evidence still required.
12
+
13
+ Return outcome, evidence, affected records, blockers or decisions, residual risk, and the exact next workflow. Do not claim DONE unless this is the `closure` skill and every configured gate passes.
14
+
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: hotfix
3
+ description: Runs a tightly scoped CONTROLLED workflow for urgent production or release-critical defects with containment, minimal change, accelerated evidence, rollback, and follow-up debt.
4
+ allowed-tools: Read, Glob, Grep, Write, Edit, Bash, Task, AskUserQuestion
5
+ ---
6
+
7
+ # Hotfix
8
+
9
+ Read `.nccgs/project.yaml`, `.nccgs/state.md`, and the active context packet when present. Preserve Product Owner authority and unrelated work.
10
+
11
+ Confirm affected version, severity, user/data impact, reproduction, containment, release branch, and rollback. Build the smallest safe fix with one accountable writer; preserve compatibility and avoid unrelated refactors. Run targeted regression plus the release-critical checks justified by blast radius. Record evidence, known gaps, approval, release steps, rollback trigger, and required follow-up. Publication still requires explicit authority.
12
+
13
+ Return outcome, evidence, affected records, blockers or decisions, residual risk, and the exact next workflow. Do not claim DONE unless this is the `closure` skill and every configured gate passes.
14
+