Repository navigation
Tests check the manifests' wiring, and CI runs weekly - #4
Conversation
claude plugin validate --strict passes a monitors.json that is not JSON and a hook that runs a subcommand mailbox.py does not have. test_manifests.py parses every JSON manifest and checks each hook and monitor command against the subcommands the script dispatches on. CI also runs every Monday, since the validate job takes the latest Claude Code. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Reviewed at f22a470. I read the full files: tests/test_manifests.py, .github/workflows/ci.yml, CONTRIBUTING.md, scripts/mailbox.py, hooks/hooks.json, monitors/monitors.json, .gitignore.
I traced the CALL regex against every command string in both manifests — it correctly captures scripts/mailbox.py and each subcommand. I verified the command == "([\w-]+)" regex extracts all 9 dispatched commands from mailbox.py's main(), and every hook/monitor subcommand (session-start, session-end, prompt, tool-done, waiting, stop, watch) is present in that set. I confirmed the recursive commands() walker correctly traverses both manifest structures. The rglob("*.json") + assertGreaterEqual(len(found), 4) check matches the repo's 4 tracked JSON files. The CI schedule cron is valid and the CONTRIBUTING.md addition is accurate.
Confidence: 85/100 — all code paths verified against actual file contents; the test logic is sound and the CI change is straightforward.
There are no review comments to provide on this diff.
What changes
claude plugin validate --strict(thevalidateCI job) passes two broken states: amonitors/monitors.jsonthat is not JSON, and a hook inhooks/hooks.jsonthat runs a subcommandscripts/mailbox.pydoes not have. Both were reproduced on a copy of the repository (validate exited 0 for the marketplace and forplugin.json).tests/test_manifests.py(stdlib only, runs in the existingtestjobs):*.jsonmanifest parses (at least four are found);commandinhooks/hooks.jsonandmonitors/monitors.jsonruns a script under${CLAUDE_PLUGIN_ROOT}that exists, with a subcommand thatmailbox.py'smain()dispatches on (command == "...").validatejob installs the latest Claude Code, whose checks can tighten with no commit here.No change to the plugin's behaviour.
Checks
python3 -m unittest discover -s tests: 20 OK locally (macOS).monitors.jsonand the hook runningnosuch.claude plugin validate --strict .: passed.🤖 Generated with Claude Code