boilerplate-update
Boilerplate Update Skill
Update WordPress plugins to the latest plugin-boilerplate features.
User Confirmation Rules
ASK for confirmation before:
- Replacing or significantly restructuring files (Loader.php, main plugin class)
- Changing build tools or asset pipeline
- Modifying CI/CD workflows
- Adding new architectural patterns (Abilities API, Blocks)
- Deleting resources belonging to plugin features
Proceed without confirmation for:
- Updating dependency versions
- Adding/renaming scripts with equivalent functionality
- Syncing QA config files
- Copying .opencode commands and .agents/skills
Identity Replacement Script
Use scripts/boilerplate-replace.php (bundled with this skill) for deterministic
placeholder replacement. This avoids manual AI search-and-replace across copied
upstream files.
Determine the target plugin identity
Before running the script, read these sources from the target plugin to determine the three required parameters:
- plugin-name —
Plugin Name:header in the main plugin PHP file (the root.phpfile containing@wordpress-pluginheaders) - plugin-text-domain —
Text Domain:header in the same file - plugin-namespace — the PSR-4 namespace mapped to
src/incomposer.json(autoload.psr-4), or thenamespacedeclaration insrc/*.phpfiles
Apply replacements on the cloned boilerplate
Run the script against the cloned boilerplate directory so every file in the reference copy already carries the target plugin's identity before you compare or copy anything:
php tmp/boilerplate-ref/.agents/skills/boilerplate-update/scripts/boilerplate-replace.php \
--path tmp/boilerplate-ref \
--plugin-name "My Awesome Plugin" \
--plugin-namespace "My_Awesome_Plugin" \
--plugin-text-domain "my-awesome-plugin" \
--cleanup-setup
This does three things in one pass:
- Replaces all boilerplate placeholders (
demo-plugin,Demo_Plugin, etc.) - Strips all
BOILERPLATE-DOCSmarker sections - Removes setup-only artifacts (
setup.php,src/Cli/Setup.php, composer autoload/hook entries)
After this step every diff between tmp/boilerplate-ref/ and the target plugin
shows only real upstream changes -- no placeholder noise and no setup-only files.
Workflow
- Clone fresh boilerplate for comparison:
git clone --depth 1 https://github.com/JUVOJustin/wordpress-plugin-boilerplate.git ./tmp/boilerplate-ref - Determine target plugin identity (see above).
- Run the replacement script on
tmp/boilerplate-refwith--cleanup-setup(see above). - Use one subtask/subagent per key area. Delegate comparison using
diffagainsttmp/boilerplate-ref/. - Present findings to user, categorized by confirmation requirement.
- Apply changes incrementally.
- Cleanup:
rm -rf tmp/boilerplate-ref
Documentation Reference
The boilerplate includes detailed docs at tmp/boilerplate-ref/docs/:
| File | Covers |
|---|---|
abilities.mdx |
Abilities API interfaces, category/ability creation, Loader registration |
bundeling.mdx |
wp-scripts bundling, entry points, asset enqueueing, localization |
i18n.mdx |
Translation workflow, extract/compile scripts, JSON translations, caveats |
create-blocks.mdx |
Block scaffolding, auto-registration via manifest, editor style sharing |
wp-env.mdx |
Docker-based dev environment, script structure, CI/CD usage |
acf-json-sync.mdx |
ACF field group JSON storage patterns |
work-with-ai.mdx |
AI integration: commands, skills, AGENTS.md, WordPress agent skills |
documentation.mdx |
Documentation structure, front matter metadata, heading rules |
Read these docs for implementation details. This skill only provides high-level guidance.
Key Areas to Compare
1. PHP (composer.json & QA)
Compare: diff composer.json tmp/boilerplate-ref/composer.json
See docs for details: i18n.mdx, bundeling.mdx
Key items:
wp-cli/i18n-command- Translation extraction/compilation- Scripts:
i18n:extract,i18n:compile,phpstan,phpcs,phpcbf - Strauss config in
extra.straussfor namespace prefixing - QA config files:
phpcs.xml,phpstan.neon
2. JS & Bundling (package.json, webpack.config.js)
Compare:
diff package.json tmp/boilerplate-ref/package.jsondiff webpack.config.js tmp/boilerplate-ref/webpack.config.js
See docs for details: bundeling.mdx, wp-env.mdx, create-blocks.mdx
Key items:
@wordpress/scripts- Bundling, linting, formatting@wordpress/env- Containerized WordPress for dev/CI- Scripts:
start,build(with--blocks-manifest),lint:*,format,create-block,env:* - QA config:
.eslintrc
3. GitHub Actions (.github/workflows/)
Compare: diff -r .github/workflows tmp/boilerplate-ref/.github/workflows
setup.yml- Reusable workflow with dependency cachingtest-analyse.yml- PHPStan, PHPCS, JS linting on pushdeploy.yml- Release automation, translation compilation via wp-env
4. Loader.php
Compare: diff src/Loader.php tmp/boilerplate-ref/src/Loader.php
New methods:
add_shortcode($tag, $component, $callback)add_cli($name, $instance, $args)add_ability($ability_class)- Categories auto-register
5. Main Plugin Class
Compare: diff src/*.php tmp/boilerplate-ref/src/Demo_Plugin.php
New patterns:
enqueue_entrypoint($entry)- Seetmp/boilerplate-ref/docs/bundeling.mdxregister_blocks()- Seetmp/boilerplate-ref/docs/create-blocks.mdx
6. i18n Workflow
Scripts: i18n:extract (creates .pot, updates .po) and i18n:compile (generates .mo, .json, .php)
See tmp/boilerplate-ref/docs/i18n.mdx for workflow, caveats, and AI command.
7. Abilities API (WordPress 6.9+)
See tmp/boilerplate-ref/docs/abilities.mdx for interface reference and examples.
Key pattern: $this->loader->add_ability(Abilities\My_Ability::class)
8. Agent Configuration
Compare:
diff -r .opencode/command tmp/boilerplate-ref/.opencode/commanddiff -r .agents/skills tmp/boilerplate-ref/.agents/skills
See tmp/boilerplate-ref/docs/work-with-ai.mdx for AI integration details.
Sync strategy:
- Add new items from upstream
- Update existing (ask user if diff is significant)
- Ask user before removing local-only items
- Adapt text domain and paths after copying
- Remove redundant skills/commands if upstream now includes them or they are possibly renamed
9. File Control files
Compare:
diff .distignore tmp/boilerplate-ref/.distignorediff .gitignore tmp/boilerplate-ref/.gitignore
Verification
- Ran
composer install && npm installafter changes - Ran
npm run buildafter changes - Ran
composer phpstan && composer phpcsafter changes - Ran
npm run lint:js && npm run lint:styleafter changes - Test plugin functionality