generators → tracked artifacts → mkdocs + explorer → deploy
Every generator imports getInventory() from scripts/lib/skill-inventory.js,
which reads .claude-plugin/marketplace.json's plugins[] list, parses each
skill's SKILL.md YAML frontmatter, and derives per-skill "last updated" dates from one
batched git log pass. No generator re-walks the filesystem or re-implements discovery.
graph LR MP["marketplace.json
+ SKILL.md frontmatter
+ git log"] INV["skill-inventory.js
getInventory()"] subgraph GEN["1 · GENERATORS"] G1["generate-division-pages.js
9 division pages"] G2["generate-skill-reference.js"] G3["generate-capabilities-index.py"] G4["generate-explorer-data.js"] end subgraph ART["2 · TRACKED ARTIFACTS · committed to git"] A1["docs/wiki/workflows/*.md
docs/wiki/learn/*.md"] A2["docs/wiki/reference/
skill-reference.md"] A3["docs/wiki/reference/
capabilities-index.md"] A4["apps/explorer/public/
explorer-data.json"] end subgraph BUILD["3 · BUILD"] MK["mkdocs build --strict
docs/wiki → site/"] VITE["vite build
apps/explorer → site/explorer"] end DEP["deploy: site/ → Cloudflare Pages"] MP --> INV INV --> G1 & G2 & G3 & G4 G1 --> A1 G2 --> A2 G3 --> A3 G4 --> A4 A1 --> MK A2 --> MK A3 --> MK A4 --> VITE MK --> DEP VITE --> DEP class G1,G2,G3,G4 gen; class A1,A2,A3,A4 art; class MK,VITE,DEP build;
scripts/build-docs.sh [--with-app] runs steps 1–5 unconditionally; the Explorer Vite
build (apps/explorer, npm install && npm run build) only runs with
--with-app, matching the split between the CI check-docs gate (docs-only) and deploy-docs
(which also builds and copies the Explorer app).
| Generator | Runtime | Output |
|---|---|---|
scripts/generate-division-pages.js | Node (ESM) | 9 division pages under docs/wiki/workflows/*.md / learn/*.md |
scripts/generate-skill-reference.js | Node (ESM) | docs/wiki/reference/skill-reference.md |
scripts/generate-capabilities-index.py | Python 3.12 | docs/wiki/reference/capabilities-index.md |
apps/explorer/scripts/generate-explorer-data.js | Node (ESM) | apps/explorer/public/explorer-data.json |
explorer-data.json are
committed to git — CI's check-docs.yml re-runs all four generators, then fails the PR with
git diff --exit-code if the working tree differs from what's checked in
("Generated artifacts out of sync. Run scripts/build-docs.sh and commit."). The pipeline never trusts a
generator's output implicitly; it verifies the artifact was regenerated and committed by a human.