Skip to content

Static Checks

m4bwav edited this page Oct 28, 2026 · 1 revision

minewright-checks checks a Bedrock add-on without the game before the agent says a change is done. Its outcome: a change is reported done only with a passing mw_check.py report, or with the failing checks named and fixed, and each claim in the reply points at a check that ran.

Files: skills/minewright-checks/SKILL.md, scripts/mw_check.py (standard-library Python 3.9+) and scripts/mw_mct.py. Tier moderate. The script's options and real output on the example add-on are on Checks and the BDS harness.

What the agent does

  1. Builds the TypeScript first, or the manifest check fails on a missing script entry.
  2. Runs python <skill>/scripts/mw_check.py <project> from any folder.
  3. Reads the JSON, fixes what failed, and runs it again until ok is true.
  4. Quotes the summary (pass, fail and skip counts) in the reply. A skip is not a pass: the reply says which checks were skipped and why.

The checks

Check Catches Notes
json a file the game would refuse to load // and /* */ comments are stripped first, as Bedrock tolerates them; trailing commas are still an error
manifest format_version not 2, bad or duplicate UUIDs, version arrays, missing min_engine_version, an unknown module type, a missing script entry, a pack depending on itself warns on a -beta module and on a pack dependency that is not in the project
identifiers an entity with no client entity (invisible in game), a texture path with no .png or .tga, a geometry id no model defines, a render controller that does not exist warns when more than one namespace is used, or a namespace has dots or capitals
components a behavior entity using a component its format_version no longer accepts (minecraft:pushable from 1.26.10) the whole entity then fails to load, silently in the game
typescript type errors npx --no-install tsc --noEmit
lint ESLint findings when an eslint.config.* or .eslintrc* exists
mct Creator Tools' rule set opt-in: --mct, --mct-npx or --mct-bin PATH
test unit test failures npm test, when package.json has a real test script

Node tools run with npx --no-install from the project folder, so nothing is downloaded. A tool that is not installed becomes a skip with its reason (node_modules missing; run npm ci (or npm install) first).

Creator Tools, opt-in

Mojang's validator (@minecraft/creator-tools, Node 22+) runs only when asked:

  • --mct uses mct from the project's node_modules or from PATH;
  • --mct-npx runs npx -y @minecraft/creator-tools@0.20.0, which downloads about 160 MB once, so the skill asks first;
  • --mct-bin PATH names the executable.

The script copies only the pack folders into a temporary behavior_packs/ and resource_packs/ layout and validates that. Run on a project folder, mct reports art, workflows and configs as errors. Three known false positives of 0.20.0 go to a separate noise list: "uv_anim is missing" on render controllers, FORMATVER asking client entities for 1.26.50, and UNLINK on vanilla textures in UI files.

The README records that the example passes all eight checks with --mct-npx. This wiki did not re-run Creator Tools: the run on Checks and the BDS harness shows mct as a skip.

The verification ladder

The skill climbs only as far as the change needs, and says which rung it reached:

  1. Static: mw_check.py, for any pack or script change.
  2. Unit tests of the pure core with node --test.
  3. Creator Tools validation (--mct), before a release.
  4. A real server: bds_run.py loads the packs on Bedrock Dedicated Server and runs the self-test (Live server tests). A wrong module version or a runtime error shows up here and nowhere earlier.
  5. A human playtest in the game. The reply says when one is still owed.

Pitfalls the skill names

  • A clean static check does not prove the scripts load. The example's unbuilt run on Checks and the BDS harness shows the difference: mw_check.py fails on the missing entry, and the server says does not contain main file [main.js].
  • An entity with no client entity spawns invisible, with no error in the game.
  • Texture paths in client entities have no extension and are relative to the resource pack root.
  • Vanilla render controllers (controller.render.default) are not in the project; the check allows the common ones and warns on others.
  • Texture paths that scripts send to the HUD are invisible to every check here. The example pins them with a unit test against a saved list from item_texture.json (HUD and UI).

Clone this wiki locally