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.
- package/CHANGELOG.md +76 -235
- package/LICENSE +1 -1
- package/README.md +87 -206
- package/THIRD_PARTY_NOTICES.md +6 -34
- package/bin/nccgs.mjs +96 -0
- package/cli/doctor.mjs +82 -0
- package/cli/feedback.mjs +13 -0
- package/cli/install.mjs +111 -0
- package/cli/release.mjs +59 -0
- package/cli/run.mjs +35 -0
- package/cli/spawn.mjs +20 -0
- package/cli/uninstall.mjs +43 -0
- package/cli/update-check.mjs +66 -0
- package/docs/EVIDENCE-VERIFICATION.md +22 -0
- package/package.json +23 -30
- package/runtime/core/diag.mjs +43 -0
- package/runtime/core/feedback-policy.mjs +54 -0
- package/runtime/core/fs.mjs +80 -0
- package/runtime/core/job-object.mjs +73 -0
- package/runtime/core/modes.mjs +87 -0
- package/runtime/core/process-tree.mjs +109 -0
- package/runtime/core/project.mjs +113 -0
- package/runtime/core/snapshot.mjs +114 -0
- package/runtime/hooks/common.mjs +22 -0
- package/runtime/hooks/done-guard.mjs +15 -0
- package/runtime/hooks/guard-mcp.mjs +8 -0
- package/runtime/hooks/guard-shell.mjs +16 -0
- package/runtime/hooks/guard-write.mjs +25 -0
- package/runtime/hooks/session-log.mjs +7 -0
- package/runtime/hooks/session-start.mjs +40 -0
- package/runtime/hooks/unity-transport.mjs +12 -0
- package/runtime/modes.json +39 -0
- package/runtime/task/cost.mjs +103 -0
- package/runtime/task/criteria.mjs +128 -0
- package/runtime/task/feedback.mjs +136 -0
- package/runtime/task/ledger.mjs +109 -0
- package/runtime/task/plan.mjs +69 -0
- package/runtime/task/project.mjs +79 -0
- package/runtime/task/report.mjs +252 -0
- package/runtime/task/task.mjs +238 -0
- package/runtime/unity/assets.mjs +51 -0
- package/runtime/unity/playtest.mjs +145 -0
- package/runtime/unity/unity.mjs +350 -0
- package/scripts/check-job-object.mjs +18 -0
- package/scripts/sync-unity-skills.mjs +35 -119
- package/template/CLAUDE.md +39 -0
- package/template/agents/fast-fix.md +9 -0
- package/template/agents/implementer.md +19 -0
- package/template/agents/playtester.md +15 -0
- package/template/agents/reviewer.md +19 -0
- package/template/agents/scout.md +9 -0
- package/template/ponytail/README.md +8 -0
- package/{.claude/nccgs/packages → template}/ponytail/engineering.md +10 -0
- package/template/protocols/evidence.md +52 -0
- package/template/protocols/playtest.md +45 -0
- package/template/protocols/review.md +34 -0
- package/template/protocols/unity-cli-notes.md +56 -0
- package/template/settings.fragment.json +33 -0
- package/template/skills/art-bible/SKILL.md +19 -0
- package/template/skills/asset-spec/SKILL.md +19 -0
- package/template/skills/brainstorm/SKILL.md +17 -0
- package/template/skills/feedback/SKILL.md +16 -0
- package/template/skills/map-systems/SKILL.md +25 -0
- package/template/skills/playtest/SKILL.md +17 -0
- package/template/skills/status/SKILL.md +18 -0
- package/template/skills/test/SKILL.md +34 -0
- package/template/skills/unity-foundation/SKILL.md +17 -0
- package/template/skills/vertical-slice/SKILL.md +17 -0
- package/template/skills/work/SKILL.md +65 -0
- package/tools/feedback-worker/README.md +12 -0
- package/tools/feedback-worker/worker.js +39 -0
- package/tools/feedback-worker/wrangler.toml +12 -0
- package/unity-skills/2d-pixel-perfect/SKILL.md +208 -0
- package/unity-skills/2d-pixel-perfect/references/api-reference.md +81 -0
- package/unity-skills/2d-pixel-perfect/references/camera-setup-builtin.cs +40 -0
- package/unity-skills/2d-pixel-perfect/references/camera-setup-urp.cs +49 -0
- package/unity-skills/2d-pixel-perfect/references/pipeline-detection.cs +50 -0
- package/unity-skills/2d-pixel-perfect/references/sprite-settings.cs +37 -0
- package/unity-skills/asset-transformer-toolkit/SECURITY.md +15 -0
- package/unity-skills/asset-transformer-toolkit/SKILL.md +39 -0
- package/unity-skills/asset-transformer-toolkit/references/create-importer.md +121 -0
- package/unity-skills/asset-transformer-toolkit/references/lods.md +61 -0
- package/unity-skills/asset-transformer-toolkit/references/rule-api.md +154 -0
- package/unity-skills/asset-transformer-toolkit/references/ruleblock-api.md +37 -0
- package/unity-skills/asset-transformer-toolkit/references/ruleset-api.md +138 -0
- package/unity-skills/asset-transformer-toolkit/references/rulesets-and-actions.md +227 -0
- package/unity-skills/audio-setup-mixers/SECURITY.md +16 -0
- package/unity-skills/audio-setup-mixers/SKILL.md +127 -0
- package/unity-skills/audio-setup-mixers/references/api.md +162 -0
- package/unity-skills/build-gtk/SKILL.md +242 -0
- package/unity-skills/build-gtk/references/graph-api.md +324 -0
- package/unity-skills/build-gtk/references/pitfalls.md +86 -0
- package/unity-skills/build-gtk/references/runtime-and-visualization.md +196 -0
- package/unity-skills/build-gtk/references/state-machine-api.md +286 -0
- package/unity-skills/build-live-game/SKILL.md +255 -0
- package/{.claude/skills → unity-skills}/build-live-game/references/achievements.md +132 -154
- package/{.claude/skills → unity-skills}/build-live-game/references/apis.md +10 -19
- package/{.claude/skills → unity-skills}/build-live-game/references/authentication.md +14 -20
- package/{.claude/skills → unity-skills}/build-live-game/references/battlepass.md +269 -225
- package/unity-skills/build-live-game/references/blueprints-and-samples.md +75 -0
- package/unity-skills/build-live-game/references/cloud-code-cloudbehaviours.md +1111 -0
- package/unity-skills/build-live-game/references/cloud-code-modules.md +1276 -0
- package/unity-skills/build-live-game/references/cloud-code.md +58 -0
- package/{.claude/skills → unity-skills}/build-live-game/references/cloud-save.md +15 -25
- package/{.claude/skills → unity-skills}/build-live-game/references/deployment.md +33 -18
- package/{.claude/skills → unity-skills}/build-live-game/references/player-account.md +31 -23
- package/{.claude/skills → unity-skills}/build-live-game/references/tooling.md +0 -56
- package/unity-skills/build-live-game/references/ugs-cli.md +86 -0
- package/unity-skills/craft-game-floors/SECURITY.md +23 -0
- package/unity-skills/craft-game-floors/SKILL.md +134 -0
- package/unity-skills/craft-game-floors/references/art-direction.md +85 -0
- package/unity-skills/craft-game-floors/references/camera-rigs.md +51 -0
- package/unity-skills/craft-game-floors/references/character-motion.md +35 -0
- package/unity-skills/craft-game-floors/references/game-audio.md +47 -0
- package/unity-skills/craft-game-floors/references/game-feel.md +68 -0
- package/unity-skills/craft-game-floors/references/game-shell.md +45 -0
- package/unity-skills/craft-game-floors/references/live-floor.md +35 -0
- package/unity-skills/craft-game-floors/references/placeholder-assets.md +35 -0
- package/unity-skills/craft-game-floors/references/scene-lighting.md +52 -0
- package/unity-skills/craft-game-floors/references/toon-shading.md +34 -0
- package/unity-skills/craft-game-floors/references/vfx.md +40 -0
- package/unity-skills/craft-game-floors/references/visual-scorecard.md +43 -0
- package/unity-skills/create-2d-physics/SECURITY.md +16 -0
- package/unity-skills/create-2d-physics/SKILL.md +128 -0
- package/unity-skills/create-2d-physics/references/2d-physics-core.md +155 -0
- package/unity-skills/create-2d-physics/references/legacy-2d-physics.md +45 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/SKILL.md +12 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/hexagonalruletile.md +71 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/palette-create.md +38 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/ruletile-createempty.md +35 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/ruletile-createfromsegment.md +212 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/ruletile.md +90 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/scripts/CreatePaletteTemplate.cs +148 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/scripts/ManualWorkflowExample.cs +63 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/scripts/RuleTileGenerator.cs +61 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/scripts/TilemapRuleTileCreateFromSegment.cs +225 -0
- package/unity-skills/generate-editor-search-query/SECURITY.md +17 -0
- package/unity-skills/generate-editor-search-query/SKILL.md +117 -0
- package/unity-skills/generate-editor-search-query/references/open-search-window.md +70 -0
- package/unity-skills/generate-editor-search-query/references/query-patterns.md +124 -0
- package/{.claude/skills → unity-skills}/implement-in-app-purchases/SKILL.md +1 -2
- package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/api-notes.md +25 -28
- package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-convert-native-google-billing.md +1 -1
- package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-implement-iap-d2c.md +40 -5
- package/{.claude/skills → unity-skills}/initialize-ai-navigation/SKILL.md +4 -4
- package/{.claude/skills → unity-skills}/initialize-ai-navigation/references/navigation-system.md +3 -3
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/CHANGELOG.md +12 -0
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/README.md +9 -5
- package/unity-skills/levelplay-unity-integration/SKILL.md +442 -0
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/banner-api.md +15 -8
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/best-practices.md +604 -536
- package/unity-skills/levelplay-unity-integration/references/dependency-resolution.md +94 -0
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/ilrd-api.md +2 -2
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/initialization-api.md +221 -0
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/interstitial-api.md +11 -3
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/ios-setup.md +6 -34
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/migration-sdk-9.md +1 -1
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/privacy-settings.md +14 -29
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/rewarded-api.md +20 -4
- package/unity-skills/levelplay-unity-integration/references/testing-and-validation.md +222 -0
- package/unity-skills/levelplay-unity-integration/references/troubleshooting.md +99 -0
- package/unity-skills/localization/SKILL.md +347 -0
- package/{.claude/skills → unity-skills}/localization/references/api-notes.md +4 -0
- package/unity-skills/localization/resources/L10nBatchProcessor.cs +191 -0
- package/unity-skills/manage-sprite-atlas/SKILL.md +351 -0
- package/unity-skills/manage-sprite-atlas/references/addressables-delivery.md +58 -0
- package/unity-skills/manage-sprite-atlas/references/api.md +382 -0
- package/unity-skills/manage-sprite-atlas/references/best-practices.md +183 -0
- package/unity-skills/manage-sprite-atlas/references/common-errors.md +123 -0
- package/unity-skills/manage-sprite-atlas/references/custom-packing.md +147 -0
- package/unity-skills/manage-sprite-atlas/references/manual-authoring.md +39 -0
- package/unity-skills/manage-sprite-atlas/resources/authoringvsruntime.cs +176 -0
- package/unity-skills/manage-sprite-atlas/resources/buildaddressablespostprocess.cs +59 -0
- package/unity-skills/manage-sprite-atlas/resources/cacheloadedatlases.cs +145 -0
- package/unity-skills/manage-sprite-atlas/resources/cleanupbatchoperations.cs +119 -0
- package/unity-skills/manage-sprite-atlas/resources/createandconfiguremasteratlas.cs +57 -0
- package/unity-skills/manage-sprite-atlas/resources/custompackersetup.cs +88 -0
- package/unity-skills/manage-sprite-atlas/resources/deprecatedmethods.cs +142 -0
- package/unity-skills/manage-sprite-atlas/resources/dontmodifywithoutsaving.cs +120 -0
- package/unity-skills/manage-sprite-atlas/resources/dontpackinruntimebuilds.cs +190 -0
- package/unity-skills/manage-sprite-atlas/resources/dontscriptspriteatlasineditor.cs +114 -0
- package/unity-skills/manage-sprite-atlas/resources/editorconfiguration.cs +95 -0
- package/unity-skills/manage-sprite-atlas/resources/enablespritepacking.cs +172 -0
- package/unity-skills/manage-sprite-atlas/resources/gridspritepacker.cs +50 -0
- package/unity-skills/manage-sprite-atlas/resources/handlelatebinding.cs +147 -0
- package/unity-skills/manage-sprite-atlas/resources/handlenullcases.cs +141 -0
- package/unity-skills/manage-sprite-atlas/resources/migratev1tov2.cs +335 -0
- package/unity-skills/manage-sprite-atlas/resources/multipagepacker.cs +80 -0
- package/unity-skills/manage-sprite-atlas/resources/optimizetexturesettings.cs +191 -0
- package/unity-skills/manage-sprite-atlas/resources/packerdebugging.cs +158 -0
- package/unity-skills/manage-sprite-atlas/resources/packtransform.cs +51 -0
- package/unity-skills/manage-sprite-atlas/resources/platformnames.cs +127 -0
- package/unity-skills/manage-sprite-atlas/resources/queryspritesefficiently.cs +222 -0
- package/unity-skills/manage-sprite-atlas/resources/registercallbacks.cs +152 -0
- package/unity-skills/manage-sprite-atlas/resources/runtimeatlasloader.cs +15 -0
- package/unity-skills/manage-sprite-atlas/resources/runtimespriteaccess.cs +19 -0
- package/unity-skills/manage-sprite-atlas/resources/savespriteatlasasset.cs +107 -0
- package/unity-skills/manage-sprite-atlas/resources/scriptablepacker.cs +81 -0
- package/unity-skills/manage-sprite-atlas/resources/setincludeinbuild.cs +164 -0
- package/unity-skills/manage-sprite-atlas/resources/sizeoptimizedpacker.cs +88 -0
- package/unity-skills/manage-sprite-atlas/resources/spriteatlaslatebinding.cs +123 -0
- package/unity-skills/manage-sprite-atlas/resources/spriteatlasprebuildgenerator.cs +219 -0
- package/unity-skills/manage-sprite-atlas/resources/spritedata.cs +35 -0
- package/unity-skills/manage-sprite-atlas/resources/spritepack.cs +39 -0
- package/unity-skills/manage-sprite-atlas/resources/texturedata.cs +15 -0
- package/unity-skills/manage-sprite-atlas/resources/updatebuildscripts.cs +357 -0
- package/unity-skills/manage-sprite-atlas/resources/updatesettingsconfiguration.cs +135 -0
- package/unity-skills/manage-sprite-atlas/resources/usevariantswisely.cs +179 -0
- package/unity-skills/manage-sprite-atlas/resources/variantatlas.cs +39 -0
- package/unity-skills/manifest.json +1155 -0
- package/unity-skills/migrate-birp-to-urp/SECURITY.md +16 -0
- package/unity-skills/migrate-birp-to-urp/SKILL.md +543 -0
- package/unity-skills/migrate-birp-to-urp/references/capturing-the-editor.md +66 -0
- package/unity-skills/migrate-birp-to-urp/references/complex-shader-situations.md +272 -0
- package/unity-skills/migrate-birp-to-urp/references/custom-shader-triage.md +123 -0
- package/unity-skills/migrate-birp-to-urp/references/implementation-patterns.md +529 -0
- package/unity-skills/migrate-birp-to-urp/references/migration-workflow.md +265 -0
- package/unity-skills/migrate-birp-to-urp/references/quality-settings-map.md +69 -0
- package/unity-skills/new-unity-project/SECURITY.md +26 -0
- package/unity-skills/new-unity-project/SKILL.md +386 -0
- package/unity-skills/new-unity-project/references/skill-setup.md +66 -0
- package/unity-skills/optimize-audio/SECURITY.md +16 -0
- package/{.claude/skills → unity-skills}/optimize-audio/SKILL.md +17 -17
- package/{.claude/skills → unity-skills}/optimize-audio/resources/audio-import-api.md +8 -5
- package/{.claude/skills → unity-skills}/optimize-text-mesh-pro/SKILL.md +1 -11
- package/unity-skills/optimize-web/SECURITY.md +16 -0
- package/{.claude/skills → unity-skills}/optimize-web/SKILL.md +164 -27
- package/unity-skills/optimize-web/scripts/WebOptimizer.cs +46 -0
- package/unity-skills/optimize-web/scripts/toktx-examples.sh +11 -0
- package/{.claude/skills → unity-skills}/physics-3d-collision/SKILL.md +2 -2
- package/unity-skills/physics-3d-collision/references/troubleshooting.md +8 -0
- package/unity-skills/project-auditor-fixes/SKILL.md +64 -0
- package/{.claude/skills → unity-skills}/setup-multiplayer-services/SKILL.md +1 -4
- package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/SKILL.md +1 -1
- package/{.claude/skills → unity-skills}/shader-graph-create-custom-node/SKILL.md +1 -1
- package/unity-skills/sprite-editor/SECURITY.md +16 -0
- package/{.claude/skills → unity-skills}/sprite-editor/SKILL.md +9 -9
- package/{.claude/skills → unity-skills}/sprite-editor/references/templates.md +1 -1
- package/unity-skills/sprite-segment-3x3grid/SKILL.md +136 -0
- package/unity-skills/sprite-segment-3x3grid/scripts/SpriteGridAnalysis.cs +119 -0
- package/{.claude/skills → unity-skills}/ui/SKILL.md +1 -1
- package/{.claude/skills → unity-skills}/ui-imgui/SKILL.md +1 -7
- package/{.claude/skills → unity-skills}/ui-ugui/SKILL.md +3 -9
- package/{.claude/skills → unity-skills}/ui-uitk/SKILL.md +8 -14
- package/{.claude/skills → unity-skills}/ui-uitk/references/custom-elements.md +1 -1
- package/unity-skills/unity-cli/CHANGELOG.md +515 -0
- package/unity-skills/unity-cli/SECURITY.md +68 -0
- package/unity-skills/unity-cli/SKILL.md +723 -0
- package/unity-skills/unity-cli/references/auth-license-cloud.md +318 -0
- package/unity-skills/unity-cli/references/build-run-test.md +555 -0
- package/unity-skills/unity-cli/references/cloud-automation.md +736 -0
- package/{.claude/skills → unity-skills}/unity-cli/references/collaboration.md +166 -105
- package/unity-skills/unity-cli/references/config-hub.md +239 -0
- package/unity-skills/unity-cli/references/diagnostics-maintenance.md +720 -0
- package/unity-skills/unity-cli/references/docs-workflow.md +179 -0
- package/unity-skills/unity-cli/references/editors-install.md +476 -0
- package/unity-skills/unity-cli/references/integration-advanced.md +1130 -0
- package/unity-skills/unity-cli/references/playmode-verification-loop.md +279 -0
- package/unity-skills/unity-cli/references/projects-templates.md +996 -0
- package/unity-skills/unity-cli/references/version-control.md +612 -0
- package/{.claude/skills → unity-skills}/unity-package-management/SKILL.md +60 -12
- package/{.claude/skills → unity-skills}/unity-package-management/references/select-packages.md +39 -21
- package/unity-skills/unity-pipeline/SECURITY.md +17 -0
- package/unity-skills/unity-pipeline/SKILL.md +335 -0
- package/unity-skills/urp-postprocessing/SECURITY.md +16 -0
- package/{.claude/skills → unity-skills}/urp-postprocessing/SKILL.md +12 -12
- package/{.claude/skills → unity-skills}/urp-postprocessing/references/code-templates.md +39 -8
- package/{.claude/skills → unity-skills}/validate-urp-render-graph-renderer-feature/SKILL.md +1 -1
- package/.claude/agents/nccgs-adversarial-reviewer.md +0 -43
- package/.claude/agents/nccgs-engine-programmer.md +0 -27
- package/.claude/agents/nccgs-fast-implementer.md +0 -30
- package/.claude/agents/nccgs-game-designer.md +0 -26
- package/.claude/agents/nccgs-gameplay-programmer.md +0 -26
- package/.claude/agents/nccgs-qa-engineer.md +0 -27
- package/.claude/agents/nccgs-task-scout.md +0 -24
- package/.claude/agents/nccgs-ui-programmer.md +0 -27
- package/.claude/agents/nccgs-unity-build-specialist.md +0 -27
- package/.claude/agents/nccgs-unity-implementer.md +0 -28
- package/.claude/agents/nccgs-unity-systems-specialist.md +0 -27
- package/.claude/agents/nccgs-unity-ui-specialist.md +0 -27
- package/.claude/agents/nccgs-verification-engineer.md +0 -27
- package/.claude/nccgs/MEMORY.md +0 -66
- package/.claude/nccgs/THIRD_PARTY_NOTICES.md +0 -29
- package/.claude/nccgs/VERSION +0 -1
- package/.claude/nccgs/agent-library/nccgs-accessibility-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-adversarial-reviewer.md +0 -41
- package/.claude/nccgs/agent-library/nccgs-ai-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-analytics-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-art-direction-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-audio-direction-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-creative-director.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-documentation-manager.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-economy-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-engine-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-fast-implementer.md +0 -28
- package/.claude/nccgs/agent-library/nccgs-game-design-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-game-designer.md +0 -24
- package/.claude/nccgs/agent-library/nccgs-gameplay-programmer.md +0 -24
- package/.claude/nccgs/agent-library/nccgs-level-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-live-ops-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-localization-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-narrative-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-network-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-performance-analyst.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-producer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-production-coordinator.md +0 -22
- package/.claude/nccgs/agent-library/nccgs-programming-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-prototyper.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-qa-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-qa-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-release-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-release-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-security-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-sound-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-systems-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-task-scout.md +0 -22
- package/.claude/nccgs/agent-library/nccgs-technical-architect.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-technical-artist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-technical-director.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-tools-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-ui-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-build-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-content-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-implementer.md +0 -26
- package/.claude/nccgs/agent-library/nccgs-unity-rendering-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-systems-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-ui-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-ux-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-verification-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-world-builder.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-writer.md +0 -25
- package/.claude/nccgs/constitution.md +0 -187
- package/.claude/nccgs/hooks/agent-audit.mjs +0 -16
- package/.claude/nccgs/hooks/closure-guard.mjs +0 -59
- package/.claude/nccgs/hooks/common.mjs +0 -42
- package/.claude/nccgs/hooks/post-compact.mjs +0 -1
- package/.claude/nccgs/hooks/pre-compact.mjs +0 -8
- package/.claude/nccgs/hooks/protect-git.mjs +0 -22
- package/.claude/nccgs/hooks/protect-write.mjs +0 -17
- package/.claude/nccgs/hooks/runtime-observation.mjs +0 -11
- package/.claude/nccgs/hooks/session-start.mjs +0 -29
- package/.claude/nccgs/hooks/session-stop.mjs +0 -7
- package/.claude/nccgs/hooks/unity-transport-guard.mjs +0 -11
- package/.claude/nccgs/packages/ponytail/README.md +0 -46
- package/.claude/nccgs/packages/ponytail/manifest.json +0 -24
- package/.claude/nccgs/pipeline.json +0 -260
- package/.claude/nccgs/protocols/agent-contract.md +0 -101
- package/.claude/nccgs/protocols/astra-claude.md +0 -111
- package/.claude/nccgs/protocols/bounded-repair.md +0 -246
- package/.claude/nccgs/protocols/context-packets.md +0 -23
- package/.claude/nccgs/protocols/delivery-acceptance.md +0 -105
- package/.claude/nccgs/protocols/design-lifecycle.md +0 -139
- package/.claude/nccgs/protocols/editor-session-evidence.md +0 -52
- package/.claude/nccgs/protocols/evidence.md +0 -31
- package/.claude/nccgs/protocols/model-routing.md +0 -46
- package/.claude/nccgs/protocols/orchestration.md +0 -74
- package/.claude/nccgs/protocols/review-handoff.md +0 -101
- package/.claude/nccgs/protocols/shared-workflow-context.md +0 -33
- package/.claude/nccgs/protocols/standalone-gates.md +0 -329
- package/.claude/nccgs/protocols/standalone-pilot.md +0 -144
- package/.claude/nccgs/protocols/standalone.md +0 -207
- package/.claude/nccgs/protocols/task-autonomy.md +0 -55
- package/.claude/nccgs/protocols/task-gates.md +0 -144
- package/.claude/nccgs/protocols/task-slices.md +0 -106
- package/.claude/nccgs/protocols/unity-boundary.md +0 -31
- package/.claude/nccgs/routing.generated.md +0 -49
- package/.claude/nccgs/settings.fragment.json +0 -213
- package/.claude/nccgs/studio.json +0 -472
- package/.claude/nccgs/tools/approve-overrides.mjs +0 -81
- package/.claude/nccgs/tools/autonomy.mjs +0 -40
- package/.claude/nccgs/tools/command-process.mjs +0 -50
- package/.claude/nccgs/tools/command-tokens.mjs +0 -22
- package/.claude/nccgs/tools/compile-policy.mjs +0 -121
- package/.claude/nccgs/tools/configure-models.mjs +0 -96
- package/.claude/nccgs/tools/criteria.mjs +0 -121
- package/.claude/nccgs/tools/delivery-budget.mjs +0 -52
- package/.claude/nccgs/tools/design-readiness.mjs +0 -158
- package/.claude/nccgs/tools/editor-session-evidence.mjs +0 -66
- package/.claude/nccgs/tools/evidence.mjs +0 -153
- package/.claude/nccgs/tools/gates.mjs +0 -297
- package/.claude/nccgs/tools/handoff.mjs +0 -51
- package/.claude/nccgs/tools/hook-transport.mjs +0 -34
- package/.claude/nccgs/tools/inputs.mjs +0 -108
- package/.claude/nccgs/tools/installation-guard.mjs +0 -55
- package/.claude/nccgs/tools/integrity.mjs +0 -69
- package/.claude/nccgs/tools/lifecycle.mjs +0 -542
- package/.claude/nccgs/tools/native-completion.mjs +0 -30
- package/.claude/nccgs/tools/orchestration.mjs +0 -680
- package/.claude/nccgs/tools/paths.mjs +0 -60
- package/.claude/nccgs/tools/policy.mjs +0 -107
- package/.claude/nccgs/tools/process-lock.mjs +0 -74
- package/.claude/nccgs/tools/repair-packet.mjs +0 -106
- package/.claude/nccgs/tools/returned-handoff.mjs +0 -47
- package/.claude/nccgs/tools/review-budget.mjs +0 -171
- package/.claude/nccgs/tools/review-handoff.mjs +0 -66
- package/.claude/nccgs/tools/runtime.mjs +0 -71
- package/.claude/nccgs/tools/session-budget.mjs +0 -67
- package/.claude/nccgs/tools/shared-context-guard.mjs +0 -60
- package/.claude/nccgs/tools/shared-context.mjs +0 -25
- package/.claude/nccgs/tools/task-slices.mjs +0 -147
- package/.claude/nccgs/tools/task.mjs +0 -145
- package/.claude/nccgs/tools/tool-guard.mjs +0 -120
- package/.claude/nccgs/tools/unity-repair.mjs +0 -128
- package/.claude/nccgs/tools/unity-transport.mjs +0 -170
- package/.claude/nccgs/tools/verification-jobs.mjs +0 -171
- package/.claude/nccgs/tools/verification-worker.mjs +0 -71
- package/.claude/nccgs/tools/windows-compiler-server.cs +0 -163
- package/.claude/nccgs/tools/windows-job.cs +0 -103
- package/.claude/nccgs/unity-skills-manifest.json +0 -727
- package/.claude/nccgs/workflow-catalog.json +0 -654
- package/.claude/rules/nccgs-canonical-docs.md +0 -19
- package/.claude/rules/nccgs-editor-tools.md +0 -12
- package/.claude/rules/nccgs-localization.md +0 -12
- package/.claude/rules/nccgs-networking.md +0 -13
- package/.claude/rules/nccgs-performance.md +0 -14
- package/.claude/rules/nccgs-rendering.md +0 -16
- package/.claude/rules/nccgs-security.md +0 -13
- package/.claude/rules/nccgs-tests.md +0 -18
- package/.claude/rules/nccgs-ui.md +0 -14
- package/.claude/rules/nccgs-unity-assets.md +0 -21
- package/.claude/rules/nccgs-unity-code.md +0 -22
- package/.claude/skills/accessibility-review/SKILL.md +0 -22
- package/.claude/skills/accessibility-review/references/astra.md +0 -17
- package/.claude/skills/accessibility-review/references/legacy.md +0 -7
- package/.claude/skills/architecture-decision/SKILL.md +0 -22
- package/.claude/skills/architecture-decision/references/astra.md +0 -12
- package/.claude/skills/architecture-decision/references/legacy.md +0 -7
- package/.claude/skills/asset-audit/SKILL.md +0 -22
- package/.claude/skills/asset-audit/references/astra.md +0 -17
- package/.claude/skills/asset-audit/references/legacy.md +0 -7
- package/.claude/skills/audit/SKILL.md +0 -22
- package/.claude/skills/audit/references/astra.md +0 -17
- package/.claude/skills/audit/references/dimensions.md +0 -46
- package/.claude/skills/audit/references/legacy.md +0 -9
- package/.claude/skills/balance-review/SKILL.md +0 -22
- package/.claude/skills/balance-review/references/astra.md +0 -17
- package/.claude/skills/balance-review/references/legacy.md +0 -7
- package/.claude/skills/bug-triage/SKILL.md +0 -22
- package/.claude/skills/bug-triage/references/astra.md +0 -27
- package/.claude/skills/bug-triage/references/legacy.md +0 -7
- package/.claude/skills/build-live-game/SKILL.md +0 -317
- package/.claude/skills/build-live-game/references/cloud-code.md +0 -563
- package/.claude/skills/closure/SKILL.md +0 -22
- package/.claude/skills/closure/references/astra.md +0 -15
- package/.claude/skills/closure/references/legacy.md +0 -7
- package/.claude/skills/compatibility-review/SKILL.md +0 -22
- package/.claude/skills/compatibility-review/references/astra.md +0 -17
- package/.claude/skills/compatibility-review/references/legacy.md +0 -7
- package/.claude/skills/context-pack/SKILL.md +0 -22
- package/.claude/skills/context-pack/references/astra.md +0 -12
- package/.claude/skills/context-pack/references/legacy.md +0 -7
- package/.claude/skills/dependency-review/SKILL.md +0 -22
- package/.claude/skills/dependency-review/references/astra.md +0 -17
- package/.claude/skills/dependency-review/references/legacy.md +0 -7
- package/.claude/skills/design/SKILL.md +0 -24
- package/.claude/skills/design/references/astra.md +0 -12
- package/.claude/skills/design/references/legacy.md +0 -13
- package/.claude/skills/design-review/SKILL.md +0 -24
- package/.claude/skills/design-review/references/astra.md +0 -17
- package/.claude/skills/design-review/references/legacy.md +0 -7
- package/.claude/skills/evidence-review/SKILL.md +0 -22
- package/.claude/skills/evidence-review/references/astra.md +0 -17
- package/.claude/skills/evidence-review/references/legacy.md +0 -7
- package/.claude/skills/hotfix/SKILL.md +0 -22
- package/.claude/skills/hotfix/references/astra.md +0 -30
- package/.claude/skills/hotfix/references/legacy.md +0 -7
- package/.claude/skills/incident-recovery/SKILL.md +0 -22
- package/.claude/skills/incident-recovery/references/astra.md +0 -27
- package/.claude/skills/incident-recovery/references/legacy.md +0 -7
- package/.claude/skills/levelplay-unity-integration/SKILL.md +0 -1126
- package/.claude/skills/localization/SKILL.md +0 -135
- package/.claude/skills/localization/resources/L10nBatchProcessor.cs +0 -69
- package/.claude/skills/localize-game/SKILL.md +0 -22
- package/.claude/skills/localize-game/references/astra.md +0 -27
- package/.claude/skills/localize-game/references/legacy.md +0 -7
- package/.claude/skills/migrate-project/SKILL.md +0 -22
- package/.claude/skills/migrate-project/references/astra.md +0 -30
- package/.claude/skills/migrate-project/references/legacy.md +0 -19
- package/.claude/skills/migrate-project/references/procedure.md +0 -96
- package/.claude/skills/milestone-review/SKILL.md +0 -22
- package/.claude/skills/milestone-review/references/astra.md +0 -12
- package/.claude/skills/milestone-review/references/legacy.md +0 -7
- package/.claude/skills/nccgs-code-review/SKILL.md +0 -22
- package/.claude/skills/nccgs-code-review/references/astra.md +0 -21
- package/.claude/skills/nccgs-code-review/references/legacy.md +0 -7
- package/.claude/skills/new-unity-project/SKILL.md +0 -179
- package/.claude/skills/performance-audit/SKILL.md +0 -22
- package/.claude/skills/performance-audit/references/astra.md +0 -17
- package/.claude/skills/performance-audit/references/legacy.md +0 -7
- package/.claude/skills/physics-3d-collision/references/troubleshooting.md +0 -41
- package/.claude/skills/plan-feature/SKILL.md +0 -22
- package/.claude/skills/plan-feature/references/astra.md +0 -12
- package/.claude/skills/plan-feature/references/legacy.md +0 -7
- package/.claude/skills/playtest/SKILL.md +0 -22
- package/.claude/skills/playtest/references/astra.md +0 -31
- package/.claude/skills/playtest/references/legacy.md +0 -7
- package/.claude/skills/project-stage/SKILL.md +0 -22
- package/.claude/skills/project-stage/references/astra.md +0 -12
- package/.claude/skills/project-stage/references/legacy.md +0 -7
- package/.claude/skills/prototype-feature/SKILL.md +0 -22
- package/.claude/skills/prototype-feature/references/astra.md +0 -31
- package/.claude/skills/prototype-feature/references/legacy.md +0 -7
- package/.claude/skills/qa-plan/SKILL.md +0 -22
- package/.claude/skills/qa-plan/references/astra.md +0 -12
- package/.claude/skills/qa-plan/references/legacy.md +0 -7
- package/.claude/skills/release/SKILL.md +0 -22
- package/.claude/skills/release/references/astra.md +0 -30
- package/.claude/skills/release/references/legacy.md +0 -11
- package/.claude/skills/release-readiness/SKILL.md +0 -22
- package/.claude/skills/release-readiness/references/astra.md +0 -17
- package/.claude/skills/release-readiness/references/legacy.md +0 -7
- package/.claude/skills/retrospective/SKILL.md +0 -22
- package/.claude/skills/retrospective/references/astra.md +0 -12
- package/.claude/skills/retrospective/references/legacy.md +0 -7
- package/.claude/skills/review/SKILL.md +0 -22
- package/.claude/skills/review/references/astra.md +0 -21
- package/.claude/skills/review/references/legacy.md +0 -9
- package/.claude/skills/security-audit/SKILL.md +0 -22
- package/.claude/skills/security-audit/references/astra.md +0 -17
- package/.claude/skills/security-audit/references/legacy.md +0 -7
- package/.claude/skills/sprint-plan/SKILL.md +0 -22
- package/.claude/skills/sprint-plan/references/astra.md +0 -12
- package/.claude/skills/sprint-plan/references/legacy.md +0 -7
- package/.claude/skills/status/SKILL.md +0 -22
- package/.claude/skills/status/references/astra.md +0 -19
- package/.claude/skills/status/references/legacy.md +0 -9
- package/.claude/skills/story-readiness/SKILL.md +0 -24
- package/.claude/skills/story-readiness/references/astra.md +0 -17
- package/.claude/skills/story-readiness/references/legacy.md +0 -7
- package/.claude/skills/test/SKILL.md +0 -22
- package/.claude/skills/test/references/astra.md +0 -27
- package/.claude/skills/test/references/legacy.md +0 -9
- package/.claude/skills/ui-review/SKILL.md +0 -22
- package/.claude/skills/ui-review/references/astra.md +0 -17
- package/.claude/skills/ui-review/references/legacy.md +0 -7
- package/.claude/skills/unity-cli/CHANGELOG.md +0 -233
- package/.claude/skills/unity-cli/SECURITY.md +0 -22
- package/.claude/skills/unity-cli/SKILL.md +0 -414
- package/.claude/skills/unity-cli/references/auth-license-cloud.md +0 -146
- package/.claude/skills/unity-cli/references/build-run-test.md +0 -349
- package/.claude/skills/unity-cli/references/config-hub.md +0 -103
- package/.claude/skills/unity-cli/references/diagnostics-maintenance.md +0 -326
- package/.claude/skills/unity-cli/references/editors-install.md +0 -327
- package/.claude/skills/unity-cli/references/integration-advanced.md +0 -472
- package/.claude/skills/unity-cli/references/projects-templates.md +0 -574
- package/.claude/skills/work/SKILL.md +0 -22
- package/.claude/skills/work/references/astra.md +0 -32
- package/.claude/skills/work/references/classification.md +0 -41
- package/.claude/skills/work/references/closure.md +0 -60
- package/.claude/skills/work/references/feature-contracts.md +0 -36
- package/.claude/skills/work/references/legacy.md +0 -29
- package/.claude/skills/work/references/verification.md +0 -26
- package/CLAUDE.md +0 -10
- package/MEMORY.md +0 -109
- package/UPGRADING.md +0 -130
- package/VERSION +0 -1
- package/docs/ARCHITECTURE.md +0 -131
- package/docs/ASSET-PRODUCTION-GRAPHIFY-PLAN.md +0 -230
- package/docs/BOUNDED-REPAIR.md +0 -80
- package/docs/EDITOR-SESSION-EVIDENCE.md +0 -52
- package/docs/HANDOFF-AUTOMATION.md +0 -144
- package/docs/HUONG-DAN-MIGRATE-VA-SU-DUNG.md +0 -117
- package/docs/MIGRATION-MATRIX.md +0 -23
- package/docs/NCCGS-1.3.md +0 -13
- package/docs/NCCGS-1.4.1.md +0 -149
- package/docs/NCCGS-1.4.md +0 -184
- package/docs/NCCGS-1.5-IMPLEMENTATION-PLAN.md +0 -378
- package/docs/NCCGS-1.5-PILOT.md +0 -130
- package/docs/NCCGS-1.5.md +0 -237
- package/docs/PHASE-1-OPERATIONS.md +0 -278
- package/docs/PHASE-2-OPERATIONS.md +0 -183
- package/docs/PROJECT-POLICY.md +0 -94
- package/docs/RELEASE-STATUS.md +0 -150
- package/docs/TASK-SLICING.md +0 -57
- package/docs/UNINSTALL.md +0 -134
- package/docs/UPGRADE-QUALIFICATION.md +0 -45
- package/docs/WFK17-HOOK-REPAIR.md +0 -71
- package/docs/WORKFLOWS.md +0 -85
- package/package-assets/nccgs-project.gitignore +0 -2
- package/package-assets/setup-vivox-voice-chat-evals.gitignore +0 -7
- package/scaffold/.nccgs/autonomy.json +0 -4
- package/scaffold/.nccgs/bugs/.gitkeep +0 -1
- package/scaffold/.nccgs/closures/.gitkeep +0 -1
- package/scaffold/.nccgs/context/.gitkeep +0 -1
- package/scaffold/.nccgs/decisions/.gitkeep +0 -1
- package/scaffold/.nccgs/evidence/.gitkeep +0 -1
- package/scaffold/.nccgs/execution.json +0 -10
- package/scaffold/.nccgs/features/.gitkeep +0 -1
- package/scaffold/.nccgs/gates.json +0 -7
- package/scaffold/.nccgs/inputs.json +0 -6
- package/scaffold/.nccgs/migrations/.gitkeep +0 -1
- package/scaffold/.nccgs/playtests/.gitkeep +0 -1
- package/scaffold/.nccgs/project.yaml +0 -109
- package/scaffold/.nccgs/requirements.yaml +0 -10
- package/scaffold/.nccgs/reviews/.gitkeep +0 -1
- package/scaffold/.nccgs/state.md +0 -40
- package/scaffold/.nccgs/templates/agent-handoff.md +0 -37
- package/scaffold/.nccgs/templates/architecture-decision.md +0 -27
- package/scaffold/.nccgs/templates/closure-record.md +0 -62
- package/scaffold/.nccgs/templates/context-packet.yaml +0 -17
- package/scaffold/.nccgs/templates/design-contract.json +0 -34
- package/scaffold/.nccgs/templates/evidence-record.md +0 -23
- package/scaffold/.nccgs/templates/feature-contract.md +0 -60
- package/scaffold/.nccgs/templates/implementation-report.md +0 -52
- package/scaffold/.nccgs/templates/migration-plan.md +0 -40
- package/scaffold/.nccgs/templates/repair-packet.json +0 -14
- package/scaffold/.nccgs/templates/repair-unity-code.json +0 -18
- package/scaffold/.nccgs/templates/repair-unity-editor.json +0 -21
- package/scaffold/.nccgs/templates/task-slices.json +0 -28
- package/scaffold/.nccgs/templates/waiver.md +0 -11
- package/scripts/benchmark-snapshot.mjs +0 -205
- package/scripts/benchmark-v15.mjs +0 -173
- package/scripts/cli.mjs +0 -205
- package/scripts/doctor.mjs +0 -261
- package/scripts/install.mjs +0 -530
- package/scripts/recover-session.mjs +0 -89
- package/scripts/run.mjs +0 -86
- package/scripts/supervise.mjs +0 -152
- package/scripts/uninstall.mjs +0 -292
- package/scripts/validate.mjs +0 -285
- package/scripts/work-handoff.mjs +0 -38
- package/tests/autonomy.test.mjs +0 -126
- package/tests/benchmark-v15.test.mjs +0 -65
- package/tests/design-readiness.test.mjs +0 -200
- package/tests/editor-session-evidence.test.mjs +0 -45
- package/tests/evidence.test.mjs +0 -186
- package/tests/fixtures/compiler-shutdown.cs +0 -67
- package/tests/fixtures/native-provider.mjs +0 -61
- package/tests/framework.test.mjs +0 -740
- package/tests/gates.test.mjs +0 -479
- package/tests/hook-repair.test.mjs +0 -106
- package/tests/lifecycle-v15.test.mjs +0 -346
- package/tests/native-completion-notices.test.mjs +0 -181
- package/tests/orchestration-v15.test.mjs +0 -596
- package/tests/phase1.test.mjs +0 -427
- package/tests/phase2.test.mjs +0 -250
- package/tests/policy-v15.test.mjs +0 -234
- package/tests/ponytail-package.test.mjs +0 -75
- package/tests/returned-handoff-notices.test.mjs +0 -170
- package/tests/review-budget.test.mjs +0 -177
- package/tests/runtime-v15.test.mjs +0 -1198
- package/tests/session-budget.test.mjs +0 -34
- package/tests/task-slices.test.mjs +0 -285
- package/tests/uninstall.test.mjs +0 -477
- package/tests/unity-generated.test.mjs +0 -140
- package/tests/unity-transport.test.mjs +0 -348
- /package/{.claude/nccgs/packages → template}/ponytail/LICENSE +0 -0
- /package/{.claude/nccgs/packages → template}/ponytail/NOTICE.md +0 -0
- /package/{.claude/nccgs/packages → template}/ponytail/complexity-review.md +0 -0
- /package/{.claude/skills → unity-skills}/build-live-game/references/remote-config.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/README.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/codeless-catalog.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-adapty.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-essentialkit.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-revenuecat.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-unipay.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/migration-v4-to-v5.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-add-iap-to-new-project.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-convert-native-storekit.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/platform-notes.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/pre-check.md +0 -0
- /package/{.claude/skills → unity-skills}/localization/resources/LocalizedFontAsset.cs +0 -0
- /package/{.claude/skills → unity-skills}/optimize-audio/resources/platform-settings.md +0 -0
- /package/{.claude/skills → unity-skills}/optimize-web/resources/WebOptimizer.cs +0 -0
- /package/{.claude/skills → unity-skills}/optimize-web/resources/toktx-examples.sh +0 -0
- /package/{.claude/skills → unity-skills}/physics-3d-collision/resources/CollisionDebugger.cs +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/dgs-entrypoint.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/entrypoints.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/examples.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/implementation-fit.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/underlying-services.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/workflows-prerequisites.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/.env.example +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/README.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/promptfooconfig.yaml +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/tests/init-and-login.yaml +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/tests/text-chat.yaml +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/tests/voice-channels.yaml +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/events-and-participants.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/init-and-login.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/text-chat.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/troubleshooting.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/voice-channels.md +0 -0
- /package/{.claude/skills → unity-skills}/shader-graph-create-custom-node/resources/all_hints.hlsl +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/references/api_reference.md +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/references/background.md +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/AutomaticSliceTexture.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GenerateNewSpriteRects.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GetTextureSourceImageSize.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GetTextureToSlice.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GridSliceTexture.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/IsometricSliceTexture.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/README.md +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/SetPivotExample.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/SpriteToPng.cs +0 -0
- /package/{.claude/skills → unity-skills}/ui-imgui/references/gui-elements.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-imgui/references/templates.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-ugui/references/scrollview-setup.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/common-issues.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/painter2d.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/pointermanipulator-guide.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/svg-icons.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/ui-runtime-binding.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/uss-guide.md +0 -0
- /package/{.claude/skills → unity-skills}/urp-postprocessing/references/effect-reference.md +0 -0
package/README.md
CHANGED
|
@@ -1,206 +1,87 @@
|
|
|
1
|
-
# NCCGS
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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.
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -1,38 +1,10 @@
|
|
|
1
1
|
# Third-party notices
|
|
2
2
|
|
|
3
|
-
##
|
|
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
|
-
|
|
6
|
-
engineering
|
|
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
|
-
|
|
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
|
+
}
|
package/cli/feedback.mjs
ADDED
|
@@ -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
|
+
}
|