name: "release-checklist" description: "Pre-flight checklist before tagging a WP Project Manager release. Verifies version bumps, build, lint, POT regeneration, dist contents, changelog, readme stable tag, and Pro/Free compatibility. TRIGGER when the user says 'release', 'cut a release', 'ship it', 'prepare release', invokes /release-checklist, or mentions bumping the plugin version. Do NOT trigger for development builds."
Release Checklist
Run BEFORE any tag/push. Stop at the first failure.
1. Version sync
The version must match in ALL of these:
cpm.phpplugin headerVersion: X.Y.Zcpm.phpconstantdefine('PM_VERSION', 'X.Y.Z')package.json"version": "X.Y.Z"readme.txtStable tag: X.Y.Z
grep -n "Version:" cpm.php
grep -n "PM_VERSION" cpm.php
grep -n "\"version\":" package.json
grep -n "Stable tag" readme.txt
2. Changelog
changelog.txt(top-level) has an entry for the new version dated today.readme.txt== Changelog ==section mirrors it.- Entries describe user-visible changes, not internal refactors.
3. Lint clean
pnpm lint
vendor/bin/phpcs
Both must exit 0. Fix or document any new warnings.
4. Tests
vendor/bin/codecept run unit
vendor/bin/codecept run functional
cd tests/e2e-playwright && npx playwright test
Failures block release. Document any intentional skip in the PR / changelog.
5. i18n
pnpm makepot
languages/wedevs-project-manager.potupdated.- No fuzzy entries leaked (commit
806fad1areference). .pofiles for shipped locales re-built (msgfmt/wp i18n make-jsonif applicable).
6. Build
pnpm build
- Exits clean.
views/assets/dist/pm.jsandpm.cssregenerated.- No source maps in production (
.gitignoreexcludes*.map). - Bundle size sanity check — flag if
pm.jsjumped by >20% vs previous release.
7. Distignore audit
cat .distignore
Verify dev-only paths are excluded:
node_modules/,vendor/(dev deps),tests/,phpcs-xml/,composer-scripts/.github/,.claude/,CLAUDE.md,CLAUDE.local.md.example.editorconfig,.eslintrc*,.env*package.json,pnpm-lock.yaml,composer.json(or whitelisted as needed)Gruntfile.js,webpack.config.js,tailwind.config.js,postcss.config.js,jsconfig.json
If .claude/ or CLAUDE.md is NOT in .distignore, ADD them before release.
8. Free / Pro compatibility
window.PMcontract inviews/assets/src/index.jsxis BACKWARD-COMPATIBLE vs the previous release. Diff vs last tag:git diff <last-tag> -- views/assets/src/index.jsx | grep -E "(registerSlot|registerFilter|injectReducer|window\.PM)"- New fields are additive only. Renames or removals require coordinating with Pro repo (
../pm-pro/).
9. Smoke test
- Build zip via
pnpm release(Grunt). - Install on a clean WP:
- Plugin activates without notice
- Project Manager → Projects page renders
- Create a project → create a task → comment → all CRUD works
- With Pro installed alongside: Pro tabs/slots still load
- Check
error_logafter smoke test — no warnings/notices.
10. Tag + push
Only after all checks pass AND user explicitly approves:
git tag vX.Y.Z
# DO NOT auto-push. Wait for user.
User runs git push origin vX.Y.Z themselves (pushes are denied in .claude/settings.json).
11. wp.org SVN
.github/workflows/assets-deploy.ymlpushes.wordpress-org/assets on push tomaster.- The plugin code release to SVN trunk is a separate manual step — confirm with team.
Stop signals
- Any test failing
- Lint errors
pnpm buildwarning about React/Redux duplicatesvendor/bin/phpcsreporting NEW violations vs last tag- Bundle size +20% vs last tag
window.PMshape regression