The validation logic lives inline in a heredoc inside .github/workflows/validate.yml. There is no package.json and no scripts/ directory, so:
Scope
- Move the logic to
scripts/validate.py (or .mjs), unchanged in behaviour.
validate.yml becomes a thin wrapper that runs it.
- Document the local command in CONTRIBUTING.md, in the section that already tells contributors what fields are required.
Note for whoever picks this up
The library-in-code_libraries[] check applies to showpiece[] only. fallback_basic entries point at shadcn and tremor, which are intentionally not code_libraries entries; applying the check to both arrays fails CI on valid data.
The validation logic lives inline in a heredoc inside
.github/workflows/validate.yml. There is nopackage.jsonand noscripts/directory, so:components.jsoncannot check it before pushing; the only feedback loop is opening a PR and waiting for CI.librarymembership incode_libraries[]), and verifying they actually fire meant hand-extracting the heredoc into a temp file and running it against a deliberately broken copy of the JSON.Scope
scripts/validate.py(or.mjs), unchanged in behaviour.validate.ymlbecomes a thin wrapper that runs it.Note for whoever picks this up
The
library-in-code_libraries[]check applies toshowpiece[]only.fallback_basicentries point atshadcnandtremor, which are intentionally notcode_librariesentries; applying the check to both arrays fails CI on valid data.