Contributing and the devcontainer
This repo follows the same house conventions as patterson-corp: conventional
commits, no emoji on brand surfaces, [TBD: …] instead of an invented answer,
kebab-case naming.
The two invariants that don’t auto-enforce
Section titled “The two invariants that don’t auto-enforce”claude plugin validate . checks manifests — names, versions, frontmatter —
not snapshot hygiene. Nothing in CI catches either of these on its own:
- Never flatten, rename, or move a file inside any
ds/. Eachds/mirrors the design-system source tree; files reference each other with relative paths that must resolve identically in this repo, in the plugin cache, and after being copied into a consuming project. Ship a raster asset only into theds/of plugins whose templates actually reference it — don’t copy it in “just in case.” - Dual version source of truth. Any content change bumps
versionin bothplugins/<name>/.claude-plugin/plugin.jsonand the matching entry in.claude-plugin/marketplace.json, kept equal.
Before opening a PR
Section titled “Before opening a PR”claude plugin validate . # manifests, skills, commands, agentssh tests/run-tests.sh # the zero-dependency validation suiteThe devcontainer
Section titled “The devcontainer”The repo ships a devcontainer named Patterson Design — Agent Workbench,
built on mcr.microsoft.com/devcontainers/javascript-node:24-bookworm with
the Git, GitHub CLI, and Claude Code devcontainer features layered in.
onCreateCommand runs .devcontainer/setup.sh; postAttachCommand runs
.devcontainer/welcome.sh. Port 3000 forwards automatically and opens a
preview — that’s the marketplace docs and demo gallery served with
npx --yes serve -l 3000 ., no build step required for the repo’s own static
pages.
Minimum host requirements are 2 CPUs and 4 GB of memory. VS Code customizations install the Claude Code, GitHub Copilot, and GitHub Actions extensions, plus Live Server and the YAML and EditorConfig extensions for editing manifests.
Local smoke test
Section titled “Local smoke test”claude/plugin marketplace add ./plugin install patterson-brand@patterson-design # foundation first/plugin install patterson-deck@patterson-design/patterson-deck:new-deck Q3 dental equipment business reviewThe marketplace suffix is @patterson-design, taken from marketplace.json’s
name field — independent of whatever the repo folder is called on disk.