diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 7002d78..618c07d 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -2,7 +2,7 @@ "name": "unity-developer-tools", "displayName": "Unity Developer Tools", "description": "AI-powered development toolkit for Unity. Scaffold scripts, look up APIs, write shaders, and build games with best-practice rules for C#, Visual Scripting, and HLSL.", - "version": "1.3.3", + "version": "1.4.0", "author": { "name": "TMHSDigital", "email": "contact@tmhospitalitystrategies.com" diff --git a/.github/workflows/drift-check.yml b/.github/workflows/drift-check.yml new file mode 100644 index 0000000..29d5abf --- /dev/null +++ b/.github/workflows/drift-check.yml @@ -0,0 +1,21 @@ +name: Ecosystem drift check + +on: + pull_request: + branches: [main] + push: + branches: [main] + workflow_dispatch: + +jobs: + drift-check: + name: Ecosystem drift check + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v5 + - uses: TMHSDigital/Developer-Tools-Directory/.github/actions/drift-check@v1.7 + with: + mode: self + format: gh-summary diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 335a8c4..30828f1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,6 +8,10 @@ on: - "docs/**" - "*.md" - "LICENSE" + - "skills/**" + - "rules/**/*.mdc" + - "AGENTS.md" + - "CLAUDE.md" permissions: contents: write @@ -118,6 +122,13 @@ jobs: print(f'Updated README.md badge to {new_version}') " + - name: Sync release docs + if: steps.check.outputs.skip == 'false' + uses: TMHSDigital/Developer-Tools-Directory/.github/actions/release-doc-sync@v1.0 + with: + plugin-version: ${{ steps.new.outputs.version }} + previous-version: ${{ steps.current.outputs.version }} + - name: Generate release notes from commits if: steps.check.outputs.skip == 'false' id: notes @@ -196,7 +207,7 @@ jobs: run: | git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add .cursor-plugin/plugin.json README.md + git add .cursor-plugin/plugin.json README.md CHANGELOG.md git commit -m "chore: bump version to ${{ steps.new.outputs.version }} [skip ci]" git push diff --git a/.github/workflows/update-unity-api.yml b/.github/workflows/update-unity-api.yml index 408a3cc..a7fa647 100644 --- a/.github/workflows/update-unity-api.yml +++ b/.github/workflows/update-unity-api.yml @@ -23,25 +23,26 @@ jobs: run: python3 .github/scripts/refresh_unity_data.py - name: Validate updated data - run: python3 << 'PYEOF' -import json + run: | + python3 << 'PYEOF' + import json -for name, required_fields in [ - ('lifecycle_order.json', ['method', 'phase', 'description']), - ('deprecated_patterns.json', ['legacy', 'replacement', 'reason']), - ('unity_api_common.json', ['name', 'namespace', 'category']), - ('shader_properties.json', ['effect', 'description', 'pipelines']), - ('platform_defines.json', ['platform', 'display_name', 'define']), -]: - path = f'mcp-server/data/{name}' - data = json.load(open(path)) - assert isinstance(data, list), f'{name}: expected array' - assert len(data) > 0, f'{name}: empty array' - for entry in data: - for field in required_fields: - assert field in entry, f'{name}: missing {field}' - print(f'{name}: {len(data)} entries valid') -PYEOF + for name, required_fields in [ + ('lifecycle_order.json', ['method', 'phase', 'description']), + ('deprecated_patterns.json', ['legacy', 'replacement', 'reason']), + ('unity_api_common.json', ['name', 'namespace', 'category']), + ('shader_properties.json', ['effect', 'description', 'pipelines']), + ('platform_defines.json', ['platform', 'display_name', 'define']), + ]: + path = f'mcp-server/data/{name}' + data = json.load(open(path)) + assert isinstance(data, list), f'{name}: expected array' + assert len(data) > 0, f'{name}: empty array' + for entry in data: + for field in required_fields: + assert field in entry, f'{name}: missing {field}' + print(f'{name}: {len(data)} entries valid') + PYEOF - name: Check for changes id: diff diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 0cee825..acdafa4 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -23,73 +23,74 @@ jobs: run: python3 -c "import json; json.load(open('.cursor/mcp.json'))" - name: Validate MCP data file schemas - run: python3 << 'PYEOF' -import json, os, sys - -errors = [] - -def check(condition, msg): - if not condition: - errors.append(msg) - -# unity_api_common.json -data = json.load(open('mcp-server/data/unity_api_common.json')) -check(isinstance(data, list), 'unity_api_common.json must be an array') -for i, entry in enumerate(data): - check('name' in entry, f'unity_api_common[{i}]: missing name') - check('namespace' in entry, f'unity_api_common[{i}]: missing namespace') - check('category' in entry, f'unity_api_common[{i}]: missing category') - check('description' in entry, f'unity_api_common[{i}]: missing description') - check('signature' in entry, f'unity_api_common[{i}]: missing signature') -print(f'unity_api_common.json: {len(data)} entries') - -# deprecated_patterns.json -data = json.load(open('mcp-server/data/deprecated_patterns.json')) -check(isinstance(data, list), 'deprecated_patterns.json must be an array') -for i, entry in enumerate(data): - check('legacy' in entry, f'deprecated_patterns[{i}]: missing legacy') - check('replacement' in entry, f'deprecated_patterns[{i}]: missing replacement') - check('reason' in entry, f'deprecated_patterns[{i}]: missing reason') - check('since_version' in entry, f'deprecated_patterns[{i}]: missing since_version') -print(f'deprecated_patterns.json: {len(data)} entries') - -# lifecycle_order.json -data = json.load(open('mcp-server/data/lifecycle_order.json')) -check(isinstance(data, list), 'lifecycle_order.json must be an array') -for i, entry in enumerate(data): - check('method' in entry, f'lifecycle_order[{i}]: missing method') - check('phase' in entry, f'lifecycle_order[{i}]: missing phase') - check('description' in entry, f'lifecycle_order[{i}]: missing description') - check(isinstance(entry.get('runs_per_frame'), bool), f'lifecycle_order[{i}]: runs_per_frame must be bool') -print(f'lifecycle_order.json: {len(data)} entries') - -# shader_properties.json -data = json.load(open('mcp-server/data/shader_properties.json')) -check(isinstance(data, list), 'shader_properties.json must be an array') -for i, entry in enumerate(data): - check('effect' in entry, f'shader_properties[{i}]: missing effect') - check('description' in entry, f'shader_properties[{i}]: missing description') - check(isinstance(entry.get('pipelines'), list), f'shader_properties[{i}]: pipelines must be array') - check(isinstance(entry.get('properties'), list), f'shader_properties[{i}]: properties must be array') -print(f'shader_properties.json: {len(data)} entries') - -# platform_defines.json -data = json.load(open('mcp-server/data/platform_defines.json')) -check(isinstance(data, list), 'platform_defines.json must be an array') -for i, entry in enumerate(data): - check('platform' in entry, f'platform_defines[{i}]: missing platform') - check('display_name' in entry, f'platform_defines[{i}]: missing display_name') - check('define' in entry, f'platform_defines[{i}]: missing define') - check(isinstance(entry.get('capabilities'), list), f'platform_defines[{i}]: capabilities must be array') -print(f'platform_defines.json: {len(data)} entries') - -if errors: - for e in errors: - print(f'::error::{e}', file=sys.stderr) - sys.exit(1) - -print('All MCP data schemas valid') -PYEOF + run: | + python3 << 'PYEOF' + import json, os, sys + + errors = [] + + def check(condition, msg): + if not condition: + errors.append(msg) + + # unity_api_common.json + data = json.load(open('mcp-server/data/unity_api_common.json')) + check(isinstance(data, list), 'unity_api_common.json must be an array') + for i, entry in enumerate(data): + check('name' in entry, f'unity_api_common[{i}]: missing name') + check('namespace' in entry, f'unity_api_common[{i}]: missing namespace') + check('category' in entry, f'unity_api_common[{i}]: missing category') + check('description' in entry, f'unity_api_common[{i}]: missing description') + check('signature' in entry, f'unity_api_common[{i}]: missing signature') + print(f'unity_api_common.json: {len(data)} entries') + + # deprecated_patterns.json + data = json.load(open('mcp-server/data/deprecated_patterns.json')) + check(isinstance(data, list), 'deprecated_patterns.json must be an array') + for i, entry in enumerate(data): + check('legacy' in entry, f'deprecated_patterns[{i}]: missing legacy') + check('replacement' in entry, f'deprecated_patterns[{i}]: missing replacement') + check('reason' in entry, f'deprecated_patterns[{i}]: missing reason') + check('since_version' in entry, f'deprecated_patterns[{i}]: missing since_version') + print(f'deprecated_patterns.json: {len(data)} entries') + + # lifecycle_order.json + data = json.load(open('mcp-server/data/lifecycle_order.json')) + check(isinstance(data, list), 'lifecycle_order.json must be an array') + for i, entry in enumerate(data): + check('method' in entry, f'lifecycle_order[{i}]: missing method') + check('phase' in entry, f'lifecycle_order[{i}]: missing phase') + check('description' in entry, f'lifecycle_order[{i}]: missing description') + check(isinstance(entry.get('runs_per_frame'), bool), f'lifecycle_order[{i}]: runs_per_frame must be bool') + print(f'lifecycle_order.json: {len(data)} entries') + + # shader_properties.json + data = json.load(open('mcp-server/data/shader_properties.json')) + check(isinstance(data, list), 'shader_properties.json must be an array') + for i, entry in enumerate(data): + check('effect' in entry, f'shader_properties[{i}]: missing effect') + check('description' in entry, f'shader_properties[{i}]: missing description') + check(isinstance(entry.get('pipelines'), list), f'shader_properties[{i}]: pipelines must be array') + check(isinstance(entry.get('properties'), list), f'shader_properties[{i}]: properties must be array') + print(f'shader_properties.json: {len(data)} entries') + + # platform_defines.json + data = json.load(open('mcp-server/data/platform_defines.json')) + check(isinstance(data, list), 'platform_defines.json must be an array') + for i, entry in enumerate(data): + check('platform' in entry, f'platform_defines[{i}]: missing platform') + check('display_name' in entry, f'platform_defines[{i}]: missing display_name') + check('define' in entry, f'platform_defines[{i}]: missing define') + check(isinstance(entry.get('capabilities'), list), f'platform_defines[{i}]: capabilities must be array') + print(f'platform_defines.json: {len(data)} entries') + + if errors: + for e in errors: + print(f'::error::{e}', file=sys.stderr) + sys.exit(1) + + print('All MCP data schemas valid') + PYEOF validate-plugin-manifest: name: Validate plugin manifest @@ -98,7 +99,8 @@ PYEOF - uses: actions/checkout@v4 - name: Check required manifest fields - run: python3 -c " + run: | + python3 << 'PYEOF' import json, re m = json.load(open('.cursor-plugin/plugin.json')) required = ['name', 'displayName', 'description', 'version', 'author', 'license', 'skills', 'rules'] @@ -109,25 +111,27 @@ PYEOF assert isinstance(m.get('author'), dict) and 'name' in m['author'], 'author must have name' assert isinstance(m.get('keywords'), list), 'keywords must be an array' print('Plugin manifest valid') - " + PYEOF - name: Check skill files exist - run: python3 -c " + run: | + python3 << 'PYEOF' import json, os m = json.load(open('.cursor-plugin/plugin.json')) for skill in m.get('skills', []): assert os.path.exists(skill), f'Skill not found: {skill}' - print(f'All {len(m[\"skills\"])} skill files exist') - " + print(f'All {len(m["skills"])} skill files exist') + PYEOF - name: Check rule files exist - run: python3 -c " + run: | + python3 << 'PYEOF' import json, os m = json.load(open('.cursor-plugin/plugin.json')) for rule in m.get('rules', []): assert os.path.exists(rule), f'Rule not found: {rule}' - print(f'All {len(m[\"rules\"])} rule files exist') - " + print(f'All {len(m["rules"])} rule files exist') + PYEOF validate-skills: name: Validate skill files @@ -136,50 +140,51 @@ PYEOF - uses: actions/checkout@v4 - name: Check SKILL.md frontmatter - run: python3 << 'PYEOF' -import os, sys, re - -errors = [] -skill_dirs = [ - d for d in os.listdir('skills') - if os.path.isdir(os.path.join('skills', d)) -] - -for d in skill_dirs: - path = os.path.join('skills', d, 'SKILL.md') - if not os.path.exists(path): - errors.append(f'{path}: SKILL.md missing') - continue - - content = open(path).read() - if not content.startswith('---'): - errors.append(f'{path}: missing YAML frontmatter') - continue - - parts = content.split('---', 2) - if len(parts) < 3: - errors.append(f'{path}: malformed frontmatter (no closing ---)') - continue - - fm = parts[1] - if 'title:' not in fm: - errors.append(f'{path}: frontmatter missing title') - if 'description:' not in fm: - errors.append(f'{path}: frontmatter missing description') - if 'globs:' not in fm: - errors.append(f'{path}: frontmatter missing globs') - - body = parts[2].strip() - if len(body) < 100: - errors.append(f'{path}: body too short ({len(body)} chars, minimum 100)') - -if errors: - for e in errors: - print(f'::error::{e}', file=sys.stderr) - sys.exit(1) - -print(f'All {len(skill_dirs)} skills have valid frontmatter and content') -PYEOF + run: | + python3 << 'PYEOF' + import os, sys, re + + errors = [] + skill_dirs = [ + d for d in os.listdir('skills') + if os.path.isdir(os.path.join('skills', d)) + ] + + for d in skill_dirs: + path = os.path.join('skills', d, 'SKILL.md') + if not os.path.exists(path): + errors.append(f'{path}: SKILL.md missing') + continue + + content = open(path).read() + if not content.startswith('---'): + errors.append(f'{path}: missing YAML frontmatter') + continue + + parts = content.split('---', 2) + if len(parts) < 3: + errors.append(f'{path}: malformed frontmatter (no closing ---)') + continue + + fm = parts[1] + if 'title:' not in fm: + errors.append(f'{path}: frontmatter missing title') + if 'description:' not in fm: + errors.append(f'{path}: frontmatter missing description') + if 'globs:' not in fm: + errors.append(f'{path}: frontmatter missing globs') + + body = parts[2].strip() + if len(body) < 100: + errors.append(f'{path}: body too short ({len(body)} chars, minimum 100)') + + if errors: + for e in errors: + print(f'::error::{e}', file=sys.stderr) + sys.exit(1) + + print(f'All {len(skill_dirs)} skills have valid frontmatter and content') + PYEOF validate-rules: name: Validate rule files @@ -188,42 +193,43 @@ PYEOF - uses: actions/checkout@v4 - name: Check .mdc frontmatter - run: python3 << 'PYEOF' -import os, sys + run: | + python3 << 'PYEOF' + import os, sys -errors = [] -rule_files = [f for f in os.listdir('rules') if f.endswith('.mdc')] + errors = [] + rule_files = [f for f in os.listdir('rules') if f.endswith('.mdc')] -for f in rule_files: - path = os.path.join('rules', f) - content = open(path).read() + for f in rule_files: + path = os.path.join('rules', f) + content = open(path).read() - if not content.startswith('---'): - errors.append(f'{path}: missing YAML frontmatter') - continue + if not content.startswith('---'): + errors.append(f'{path}: missing YAML frontmatter') + continue - parts = content.split('---', 2) - if len(parts) < 3: - errors.append(f'{path}: malformed frontmatter (no closing ---)') - continue + parts = content.split('---', 2) + if len(parts) < 3: + errors.append(f'{path}: malformed frontmatter (no closing ---)') + continue - fm = parts[1] - required_fields = ['title', 'description', 'globs', 'alwaysApply'] - for field in required_fields: - if f'{field}:' not in fm: - errors.append(f'{path}: frontmatter missing {field}') + fm = parts[1] + required_fields = ['title', 'description', 'globs', 'alwaysApply'] + for field in required_fields: + if f'{field}:' not in fm: + errors.append(f'{path}: frontmatter missing {field}') - body = parts[2].strip() - if len(body) < 20: - errors.append(f'{path}: body too short ({len(body)} chars)') + body = parts[2].strip() + if len(body) < 20: + errors.append(f'{path}: body too short ({len(body)} chars)') -if errors: - for e in errors: - print(f'::error::{e}', file=sys.stderr) - sys.exit(1) + if errors: + for e in errors: + print(f'::error::{e}', file=sys.stderr) + sys.exit(1) -print(f'All {len(rule_files)} rules have valid frontmatter') -PYEOF + print(f'All {len(rule_files)} rules have valid frontmatter') + PYEOF validate-content: name: Validate content quality @@ -249,27 +255,28 @@ PYEOF echo "No hardcoded credentials found" - name: Check snippets are non-empty - run: python3 << 'PYEOF' -import os, sys - -errors = [] -for root, dirs, files in os.walk('snippets'): - for f in files: - if f == 'README.md': - continue - path = os.path.join(root, f) - size = os.path.getsize(path) - if size < 10: - errors.append(f'{path}: file is empty or too small ({size} bytes)') - -if errors: - for e in errors: - print(f'::error::{e}', file=sys.stderr) - sys.exit(1) - -count = sum(len(files) for _, _, files in os.walk('snippets')) -print(f'All {count} snippet files are non-empty') -PYEOF + run: | + python3 << 'PYEOF' + import os, sys + + errors = [] + for root, dirs, files in os.walk('snippets'): + for f in files: + if f == 'README.md': + continue + path = os.path.join(root, f) + size = os.path.getsize(path) + if size < 10: + errors.append(f'{path}: file is empty or too small ({size} bytes)') + + if errors: + for e in errors: + print(f'::error::{e}', file=sys.stderr) + sys.exit(1) + + count = sum(len(files) for _, _, files in os.walk('snippets')) + print(f'All {count} snippet files are non-empty') + PYEOF validate-templates: name: Validate templates @@ -278,38 +285,39 @@ PYEOF - uses: actions/checkout@v4 - name: Check template structure - run: python3 << 'PYEOF' -import os, sys - -errors = [] -template_dirs = [ - d for d in os.listdir('templates') - if os.path.isdir(os.path.join('templates', d)) -] - -for d in template_dirs: - tdir = os.path.join('templates', d) - readme = os.path.join(tdir, 'README.md') - if not os.path.exists(readme): - errors.append(f'{tdir}: missing README.md') - - cs_files = [f for f in os.listdir(tdir) if f.endswith('.cs')] - if not cs_files: - errors.append(f'{tdir}: no .cs files found') - - for cs in cs_files: - path = os.path.join(tdir, cs) - content = open(path).read() - if len(content) < 50: - errors.append(f'{path}: file too small ({len(content)} chars)') - -if errors: - for e in errors: - print(f'::error::{e}', file=sys.stderr) - sys.exit(1) - -print(f'All {len(template_dirs)} templates have README.md and C# scripts') -PYEOF + run: | + python3 << 'PYEOF' + import os, sys + + errors = [] + template_dirs = [ + d for d in os.listdir('templates') + if os.path.isdir(os.path.join('templates', d)) + ] + + for d in template_dirs: + tdir = os.path.join('templates', d) + readme = os.path.join(tdir, 'README.md') + if not os.path.exists(readme): + errors.append(f'{tdir}: missing README.md') + + cs_files = [f for f in os.listdir(tdir) if f.endswith('.cs')] + if not cs_files: + errors.append(f'{tdir}: no .cs files found') + + for cs in cs_files: + path = os.path.join(tdir, cs) + content = open(path).read() + if len(content) < 50: + errors.append(f'{path}: file too small ({len(content)} chars)') + + if errors: + for e in errors: + print(f'::error::{e}', file=sys.stderr) + sys.exit(1) + + print(f'All {len(template_dirs)} templates have README.md and C# scripts') + PYEOF validate-counts: name: Validate content counts @@ -318,44 +326,45 @@ PYEOF - uses: actions/checkout@v4 - name: Check content counts match README - run: python3 << 'PYEOF' -import json, os, sys - -m = json.load(open('.cursor-plugin/plugin.json')) -errors = [] - -skill_count = len(m.get('skills', [])) -rule_count = len(m.get('rules', [])) - -snippet_count = sum( - len(files) - for root, dirs, files in os.walk('snippets') - if files -) - -template_count = sum( - 1 for d in os.listdir('templates') - if os.path.isdir(os.path.join('templates', d)) - and os.path.exists(os.path.join('templates', d, 'README.md')) -) - -readme = open('README.md').read() -if f'{skill_count} skills' not in readme: - errors.append(f'README skill count mismatch (expected {skill_count})') -if f'{snippet_count} snippets' not in readme: - errors.append(f'README snippet count mismatch (expected {snippet_count})') -if f'{template_count} templates' not in readme: - errors.append(f'README template count mismatch (expected {template_count})') -if f'{rule_count} rules' not in readme: - errors.append(f'README rule count mismatch (expected {rule_count})') - -if errors: - for e in errors: - print(f'::error::{e}', file=sys.stderr) - sys.exit(1) - -print(f'Counts verified: {skill_count} skills, {rule_count} rules, {snippet_count} snippets, {template_count} templates') -PYEOF + run: | + python3 << 'PYEOF' + import json, os, sys + + m = json.load(open('.cursor-plugin/plugin.json')) + errors = [] + + skill_count = len(m.get('skills', [])) + rule_count = len(m.get('rules', [])) + + snippet_count = sum( + len(files) + for root, dirs, files in os.walk('snippets') + if files + ) + + template_count = sum( + 1 for d in os.listdir('templates') + if os.path.isdir(os.path.join('templates', d)) + and os.path.exists(os.path.join('templates', d, 'README.md')) + ) + + readme = open('README.md').read() + if f'{skill_count} skills' not in readme: + errors.append(f'README skill count mismatch (expected {skill_count})') + if f'{snippet_count} snippets' not in readme: + errors.append(f'README snippet count mismatch (expected {snippet_count})') + if f'{template_count} templates' not in readme: + errors.append(f'README template count mismatch (expected {template_count})') + if f'{rule_count} rules' not in readme: + errors.append(f'README rule count mismatch (expected {rule_count})') + + if errors: + for e in errors: + print(f'::error::{e}', file=sys.stderr) + sys.exit(1) + + print(f'Counts verified: {skill_count} skills, {rule_count} rules, {snippet_count} snippets, {template_count} templates') + PYEOF validate-python: name: Validate MCP server diff --git a/.gitignore b/.gitignore index cbfe952..23eca4d 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ desktop.ini # Research (reference only, not needed in published plugin) RESEARCH.md +# Phase 2c: release-doc-sync verification trigger (DTD#5) diff --git a/AGENTS.md b/AGENTS.md index 44a3a29..e2a91cc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,3 +1,5 @@ + + # AGENTS.md This file tells AI coding agents how the Unity Developer Tools repo works and how to contribute correctly. diff --git a/CHANGELOG.md b/CHANGELOG.md index 97e076c..7f013f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ All notable changes to this project will be documented in this file. +## [1.4.0] - 2026-04-25 + +See [release notes](https://github.com/TMHSDigital/Unity-Developer-Tools/releases/tag/v1.4.0) for details. + ## [0.1.0] - 2026-04-08 ### Added diff --git a/README.md b/README.md index cb7f92f..71bcba2 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@

License: CC BY-NC-ND 4.0 - Version + Version GitHub stars docs online

diff --git a/rules/csharp-unity-conventions.mdc b/rules/csharp-unity-conventions.mdc index a3d149e..9b69bb1 100644 --- a/rules/csharp-unity-conventions.mdc +++ b/rules/csharp-unity-conventions.mdc @@ -3,7 +3,7 @@ title: C# Unity conventions description: C# coding conventions for Unity development globs: ["**/*.cs"] alwaysApply: false -standards-version: 1.6.3 +standards-version: 1.7.0 --- # C# Unity conventions diff --git a/rules/monobehaviour-lifecycle.mdc b/rules/monobehaviour-lifecycle.mdc index 4c3fddf..f93c961 100644 --- a/rules/monobehaviour-lifecycle.mdc +++ b/rules/monobehaviour-lifecycle.mdc @@ -3,7 +3,7 @@ title: MonoBehaviour lifecycle description: Correct usage of MonoBehaviour lifecycle methods globs: ["**/*.cs"] alwaysApply: true -standards-version: 1.6.3 +standards-version: 1.7.0 --- # MonoBehaviour lifecycle rules diff --git a/rules/naming-conventions.mdc b/rules/naming-conventions.mdc index 8e36646..3c72036 100644 --- a/rules/naming-conventions.mdc +++ b/rules/naming-conventions.mdc @@ -3,7 +3,7 @@ title: Unity naming conventions description: Naming conventions for Unity C# code globs: ["**/*.cs"] alwaysApply: true -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Unity naming conventions diff --git a/rules/performance-rules.mdc b/rules/performance-rules.mdc index ea67a2d..47f0a84 100644 --- a/rules/performance-rules.mdc +++ b/rules/performance-rules.mdc @@ -3,7 +3,7 @@ title: Performance rules description: Performance optimization rules for Unity globs: ["**/*.cs"] alwaysApply: true -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Unity performance rules diff --git a/rules/security-and-builds.mdc b/rules/security-and-builds.mdc index 1c80bd3..e397a91 100644 --- a/rules/security-and-builds.mdc +++ b/rules/security-and-builds.mdc @@ -3,7 +3,7 @@ title: Security and builds description: Security and build configuration rules globs: ["**/*.cs", "**/*.json", "**/*.asset"] alwaysApply: false -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Security and build rules diff --git a/rules/serialization-rules.mdc b/rules/serialization-rules.mdc index 7ee2d42..3c3cc52 100644 --- a/rules/serialization-rules.mdc +++ b/rules/serialization-rules.mdc @@ -3,7 +3,7 @@ title: Serialization rules description: Unity serialization best practices globs: ["**/*.cs"] alwaysApply: false -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Unity serialization rules diff --git a/rules/shader-conventions.mdc b/rules/shader-conventions.mdc index 6fe2a50..08e3c45 100644 --- a/rules/shader-conventions.mdc +++ b/rules/shader-conventions.mdc @@ -3,7 +3,7 @@ title: Shader conventions description: Conventions for Unity shader development globs: ["**/*.shader", "**/*.hlsl", "**/*.cginc", "**/*.shadergraph"] alwaysApply: false -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Shader conventions diff --git a/rules/visual-scripting-conventions.mdc b/rules/visual-scripting-conventions.mdc index 47689a8..36a1e19 100644 --- a/rules/visual-scripting-conventions.mdc +++ b/rules/visual-scripting-conventions.mdc @@ -3,7 +3,7 @@ title: Visual scripting conventions description: Best practices for Unity Visual Scripting globs: ["**/*.asset"] alwaysApply: false -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Visual scripting conventions diff --git a/skills/addressables-assets/SKILL.md b/skills/addressables-assets/SKILL.md index b1d410a..cbcc75e 100644 --- a/skills/addressables-assets/SKILL.md +++ b/skills/addressables-assets/SKILL.md @@ -2,7 +2,7 @@ title: Addressables and Asset Management description: Managing assets with the Addressables system for async loading, memory management, and remote content delivery. globs: ["**/*.cs", "**/*.asset"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Addressables and Asset Management diff --git a/skills/animation-systems/SKILL.md b/skills/animation-systems/SKILL.md index 3a51af0..1265eb6 100644 --- a/skills/animation-systems/SKILL.md +++ b/skills/animation-systems/SKILL.md @@ -2,7 +2,7 @@ title: Animation Systems description: Unity animation workflows including Animator Controller, Timeline, DOTween, and sprite animation for 2D. globs: ["**/*.cs", "**/*.controller", "**/*.anim", "**/*.playable"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Animation Systems diff --git a/skills/audio-systems/SKILL.md b/skills/audio-systems/SKILL.md index 5ab836c..d7d7eb4 100644 --- a/skills/audio-systems/SKILL.md +++ b/skills/audio-systems/SKILL.md @@ -2,7 +2,7 @@ title: Audio Systems description: Audio implementation patterns including AudioSource, AudioMixer, spatial audio, and audio management. globs: ["**/*.cs", "**/*.mixer"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Audio Systems diff --git a/skills/ecs-dots/SKILL.md b/skills/ecs-dots/SKILL.md index 8c2b187..4dd6ae3 100644 --- a/skills/ecs-dots/SKILL.md +++ b/skills/ecs-dots/SKILL.md @@ -2,7 +2,7 @@ title: ECS and DOTS description: Entity Component System development with Unity Entities, Jobs, and Burst for high-performance simulation. globs: ["**/*.cs"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # ECS and DOTS diff --git a/skills/editor-scripting/SKILL.md b/skills/editor-scripting/SKILL.md index 2e4db62..8916be4 100644 --- a/skills/editor-scripting/SKILL.md +++ b/skills/editor-scripting/SKILL.md @@ -2,7 +2,7 @@ title: Editor Scripting description: Extending the Unity Editor with custom inspectors, editor windows, property drawers, gizmos, and Scene View overlays using UI Toolkit. globs: ["**/Editor/**/*.cs"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Editor Scripting diff --git a/skills/input-systems/SKILL.md b/skills/input-systems/SKILL.md index 23cb92e..8b286ed 100644 --- a/skills/input-systems/SKILL.md +++ b/skills/input-systems/SKILL.md @@ -2,7 +2,7 @@ title: Input Systems description: Input handling with the New Input System package and legacy Input Manager migration guidance. globs: ["**/*.cs", "**/*.inputactions"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Input Systems diff --git a/skills/monobehaviour-patterns/SKILL.md b/skills/monobehaviour-patterns/SKILL.md index 4f2813e..01d90ce 100644 --- a/skills/monobehaviour-patterns/SKILL.md +++ b/skills/monobehaviour-patterns/SKILL.md @@ -2,7 +2,7 @@ title: MonoBehaviour Patterns description: Comprehensive guide to MonoBehaviour lifecycle, async patterns with Awaitable, and common Unity design patterns. globs: ["**/*.cs"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # MonoBehaviour Patterns diff --git a/skills/networking/SKILL.md b/skills/networking/SKILL.md index b74efb7..dbe4e3b 100644 --- a/skills/networking/SKILL.md +++ b/skills/networking/SKILL.md @@ -2,7 +2,7 @@ title: Multiplayer Networking description: Multiplayer networking patterns with Netcode for GameObjects, Netcode for Entities, Mirror, and Photon Fusion. globs: ["**/*.cs"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Multiplayer Networking diff --git a/skills/performance-optimization/SKILL.md b/skills/performance-optimization/SKILL.md index fe0b2e3..4644a6e 100644 --- a/skills/performance-optimization/SKILL.md +++ b/skills/performance-optimization/SKILL.md @@ -2,7 +2,7 @@ title: Performance Optimization description: Unity-specific performance best practices for CPU, GPU, memory, and profiling tools. globs: ["**/*.cs"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Performance Optimization diff --git a/skills/physics-2d-3d/SKILL.md b/skills/physics-2d-3d/SKILL.md index 90ca7ab..70cd590 100644 --- a/skills/physics-2d-3d/SKILL.md +++ b/skills/physics-2d-3d/SKILL.md @@ -2,7 +2,7 @@ title: Physics Systems (2D and 3D) description: Physics programming for both 2D and 3D Unity projects including collision, raycasting, layers, and rigidbody management. globs: ["**/*.cs"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Physics Systems (2D and 3D) diff --git a/skills/platform-targeting/SKILL.md b/skills/platform-targeting/SKILL.md index 2d08356..c02f3d7 100644 --- a/skills/platform-targeting/SKILL.md +++ b/skills/platform-targeting/SKILL.md @@ -2,7 +2,7 @@ title: Platform Targeting description: Platform-specific compilation, scripting defines, build settings, and cross-platform considerations. globs: ["**/*.cs"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Platform Targeting diff --git a/skills/project-setup/SKILL.md b/skills/project-setup/SKILL.md index e4e5fcc..92a3a2a 100644 --- a/skills/project-setup/SKILL.md +++ b/skills/project-setup/SKILL.md @@ -2,7 +2,7 @@ title: Unity Project Setup description: Guide for creating and configuring Unity projects with recommended folder structure, assembly definitions, version control, and package management. globs: ["**/*.asmdef", "**/*.asmref", "**/ProjectSettings/**"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Unity Project Setup diff --git a/skills/render-pipeline-detection/SKILL.md b/skills/render-pipeline-detection/SKILL.md index 5d5d0e6..c585bcf 100644 --- a/skills/render-pipeline-detection/SKILL.md +++ b/skills/render-pipeline-detection/SKILL.md @@ -2,7 +2,7 @@ title: Render Pipeline Detection description: Detecting the active render pipeline (URP, HDRP, or Built-in) and adapting code, shaders, and settings accordingly. globs: ["**/*.cs", "**/*.shader", "**/*.shadergraph"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Render Pipeline Detection diff --git a/skills/scriptableobjects/SKILL.md b/skills/scriptableobjects/SKILL.md index f40eaf5..0514a22 100644 --- a/skills/scriptableobjects/SKILL.md +++ b/skills/scriptableobjects/SKILL.md @@ -2,7 +2,7 @@ title: ScriptableObject Architecture description: Data-driven design patterns using ScriptableObjects for events, variables, runtime sets, and configuration. globs: ["**/*.cs", "**/*.asset"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # ScriptableObject Architecture diff --git a/skills/shader-development/SKILL.md b/skills/shader-development/SKILL.md index fe1a0fe..5544485 100644 --- a/skills/shader-development/SKILL.md +++ b/skills/shader-development/SKILL.md @@ -2,7 +2,7 @@ title: Shader Development description: Shader creation with Shader Graph, HLSL, and ShaderLab for URP and HDRP projects. globs: ["**/*.shader", "**/*.hlsl", "**/*.cginc", "**/*.shadergraph"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Shader Development diff --git a/skills/testing/SKILL.md b/skills/testing/SKILL.md index a7d23ff..4c925f5 100644 --- a/skills/testing/SKILL.md +++ b/skills/testing/SKILL.md @@ -2,7 +2,7 @@ title: Unity Testing description: Unity Test Framework usage for Edit Mode and Play Mode tests with async Awaitable support. globs: ["**/Tests/**/*.cs", "**/*Tests*.cs", "**/*Test*.cs"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Unity Testing diff --git a/skills/ui-development/SKILL.md b/skills/ui-development/SKILL.md index ca0a174..4906746 100644 --- a/skills/ui-development/SKILL.md +++ b/skills/ui-development/SKILL.md @@ -2,7 +2,7 @@ title: UI Development description: Building user interfaces with UI Toolkit (primary) and Canvas/UGUI, including data binding, styling, and responsive layouts. globs: ["**/*.cs", "**/*.uxml", "**/*.uss", "**/*.prefab"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # UI Development diff --git a/skills/visual-scripting/SKILL.md b/skills/visual-scripting/SKILL.md index da24104..08b242a 100644 --- a/skills/visual-scripting/SKILL.md +++ b/skills/visual-scripting/SKILL.md @@ -2,7 +2,7 @@ title: Visual Scripting description: Unity Visual Scripting guidance for Script Graphs, State Graphs, Subgraphs, and custom units. globs: ["**/*.asset"] -standards-version: 1.6.3 +standards-version: 1.7.0 --- # Visual Scripting