substrate validate to lint your boards, members, and policies without starting a server or touching the database. Errors exit non-zero with a message naming the file and how to fix it. Warnings are advisory and exit 0. The command is designed to be dropped directly into a CI pipeline.
Usage
What It Catches
Errors — exit non-zero
These are anything that would cause a load to fail:- Malformed JSON
- A board that doesn’t match the schema
- A policy definition that doesn’t parse against its type
- A
from_grouporto_groupthat resolves to no group - An enum field with no values
- Duplicate ids
Warnings — advisory, exit 0
- A guard whose
from_groupequals itsto_group(can never fire on a real move) - A
team[].memberwith no registry file - A binding
groupsid that is not a group on the board - A duplicate member id, or a malformed member file (warned and skipped)