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
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feedback
|
|
3
|
+
description: Send or prepare a feedback bundle for the NCCGS maintainers (what ran, what failed, what was blocked, tokens per task) with the person's note, and set the consent level (auto / manual / off). Use when something went wrong, when NCCGS suggests it, or when the session asks for consent.
|
|
4
|
+
allowed-tools: Read, Bash, AskUserQuestion
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /feedback
|
|
8
|
+
|
|
9
|
+
A bundle holds versions, doctor, per-task numbers, diagnostics and the person's note. No source code, screenshots, transcripts or credentials; project name and task titles are included. Where it goes is `feedback.endpoint` in `.nccgs/project.json`; a copy always stays under `.nccgs/feedback/`.
|
|
10
|
+
|
|
11
|
+
1. **Consent first.** If `.nccgs/project.json` has `feedback.consent: "ask"` (or the session told you consent is not set), ask once with AskUserQuestion — options `auto` (send by itself when an issue is detected or every 7 days), `manual` (only suggest), `off` (never) — then `npx nccgs feedback --project . --consent <choice>`. `off` ends here.
|
|
12
|
+
2. **What happened.** Ask in one question what to report (a problem now, an impression after some days, or the periodic bundle) and whether to include reports.
|
|
13
|
+
3. `npx nccgs feedback --project . --since <days> --note "<their words>" [--with-reports] --send` (omit `--send` when they only want the file). The `.md` path and the send result print on stderr.
|
|
14
|
+
4. Tell the person the three numbers (tasks closed / failed verifications / diagnostics), the top diagnostic line, whether it was sent (and the id) or where the file is.
|
|
15
|
+
|
|
16
|
+
Never add `--send` without the person's yes in this session unless consent is `auto`.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: map-systems
|
|
3
|
+
description: Break the brief into systems and an ordered slice plan of measurable tasks (.nccgs/design/systems.md and slice.json) that /vertical-slice executes. Use after /brainstorm, or when a feature needs more than one task.
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Write, Bash, AskUserQuestion
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /map-systems
|
|
8
|
+
|
|
9
|
+
Output: `.nccgs/design/systems.md` (the map) and `.nccgs/design/slice.json` (the plan), validated by `node .claude/nccgs/runtime/task/task.mjs plan --validate .nccgs/design/slice.json`.
|
|
10
|
+
|
|
11
|
+
## Systems map
|
|
12
|
+
|
|
13
|
+
From `.nccgs/design/brief.md` list the systems (3–6 for a slice): name, responsibility in one line, what it owns (state), what it reads from others, Unity surface (MonoBehaviour / plain C# / asset). Put the pure logic (timers, rules, spawning math) in plain C# classes so EditMode tests cover it without a scene. Note the two riskiest couplings.
|
|
14
|
+
|
|
15
|
+
## Slice plan rules
|
|
16
|
+
|
|
17
|
+
- 3–6 tasks, each one session of work, each closing with its own evidence. Order by risk: task 1 proves the tooling path (scene loads, input reaches the game, a screenshot shows something), later tasks add mechanics, the last adds feedback/HUD.
|
|
18
|
+
- Every task is a full contract (see `protocols/evidence.md`): `id`, `title`, `files` in scope, `criteria` with assertions on artifacts `task verify` produces (`<id>-tests.json`, `<id>-playmode.json`, `<id>-console.json`, `<id>-observe.json`, `screens/<id>/NN.png`, `<id>-playtest-<name>.json`), `notes` (how to try it), `rigor`, `dependsOn`.
|
|
19
|
+
- Numbers from the brief go into criteria as thresholds (coyote 0.10 s → an EditMode test at 0.08 s passes and 0.15 s fails). A subjective decision becomes a `kind: "manual"` criterion plus a playtest spec, never a vague assertion.
|
|
20
|
+
- Each task has at least one observe criterion with a screenshot that can show the change; use `--shots` timing when the change lasts under a second.
|
|
21
|
+
- Scope only files the task needs; the report marks anything else as outside the contract.
|
|
22
|
+
|
|
23
|
+
Write `slice.json` as `{ "schemaVersion": 1, "name": "...", "tasks": [ ... ] }`, run the validator, fix what it reports. Show the user the task list (id, title, what it proves) with AskUserQuestion before finishing; move or merge tasks if they ask.
|
|
24
|
+
|
|
25
|
+
End with: both paths, the validator result and `next: /vertical-slice` (or `/work` with `task open --plan <id>` for one task).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playtest
|
|
3
|
+
description: Measure how the game plays - run a scripted playtest with telemetry in the live Editor, have the playtester judge feel with evidence, and give the user options. Use for "does it feel right", tuning, difficulty, fairness questions.
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Write, Bash, Agent, AskUserQuestion
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /playtest
|
|
8
|
+
|
|
9
|
+
Output: a playtest artifact under `.nccgs/evidence/measurements/`, the playtester's judgement, and a decision by the user.
|
|
10
|
+
|
|
11
|
+
1. State the question in one line (what feel, which number or rule). Read `.claude/nccgs/protocols/playtest.md`.
|
|
12
|
+
2. Write the spec to `.nccgs/design/playtests/<name>.json`: duration, key pattern or timeline, probes on the game's public static members (distance, alive, speed, counters), `stopWhen`. Two or three specs when the question compares behaviours (e.g. presses every 0.9 s vs 0.6 s, or seeds).
|
|
13
|
+
3. Run each against an open task (open a `prototype` task `PT-<name>` if none is open): `node .claude/nccgs/runtime/task/task.mjs verify --id <task> --kind playtest --spec <file>`; add `--kind observe --shots ...` when the question is visual.
|
|
14
|
+
4. Invoke the `nccgs-playtester` subagent with the artifact paths and the question. It returns the numbers, the judgement and 2–4 options.
|
|
15
|
+
5. Put the options to the user with AskUserQuestion, with the evidence next to each. Record the decision in `.nccgs/state.md` (one line) through `task close --outcome partial --decide ...` of the prototype task, or in the open task's notes.
|
|
16
|
+
|
|
17
|
+
Never tune a number without the user's decision; never report a feel judgement without the artifact behind it.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: status
|
|
3
|
+
description: Read-only status of this NCCGS project - open tasks and their criteria, latest evidence and reviews, recent decisions, Unity/Editor state, pending updates, and the next concrete action. Use for "where are we", "status", "what's open", "what's next".
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /status
|
|
8
|
+
|
|
9
|
+
Output: a short status in prose (no more than ten lines) ending with one concrete next action. Do not change anything.
|
|
10
|
+
|
|
11
|
+
0. `node .claude/nccgs/runtime/task/task.mjs project` → rewrites `.nccgs/project.html` (every task, open findings, tokens) and prints the counts. Mention the file path once so the user can open it.
|
|
12
|
+
1. `node .claude/nccgs/runtime/task/task.mjs list` → open tasks. For each open task, `inspect --id <id>` → criteria pass/fail/unverified, `stale` (source changed since last verify), reviews passed vs needed, fix rounds used.
|
|
13
|
+
2. `.nccgs/state.md` → the last three closed tasks and decisions.
|
|
14
|
+
3. `unity status --format json` → which Editor is open for this project and whether Pipeline is `ready`.
|
|
15
|
+
4. `.nccgs/cache/update-check.json` (if present) → pending NCCGS / Unity Skills / Unity CLI updates. Mention them in one line; never apply them.
|
|
16
|
+
5. `.nccgs/events.jsonl` (last 20 lines) → recent agent calls and their models.
|
|
17
|
+
|
|
18
|
+
Report: what is open and how close it is to closing, what evidence is missing, what the user still has to decide, and the single next command or question. If nothing is open, say what the last closed task was and suggest the next step from `state.md`.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test
|
|
3
|
+
description: Run or write Unity tests and runtime checks for this project and record them as task evidence - EditMode/PlayMode tests in the live Editor or a batch Editor, Play Mode observation with screenshots, console checks. Use for "run the tests", "does it still work", "add a test for X", "check the console".
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Write, Edit, Bash, Agent
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /test
|
|
8
|
+
|
|
9
|
+
Output: measurements under `.nccgs/evidence/measurements/` and screenshots under `.nccgs/evidence/screens/`, attached to a task, plus a short reading of what they show. If no task is open, open one with rigor `prototype` named after the check so the evidence has a home.
|
|
10
|
+
|
|
11
|
+
## Run what exists
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
node .claude/nccgs/runtime/task/task.mjs verify --id <id> --kind tests --mode editor
|
|
15
|
+
node .claude/nccgs/runtime/task/task.mjs verify --id <id> --kind tests --mode playmode --filter <Namespace.Class>
|
|
16
|
+
node .claude/nccgs/runtime/task/task.mjs verify --id <id> --kind observe --keys Space --frames 2
|
|
17
|
+
node .claude/nccgs/runtime/task/task.mjs verify --id <id> --kind console
|
|
18
|
+
node .claude/nccgs/runtime/task/task.mjs verify --id <id> --kind command --name build -- unity build . --editor-version <ver>
|
|
19
|
+
```
|
|
20
|
+
Live Editor open → Pipeline `test run` (results in seconds, no domain reload for EditMode). No Editor → batch `unity test` with the project's own `--editor-version` (minutes; refuses if the project is open elsewhere).
|
|
21
|
+
|
|
22
|
+
Read the result: `tests.json` has `passed/failed/skipped` and `failures[]` with messages. A failed test is a fact about the code until proven otherwise; do not weaken an assertion to make it pass.
|
|
23
|
+
|
|
24
|
+
## Write a test
|
|
25
|
+
|
|
26
|
+
- Put EditMode tests under `Assets/Tests/EditMode/` and PlayMode tests under `Assets/Tests/PlayMode/` (create the `.asmdef` with the Test Framework references if missing; check `Packages/manifest.json` for `com.unity.test-framework`).
|
|
27
|
+
- Map each test to a criterion id in its name or a comment (`// criterion: dash-iframe`).
|
|
28
|
+
- Test behaviour through the public surface the player feels (input → state → output), not private fields. Use `[UnityTest]` with `yield return null` for anything that needs frames.
|
|
29
|
+
- Keep EditMode tests free of scene state; use PlayMode for physics, input and timing. A forgiveness mechanic (coyote time, input buffer) is a timing test: advance frames and assert the window, do not assert the implementation.
|
|
30
|
+
- After adding tests, `unity command script recompile` then `unity command console status` must report `compilationFailed: false` before running.
|
|
31
|
+
|
|
32
|
+
## Observe
|
|
33
|
+
|
|
34
|
+
`--kind observe` enters Play Mode, waits, optionally presses keys, captures Game-view screenshots, reads the console, exits. Always open the screenshots with the Read tool and describe them; an all-blue screen on an empty scene is correct, a black or clipped one is a finding. On Unity 6.3 the Pipeline server drops for ~3 s after entering Play Mode; `verify` already waits, custom scripts must too.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unity-foundation
|
|
3
|
+
description: Set up or audit a Unity project's baseline for NCCGS work - assembly definitions, EditMode and PlayMode test assemblies, input package, render pipeline, a smoke scene - as a measured task. Use on a fresh project or when tests cannot run.
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Write, Edit, Bash, AskUserQuestion
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /unity-foundation
|
|
8
|
+
|
|
9
|
+
Output: a closed task `FOUNDATION` whose evidence proves the project can run the loop, and `.nccgs/design/foundation.md` recording what exists.
|
|
10
|
+
|
|
11
|
+
1. Audit, read-only: `Packages/manifest.json` (input system or legacy input, render pipeline, test framework, `com.unity.pipeline`), `Assets/` layout, existing `.asmdef`, existing tests, scenes in Build Settings, `ProjectSettings/ProjectVersion.txt`. Write the findings to `.nccgs/design/foundation.md` (present / missing / decision needed).
|
|
12
|
+
2. Ask the user only about real forks: Input System vs legacy input when neither is set up, 2D vs 3D physics when unclear, which scene is the smoke scene.
|
|
13
|
+
3. Open the task: `node .claude/nccgs/runtime/task/task.mjs open --id FOUNDATION --title "Project foundation" --rigor production --files "Assets/Scripts/Game.asmdef,Assets/Tests/EditMode/,Assets/Tests/PlayMode/,Assets/Scenes/<smoke>.unity" --criteria-json '[...]'` with criteria: `editmode` (a smoke EditMode test passes, `/passed gte 1`), `playmode` (a smoke PlayMode test loads the smoke scene, `--name playmode`), `compiles` (console ground truth), `observe` (Play Mode enters and exits with 0 exceptions, one screenshot).
|
|
14
|
+
4. Create only what is missing: `Assets/Scripts/Game.asmdef` (runtime), `Assets/Tests/EditMode/Game.Tests.EditMode.asmdef` and `Assets/Tests/PlayMode/Game.Tests.PlayMode.asmdef` (test assemblies referencing Game, UnityEngine.TestRunner, UnityEditor.TestRunner, nunit precompiled, `UNITY_INCLUDE_TESTS`), one smoke test in each, and nothing else. Do not add packages without asking; `com.unity.pipeline` is installed with `unity pipeline install --project-path .` after the user agrees.
|
|
15
|
+
5. Verify, review, close as in `/work`. Record in `foundation.md` the versions and the decisions taken.
|
|
16
|
+
|
|
17
|
+
End with: the report path and what the next skill needs (`/brainstorm` for a new game, `/work` for a feature).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vertical-slice
|
|
3
|
+
description: Execute the slice plan task by task - open each planned contract, run the full /work loop, stop at the first partial or blocked, finish with the project page and a changelog. Use after /map-systems.
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Write, Edit, Bash, Agent, AskUserQuestion
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /vertical-slice
|
|
8
|
+
|
|
9
|
+
Output: every task in `.nccgs/design/slice.json` closed, in order, each with its report; then `.nccgs/project.html` and a release note.
|
|
10
|
+
|
|
11
|
+
Loop:
|
|
12
|
+
1. `node .claude/nccgs/runtime/task/task.mjs plan` → the plan status. If a task is `open`, continue it. If none is `ready`, stop and report.
|
|
13
|
+
2. `node .claude/nccgs/runtime/task/task.mjs open --plan` opens the next ready task with its planned contract. Then run the `/work` loop from step 2 (edit) onward for that task — same rules, same evidence, same review. Read the planned `notes` and `criteria` before editing; the plan is the brief.
|
|
14
|
+
3. On `close --outcome success`: continue with the next task. On `partial`, `blocked` or exhausted fix rounds: stop, say which task and why, and what the user must decide. Never skip a task or reorder without asking.
|
|
15
|
+
4. After the last task: `node .claude/nccgs/runtime/task/task.mjs project` and `npx nccgs release --project . --from <date the slice started> --name <slice name>`; give the user both paths and the three numbers per task (criteria, tests, review).
|
|
16
|
+
|
|
17
|
+
Budget: one task per context window is normal. If the context is getting long, close the current task first; the next session picks up from `plan`.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: work
|
|
3
|
+
description: Implement a feature, fix or change in this Unity project end to end - contract, edit, run, look, fix, independent review, close, report. Use for any request that changes code, scenes, prefabs or assets ("add", "implement", "fix", "change", "make X do Y").
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Write, Edit, Bash, Agent, AskUserQuestion
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /work
|
|
8
|
+
|
|
9
|
+
Output: a closed task with a one-page report under `.nccgs/reports/<id>.md`, or an honest `partial`/`blocked` report. Stop when `task close` succeeds, when the fix rounds are exhausted, or when a decision needs the user.
|
|
10
|
+
|
|
11
|
+
## 1. Brief and contract (before editing anything)
|
|
12
|
+
|
|
13
|
+
1. Restate the request in three lines: outcome, what the player will see, what must not change. Read `.nccgs/state.md` for decisions already made.
|
|
14
|
+
2. If the request involves a subjective choice (mechanic, feel, layout, tuning numbers), present 2-4 options with trade-offs using AskUserQuestion. Do not pick for the user.
|
|
15
|
+
3. Decide rigor: `prototype` (no review, up to 6 fix rounds) for throwaway or exploration, `production` (one review) for anything that stays, `release` (two reviews) for release-critical. Default comes from `.nccgs/project.json`.
|
|
16
|
+
4. Write criteria as measurable assertions (see `.claude/nccgs/protocols/evidence.md`). Each criterion points at an artifact `task verify` will produce. A player-visible change gets the `observe` criterion automatically at rigor ≥ production.
|
|
17
|
+
5. Open the task. If `.nccgs/design/slice.json` has this work planned, `node .claude/nccgs/runtime/task/task.mjs open --plan <id>` opens it with the planned contract (flags still override); otherwise:
|
|
18
|
+
```
|
|
19
|
+
node .claude/nccgs/runtime/task/task.mjs open --title "..." --rigor production --files "Assets/Scripts/Player/Dash.cs,Assets/Scenes/Arena.unity" --criteria-json '[...]' --notes "How to try it: ..."
|
|
20
|
+
```
|
|
21
|
+
Keep the returned task id; every later command uses it.
|
|
22
|
+
|
|
23
|
+
## 2. Edit
|
|
24
|
+
|
|
25
|
+
- Read the affected flow first (callers, shared state, serialization). Follow `.claude/nccgs/ponytail/engineering.md`.
|
|
26
|
+
- Edit only files in scope. If the scope turns out to be wrong, say so and re-open with the right scope; do not creep.
|
|
27
|
+
- Use `unity command` for scene/prefab/component changes. For C#, after editing run `unity command script recompile` and `unity command console status` to catch compile errors before any test.
|
|
28
|
+
- Tasks that are too large for one context: delegate to the `nccgs-implementer` subagent with the task id, criteria and files; it runs the same loop and hands back.
|
|
29
|
+
|
|
30
|
+
## 3. Run and look
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
node .claude/nccgs/runtime/task/task.mjs verify --id <id> --kind tests [--mode editor|playmode] [--filter Name]
|
|
34
|
+
node .claude/nccgs/runtime/task/task.mjs verify --id <id> --kind observe [--keys Space] [--frames 3] [--match-log "\[Runner\] jump"]
|
|
35
|
+
node .claude/nccgs/runtime/task/task.mjs verify --id <id> --kind observe --keys Space --hold-key 60 --shots 380,1200 --match-log "\[Runner\] jump" # timed: frames at exact ms after the press
|
|
36
|
+
node .claude/nccgs/runtime/task/task.mjs verify --id <id> --kind tests --mode playmode --name playmode # writes <id>-playmode.json
|
|
37
|
+
```
|
|
38
|
+
`verify` picks the live Editor when one is open (Pipeline `test run`, screenshots, console) and a batch Editor otherwise. It prints the criteria status.
|
|
39
|
+
|
|
40
|
+
Then **look**: open each screenshot under `.nccgs/evidence/screens/<id>/` with the Read tool and read the console summary in `.nccgs/evidence/measurements/<id>-observe.json`. Describe what you see in one line each. Decide from what is on screen.
|
|
41
|
+
|
|
42
|
+
- Objective failure (red test, exception, wrong screen): fix it. `node .claude/nccgs/runtime/task/task.mjs fix --id <id>` counts the round; when it reports `exhausted`, stop and report partial.
|
|
43
|
+
- Subjective doubt (feels wrong, layout questionable): ask the user with 2-4 options and the screenshot paths. Do not guess.
|
|
44
|
+
- Feel/balance questions you can measure: write a playtest spec (`.claude/nccgs/protocols/playtest.md`), run `task verify --id <id> --kind playtest --spec <file>`, and hand the artifact to the `nccgs-playtester` subagent; it returns the judgement and options for the user.
|
|
45
|
+
|
|
46
|
+
## 4. Independent review (rigor ≥ production)
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
node .claude/nccgs/runtime/task/task.mjs review --id <id>
|
|
50
|
+
```
|
|
51
|
+
This writes `.nccgs/evidence/review/<id>-prompt.md`. Invoke the `nccgs-reviewer` subagent with that file as its prompt (paste the file contents). When it has written the verdict file:
|
|
52
|
+
```
|
|
53
|
+
node .claude/nccgs/runtime/task/task.mjs review --id <id> --import --model <model it ran as>
|
|
54
|
+
```
|
|
55
|
+
CHANGES_REQUIRED: fix the findings (counts a fix round), re-verify, re-review. BLOCKED: report blocked with the reason.
|
|
56
|
+
PASS with MEDIUM/LOW findings: fix what is cheap, then record each one you addressed with `task review --id <id> --resolve <index or title words> --reason "..."`; leave the rest open with no comment (the report lists them as open). Never resolve a finding you did not act on.
|
|
57
|
+
|
|
58
|
+
## 5. Close and report
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
node .claude/nccgs/runtime/task/task.mjs close --id <id> --outcome success
|
|
62
|
+
```
|
|
63
|
+
`close` refuses `success` when a criterion fails, the source changed after the last verify, or the review is missing; then fix, re-verify, or close as `partial`/`blocked` with `--outcome`. It writes the report (`.nccgs/reports/<id>.md` and a self-contained `<id>.html` with the screenshots and token cost), refreshes `.nccgs/project.html` and updates `.nccgs/state.md`. End your reply with the report path and the three numbers the report leads with (criteria, tests, review); the token cost is in the report, do not estimate it yourself.
|
|
64
|
+
|
|
65
|
+
Reply to the user with: the outcome, the report path, the two most important things you saw on screen, and any decision still open. Never write "DONE" for a task that is not closed.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# NCCGS feedback receiver
|
|
2
|
+
|
|
3
|
+
One Cloudflare Worker that turns a feedback bundle into a GitHub issue, so bundles can be read, labelled and closed like any other issue.
|
|
4
|
+
|
|
5
|
+
Setup (once, by the maintainer):
|
|
6
|
+
|
|
7
|
+
1. Create the repository `LacBird/nccgs-feedback` (private is fine). Labels are created on demand by the API.
|
|
8
|
+
2. Create a fine-grained personal access token limited to that repository with **Issues: read and write** only.
|
|
9
|
+
3. `npm i -g wrangler && wrangler login`, then in this folder: `wrangler secret put GITHUB_TOKEN`, optionally `wrangler secret put INGEST_KEY`, and `wrangler deploy`. The URL is `https://nccgs-feedback.<account>.workers.dev/v1/bundle`.
|
|
10
|
+
4. Put that URL in `DEFAULT_CONFIG.feedback.endpoint` (`runtime/core/project.mjs`) before the next release, or users set `feedback.endpoint` in `.nccgs/project.json`.
|
|
11
|
+
|
|
12
|
+
What a client sends: `{ bundle, markdown }` as built by `nccgs feedback` (≤ 512 KB). What the issue contains: the Markdown summary and, under a collapsed block, the JSON bundle. No code, screenshots, transcripts or credentials are in a bundle; project name and task titles are.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// NCCGS feedback receiver — a Cloudflare Worker. POST /v1/bundle {bundle, markdown} → one GitHub issue
|
|
2
|
+
// in FEEDBACK_REPO. Secrets: GITHUB_TOKEN (fine-grained, Issues: read/write on that repo only).
|
|
3
|
+
// Vars: FEEDBACK_REPO ("owner/name"). Optional: INGEST_KEY (clients send header x-nccgs-key).
|
|
4
|
+
// Limits: 512 KB body, 20 bundles per IP per day (KV binding RATE optional; without it no limit).
|
|
5
|
+
export default {
|
|
6
|
+
async fetch(request, env) {
|
|
7
|
+
const url = new URL(request.url);
|
|
8
|
+
if (request.method === "GET" && url.pathname === "/") return new Response("nccgs feedback receiver", { status: 200 });
|
|
9
|
+
if (request.method !== "POST" || url.pathname !== "/v1/bundle") return json({ error: "not found" }, 404);
|
|
10
|
+
if (env.INGEST_KEY && request.headers.get("x-nccgs-key") !== env.INGEST_KEY) return json({ error: "unauthorized" }, 401);
|
|
11
|
+
const len = Number(request.headers.get("content-length") || 0);
|
|
12
|
+
if (len > 512 * 1024) return json({ error: "too large" }, 413);
|
|
13
|
+
let payload; try { payload = await request.json(); } catch { return json({ error: "bad json" }, 400); }
|
|
14
|
+
const b = payload?.bundle;
|
|
15
|
+
if (!b || b.schemaVersion !== 1 || typeof payload.markdown !== "string") return json({ error: "bad bundle" }, 400);
|
|
16
|
+
if (env.RATE) {
|
|
17
|
+
const ip = request.headers.get("cf-connecting-ip") || "unknown";
|
|
18
|
+
const key = `rate:${ip}:${new Date().toISOString().slice(0, 10)}`;
|
|
19
|
+
const n = Number(await env.RATE.get(key) || 0);
|
|
20
|
+
if (n >= 20) return json({ error: "rate limited" }, 429);
|
|
21
|
+
await env.RATE.put(key, String(n + 1), { expirationTtl: 86400 });
|
|
22
|
+
}
|
|
23
|
+
const t = b.totals || {};
|
|
24
|
+
const topDiag = Object.entries(t.diagnostics || {}).sort((a, c) => c[1] - a[1])[0];
|
|
25
|
+
const title = `[feedback] nccgs ${b.nccgs} · ${(b.platform || "").split(" ")[0]} · ${t.closed ?? 0}/${t.tasks ?? 0} closed · ${t.failedVerifications ?? 0} failed verify${topDiag ? ` · ${topDiag[0]}×${topDiag[1]}` : ""}${b.trigger ? ` · ${b.trigger}` : ""}`;
|
|
26
|
+
const jsonText = JSON.stringify(b, null, 1);
|
|
27
|
+
const details = jsonText.length < 60000 ? `\n\n<details><summary>bundle.json</summary>\n\n\`\`\`json\n${jsonText}\n\`\`\`\n</details>` : `\n\n_bundle.json omitted (${jsonText.length} bytes); diagnostics count ${(b.diagnostics || []).length}._`;
|
|
28
|
+
const labels = ["feedback", `v${b.nccgs}`, ...(b.trigger && b.trigger !== "manual" ? ["auto"] : []), ...((t.failedVerifications ?? 0) > 0 || topDiag ? ["has-issues"] : [])];
|
|
29
|
+
const gh = await fetch(`https://api.github.com/repos/${env.FEEDBACK_REPO}/issues`, {
|
|
30
|
+
method: "POST",
|
|
31
|
+
headers: { authorization: `Bearer ${env.GITHUB_TOKEN}`, accept: "application/vnd.github+json", "content-type": "application/json", "user-agent": "nccgs-feedback-worker", "x-github-api-version": "2022-11-28" },
|
|
32
|
+
body: JSON.stringify({ title: title.slice(0, 250), body: payload.markdown.slice(0, 60000) + details, labels })
|
|
33
|
+
});
|
|
34
|
+
if (!gh.ok) return json({ error: "github", status: gh.status, detail: (await gh.text()).slice(0, 300) }, 502);
|
|
35
|
+
const issue = await gh.json();
|
|
36
|
+
return json({ id: issue.number, url: issue.html_url }, 201);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const json = (o, status = 200) => new Response(JSON.stringify(o), { status, headers: { "content-type": "application/json" } });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
name = "nccgs-feedback"
|
|
2
|
+
main = "worker.js"
|
|
3
|
+
compatibility_date = "2026-01-01"
|
|
4
|
+
|
|
5
|
+
[vars]
|
|
6
|
+
FEEDBACK_REPO = "LacBird/nccgs-feedback"
|
|
7
|
+
|
|
8
|
+
# secrets (set with `wrangler secret put`): GITHUB_TOKEN, optionally INGEST_KEY
|
|
9
|
+
# optional rate limit:
|
|
10
|
+
# [[kv_namespaces]]
|
|
11
|
+
# binding = "RATE"
|
|
12
|
+
# id = "<kv id>"
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 2d-pixel-perfect
|
|
3
|
+
description: Sets up, diagnoses, and fixes pixel perfect 2D rendering with PixelPerfectCamera in URP or Built-in. Use when a retro-style or pixel art 2D game looks blurry, jittery, or misaligned. Not for HD 2D or high-resolution art.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Set up, diagnose, and fix pixel perfect 2D rendering in Unity projects.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ⚠ There Are Two Completely Separate Implementations
|
|
11
|
+
|
|
12
|
+
Pixel perfect rendering in Unity is **not one system** — it is two separate, incompatible implementations, one per render pipeline. **Always detect the pipeline before writing or diagnosing any code.**
|
|
13
|
+
|
|
14
|
+
| | URP | Built-in |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| **Component** | `UnityEngine.Rendering.Universal.PixelPerfectCamera` | `UnityEngine.U2D.PixelPerfectCamera` |
|
|
17
|
+
| **Package** | Built into URP — no extra install | `com.unity.2d.pixel-perfect` v6.0.0+ |
|
|
18
|
+
| **API style** | Enums (`gridSnapping`, `cropFrame`) | Booleans (`pixelSnapping`, `upscaleRT`, `cropFrameX/Y`) |
|
|
19
|
+
|
|
20
|
+
**Do not install `com.unity.2d.pixel-perfect` in a URP project.**
|
|
21
|
+
|
|
22
|
+
**→ Always call `DetectPipeline()` first** (`references/pipeline-detection.cs`), then branch your setup, diagnostics, and fixes based on the result.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## When NOT to use this skill
|
|
27
|
+
|
|
28
|
+
- **HD 2D or high-resolution 2D games** — pixel snapping and point filtering will make smooth art look wrong
|
|
29
|
+
- **UI-only scenes** — use Canvas Scaler instead
|
|
30
|
+
- **HDRP projects** — Pixel Perfect Camera is not supported
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Critical Reminders
|
|
35
|
+
|
|
36
|
+
⚠ **Detect the render pipeline first** — URP and Built-in use different Pixel Perfect Camera components that are not interchangeable.
|
|
37
|
+
⚠ **Filter Mode = Point is the #1 fix** — bilinear filtering is Unity's default and is almost always the cause of blurry sprites.
|
|
38
|
+
⚠ **Anti-Aliasing must be disabled** — in Quality Settings and on the camera. AA actively blurs pixel edges.
|
|
39
|
+
|
|
40
|
+
## Key Principles
|
|
41
|
+
|
|
42
|
+
### 1. Pipeline Detection & Camera Component Selection
|
|
43
|
+
|
|
44
|
+
See the two-path comparison table at the top of this file. Assembly name note: the standalone Built-in package installs into a `Runtime/` folder, but the asmdef `"name"` field is `Unity.2D.PixelPerfect` — no `Runtime` suffix. HDRP is unsupported — see the HDRP fallback section under Common Issues.
|
|
45
|
+
|
|
46
|
+
**→ Code: `references/pipeline-detection.cs`** — `DetectPipeline()`, `GetPixelPerfectCameraType()`, and migration mismatch check.
|
|
47
|
+
|
|
48
|
+
### 2. Diagnostic-First Approach
|
|
49
|
+
|
|
50
|
+
Always diagnose before making changes. Report findings, then fix only what is broken.
|
|
51
|
+
|
|
52
|
+
### 3. Work in the correct scope
|
|
53
|
+
|
|
54
|
+
Default to scene scope. Scan project-wide only when the user explicitly requests it.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Diagnostic Checklist
|
|
59
|
+
|
|
60
|
+
**Sprite import settings:**
|
|
61
|
+
- [ ] Filter Mode = `Point (no filter)` on all in-scope sprites
|
|
62
|
+
- [ ] Mip Maps = disabled
|
|
63
|
+
- [ ] Compression = `None` / Uncompressed
|
|
64
|
+
- [ ] PPU consistent across all sprites in scene
|
|
65
|
+
- [ ] Sprite pivots set to Custom / Pixels mode — a center pivot on an odd-dimension sprite (e.g. 15×15) lands at 7.5px, causing 0.5px misalignment
|
|
66
|
+
|
|
67
|
+
**→ Code: `references/sprite-settings.cs`** — `GetImporter()` and `FixSpriteImportSettings()`.
|
|
68
|
+
|
|
69
|
+
**Editor snap settings:**
|
|
70
|
+
- [ ] Grid Size = `1 / assetsPPU` on all axes (e.g. PPU 16 → 0.0625, PPU 100 → 0.01)
|
|
71
|
+
- [ ] Grid Snapping enabled in the Grid and Snap overlay
|
|
72
|
+
- [ ] To snap existing GameObjects: select them → Align Selected → All Axes
|
|
73
|
+
|
|
74
|
+
**Camera setup:**
|
|
75
|
+
- [ ] Camera projection = Orthographic
|
|
76
|
+
- [ ] Pixel Perfect Camera component present and correct type for pipeline
|
|
77
|
+
- [ ] `allowHDR`, `allowMSAA`, `allowDynamicResolution` all `false`
|
|
78
|
+
- [ ] Scene view shows two green bounding boxes on the camera gizmo — solid = visible area, dotted = reference resolution
|
|
79
|
+
|
|
80
|
+
**→ Code: `references/camera-setup-urp.cs`** — full URP camera + PP Camera configuration.
|
|
81
|
+
**→ Code: `references/camera-setup-builtin.cs`** — Built-in standalone configuration.
|
|
82
|
+
|
|
83
|
+
**Project quality settings:**
|
|
84
|
+
- [ ] Anti-Aliasing = 0 in Quality Settings
|
|
85
|
+
- [ ] Anisotropic Filtering = Disabled
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## API Reference
|
|
90
|
+
|
|
91
|
+
Full property/method tables, `GridSnapping` and `CropFrame` enum values, and recommended configurations:
|
|
92
|
+
**→ `references/api-reference.md`** — read this when writing or reviewing camera setup code.
|
|
93
|
+
|
|
94
|
+
Quick enum summary:
|
|
95
|
+
|
|
96
|
+
**`GridSnapping`**: `None` · `PixelSnapping` (standard) · `UpscaleRenderTexture` (authentic low-res; incompatible with post-processing and UI text)
|
|
97
|
+
|
|
98
|
+
**`CropFrame`**: `None` · `Pillarbox` · `Letterbox` · `Windowbox` (safest default) · `StretchFill`
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Reference Resolution
|
|
103
|
+
|
|
104
|
+
Choose before building any assets. Never change after asset production starts.
|
|
105
|
+
|
|
106
|
+
| Reference resolution | 1080p | 1440p | 4K |
|
|
107
|
+
|---|---|---|---|
|
|
108
|
+
| 320 × 180 | 6× | 8× | 12× |
|
|
109
|
+
| 480 × 270 | 4× | ~5.3× | 8× |
|
|
110
|
+
| 640 × 360 | 3× | 4× | 6× |
|
|
111
|
+
|
|
112
|
+
320×180 is the safest general choice. For screens with no integer fit (e.g. 1366×768), use `cropFrame = Windowbox` to add black bars rather than stretching to a fractional scale.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Migration & Compatibility
|
|
117
|
+
|
|
118
|
+
### URP project with the Built-in standalone component
|
|
119
|
+
|
|
120
|
+
**Symptom**: `DetectPipeline()` returns URP but camera has `UnityEngine.U2D.PixelPerfectCamera`. Symptoms are subtle because the standalone component has `ENABLE_URP` conditional code.
|
|
121
|
+
|
|
122
|
+
**Fix**:
|
|
123
|
+
1. Remove `com.unity.2d.pixel-perfect` from Package Manager
|
|
124
|
+
2. Remove `UnityEngine.U2D.PixelPerfectCamera` from each camera
|
|
125
|
+
3. Add `UnityEngine.Rendering.Universal.PixelPerfectCamera`
|
|
126
|
+
4. Reconfigure — booleans (`pixelSnapping`, `upscaleRT`, `cropFrameX/Y`) become enums (`gridSnapping`, `cropFrame`)
|
|
127
|
+
|
|
128
|
+
**→ Detection code: `references/pipeline-detection.cs`** (bottom of file).
|
|
129
|
+
|
|
130
|
+
### Old URP namespace (pre-Unity 2022 / URP pre-13.x)
|
|
131
|
+
|
|
132
|
+
**Symptom**: Compiler errors referencing `UnityEngine.Experimental.Rendering.Universal`.
|
|
133
|
+
|
|
134
|
+
**Fix**: Replace `using UnityEngine.Experimental.Rendering.Universal;` with `using UnityEngine.Rendering.Universal;`. Update any assembly-qualified type strings. The `[MovedFrom]` attribute handles serialization automatically — components on GameObjects survive the upgrade.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Common Issues & Solutions
|
|
139
|
+
|
|
140
|
+
### Blurry sprites
|
|
141
|
+
**Fix**: Set Filter Mode to Point on all in-scope sprites, disable Mip Maps, disable AA in Quality Settings.
|
|
142
|
+
**→ Code: `references/sprite-settings.cs`**
|
|
143
|
+
|
|
144
|
+
### Tilemap gaps between tiles
|
|
145
|
+
Work through in order — workarounds like negative cell gap or PPU = 31.99 break when the camera moves.
|
|
146
|
+
|
|
147
|
+
| # | Check | Fix |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| 1 | Sprite Atlas with Tight Packing off, Padding ≥ 4, Sprite Packer Mode enabled? | Enable Sprite Packer Mode in Editor settings; on the atlas set Padding ≥ 4 and turn Tight Packing off |
|
|
150
|
+
| 2 | Mipmaps disabled on tileset textures and atlas? | Disable Generate Mip Maps |
|
|
151
|
+
| 3 | AA = 0, MSAA off on camera? | Disable AA globally |
|
|
152
|
+
| 4 | Compression = None? | RGBA 32-bit uncompressed |
|
|
153
|
+
| 5 | All tile sprites have even pixel dimensions? | Odd dimensions cause 0.5px grid offset |
|
|
154
|
+
| 6 | PPU = tile pixel width? (16×16 → PPU 16) | PPU mismatch leaves physical gaps |
|
|
155
|
+
| 7 | Gaps only during camera movement after all above pass? | Use PP Camera pixel snapping; do not use `cellGap = -0.01f` |
|
|
156
|
+
|
|
157
|
+
### Cinemachine conflict
|
|
158
|
+
**Cause**: Both Cinemachine and the Pixel Perfect Camera write to orthographic size every frame.
|
|
159
|
+
|
|
160
|
+
**Fix**: Add `CinemachinePixelPerfect` extension via the Add Extension dropdown on each Virtual Camera. Do not add it via `AddComponent` in code.
|
|
161
|
+
|
|
162
|
+
**Known limitations**:
|
|
163
|
+
- Camera blends between virtual cameras are not pixel-perfect during transitions
|
|
164
|
+
- `UpscaleRenderTexture` reduces valid pixel-perfect ortho sizes, which may cause framing to deviate
|
|
165
|
+
- Target Group + Framing Transposer causes visible choppiness (no fix available)
|
|
166
|
+
|
|
167
|
+
### Post-processing blur with `upscaleRT`
|
|
168
|
+
**Cause**: Post-processing runs after the PP Camera upscales the render texture.
|
|
169
|
+
|
|
170
|
+
**Simple fix**: Disable `upscaleRT`. Post-processing then runs at native screen resolution.
|
|
171
|
+
|
|
172
|
+
**Advanced fix (Unity 6 URP)**: Inject a `ScriptableRendererFeature2D` at `RenderPassEvent2D.AfterRenderingPostProcessing`. Use 2D-specific base classes — `ScriptableRendererFeature` (3D base class) is silently ignored in a URP 2D renderer.
|
|
173
|
+
|
|
174
|
+
### UI text blurry with `upscaleRT`
|
|
175
|
+
**Status**: Known Unity bug, declined to fix (still present Unity 6, 2025).
|
|
176
|
+
|
|
177
|
+
**Root causes**: (A) Canvas renders into the low-res buffer and is upscaled with the scene. (B) TMP's SDF gradient threshold is miscalibrated at low reference resolutions.
|
|
178
|
+
|
|
179
|
+
**Fixes in order of reliability**:
|
|
180
|
+
1. `Screen Space - Overlay` on Canvas — bypasses the camera, renders at native resolution
|
|
181
|
+
2. Dedicated UI camera with no PP Camera component, `Screen Space - Camera` mode
|
|
182
|
+
3. Unity 6 only: `Font Material → Debug Settings → Sharpness = 1` (mitigates B, not A)
|
|
183
|
+
|
|
184
|
+
### Physics / render desync (micro-stutter)
|
|
185
|
+
**Cause**: Physics runs at a fixed timestep; interpolated positions produce fractional values that snap to different pixels each frame.
|
|
186
|
+
|
|
187
|
+
**Fix**:
|
|
188
|
+
- Enable `Rigidbody2D.interpolation = RigidbodyInterpolation2D.Interpolate` on physics-driven sprites
|
|
189
|
+
- Set `Time.fixedDeltaTime = 1f / 60f` to match target frame rate
|
|
190
|
+
- Keep camera tracking in `LateUpdate`, not `FixedUpdate`
|
|
191
|
+
|
|
192
|
+
### Non-integer scaling / pixel decimation
|
|
193
|
+
**Cause**: Screen resolution is not a clean integer multiple of the reference resolution.
|
|
194
|
+
|
|
195
|
+
**Fix**: Choose a reference resolution from the table above. Use `cropFrame = Windowbox` when no integer fit exists.
|
|
196
|
+
|
|
197
|
+
### Missing URP 2D Renderer
|
|
198
|
+
**Fix**:
|
|
199
|
+
1. `Assets > Create > Rendering > URP 2D Renderer Data`
|
|
200
|
+
2. Assign it to your URP Asset under Renderer List
|
|
201
|
+
3. Requires `com.unity.render-pipelines.universal` 12.0+
|
|
202
|
+
|
|
203
|
+
### HDRP fallback
|
|
204
|
+
Pixel Perfect Camera is unsupported in HDRP.
|
|
205
|
+
|
|
206
|
+
**Built-in / Unity 5.x**: Use `RenderTexture` + `Graphics.Blit` with `FilterMode.Point`.
|
|
207
|
+
|
|
208
|
+
**Unity 6 URP**: Use `ScriptableRendererFeature2D` + `ScriptableRenderPass2D` injected at `RenderPassEvent2D.AfterRendering` with `AddRasterRenderPass`. Note: `OnRenderImage` and `Graphics.Blit` are incompatible with Unity 6's render graph.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# PixelPerfect Skill — Full API Reference
|
|
2
|
+
|
|
3
|
+
## URP `PixelPerfectCamera` (`UnityEngine.Rendering.Universal`)
|
|
4
|
+
API is identical since Unity 2023.2 through latest Unity 6 versions.
|
|
5
|
+
|
|
6
|
+
### Properties
|
|
7
|
+
|
|
8
|
+
| Property | Type | Access | Description |
|
|
9
|
+
|---|---|---|---|
|
|
10
|
+
| `assetsPPU` | `int` | get/set | Must match Pixels Per Unit on all sprites in scene |
|
|
11
|
+
| `refResolutionX` | `int` | get/set | Base resolution width |
|
|
12
|
+
| `refResolutionY` | `int` | get/set | Base resolution height |
|
|
13
|
+
| `cropFrame` | `CropFrame` | get/set | How to handle aspect ratio differences |
|
|
14
|
+
| `gridSnapping` | `GridSnapping` | get/set | Snapping mode — replaces old `pixelSnapping`/`upscaleRT` bools |
|
|
15
|
+
| `orthographicSize` | `float` | get only | PP Camera's calculated ortho size (different from `Camera.orthographicSize`) |
|
|
16
|
+
| `pixelRatio` | `int` | get only | Actual scale factor applied (e.g. 6 on 1080p with 320×180 ref res) |
|
|
17
|
+
| `requiresUpscalePass` | `bool` | get only | True when `gridSnapping = UpscaleRenderTexture` |
|
|
18
|
+
|
|
19
|
+
### Methods
|
|
20
|
+
|
|
21
|
+
| Method | Returns | Description |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| `RoundToPixel(Vector3)` | `Vector3` | Snaps world-space position to pixel grid. Adapts to current `gridSnapping`. |
|
|
24
|
+
| `CorrectCinemachineOrthoSize(float)` | `float` | Returns nearest pixel-perfect ortho size. Used by the Cinemachine extension. |
|
|
25
|
+
|
|
26
|
+
### Static
|
|
27
|
+
|
|
28
|
+
**`UnityEngine.U2D.PixelPerfectRendering.pixelSnapSpacing`** (static float) — world-space size of one screen pixel. Formula: `Camera.orthographicSize * 2f / Camera.pixelHeight`. Set manually in custom setups that bypass the PP Camera component (e.g. HDRP fallback, custom SRP).
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## `GridSnapping` Enum
|
|
33
|
+
|
|
34
|
+
| Value | Old standalone equivalent | Behaviour |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| `None` | `pixelSnapping = false`, `upscaleRT = false` | No snapping. |
|
|
37
|
+
| `PixelSnapping` | `pixelSnapping = true` | Snaps SpriteRenderers at render-time. Transforms stay at float precision. |
|
|
38
|
+
| `UpscaleRenderTexture` | `upscaleRT = true` | Renders at ref res then upscales. Incompatible with post-processing and UI text. |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## `CropFrame` Enum
|
|
43
|
+
|
|
44
|
+
| Value | Old standalone equivalent | Behaviour |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| `None` | both false | No cropping. Scene stretches to fill screen. |
|
|
47
|
+
| `Pillarbox` | `cropFrameX = true, cropFrameY = false` | Black bars left and right. |
|
|
48
|
+
| `Letterbox` | `cropFrameX = false, cropFrameY = true` | Black bars top and bottom. |
|
|
49
|
+
| `Windowbox` | both true, `stretchFill = false` | Black bars all sides. Safest default. |
|
|
50
|
+
| `StretchFill` | both true, `stretchFill = true` | Fills screen maintaining aspect ratio. Enables component-level Filter Mode. |
|
|
51
|
+
|
|
52
|
+
**Filter Mode** (only active when `StretchFill` — separate from per-sprite texture Filter Mode):
|
|
53
|
+
- `Retro AA` — default. Integer upscale to nearest multiple, then bilinear to screen. Recommended.
|
|
54
|
+
- `Point` — nearest-neighbour all the way to screen. Can lose pixel-perfectness at non-integer scale factors.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Recommended Configurations
|
|
59
|
+
|
|
60
|
+
| Use case | `gridSnapping` | `cropFrame` | Notes |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| Standard pixel art | `PixelSnapping` | `Windowbox` | Safe default. Compatible with post-processing and UI. |
|
|
63
|
+
| Authentic low-res look | `UpscaleRenderTexture` | `Windowbox` | No post-processing. Separate UI camera required. |
|
|
64
|
+
| Performance on 4K/HiDPI | `UpscaleRenderTexture` | `Windowbox` | Renders fewer pixels. Same UI caveat. |
|
|
65
|
+
| Full-screen stretch | `PixelSnapping` | `StretchFill` | Use `Retro AA` filter, not Point. |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Standalone Built-in (`UnityEngine.U2D.PixelPerfectCamera`)
|
|
70
|
+
All booleans, no enums. No `RoundToPixel`, `CorrectCinemachineOrthoSize`, `requiresUpscalePass`, or `orthographicSize`.
|
|
71
|
+
|
|
72
|
+
| Property | Type | Constraint |
|
|
73
|
+
|---|---|---|
|
|
74
|
+
| `assetsPPU` | `int` | — |
|
|
75
|
+
| `refResolutionX` / `refResolutionY` | `int` | — |
|
|
76
|
+
| `pixelSnapping` | `bool` | Silently ignored when `upscaleRT = true` |
|
|
77
|
+
| `upscaleRT` | `bool` | When true, `pixelSnapping` has no effect |
|
|
78
|
+
| `cropFrameX` | `bool` | Black bars left/right |
|
|
79
|
+
| `cropFrameY` | `bool` | Black bars top/bottom |
|
|
80
|
+
| `stretchFill` | `bool` | Only functional when **both** `cropFrameX` and `cropFrameY` are `true` |
|
|
81
|
+
| `pixelRatio` | `int` readonly | Same semantics as URP `pixelRatio` |
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// PixelPerfect Skill — Built-in Standalone Camera Setup
|
|
2
|
+
// -------------------------------------------------------
|
|
3
|
+
// Assembly: Unity.2D.PixelPerfect
|
|
4
|
+
using UnityEngine;
|
|
5
|
+
using UnityEngine.U2D;
|
|
6
|
+
|
|
7
|
+
namespace PixelPerfect
|
|
8
|
+
{
|
|
9
|
+
public static class CameraSetupBuiltIn
|
|
10
|
+
{
|
|
11
|
+
public static PixelPerfectCamera ConfigureCamera(Camera camera, int refResX, int refResY, int targetPPU)
|
|
12
|
+
{
|
|
13
|
+
var pp = camera.gameObject.GetComponent<PixelPerfectCamera>()
|
|
14
|
+
?? camera.gameObject.AddComponent<PixelPerfectCamera>();
|
|
15
|
+
|
|
16
|
+
// Same base settings as URP
|
|
17
|
+
camera.orthographic = true;
|
|
18
|
+
camera.orthographicSize = (refResY / 2f) / targetPPU;
|
|
19
|
+
camera.allowHDR = camera.allowMSAA = camera.allowDynamicResolution = false;
|
|
20
|
+
QualitySettings.antiAliasing = 0;
|
|
21
|
+
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Disable;
|
|
22
|
+
|
|
23
|
+
pp.assetsPPU = targetPPU;
|
|
24
|
+
pp.refResolutionX = refResX;
|
|
25
|
+
pp.refResolutionY = refResY;
|
|
26
|
+
pp.pixelSnapping = true; // silently ignored when upscaleRT = true
|
|
27
|
+
pp.upscaleRT = false;
|
|
28
|
+
pp.cropFrameX = true; // black bars left/right
|
|
29
|
+
pp.cropFrameY = true; // black bars top/bottom — both true = Windowbox equivalent
|
|
30
|
+
pp.stretchFill = false; // only functional when BOTH cropFrameX and cropFrameY are true
|
|
31
|
+
|
|
32
|
+
// Read-only: pp.pixelRatio (int) — same semantics as URP pixelRatio
|
|
33
|
+
//
|
|
34
|
+
// Note: No RoundToPixel, CorrectCinemachineOrthoSize, requiresUpscalePass,
|
|
35
|
+
// or orthographicSize on the standalone component.
|
|
36
|
+
|
|
37
|
+
return pp;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|