Ship checklist
August 8, 2026 · View on GitHub
Run before publishing a PWV plugin or cutting a release. Each item is a real failure that has happened, not a style preference.
Separation
- Nothing is written into
${CLAUDE_PLUGIN_ROOT}at run time - No credential values in the plugin repo, the template repo, or any committed file
- No personal defaults — GitHub username, absolute home paths, machine names — in either public repo
- The template's blank data files are actually blank: header-only CSVs, unfilled forms, no leftover answers from testing in the template checkout
- MCP servers declare
${ENV_VAR}indirection rather than embedded URLs or keys
Template repo
- Marked as a template repository in GitHub settings — without this,
gh repo create --templatefails - Clones and runs standalone with the plugin uninstalled
- Carries its own
AGENTS.mdand method docs, so an instance explains itself - Its README describes the template; the workspace-creating skill replaces it in each instance
Plugin
-
plugin.jsonparses;namematches the marketplace entry - Every skill's frontmatter
namematches its directory name - Every skill and command has a
descriptionthat says when to use it, not only what it does - Version bumped, including for changes that only touched vendored files
- Plugin-owned skills are in a list, not hardcoded per call site
Sync
-
--checkpasses - Vendored copies are byte-identical to the template
- Sync works from a local checkout and from a clean clone of the upstream
- It refuses, rather than warns, if the template's data files carry rows
Vault
- A first run works with no vault present
- Nothing is written to the vault unprompted
- The path is stated when something is written there
- The
templateoverride is honoured, so a fork wins over the author's default - Merge rules for shipped-vs-user data state conflict, list and freshness behaviour
- Credentials are pointers only
Workspace creation
- Confirms before creating, showing the exact command
- Defaults to private, and states what the repo will hold
- Writes the marker file with
template,template_versionandbacking - Finds an existing workspace by searching upward for the marker, not by assuming the enclosing git repo
- Falls back to a local scaffold when
ghis unavailable, and says what was lost - Idempotent: re-running never overwrites a file that already has content
Before announcing
- Installed from the marketplace on a machine that is not the author's, or with the vault temporarily moved aside
- One full workspace created, used, and re-opened in a fresh session
-
/plugin updatesimulated — reinstall over the top — and nothing was lost