Contributing to the DSH Plugin Standard
August 19, 2026 · View on GitHub
Thanks for helping make DSH plugins high-quality for everyone. This standard is only as good as the rules it actually enforces.
Ground rules
- Every rule ships with its checker. A new MUST clause MUST include a matching check in
scripts/verify-plugin.mjsand a fixture that exercises it. "Rule without a checker" is not accepted. - MUST changes are breaking. Changing a MUST/MUST-NOT clause is a MAJOR semver bump and requires a migration note in
CHANGELOG.md. - Evidence over opinion. Cite the real failure (bug report, plugin incident, review finding) that motivates a new rule.
- Keep it enforceable. If a rule can't be statically checked and is hard to review by hand, reconsider it or split it.
How to propose a change
Option A — open an issue
Describe:
- the problem (concrete incident or gap),
- the proposed clause (exact wording, with MUST/SHOULD/MAY),
- how it should be checked.
Option B — open a pull request
- Fork and create a branch.
- Edit the spec text in BOTH
STANDARD.md(Chinese) andSTANDARD.en.md(English). - Add/extend the checker in
scripts/verify-plugin.mjs. - Add fixtures under
test/fixtures/(anokcase and abadcase) and a test intest/run.mjs. - Run
npm test— all fixtures must pass. - Bump the version in
package.json, the spec tables, and the checker's--versionoutput. - Update
CHANGELOG.md.
Local development
npm install # no runtime deps; only for running tests
npm test # runs test/run.mjs against fixtures
node scripts/verify-plugin.mjs /path/to/your/plugin
Review checklist for a spec PR
- Both language versions updated identically
- New MUST clauses have executable checks +
ok/badfixtures - Version bumped consistently (package.json, spec table, checker
--version) - Changelog updated
- Existing plugin corpus re-checked: no false positives introduced on known-compliant plugins