unity-open-mcp 0.1.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-identity.d.ts +52 -0
- package/dist/agent-identity.js +115 -0
- package/dist/agent-identity.js.map +1 -0
- package/dist/batch-spawn.d.ts +7 -0
- package/dist/batch-spawn.js +155 -29
- package/dist/batch-spawn.js.map +1 -1
- package/dist/capabilities/build-capabilities.d.ts +45 -0
- package/dist/capabilities/build-capabilities.js +262 -27
- package/dist/capabilities/build-capabilities.js.map +1 -1
- package/dist/capabilities/cost-hints.d.ts +82 -0
- package/dist/capabilities/cost-hints.js +185 -0
- package/dist/capabilities/cost-hints.js.map +1 -0
- package/dist/capabilities/lifecycle.d.ts +40 -0
- package/dist/capabilities/lifecycle.js +353 -0
- package/dist/capabilities/lifecycle.js.map +1 -0
- package/dist/capabilities/rule-catalog.d.ts +13 -1
- package/dist/capabilities/rule-catalog.js +620 -75
- package/dist/capabilities/rule-catalog.js.map +1 -1
- package/dist/capabilities/tool-groups.d.ts +21 -0
- package/dist/capabilities/tool-groups.js +411 -14
- package/dist/capabilities/tool-groups.js.map +1 -1
- package/dist/cli/args.d.ts +32 -1
- package/dist/cli/args.js +201 -4
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/cli.d.ts +21 -0
- package/dist/cli/cli.js +68 -5
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands.d.ts +33 -0
- package/dist/cli/commands.js +400 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/exit-codes.d.ts +43 -0
- package/dist/cli/exit-codes.js +78 -0
- package/dist/cli/exit-codes.js.map +1 -0
- package/dist/compile-verify.d.ts +65 -0
- package/dist/compile-verify.js +94 -0
- package/dist/compile-verify.js.map +1 -0
- package/dist/compressible-router.js +64 -11
- package/dist/compressible-router.js.map +1 -1
- package/dist/compression/asset-model.d.ts +15 -0
- package/dist/compression/compact.d.ts +5 -4
- package/dist/compression/compact.js +13 -10
- package/dist/compression/compact.js.map +1 -1
- package/dist/dialog-dismiss.d.ts +127 -74
- package/dist/dialog-dismiss.js +427 -170
- package/dist/dialog-dismiss.js.map +1 -1
- package/dist/dialog-policy.d.ts +141 -0
- package/dist/dialog-policy.js +345 -0
- package/dist/dialog-policy.js.map +1 -0
- package/dist/gate-error.d.ts +6 -0
- package/dist/gate-error.js +13 -2
- package/dist/gate-error.js.map +1 -1
- package/dist/hub-control.d.ts +247 -0
- package/dist/hub-control.js +703 -0
- package/dist/hub-control.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +46 -12
- package/dist/index.js.map +1 -1
- package/dist/live-client.d.ts +123 -3
- package/dist/live-client.js +526 -69
- package/dist/live-client.js.map +1 -1
- package/dist/offline.d.ts +105 -0
- package/dist/offline.js +816 -23
- package/dist/offline.js.map +1 -1
- package/dist/output-profile.d.ts +110 -0
- package/dist/output-profile.js +255 -0
- package/dist/output-profile.js.map +1 -0
- package/dist/retry-policy.d.ts +72 -0
- package/dist/retry-policy.js +146 -0
- package/dist/retry-policy.js.map +1 -0
- package/dist/routers.d.ts +4 -0
- package/dist/routers.js +2 -2
- package/dist/routers.js.map +1 -1
- package/dist/server-instructions.d.ts +18 -0
- package/dist/server-instructions.js +145 -0
- package/dist/server-instructions.js.map +1 -0
- package/dist/tool-router.d.ts +38 -1
- package/dist/tool-router.js +690 -37
- package/dist/tool-router.js.map +1 -1
- package/dist/tool-session-state.d.ts +37 -0
- package/dist/tool-session-state.js +78 -1
- package/dist/tool-session-state.js.map +1 -1
- package/dist/tools/apply-fix.js +16 -2
- package/dist/tools/apply-fix.js.map +1 -1
- package/dist/tools/asmdef-create.d.ts +2 -0
- package/dist/tools/asmdef-create.js +114 -0
- package/dist/tools/asmdef-create.js.map +1 -0
- package/dist/tools/asmdef-get.d.ts +2 -0
- package/dist/tools/asmdef-get.js +31 -0
- package/dist/tools/asmdef-get.js.map +1 -0
- package/dist/tools/asmdef-list.d.ts +2 -0
- package/dist/tools/asmdef-list.js +41 -0
- package/dist/tools/asmdef-list.js.map +1 -0
- package/dist/tools/asmdef-modify.d.ts +2 -0
- package/dist/tools/asmdef-modify.js +108 -0
- package/dist/tools/asmdef-modify.js.map +1 -0
- package/dist/tools/audio-listener-get.d.ts +2 -0
- package/dist/tools/audio-listener-get.js +16 -0
- package/dist/tools/audio-listener-get.js.map +1 -0
- package/dist/tools/audio-mixer-get-parameter.d.ts +2 -0
- package/dist/tools/audio-mixer-get-parameter.js +25 -0
- package/dist/tools/audio-mixer-get-parameter.js.map +1 -0
- package/dist/tools/audio-mixer-set-parameter.d.ts +2 -0
- package/dist/tools/audio-mixer-set-parameter.js +44 -0
- package/dist/tools/audio-mixer-set-parameter.js.map +1 -0
- package/dist/tools/audio-source-add.d.ts +2 -0
- package/dist/tools/audio-source-add.js +94 -0
- package/dist/tools/audio-source-add.js.map +1 -0
- package/dist/tools/audio-source-modify.d.ts +2 -0
- package/dist/tools/audio-source-modify.js +52 -0
- package/dist/tools/audio-source-modify.js.map +1 -0
- package/dist/tools/bridge-status.js +16 -6
- package/dist/tools/bridge-status.js.map +1 -1
- package/dist/tools/build-get-active-target.js +1 -2
- package/dist/tools/build-get-active-target.js.map +1 -1
- package/dist/tools/build-get-defines.js +1 -1
- package/dist/tools/build-get-defines.js.map +1 -1
- package/dist/tools/build-get-scenes.js +1 -2
- package/dist/tools/build-get-scenes.js.map +1 -1
- package/dist/tools/build-get-targets.js +1 -1
- package/dist/tools/build-get-targets.js.map +1 -1
- package/dist/tools/build-set-defines.js +1 -2
- package/dist/tools/build-set-defines.js.map +1 -1
- package/dist/tools/build-set-scenes.js +1 -1
- package/dist/tools/build-set-scenes.js.map +1 -1
- package/dist/tools/build-set-target.js +1 -1
- package/dist/tools/build-set-target.js.map +1 -1
- package/dist/tools/build-start.js +0 -1
- package/dist/tools/build-start.js.map +1 -1
- package/dist/tools/cinemachine-brain-ensure.d.ts +2 -0
- package/dist/tools/cinemachine-brain-ensure.js +27 -0
- package/dist/tools/cinemachine-brain-ensure.js.map +1 -0
- package/dist/tools/cinemachine-camera-list.d.ts +2 -0
- package/dist/tools/cinemachine-camera-list.js +15 -0
- package/dist/tools/cinemachine-camera-list.js.map +1 -0
- package/dist/tools/cinemachine-create-camera.d.ts +2 -0
- package/dist/tools/cinemachine-create-camera.js +55 -0
- package/dist/tools/cinemachine-create-camera.js.map +1 -0
- package/dist/tools/cinemachine-set-body.d.ts +2 -0
- package/dist/tools/cinemachine-set-body.js +33 -0
- package/dist/tools/cinemachine-set-body.js.map +1 -0
- package/dist/tools/cinemachine-set-lens.d.ts +2 -0
- package/dist/tools/cinemachine-set-lens.js +41 -0
- package/dist/tools/cinemachine-set-lens.js.map +1 -0
- package/dist/tools/cinemachine-set-noise.d.ts +2 -0
- package/dist/tools/cinemachine-set-noise.js +31 -0
- package/dist/tools/cinemachine-set-noise.js.map +1 -0
- package/dist/tools/cinemachine-set-targets.d.ts +2 -0
- package/dist/tools/cinemachine-set-targets.js +30 -0
- package/dist/tools/cinemachine-set-targets.js.map +1 -0
- package/dist/tools/console-log.js +2 -2
- package/dist/tools/console-log.js.map +1 -1
- package/dist/tools/constraint-add.d.ts +2 -0
- package/dist/tools/constraint-add.js +85 -0
- package/dist/tools/constraint-add.js.map +1 -0
- package/dist/tools/dependencies.d.ts +2 -0
- package/dist/tools/dependencies.js +76 -0
- package/dist/tools/dependencies.js.map +1 -0
- package/dist/tools/editor-add-tag.js +2 -3
- package/dist/tools/editor-add-tag.js.map +1 -1
- package/dist/tools/editor-clear-history.d.ts +2 -0
- package/dist/tools/editor-clear-history.js +25 -0
- package/dist/tools/editor-clear-history.js.map +1 -0
- package/dist/tools/editor-get-layers.js +3 -3
- package/dist/tools/editor-get-layers.js.map +1 -1
- package/dist/tools/editor-get-tags.js +2 -2
- package/dist/tools/editor-get-tags.js.map +1 -1
- package/dist/tools/editor-redo.js +2 -3
- package/dist/tools/editor-redo.js.map +1 -1
- package/dist/tools/editor-undo-history.d.ts +2 -0
- package/dist/tools/editor-undo-history.js +21 -0
- package/dist/tools/editor-undo-history.js.map +1 -0
- package/dist/tools/editor-undo.js +3 -3
- package/dist/tools/editor-undo.js.map +1 -1
- package/dist/tools/editorprefs-delete.d.ts +2 -0
- package/dist/tools/editorprefs-delete.js +23 -0
- package/dist/tools/editorprefs-delete.js.map +1 -0
- package/dist/tools/editorprefs-get.d.ts +2 -0
- package/dist/tools/editorprefs-get.js +28 -0
- package/dist/tools/editorprefs-get.js.map +1 -0
- package/dist/tools/editorprefs-set.d.ts +2 -0
- package/dist/tools/editorprefs-set.js +33 -0
- package/dist/tools/editorprefs-set.js.map +1 -0
- package/dist/tools/find-references.js +24 -4
- package/dist/tools/find-references.js.map +1 -1
- package/dist/tools/frame-debugger.d.ts +2 -0
- package/dist/tools/frame-debugger.js +48 -0
- package/dist/tools/frame-debugger.js.map +1 -0
- package/dist/tools/gameobject-modify.js +69 -2
- package/dist/tools/gameobject-modify.js.map +1 -1
- package/dist/tools/gate-budget-estimate.js +2 -1
- package/dist/tools/gate-budget-estimate.js.map +1 -1
- package/dist/tools/hub-available-releases.d.ts +2 -0
- package/dist/tools/hub-available-releases.js +23 -0
- package/dist/tools/hub-available-releases.js.map +1 -0
- package/dist/tools/hub-get-install-path.d.ts +2 -0
- package/dist/tools/hub-get-install-path.js +20 -0
- package/dist/tools/hub-get-install-path.js.map +1 -0
- package/dist/tools/hub-install-editor.d.ts +2 -0
- package/dist/tools/hub-install-editor.js +47 -0
- package/dist/tools/hub-install-editor.js.map +1 -0
- package/dist/tools/hub-install-modules.d.ts +2 -0
- package/dist/tools/hub-install-modules.js +44 -0
- package/dist/tools/hub-install-modules.js.map +1 -0
- package/dist/tools/hub-list-editors.d.ts +2 -0
- package/dist/tools/hub-list-editors.js +25 -0
- package/dist/tools/hub-list-editors.js.map +1 -0
- package/dist/tools/hub-set-install-path.d.ts +2 -0
- package/dist/tools/hub-set-install-path.js +30 -0
- package/dist/tools/hub-set-install-path.js.map +1 -0
- package/dist/tools/impact-preview.js +2 -2
- package/dist/tools/impact-preview.js.map +1 -1
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.js +534 -24
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/light-add.d.ts +2 -0
- package/dist/tools/light-add.js +73 -0
- package/dist/tools/light-add.js.map +1 -0
- package/dist/tools/light-modify.d.ts +2 -0
- package/dist/tools/light-modify.js +36 -0
- package/dist/tools/light-modify.js.map +1 -0
- package/dist/tools/light-set.d.ts +2 -0
- package/dist/tools/light-set.js +54 -0
- package/dist/tools/light-set.js.map +1 -0
- package/dist/tools/list-assets-of-type.d.ts +2 -0
- package/dist/tools/list-assets-of-type.js +54 -0
- package/dist/tools/list-assets-of-type.js.map +1 -0
- package/dist/tools/lod-add-level.d.ts +2 -0
- package/dist/tools/lod-add-level.js +66 -0
- package/dist/tools/lod-add-level.js.map +1 -0
- package/dist/tools/lod-group-configure.d.ts +2 -0
- package/dist/tools/lod-group-configure.js +64 -0
- package/dist/tools/lod-group-configure.js.map +1 -0
- package/dist/tools/manage-tools.js +7 -5
- package/dist/tools/manage-tools.js.map +1 -1
- package/dist/tools/memory-snapshot-capture.d.ts +2 -0
- package/dist/tools/memory-snapshot-capture.js +61 -0
- package/dist/tools/memory-snapshot-capture.js.map +1 -0
- package/dist/tools/mutation-explain.js +2 -2
- package/dist/tools/mutation-explain.js.map +1 -1
- package/dist/tools/playerprefs-delete.d.ts +2 -0
- package/dist/tools/playerprefs-delete.js +24 -0
- package/dist/tools/playerprefs-delete.js.map +1 -0
- package/dist/tools/playerprefs-get.d.ts +2 -0
- package/dist/tools/playerprefs-get.js +28 -0
- package/dist/tools/playerprefs-get.js.map +1 -0
- package/dist/tools/playerprefs-set.d.ts +2 -0
- package/dist/tools/playerprefs-set.js +37 -0
- package/dist/tools/playerprefs-set.js.map +1 -0
- package/dist/tools/profiler-capture-frame.d.ts +2 -0
- package/dist/tools/profiler-capture-frame.js +75 -0
- package/dist/tools/profiler-capture-frame.js.map +1 -0
- package/dist/tools/profiler-clear-data.js +1 -2
- package/dist/tools/profiler-clear-data.js.map +1 -1
- package/dist/tools/profiler-enable-module.js +4 -5
- package/dist/tools/profiler-enable-module.js.map +1 -1
- package/dist/tools/profiler-get-status.js +5 -6
- package/dist/tools/profiler-get-status.js.map +1 -1
- package/dist/tools/profiler-load-data.js +4 -5
- package/dist/tools/profiler-load-data.js.map +1 -1
- package/dist/tools/profiler-save-data.js +3 -3
- package/dist/tools/profiler-save-data.js.map +1 -1
- package/dist/tools/profiler-set-config.js +5 -5
- package/dist/tools/profiler-set-config.js.map +1 -1
- package/dist/tools/profiler-start.js +4 -4
- package/dist/tools/profiler-start.js.map +1 -1
- package/dist/tools/profiler-stop.js +2 -3
- package/dist/tools/profiler-stop.js.map +1 -1
- package/dist/tools/read-asset.js +21 -3
- package/dist/tools/read-asset.js.map +1 -1
- package/dist/tools/reflection-probe-bake.d.ts +2 -0
- package/dist/tools/reflection-probe-bake.js +47 -0
- package/dist/tools/reflection-probe-bake.js.map +1 -0
- package/dist/tools/reflection-probe-get.d.ts +2 -0
- package/dist/tools/reflection-probe-get.js +19 -0
- package/dist/tools/reflection-probe-get.js.map +1 -0
- package/dist/tools/reimport-package.d.ts +2 -0
- package/dist/tools/reimport-package.js +53 -0
- package/dist/tools/reimport-package.js.map +1 -0
- package/dist/tools/scan-paths.js +19 -0
- package/dist/tools/scan-paths.js.map +1 -1
- package/dist/tools/scene-focus.js +1 -1
- package/dist/tools/scene-focus.js.map +1 -1
- package/dist/tools/scene-get-data.js +31 -13
- package/dist/tools/scene-get-data.js.map +1 -1
- package/dist/tools/scene-get-dirty-summary.js +1 -1
- package/dist/tools/scene-get-dirty-summary.js.map +1 -1
- package/dist/tools/sceneview-get-camera.d.ts +2 -0
- package/dist/tools/sceneview-get-camera.js +16 -0
- package/dist/tools/sceneview-get-camera.js.map +1 -0
- package/dist/tools/sceneview-set-camera.d.ts +2 -0
- package/dist/tools/sceneview-set-camera.js +58 -0
- package/dist/tools/sceneview-set-camera.js.map +1 -0
- package/dist/tools/script-write.js +2 -2
- package/dist/tools/script-write.js.map +1 -1
- package/dist/tools/scriptableobject-create.d.ts +2 -0
- package/dist/tools/scriptableobject-create.js +86 -0
- package/dist/tools/scriptableobject-create.js.map +1 -0
- package/dist/tools/search-assets.js +20 -3
- package/dist/tools/search-assets.js.map +1 -1
- package/dist/tools/settings-get-lighting.js +3 -4
- package/dist/tools/settings-get-lighting.js.map +1 -1
- package/dist/tools/settings-get-player.js +2 -2
- package/dist/tools/settings-get-player.js.map +1 -1
- package/dist/tools/settings-get-quality.js +1 -2
- package/dist/tools/settings-get-quality.js.map +1 -1
- package/dist/tools/settings-get-render-pipeline.d.ts +2 -0
- package/dist/tools/settings-get-render-pipeline.js +19 -0
- package/dist/tools/settings-get-render-pipeline.js.map +1 -0
- package/dist/tools/settings-get-time.d.ts +2 -0
- package/dist/tools/settings-get-time.js +18 -0
- package/dist/tools/settings-get-time.js.map +1 -0
- package/dist/tools/settings-set-lighting.js +5 -5
- package/dist/tools/settings-set-lighting.js.map +1 -1
- package/dist/tools/settings-set-physics.js +2 -2
- package/dist/tools/settings-set-physics.js.map +1 -1
- package/dist/tools/settings-set-player.js +2 -2
- package/dist/tools/settings-set-player.js.map +1 -1
- package/dist/tools/settings-set-quality-level.d.ts +2 -0
- package/dist/tools/settings-set-quality-level.js +44 -0
- package/dist/tools/settings-set-quality-level.js.map +1 -0
- package/dist/tools/settings-set-quality.js +2 -2
- package/dist/tools/settings-set-quality.js.map +1 -1
- package/dist/tools/settings-set-time.d.ts +2 -0
- package/dist/tools/settings-set-time.js +53 -0
- package/dist/tools/settings-set-time.js.map +1 -0
- package/dist/tools/shader-get-data.js +3 -3
- package/dist/tools/shader-get-data.js.map +1 -1
- package/dist/tools/shader-graph-create.d.ts +2 -0
- package/dist/tools/shader-graph-create.js +40 -0
- package/dist/tools/shader-graph-create.js.map +1 -0
- package/dist/tools/shader-graph-node-add.d.ts +2 -0
- package/dist/tools/shader-graph-node-add.js +50 -0
- package/dist/tools/shader-graph-node-add.js.map +1 -0
- package/dist/tools/shader-graph-node-connect.d.ts +2 -0
- package/dist/tools/shader-graph-node-connect.js +60 -0
- package/dist/tools/shader-graph-node-connect.js.map +1 -0
- package/dist/tools/shader-graph-open.d.ts +2 -0
- package/dist/tools/shader-graph-open.js +29 -0
- package/dist/tools/shader-graph-open.js.map +1 -0
- package/dist/tools/skybox-get.d.ts +2 -0
- package/dist/tools/skybox-get.js +13 -0
- package/dist/tools/skybox-get.js.map +1 -0
- package/dist/tools/skybox-set.d.ts +2 -0
- package/dist/tools/skybox-set.js +34 -0
- package/dist/tools/skybox-set.js.map +1 -0
- package/dist/tools/spriteatlas-add-packable.d.ts +2 -0
- package/dist/tools/spriteatlas-add-packable.js +40 -0
- package/dist/tools/spriteatlas-add-packable.js.map +1 -0
- package/dist/tools/spriteatlas-create.d.ts +2 -0
- package/dist/tools/spriteatlas-create.js +41 -0
- package/dist/tools/spriteatlas-create.js.map +1 -0
- package/dist/tools/spriteatlas-delete.d.ts +2 -0
- package/dist/tools/spriteatlas-delete.js +32 -0
- package/dist/tools/spriteatlas-delete.js.map +1 -0
- package/dist/tools/spriteatlas-get.d.ts +2 -0
- package/dist/tools/spriteatlas-get.js +23 -0
- package/dist/tools/spriteatlas-get.js.map +1 -0
- package/dist/tools/spriteatlas-list.d.ts +2 -0
- package/dist/tools/spriteatlas-list.js +21 -0
- package/dist/tools/spriteatlas-list.js.map +1 -0
- package/dist/tools/spriteatlas-modify.d.ts +2 -0
- package/dist/tools/spriteatlas-modify.js +55 -0
- package/dist/tools/spriteatlas-modify.js.map +1 -0
- package/dist/tools/spriteatlas-remove-packable.d.ts +2 -0
- package/dist/tools/spriteatlas-remove-packable.js +39 -0
- package/dist/tools/spriteatlas-remove-packable.js.map +1 -0
- package/dist/tools/terrain-create.d.ts +2 -0
- package/dist/tools/terrain-create.js +73 -0
- package/dist/tools/terrain-create.js.map +1 -0
- package/dist/tools/terrain-paint-layer.d.ts +2 -0
- package/dist/tools/terrain-paint-layer.js +85 -0
- package/dist/tools/terrain-paint-layer.js.map +1 -0
- package/dist/tools/terrain-place-trees.d.ts +2 -0
- package/dist/tools/terrain-place-trees.js +92 -0
- package/dist/tools/terrain-place-trees.js.map +1 -0
- package/dist/tools/terrain-set-heights.d.ts +2 -0
- package/dist/tools/terrain-set-heights.js +68 -0
- package/dist/tools/terrain-set-heights.js.map +1 -0
- package/dist/tools/terrain-set-neighbors.d.ts +2 -0
- package/dist/tools/terrain-set-neighbors.js +65 -0
- package/dist/tools/terrain-set-neighbors.js.map +1 -0
- package/dist/tools/texture-get-importer.d.ts +2 -0
- package/dist/tools/texture-get-importer.js +25 -0
- package/dist/tools/texture-get-importer.js.map +1 -0
- package/dist/tools/texture-get.d.ts +2 -0
- package/dist/tools/texture-get.js +23 -0
- package/dist/tools/texture-get.js.map +1 -0
- package/dist/tools/texture-reimport.d.ts +2 -0
- package/dist/tools/texture-reimport.js +33 -0
- package/dist/tools/texture-reimport.js.map +1 -0
- package/dist/tools/texture-set-import.d.ts +2 -0
- package/dist/tools/texture-set-import.js +52 -0
- package/dist/tools/texture-set-import.js.map +1 -0
- package/dist/tools/tilemap-box-fill.d.ts +2 -0
- package/dist/tools/tilemap-box-fill.js +32 -0
- package/dist/tools/tilemap-box-fill.js.map +1 -0
- package/dist/tools/tilemap-create-rule-tile.d.ts +2 -0
- package/dist/tools/tilemap-create-rule-tile.js +39 -0
- package/dist/tools/tilemap-create-rule-tile.js.map +1 -0
- package/dist/tools/tilemap-create-tile-asset.d.ts +2 -0
- package/dist/tools/tilemap-create-tile-asset.js +35 -0
- package/dist/tools/tilemap-create-tile-asset.js.map +1 -0
- package/dist/tools/tilemap-create.d.ts +2 -0
- package/dist/tools/tilemap-create.js +32 -0
- package/dist/tools/tilemap-create.js.map +1 -0
- package/dist/tools/tilemap-set-tile.d.ts +2 -0
- package/dist/tools/tilemap-set-tile.js +33 -0
- package/dist/tools/tilemap-set-tile.js.map +1 -0
- package/dist/tools/timeline-clip-add.d.ts +2 -0
- package/dist/tools/timeline-clip-add.js +43 -0
- package/dist/tools/timeline-clip-add.js.map +1 -0
- package/dist/tools/timeline-create.d.ts +2 -0
- package/dist/tools/timeline-create.js +32 -0
- package/dist/tools/timeline-create.js.map +1 -0
- package/dist/tools/timeline-director-bind.d.ts +2 -0
- package/dist/tools/timeline-director-bind.js +34 -0
- package/dist/tools/timeline-director-bind.js.map +1 -0
- package/dist/tools/timeline-modify.d.ts +2 -0
- package/dist/tools/timeline-modify.js +44 -0
- package/dist/tools/timeline-modify.js.map +1 -0
- package/dist/tools/timeline-track-add.d.ts +2 -0
- package/dist/tools/timeline-track-add.js +37 -0
- package/dist/tools/timeline-track-add.js.map +1 -0
- package/dist/tools/ui-canvas-add.d.ts +2 -0
- package/dist/tools/ui-canvas-add.js +66 -0
- package/dist/tools/ui-canvas-add.js.map +1 -0
- package/dist/tools/ui-element-add.d.ts +2 -0
- package/dist/tools/ui-element-add.js +65 -0
- package/dist/tools/ui-element-add.js.map +1 -0
- package/dist/tools/ui-element-modify.d.ts +2 -0
- package/dist/tools/ui-element-modify.js +59 -0
- package/dist/tools/ui-element-modify.js.map +1 -0
- package/dist/tools/ui-layout-group-add.d.ts +2 -0
- package/dist/tools/ui-layout-group-add.js +80 -0
- package/dist/tools/ui-layout-group-add.js.map +1 -0
- package/dist/tools/validate-edit.js +22 -1
- package/dist/tools/validate-edit.js.map +1 -1
- package/dist/tools/vfx-block-edit.d.ts +2 -0
- package/dist/tools/vfx-block-edit.js +51 -0
- package/dist/tools/vfx-block-edit.js.map +1 -0
- package/dist/tools/vfx-list.d.ts +2 -0
- package/dist/tools/vfx-list.js +31 -0
- package/dist/tools/vfx-list.js.map +1 -0
- package/dist/tools/vfx-open.d.ts +2 -0
- package/dist/tools/vfx-open.js +29 -0
- package/dist/tools/vfx-open.js.map +1 -0
- package/package.json +1 -1
|
@@ -18,50 +18,68 @@ const MISSING_REFERENCES_ISSUES = [
|
|
|
18
18
|
code: "missing_guid",
|
|
19
19
|
severity: "Error",
|
|
20
20
|
fixIds: ["relink_broken_guid"],
|
|
21
|
+
rootCause: "missing_guid_reference",
|
|
22
|
+
remediation: "The reference's GUID does not resolve to a loadable asset — the target was likely deleted, moved, or never committed. Relink to the correct target GUID via apply_fix (relink_broken_guid) with a deliberately chosen target_guid, or remove the reference.",
|
|
21
23
|
},
|
|
22
24
|
{
|
|
23
25
|
code: "missing_fileid",
|
|
24
26
|
severity: "Error",
|
|
25
27
|
fixIds: [],
|
|
28
|
+
rootCause: "missing_fileid_reference",
|
|
29
|
+
remediation: "The GUID resolves but the fileID is not a top-level object in the target asset (the sub-object was removed or the asset was re-exported). Relink to the correct fileID, or repoint the reference.",
|
|
26
30
|
},
|
|
27
31
|
{
|
|
28
32
|
code: "missing_local_fileid",
|
|
29
33
|
severity: "Warning",
|
|
30
34
|
fixIds: [],
|
|
35
|
+
rootCause: "missing_fileid_reference",
|
|
36
|
+
remediation: "A local (same-file) fileID is referenced but no longer declared in the file. Reconnect the reference to a valid local object, or remove it.",
|
|
31
37
|
},
|
|
32
38
|
{
|
|
33
39
|
code: "empty_local_ref",
|
|
34
40
|
severity: "Warning",
|
|
35
41
|
fixIds: [],
|
|
42
|
+
rootCause: "missing_fileid_reference",
|
|
43
|
+
remediation: "An empty local fileID reference was serialized. Reconnect it to a valid local object, or remove it.",
|
|
36
44
|
},
|
|
37
45
|
{
|
|
38
46
|
code: "missing_method",
|
|
39
47
|
severity: "Warning",
|
|
40
48
|
fixIds: [],
|
|
41
49
|
fullScanOnly: true,
|
|
50
|
+
rootCause: "missing_script_class",
|
|
51
|
+
remediation: "A serialized call (e.g. UnityEvent) targets a method that no longer exists on the receiver class. Re-add the method, update the call to the new name, or clear the target.",
|
|
42
52
|
},
|
|
43
53
|
{
|
|
44
54
|
code: "type_mismatch",
|
|
45
55
|
severity: "Warning",
|
|
46
56
|
fixIds: [],
|
|
47
57
|
fullScanOnly: true,
|
|
58
|
+
rootCause: "missing_script_class",
|
|
59
|
+
remediation: "A serialized type name cannot be resolved to a loaded class (renamed, removed, or in an assembly that no longer compiles). Restore or rename the class so the type resolves.",
|
|
48
60
|
},
|
|
49
61
|
{
|
|
50
62
|
code: "missing_script",
|
|
51
63
|
severity: "Error",
|
|
52
64
|
fixIds: ["remove_missing_script"],
|
|
65
|
+
rootCause: "missing_script_class",
|
|
66
|
+
remediation: "A MonoBehaviour's script GUID no longer resolves to a compiled script (the script was deleted, renamed, or its assembly no longer compiles). Remove the missing script component via apply_fix (remove_missing_script), or re-add the correct script.",
|
|
53
67
|
},
|
|
54
68
|
{
|
|
55
69
|
code: "duplicate_component",
|
|
56
70
|
severity: "Warning",
|
|
57
71
|
fixIds: [],
|
|
58
72
|
fullScanOnly: true,
|
|
73
|
+
rootCause: "configuration_mismatch",
|
|
74
|
+
remediation: "The same component type appears more than once on one GameObject, which Unity does not allow on reload. Remove the duplicate component(s), keeping the one with the intended serialized values.",
|
|
59
75
|
},
|
|
60
76
|
{
|
|
61
77
|
code: "invalid_layer",
|
|
62
78
|
severity: "Warning",
|
|
63
79
|
fixIds: [],
|
|
64
80
|
fullScanOnly: true,
|
|
81
|
+
rootCause: "configuration_mismatch",
|
|
82
|
+
remediation: "The serialized layer index is out of range (the layer was removed from TagManager). Reassign the GameObject to a valid layer.",
|
|
65
83
|
},
|
|
66
84
|
];
|
|
67
85
|
const SCENE_PREFAB_HEALTH_ISSUES = [
|
|
@@ -69,41 +87,57 @@ const SCENE_PREFAB_HEALTH_ISSUES = [
|
|
|
69
87
|
code: "broken_reference",
|
|
70
88
|
severity: "Error",
|
|
71
89
|
fixIds: [],
|
|
90
|
+
rootCause: "missing_guid_reference",
|
|
91
|
+
remediation: "The scene/prefab holds a broken object reference. Identify the referenced object via the issue description, then relink or remove it.",
|
|
72
92
|
},
|
|
73
93
|
{
|
|
74
94
|
code: "high_risk_bootstrap",
|
|
75
95
|
severity: "Warning",
|
|
76
96
|
fixIds: [],
|
|
97
|
+
rootCause: "structural_complexity",
|
|
98
|
+
remediation: "A bootstrap scene carries more than half the object budget, making load slow and startup fragile. Split content into additive scenes that load after startup.",
|
|
77
99
|
},
|
|
78
100
|
{
|
|
79
101
|
code: "scene_object_count",
|
|
80
102
|
severity: "Warning",
|
|
81
103
|
fixIds: [],
|
|
104
|
+
rootCause: "structural_complexity",
|
|
105
|
+
remediation: "The scene exceeds the configured object budget. Reduce object count, move static content into prefabs, or raise the budget deliberately.",
|
|
82
106
|
},
|
|
83
107
|
{
|
|
84
108
|
code: "component_hotspot",
|
|
85
109
|
severity: "Warning",
|
|
86
110
|
fixIds: [],
|
|
111
|
+
rootCause: "structural_complexity",
|
|
112
|
+
remediation: "A single GameObject holds an unusually high component count, which hurts performance and editability. Split responsibilities across child objects.",
|
|
87
113
|
},
|
|
88
114
|
{
|
|
89
115
|
code: "inactive_expensive",
|
|
90
116
|
severity: "Warning",
|
|
91
117
|
fixIds: [],
|
|
118
|
+
rootCause: "structural_complexity",
|
|
119
|
+
remediation: "Inactive objects still carry Renderers (and their meshes/materials), wasting memory. Disable or remove the Renderer components, or delete the inactive objects.",
|
|
92
120
|
},
|
|
93
121
|
{
|
|
94
122
|
code: "inactive_heavy",
|
|
95
123
|
severity: "Warning",
|
|
96
124
|
fixIds: [],
|
|
125
|
+
rootCause: "structural_complexity",
|
|
126
|
+
remediation: "A large pool of inactive objects bloats the scene file and Hierarchy. Move them into prefabs instantiated on demand, or delete unused ones.",
|
|
97
127
|
},
|
|
98
128
|
{
|
|
99
129
|
code: "deep_nesting",
|
|
100
130
|
severity: "Warning",
|
|
101
131
|
fixIds: [],
|
|
132
|
+
rootCause: "structural_complexity",
|
|
133
|
+
remediation: "Prefab nesting exceeds the configured depth; deeply nested prefabs are fragile and slow to edit. Flatten the hierarchy or extract the inner prefab.",
|
|
102
134
|
},
|
|
103
135
|
{
|
|
104
136
|
code: "override_explosion",
|
|
105
137
|
severity: "Warning",
|
|
106
138
|
fixIds: [],
|
|
139
|
+
rootCause: "structural_complexity",
|
|
140
|
+
remediation: "The prefab instance has too many overrides, undermining the point of a prefab base. Apply intentional overrides into the base prefab, or unpack the instance.",
|
|
107
141
|
},
|
|
108
142
|
];
|
|
109
143
|
const DEPENDENCIES_ISSUES = [
|
|
@@ -111,51 +145,465 @@ const DEPENDENCIES_ISSUES = [
|
|
|
111
145
|
code: "broken_dependency",
|
|
112
146
|
severity: "Error",
|
|
113
147
|
fixIds: ["relink_broken_guid"],
|
|
148
|
+
rootCause: "missing_dependency",
|
|
149
|
+
remediation: "A forward dependency edge targets a GUID that does not resolve. Relink the dependency to the correct target GUID via apply_fix (relink_broken_guid), or remove the dependency.",
|
|
114
150
|
},
|
|
115
151
|
{
|
|
116
152
|
code: "dependency_cycle",
|
|
117
153
|
severity: "Warning",
|
|
118
154
|
fixIds: [],
|
|
155
|
+
rootCause: "configuration_mismatch",
|
|
156
|
+
remediation: "The forward dependency graph contains a cycle. Break the cycle by removing or reversing one edge in the loop.",
|
|
119
157
|
},
|
|
120
158
|
];
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
//
|
|
124
|
-
|
|
159
|
+
// M24 Plan 2 / T24.2 — offline project-wide integrity codes. Emitted by the
|
|
160
|
+
// offline scanIntegrityOffline() walker (mcp-server/src/offline.ts), the
|
|
161
|
+
// offline seed for the M25 verify engine. These are the first codes to fill
|
|
162
|
+
// the remove_orphan_meta / fix_duplicate_guid fix placeholders (flipped to
|
|
163
|
+
// implemented below). The per-read offline integrity codes
|
|
164
|
+
// (missing_reference / missing_script_reference / orphaned_prefab_instance /
|
|
165
|
+
// malformed_json / asmdef_missing_name / shadergraph_root_missing) surface on
|
|
166
|
+
// every read_asset call; this rule family is the project-wide aggregator.
|
|
167
|
+
const OFFLINE_INTEGRITY_ISSUES = [
|
|
168
|
+
{
|
|
169
|
+
code: "orphan_meta",
|
|
170
|
+
severity: "Warning",
|
|
171
|
+
fixIds: ["remove_orphan_meta"],
|
|
172
|
+
fullScanOnly: true,
|
|
173
|
+
rootCause: "orphaned_meta",
|
|
174
|
+
remediation: "A .meta file has no companion asset on disk. Remove the orphaned .meta via apply_fix (remove_orphan_meta), or restore the missing asset.",
|
|
175
|
+
},
|
|
125
176
|
{
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
status: "planned",
|
|
133
|
-
issues: [],
|
|
134
|
-
guidance: "Not yet ported. C#/asmdef files currently pass through the gate without rule coverage. " +
|
|
135
|
-
"Track asset references manually or use find_references on GUID-based deps.",
|
|
177
|
+
code: "duplicate_guid",
|
|
178
|
+
severity: "Error",
|
|
179
|
+
fixIds: ["fix_duplicate_guid"],
|
|
180
|
+
fullScanOnly: true,
|
|
181
|
+
rootCause: "duplicate_guid",
|
|
182
|
+
remediation: "Two or more assets share one GUID. Regenerate the GUID on the less-referenced asset via apply_fix (fix_duplicate_guid) — choose the target path deliberately.",
|
|
136
183
|
},
|
|
137
184
|
{
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
status: "planned",
|
|
145
|
-
issues: [],
|
|
146
|
-
guidance: "Not yet ported. Use find_references to check material usage and read_asset to inspect shader refs.",
|
|
185
|
+
code: "missing_reference",
|
|
186
|
+
severity: "Warning",
|
|
187
|
+
fixIds: [],
|
|
188
|
+
fullScanOnly: true,
|
|
189
|
+
rootCause: "missing_guid_reference",
|
|
190
|
+
remediation: "A serialized reference resolves to a GUID no asset owns. Relink to the correct target, or remove the reference.",
|
|
147
191
|
},
|
|
148
192
|
{
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
193
|
+
code: "missing_script_reference",
|
|
194
|
+
severity: "Error",
|
|
195
|
+
fixIds: ["remove_missing_script"],
|
|
196
|
+
fullScanOnly: true,
|
|
197
|
+
rootCause: "missing_script_class",
|
|
198
|
+
remediation: "A MonoBehaviour script GUID does not resolve to a compiled script. Remove the missing script component via apply_fix (remove_missing_script), or re-add the correct script.",
|
|
199
|
+
},
|
|
200
|
+
];
|
|
201
|
+
// M25 Plan 1 — wave-1 rule families ported from backlog-verify-rules.
|
|
202
|
+
// Each entry mirrors the C# verify package issue mappers
|
|
203
|
+
// (packages/verify/Editor/Rules/*). The issue codes are the link keys the
|
|
204
|
+
// fix registry matches on.
|
|
205
|
+
const ASMDEF_AUDIT_ISSUES = [
|
|
206
|
+
{
|
|
207
|
+
code: "broken_asmdef_reference",
|
|
208
|
+
severity: "Error",
|
|
209
|
+
fixIds: [],
|
|
210
|
+
rootCause: "missing_dependency",
|
|
211
|
+
remediation: "An asmdef references a GUID or assembly name that does not resolve to a compiled assembly or known asmdef. Correct the reference name/GUID, or create the referenced assembly.",
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
code: "asmdef_missing_name",
|
|
215
|
+
severity: "Error",
|
|
216
|
+
fixIds: [],
|
|
217
|
+
rootCause: "configuration_mismatch",
|
|
218
|
+
remediation: "The asmdef has no 'name' field, so Unity cannot compile it. Add a name matching the assembly (Unity sets it automatically when the file is renamed correctly).",
|
|
158
219
|
},
|
|
220
|
+
{
|
|
221
|
+
code: "malformed_asmdef",
|
|
222
|
+
severity: "Error",
|
|
223
|
+
fixIds: [],
|
|
224
|
+
rootCause: "build_blocker",
|
|
225
|
+
remediation: "The asmdef JSON failed to parse. Fix the JSON syntax error shown in the issue description.",
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
code: "asmdef_duplicate_name",
|
|
229
|
+
severity: "Error",
|
|
230
|
+
fixIds: [],
|
|
231
|
+
fullScanOnly: true,
|
|
232
|
+
rootCause: "duplicate_guid",
|
|
233
|
+
remediation: "Two or more asmdef files declare the same assembly name, which prevents compilation. Rename one of the assemblies so each name is unique.",
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
code: "asmdef_circular_reference",
|
|
237
|
+
severity: "Error",
|
|
238
|
+
fixIds: [],
|
|
239
|
+
fullScanOnly: true,
|
|
240
|
+
rootCause: "configuration_mismatch",
|
|
241
|
+
remediation: "The assembly reference graph contains a cycle. Break the cycle by removing or reversing one reference in the loop.",
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
code: "asmdef_editor_in_runtime",
|
|
245
|
+
severity: "Warning",
|
|
246
|
+
fixIds: [],
|
|
247
|
+
rootCause: "configuration_mismatch",
|
|
248
|
+
remediation: "A runtime assembly references an editor-only assembly. Either mark this assembly editor-only (add the Editor platform), or remove the editor reference.",
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
code: "asmdef_auto_referenced_orphan",
|
|
252
|
+
severity: "Warning",
|
|
253
|
+
fixIds: [],
|
|
254
|
+
fullScanOnly: true,
|
|
255
|
+
rootCause: "configuration_mismatch",
|
|
256
|
+
remediation: "The assembly has autoReferenced=false but no other assembly references it, so it will not compile into the project. Add a reference from the consuming assembly, or set autoReferenced=true.",
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
code: "asmdef_platform_filter_broad",
|
|
260
|
+
severity: "Warning",
|
|
261
|
+
fixIds: [],
|
|
262
|
+
rootCause: "configuration_mismatch",
|
|
263
|
+
remediation: "The assembly compiles for all platforms with no filters. Add include/exclude platform filters if a narrower target is intended.",
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
code: "asmdef_platform_filter_contradict",
|
|
267
|
+
severity: "Warning",
|
|
268
|
+
fixIds: [],
|
|
269
|
+
rootCause: "configuration_mismatch",
|
|
270
|
+
remediation: "The asmdef sets both includePlatforms and excludePlatforms, which is contradictory. Keep one and remove the other.",
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
code: "asmdef_version_define_invalid",
|
|
274
|
+
severity: "Warning",
|
|
275
|
+
fixIds: [],
|
|
276
|
+
rootCause: "configuration_mismatch",
|
|
277
|
+
remediation: "A version define references a package by id, which can silently fail to match. Verify the package id and version expression, or use a different expression.",
|
|
278
|
+
},
|
|
279
|
+
];
|
|
280
|
+
const PROJECT_HEALTH_ISSUES = [
|
|
281
|
+
{
|
|
282
|
+
code: "orphan_meta",
|
|
283
|
+
severity: "Warning",
|
|
284
|
+
fixIds: ["remove_orphan_meta"],
|
|
285
|
+
fullScanOnly: true,
|
|
286
|
+
rootCause: "orphaned_meta",
|
|
287
|
+
remediation: "A .meta file has no companion asset on disk — the asset was deleted while its .meta remained. Remove the orphaned .meta via apply_fix (remove_orphan_meta), or restore the missing asset.",
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
code: "duplicate_guid",
|
|
291
|
+
severity: "Error",
|
|
292
|
+
fixIds: ["fix_duplicate_guid"],
|
|
293
|
+
fullScanOnly: true,
|
|
294
|
+
rootCause: "duplicate_guid",
|
|
295
|
+
remediation: "Two or more assets share one GUID, so Unity cannot reliably resolve references to it. Regenerate the GUID on the less-referenced asset via apply_fix (fix_duplicate_guid) — choose the target path deliberately.",
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
code: "missing_project_setting",
|
|
299
|
+
severity: "Error",
|
|
300
|
+
fixIds: [],
|
|
301
|
+
fullScanOnly: true,
|
|
302
|
+
rootCause: "configuration_mismatch",
|
|
303
|
+
remediation: "A required ProjectSettings file or field is missing or empty. Restore the setting (e.g. re-add the file, or set the editor version) via the Project Settings window or settings_set_player.",
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
code: "project_empty_folder",
|
|
307
|
+
severity: "Warning",
|
|
308
|
+
fixIds: [],
|
|
309
|
+
fullScanOnly: true,
|
|
310
|
+
rootCause: "structural_complexity",
|
|
311
|
+
remediation: "An empty folder adds clutter without content. Delete it (and its .meta), or add the intended content.",
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
code: "project_meta_only_folder",
|
|
315
|
+
severity: "Warning",
|
|
316
|
+
fixIds: [],
|
|
317
|
+
fullScanOnly: true,
|
|
318
|
+
rootCause: "orphaned_meta",
|
|
319
|
+
remediation: "A folder .meta exists but the folder itself is gone. Delete the orphaned .meta, or recreate the folder.",
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
code: "project_deep_nesting",
|
|
323
|
+
severity: "Warning",
|
|
324
|
+
fixIds: [],
|
|
325
|
+
fullScanOnly: true,
|
|
326
|
+
rootCause: "structural_complexity",
|
|
327
|
+
remediation: "Folder nesting exceeds the configured depth, making paths long and hard to navigate. Flatten the directory structure.",
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
code: "project_large_folder",
|
|
331
|
+
severity: "Warning",
|
|
332
|
+
fixIds: [],
|
|
333
|
+
fullScanOnly: true,
|
|
334
|
+
rootCause: "structural_complexity",
|
|
335
|
+
remediation: "A folder holds more assets than the configured budget, slowing AssetDatabase and obscuring structure. Split it into sub-folders.",
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
code: "project_broken_asset",
|
|
339
|
+
severity: "Error",
|
|
340
|
+
fixIds: [],
|
|
341
|
+
fullScanOnly: true,
|
|
342
|
+
rootCause: "build_blocker",
|
|
343
|
+
remediation: "The asset failed to load in the Editor (corrupted or unimportable). Reimport the asset, or restore it from version control.",
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
code: "project_empty_scene",
|
|
347
|
+
severity: "Warning",
|
|
348
|
+
fixIds: [],
|
|
349
|
+
fullScanOnly: true,
|
|
350
|
+
rootCause: "structural_complexity",
|
|
351
|
+
remediation: "The scene has zero root objects and is effectively empty. Populate it, or delete it if unused.",
|
|
352
|
+
},
|
|
353
|
+
];
|
|
354
|
+
const MATERIALS_ISSUES = [
|
|
355
|
+
{
|
|
356
|
+
code: "missing_shader",
|
|
357
|
+
severity: "Error",
|
|
358
|
+
fixIds: ["reassign_missing_shader"],
|
|
359
|
+
rootCause: "resource_missing",
|
|
360
|
+
remediation: "The material's shader is null or the error shader — the original shader failed to compile or is missing. Reassign a valid shader via apply_fix (reassign_missing_shader) with a target_shader name or path.",
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
code: "missing_texture",
|
|
364
|
+
severity: "Warning",
|
|
365
|
+
fixIds: ["reassign_missing_texture"],
|
|
366
|
+
rootCause: "resource_missing",
|
|
367
|
+
remediation: "A material texture slot is null or a builtin placeholder. Reassign a valid texture via apply_fix (reassign_missing_texture) with a target_texture asset path or GUID.",
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
code: "builtin_shader",
|
|
371
|
+
severity: "Warning",
|
|
372
|
+
fixIds: [],
|
|
373
|
+
rootCause: "configuration_mismatch",
|
|
374
|
+
remediation: "The material uses a built-in shader. If intentional, ignore; otherwise assign the project's render-pipeline shader.",
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
code: "builtin_texture",
|
|
378
|
+
severity: "Warning",
|
|
379
|
+
fixIds: [],
|
|
380
|
+
rootCause: "configuration_mismatch",
|
|
381
|
+
remediation: "A material texture slot holds a unity_builtin placeholder. Reassign the intended texture.",
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
code: "render_queue_override",
|
|
385
|
+
severity: "Warning",
|
|
386
|
+
fixIds: [],
|
|
387
|
+
rootCause: "configuration_mismatch",
|
|
388
|
+
remediation: "The material overrides the shader's render queue, which can break draw ordering. Remove the override unless a specific queue is intended.",
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
code: "unable_to_load",
|
|
392
|
+
severity: "Error",
|
|
393
|
+
fixIds: [],
|
|
394
|
+
rootCause: "build_blocker",
|
|
395
|
+
remediation: "The material could not be loaded by the Editor (corrupted or unimportable). Reimport the material, or restore it from version control.",
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
code: "duplicate_material",
|
|
399
|
+
severity: "Warning",
|
|
400
|
+
fixIds: [],
|
|
401
|
+
fullScanOnly: true,
|
|
402
|
+
rootCause: "structural_complexity",
|
|
403
|
+
remediation: "Two or more materials share an identical content fingerprint. Consolidate them into one shared material.",
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
code: "unused_material",
|
|
407
|
+
severity: "Warning",
|
|
408
|
+
fixIds: [],
|
|
409
|
+
fullScanOnly: true,
|
|
410
|
+
rootCause: "structural_complexity",
|
|
411
|
+
remediation: "The material is not referenced by any renderer or dependency. Delete it if truly unused.",
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
code: "variant_parent_invalid",
|
|
415
|
+
severity: "Error",
|
|
416
|
+
fixIds: [],
|
|
417
|
+
fullScanOnly: true,
|
|
418
|
+
rootCause: "missing_dependency",
|
|
419
|
+
remediation: "A material variant's parent is missing or invalid. Reparent the variant to a valid base material, or convert it to a standalone material.",
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
code: "variant_deep_chain",
|
|
423
|
+
severity: "Warning",
|
|
424
|
+
fixIds: [],
|
|
425
|
+
fullScanOnly: true,
|
|
426
|
+
rootCause: "structural_complexity",
|
|
427
|
+
remediation: "The material-variant chain exceeds the configured depth. Flatten the chain by applying overrides into an earlier variant.",
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
code: "variant_heavy_overrides",
|
|
431
|
+
severity: "Warning",
|
|
432
|
+
fixIds: [],
|
|
433
|
+
fullScanOnly: true,
|
|
434
|
+
rootCause: "structural_complexity",
|
|
435
|
+
remediation: "The material variant has too many overrides, undermining the point of a variant base. Apply the overrides into the parent, or reduce them.",
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
code: "gpu_instancing_off",
|
|
439
|
+
severity: "Warning",
|
|
440
|
+
fixIds: [],
|
|
441
|
+
fullScanOnly: true,
|
|
442
|
+
rootCause: "configuration_mismatch",
|
|
443
|
+
remediation: "GPU instancing is disabled on a material that could benefit from it. Enable GPU instancing in the material if the shader supports it.",
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
code: "srp_batcher_incompatible",
|
|
447
|
+
severity: "Warning",
|
|
448
|
+
fixIds: [],
|
|
449
|
+
fullScanOnly: true,
|
|
450
|
+
rootCause: "configuration_mismatch",
|
|
451
|
+
remediation: "The material is incompatible with the SRP Batcher (mixed shader or non-batchable properties). Make shared materials use the same shader to allow batching.",
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
code: "null_material",
|
|
455
|
+
severity: "Warning",
|
|
456
|
+
fixIds: [],
|
|
457
|
+
fullScanOnly: true,
|
|
458
|
+
rootCause: "resource_missing",
|
|
459
|
+
remediation: "A renderer references a null material. Assign a material to the slot.",
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
code: "null_material_slot",
|
|
463
|
+
severity: "Warning",
|
|
464
|
+
fixIds: [],
|
|
465
|
+
fullScanOnly: true,
|
|
466
|
+
rootCause: "resource_missing",
|
|
467
|
+
remediation: "A renderer has a material slot that is null. Assign a material, or remove the slot.",
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
code: "builtin_material",
|
|
471
|
+
severity: "Warning",
|
|
472
|
+
fixIds: [],
|
|
473
|
+
fullScanOnly: true,
|
|
474
|
+
rootCause: "configuration_mismatch",
|
|
475
|
+
remediation: "A renderer uses a unity_builtin material. Assign a project material instead.",
|
|
476
|
+
},
|
|
477
|
+
];
|
|
478
|
+
const ANIMATION_ANALYSIS_ISSUES = [
|
|
479
|
+
{
|
|
480
|
+
code: "missing_clip",
|
|
481
|
+
severity: "Error",
|
|
482
|
+
fixIds: [],
|
|
483
|
+
rootCause: "resource_missing",
|
|
484
|
+
remediation: "An animator state has no motion/clip assigned, or its clip is missing. Assign a valid AnimationClip to the state.",
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
code: "empty_clip",
|
|
488
|
+
severity: "Warning",
|
|
489
|
+
fixIds: [],
|
|
490
|
+
rootCause: "configuration_mismatch",
|
|
491
|
+
remediation: "An AnimationClip declares no curves, so it animates nothing. Add curves to the clip, or remove it if unused.",
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
code: "unreachable_state",
|
|
495
|
+
severity: "Warning",
|
|
496
|
+
fixIds: [],
|
|
497
|
+
rootCause: "configuration_mismatch",
|
|
498
|
+
remediation: "An animator state is unreachable from any entry/default/any-state transition. Add a transition to it, or remove the state.",
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
code: "complexity_over_threshold",
|
|
502
|
+
severity: "Warning",
|
|
503
|
+
fixIds: [],
|
|
504
|
+
rootCause: "structural_complexity",
|
|
505
|
+
remediation: "The animator's state count exceeds the configured threshold. Split the controller into sub-state machines or simplify it.",
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
code: "anystate_overuse",
|
|
509
|
+
severity: "Warning",
|
|
510
|
+
fixIds: [],
|
|
511
|
+
rootCause: "structural_complexity",
|
|
512
|
+
remediation: "AnyState transition count exceeds the threshold; overusing AnyState hurts performance and obscures flow. Replace some with direct transitions.",
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
code: "parameter_mismatch",
|
|
516
|
+
severity: "Warning",
|
|
517
|
+
fixIds: [],
|
|
518
|
+
rootCause: "configuration_mismatch",
|
|
519
|
+
remediation: "A transition references a parameter that is not declared in the controller (renamed or removed). Re-add the parameter, or fix the transition condition.",
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
code: "expensive_curves_density",
|
|
523
|
+
severity: "Warning",
|
|
524
|
+
fixIds: [],
|
|
525
|
+
rootCause: "structural_complexity",
|
|
526
|
+
remediation: "The clip's keyframe density exceeds the threshold (too many keys per second). Reduce keyframe density by baking or simplifying the curves.",
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
code: "expensive_curves_count",
|
|
530
|
+
severity: "Warning",
|
|
531
|
+
fixIds: [],
|
|
532
|
+
rootCause: "structural_complexity",
|
|
533
|
+
remediation: "The clip's curve count exceeds the threshold. Reduce the number of animated curves.",
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
code: "duplicate_clip",
|
|
537
|
+
severity: "Warning",
|
|
538
|
+
fixIds: [],
|
|
539
|
+
fullScanOnly: true,
|
|
540
|
+
rootCause: "structural_complexity",
|
|
541
|
+
remediation: "Two or more clips are byte-identical duplicates. Consolidate them into one shared clip.",
|
|
542
|
+
},
|
|
543
|
+
];
|
|
544
|
+
const SHADER_ANALYSIS_ISSUES = [
|
|
545
|
+
{
|
|
546
|
+
code: "shader_compile_error",
|
|
547
|
+
severity: "Error",
|
|
548
|
+
fixIds: [],
|
|
549
|
+
rootCause: "build_blocker",
|
|
550
|
+
remediation: "The shader failed to compile and fell back to the error shader. Fix the compile error (check the Editor console for the shader error), or reassign materials using it.",
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
code: "missing_shader_asset",
|
|
554
|
+
severity: "Error",
|
|
555
|
+
fixIds: [],
|
|
556
|
+
rootCause: "resource_missing",
|
|
557
|
+
remediation: "The shader asset failed to load — it may be corrupted or removed. Restore the shader asset, or reassign materials using it.",
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
code: "variant_explosion",
|
|
561
|
+
severity: "Warning",
|
|
562
|
+
fixIds: [],
|
|
563
|
+
rootCause: "structural_complexity",
|
|
564
|
+
remediation: "The shader's estimated variant count (2^keywords × passes) exceeds the threshold. Reduce shader keywords or passes to shrink the variant space.",
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
code: "pass_count_exceeded",
|
|
568
|
+
severity: "Warning",
|
|
569
|
+
fixIds: [],
|
|
570
|
+
rootCause: "structural_complexity",
|
|
571
|
+
remediation: "The shader's pass count exceeds the threshold. Reduce the number of passes.",
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
code: "fallback_shader",
|
|
575
|
+
severity: "Warning",
|
|
576
|
+
fixIds: [],
|
|
577
|
+
rootCause: "configuration_mismatch",
|
|
578
|
+
remediation: "The shader declares a fallback. Confirm the fallback is intended; remove it if not.",
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
code: "expensive_feature_platform",
|
|
582
|
+
severity: "Warning",
|
|
583
|
+
fixIds: [],
|
|
584
|
+
rootCause: "configuration_mismatch",
|
|
585
|
+
remediation: "The shader uses keywords flagged expensive for the active platform profile (mobile). Remove or gate the expensive keywords for that profile.",
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
code: "platform_keyword_mismatch",
|
|
589
|
+
severity: "Warning",
|
|
590
|
+
fixIds: [],
|
|
591
|
+
rootCause: "configuration_mismatch",
|
|
592
|
+
remediation: "The shader's render pipeline does not match the active platform profile. Align the shader's pipeline with the target profile.",
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
code: "duplicate_keyword_profiles",
|
|
596
|
+
severity: "Warning",
|
|
597
|
+
fixIds: [],
|
|
598
|
+
fullScanOnly: true,
|
|
599
|
+
rootCause: "structural_complexity",
|
|
600
|
+
remediation: "Two or more materials share an identical keyword profile. Consolidate them into one material to reduce variant count.",
|
|
601
|
+
},
|
|
602
|
+
];
|
|
603
|
+
// ---------------------------------------------------------------------------
|
|
604
|
+
// Planned rules — mirror stubs in VerifyGateAdapter.SelectRuleIds
|
|
605
|
+
// ---------------------------------------------------------------------------
|
|
606
|
+
const PLANNED_RULES = [
|
|
159
607
|
{
|
|
160
608
|
id: "textures",
|
|
161
609
|
title: "Texture analysis",
|
|
@@ -178,17 +626,6 @@ const PLANNED_RULES = [
|
|
|
178
626
|
issues: [],
|
|
179
627
|
guidance: "Not yet ported. Inspect sprite importers via read_asset or execute_csharp.",
|
|
180
628
|
},
|
|
181
|
-
{
|
|
182
|
-
id: "animation_analysis",
|
|
183
|
-
title: "Animation analysis",
|
|
184
|
-
description: "Detects missing animation curves, broken animator transitions, and unused clips.",
|
|
185
|
-
applicableAssetKinds: ["animation"],
|
|
186
|
-
applicableExtensions: [".controller", ".anim"],
|
|
187
|
-
implemented: false,
|
|
188
|
-
status: "planned",
|
|
189
|
-
issues: [],
|
|
190
|
-
guidance: "Not yet ported. Use find_references to trace animator usage and read_asset to inspect clips.",
|
|
191
|
-
},
|
|
192
629
|
{
|
|
193
630
|
id: "audio_analysis",
|
|
194
631
|
title: "Audio analysis",
|
|
@@ -241,60 +678,168 @@ export const RULE_CATALOG = [
|
|
|
241
678
|
status: "implemented",
|
|
242
679
|
issues: DEPENDENCIES_ISSUES,
|
|
243
680
|
},
|
|
681
|
+
{
|
|
682
|
+
id: "offline_integrity",
|
|
683
|
+
title: "Offline project-wide integrity",
|
|
684
|
+
description: "Project-wide integrity signals computed offline (no running Editor): " +
|
|
685
|
+
"orphaned .meta files (companion asset deleted), duplicate GUIDs (two+ " +
|
|
686
|
+
"assets sharing one GUID), and the aggregated missing-reference / " +
|
|
687
|
+
"missing-script set across Assets/. Emitted by the offline integrity " +
|
|
688
|
+
"scanner — the offline seed for the structured verify rules. Per-asset " +
|
|
689
|
+
"variants of these codes surface on every read_asset call; this rule " +
|
|
690
|
+
"is the full-scan aggregator.",
|
|
691
|
+
applicableAssetKinds: ["prefab", "scene", "scriptable_object", "material", "animation", "meta"],
|
|
692
|
+
implemented: true,
|
|
693
|
+
status: "implemented",
|
|
694
|
+
issues: OFFLINE_INTEGRITY_ISSUES,
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
id: "asmdef_audit",
|
|
698
|
+
title: "Assembly definition audit",
|
|
699
|
+
description: "Validates assembly definition references, naming, and dependency " +
|
|
700
|
+
"graph health: broken references (GUID or bare-name that does not " +
|
|
701
|
+
"resolve to a compiled assembly), a missing required `name` field, " +
|
|
702
|
+
"malformed JSON, duplicate assembly names, circular references (DFS " +
|
|
703
|
+
"over the name-based reference graph), editor assemblies referenced " +
|
|
704
|
+
"from runtime, orphaned autoReferenced=false assemblies, platform-" +
|
|
705
|
+
"filter breadth/contradictions, and version-define package references.",
|
|
706
|
+
applicableAssetKinds: ["asmdef"],
|
|
707
|
+
applicableExtensions: [".asmdef", ".cs"],
|
|
708
|
+
implemented: true,
|
|
709
|
+
status: "implemented",
|
|
710
|
+
issues: ASMDEF_AUDIT_ISSUES,
|
|
711
|
+
},
|
|
712
|
+
{
|
|
713
|
+
id: "project_health",
|
|
714
|
+
title: "Project health",
|
|
715
|
+
description: "In-Editor project-wide health: orphaned .meta files (companion asset " +
|
|
716
|
+
"deleted), duplicate GUIDs (two+ assets sharing one GUID), " +
|
|
717
|
+
"ProjectSettings integrity (missing required settings files, no editor " +
|
|
718
|
+
"version), empty / meta-only folders, deep folder nesting, large " +
|
|
719
|
+
"folders, broken assets (failed to load), and empty scenes " +
|
|
720
|
+
"(rootCount == 0). Full-scan only — does not fire on a scoped " +
|
|
721
|
+
"validate_edit. The live counterpart of the offline_integrity aggregator.",
|
|
722
|
+
applicableAssetKinds: ["meta", "project_settings", "scene"],
|
|
723
|
+
implemented: true,
|
|
724
|
+
status: "implemented",
|
|
725
|
+
issues: PROJECT_HEALTH_ISSUES,
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
id: "materials",
|
|
729
|
+
title: "Material health",
|
|
730
|
+
description: "Load-time material reference and performance analysis: missing shader " +
|
|
731
|
+
"(null or InternalErrorShader — the original shader failed to compile " +
|
|
732
|
+
"or is missing), null / unity_builtin textures per shader property via " +
|
|
733
|
+
"ShaderUtil, builtin shaders, render-queue overrides, and (full-scan " +
|
|
734
|
+
"only) duplicate materials (SHA-256 fingerprint), unused materials, " +
|
|
735
|
+
"material-variant chains (broken parent, deep chain, heavy overrides " +
|
|
736
|
+
"via reflection), GPU instancing off, and SRP-batcher incompatibility.",
|
|
737
|
+
applicableAssetKinds: ["material"],
|
|
738
|
+
applicableExtensions: [".mat"],
|
|
739
|
+
implemented: true,
|
|
740
|
+
status: "implemented",
|
|
741
|
+
issues: MATERIALS_ISSUES,
|
|
742
|
+
},
|
|
743
|
+
{
|
|
744
|
+
id: "animation_analysis",
|
|
745
|
+
title: "Animation analysis",
|
|
746
|
+
description: "Animator controller and clip analysis via the live AnimatorController " +
|
|
747
|
+
"object: missing motion/clip on a state (missing_clip), empty clips " +
|
|
748
|
+
"(empty_clip — a .anim declaring no curves), unreachable states (BFS " +
|
|
749
|
+
"over the transition graph seeded from entry/default/any-state), " +
|
|
750
|
+
"state-machine complexity over threshold, AnyState transition overuse, " +
|
|
751
|
+
"parameter mismatches (regex-scan of MonoScripts referencing params not " +
|
|
752
|
+
"in the controller), expensive curve density/count (AnimationUtility), " +
|
|
753
|
+
"and (full-scan only) duplicate clips by byte-size match.",
|
|
754
|
+
applicableAssetKinds: ["animation"],
|
|
755
|
+
applicableExtensions: [".controller", ".anim"],
|
|
756
|
+
implemented: true,
|
|
757
|
+
status: "implemented",
|
|
758
|
+
issues: ANIMATION_ANALYSIS_ISSUES,
|
|
759
|
+
},
|
|
760
|
+
{
|
|
761
|
+
id: "shader_analysis",
|
|
762
|
+
title: "Shader analysis",
|
|
763
|
+
description: "Shader compile-state and variant analysis: error shaders " +
|
|
764
|
+
"(InternalErrorShader — shader_compile_error), .shader assets that " +
|
|
765
|
+
"fail to load (missing_shader_asset), variant-explosion estimation " +
|
|
766
|
+
"(2^keywords × passes over threshold), pass-count exceeded, fallback " +
|
|
767
|
+
"shaders (raw .shader source parse), render-pipeline / platform-profile " +
|
|
768
|
+
"mismatch, expensive per-platform keywords (mobile blocklist), and " +
|
|
769
|
+
"(full-scan only) duplicate keyword profiles across materials.",
|
|
770
|
+
applicableAssetKinds: ["shader"],
|
|
771
|
+
// .mat is listed because the gate pairs shader_analysis with materials for
|
|
772
|
+
// material edits (a broken material often points at a broken shader) and
|
|
773
|
+
// list_rules filters .mat to both rules.
|
|
774
|
+
applicableExtensions: [".shader", ".shadergraph", ".mat"],
|
|
775
|
+
implemented: true,
|
|
776
|
+
status: "implemented",
|
|
777
|
+
issues: SHADER_ANALYSIS_ISSUES,
|
|
778
|
+
},
|
|
244
779
|
...PLANNED_RULES,
|
|
245
780
|
];
|
|
246
781
|
// ---------------------------------------------------------------------------
|
|
247
|
-
//
|
|
248
|
-
// ---------------------------------------------------------------------------
|
|
782
|
+
// Fix capability entries.
|
|
249
783
|
//
|
|
250
|
-
//
|
|
251
|
-
//
|
|
252
|
-
// which
|
|
253
|
-
//
|
|
784
|
+
// All four remainder fix providers shipped in M25 Plan 2 as real C#
|
|
785
|
+
// IFixProvider implementations (registered in the verify package's
|
|
786
|
+
// FixProviderRegistry, which apply_fix — bridge-routed — dispatches to):
|
|
787
|
+
// - remove_orphan_meta (safe): deletes a detached .meta. Producers:
|
|
788
|
+
// offline_integrity + project_health (orphan_meta).
|
|
789
|
+
// - fix_duplicate_guid (unsafe): regenerates a colliding GUID. Producers:
|
|
790
|
+
// offline_integrity + project_health (duplicate_guid).
|
|
791
|
+
// - reassign_missing_texture (unsafe, judgment): requires target_texture.
|
|
792
|
+
// Producer: materials (missing_texture).
|
|
793
|
+
// - reassign_missing_shader (unsafe, judgment): requires target_shader.
|
|
794
|
+
// Producer: materials (missing_shader).
|
|
795
|
+
// M25 Plan 2 also added safe auto-fix rollback: a non-dry-run apply_fix that
|
|
796
|
+
// fails or introduces new errors under enforce is restored to its pre-fix
|
|
797
|
+
// state and the response carries a top-level `rollback` block.
|
|
798
|
+
// ---------------------------------------------------------------------------
|
|
254
799
|
const PLANNED_FIXES = [
|
|
255
800
|
{
|
|
256
801
|
id: "remove_orphan_meta",
|
|
257
|
-
implemented:
|
|
258
|
-
status: "
|
|
259
|
-
rules: [],
|
|
260
|
-
issueCodes: [],
|
|
802
|
+
implemented: true,
|
|
803
|
+
status: "implemented",
|
|
804
|
+
rules: ["offline_integrity", "project_health"],
|
|
805
|
+
issueCodes: ["orphan_meta"],
|
|
806
|
+
// Deletes an orphaned .meta file (no companion asset). No asset data is
|
|
807
|
+
// lost — the .meta is already detached. Safe to auto-suggest.
|
|
261
808
|
safe: true,
|
|
262
|
-
guidance: "Not yet ported. No rule emits an orphan_meta issue today. " +
|
|
263
|
-
"Find .meta files whose asset was deleted manually via find_members or " +
|
|
264
|
-
"AssetDatabase and delete them with execute_csharp in the meantime.",
|
|
265
809
|
},
|
|
266
810
|
{
|
|
267
811
|
id: "fix_duplicate_guid",
|
|
268
|
-
implemented:
|
|
269
|
-
status: "
|
|
270
|
-
rules: [],
|
|
271
|
-
issueCodes: [],
|
|
812
|
+
implemented: true,
|
|
813
|
+
status: "implemented",
|
|
814
|
+
rules: ["offline_integrity", "project_health"],
|
|
815
|
+
issueCodes: ["duplicate_guid"],
|
|
816
|
+
// Regenerating a GUID silently rewires the asset graph; never auto-applied
|
|
817
|
+
// under enforce. Apply via apply_fix with the target path picked
|
|
818
|
+
// deliberately (the less-referenced asset is usually the right one to
|
|
819
|
+
// re-GUID, but that judgement is the operator's).
|
|
272
820
|
safe: false,
|
|
273
|
-
guidance: "Not yet ported. No rule emits a duplicate_guid issue today. " +
|
|
274
|
-
"Inspect .meta files manually (or via execute_csharp) and regenerate the " +
|
|
275
|
-
"duplicated GUID on the less-referenced asset, then update references.",
|
|
276
821
|
},
|
|
277
822
|
{
|
|
278
823
|
id: "reassign_missing_texture",
|
|
279
|
-
implemented:
|
|
280
|
-
status: "
|
|
824
|
+
implemented: true,
|
|
825
|
+
status: "implemented",
|
|
281
826
|
rules: ["materials"],
|
|
282
|
-
issueCodes: [],
|
|
827
|
+
issueCodes: ["missing_texture"],
|
|
828
|
+
// Reassigns a texture to the material's null texture slot(s). A wrong
|
|
829
|
+
// texture silently changes the material's appearance; never auto-applied.
|
|
830
|
+
// Apply via apply_fix with target_texture (asset path or GUID).
|
|
283
831
|
safe: false,
|
|
284
|
-
guidance: "Not yet ported — depends on the `materials` rule (deferred to M17). " +
|
|
285
|
-
"Use read_asset on the .mat file and execute_csharp to reassign the " +
|
|
286
|
-
"_MainTex / texture properties in the meantime.",
|
|
287
832
|
},
|
|
288
833
|
{
|
|
289
834
|
id: "reassign_missing_shader",
|
|
290
|
-
implemented:
|
|
291
|
-
status: "
|
|
835
|
+
implemented: true,
|
|
836
|
+
status: "implemented",
|
|
292
837
|
rules: ["materials"],
|
|
293
|
-
issueCodes: [],
|
|
838
|
+
issueCodes: ["missing_shader"],
|
|
839
|
+
// Reassigns a shader to a material whose shader is null / the error
|
|
840
|
+
// shader. A wrong shader silently changes rendering; never auto-applied.
|
|
841
|
+
// Apply via apply_fix with target_shader (shader name or asset path).
|
|
294
842
|
safe: false,
|
|
295
|
-
guidance: "Not yet ported — depends on the `materials` rule (deferred to M17). " +
|
|
296
|
-
"Use find_references to locate the intended shader and execute_csharp " +
|
|
297
|
-
"to reassign m_Shader on the material in the meantime.",
|
|
298
843
|
},
|
|
299
844
|
];
|
|
300
845
|
export const FIX_CATALOG = [
|