From claude-plugins-validation
Convert a non-CPV marketplace between Layout A (hub-and-spoke), Layout B (nested-with-discipline), and Layout C (marketplace-in-plugin self-referential). Use when migrating marketplace architecture. Loaded by marketplace-fixer agent.
npx claudepluginhub emasoft/emasoft-plugins --plugin claude-plugins-validationThis skill is limited to using the following tools:
Converts a non-CPV marketplace into one of three CPV layouts: A (hub-and-spoke), B (nested single-repo), or C (marketplace-in-plugin self-referential). Preserves per-plugin git history and logs every decision.
Suggests manual /compact at logical task boundaries in long Claude Code sessions and multi-phase tasks to avoid arbitrary auto-compaction losses.
Share bugs, ideas, or general feedback.
Converts a non-CPV marketplace into one of three CPV layouts: A (hub-and-spoke), B (nested single-repo), or C (marketplace-in-plugin self-referential). Preserves per-plugin git history and logs every decision.
gh authenticated (BLOCKER for Layout A); git >= 2.34 (for subtree split); clean working tree; uv on PATHArchitectural migration with AskUserQuestion interaction. Loaded only on an architecture finding or explicit user request.
setup-marketplace-auto-notification. B and C tag atomically.validate_marketplace.py --strict and validate_plugin.py --strict.Copy this checklist and track your progress:
validate_marketplace.py --strict passespublish.py, cliff.toml, CI, CHANGELOG.md, atomic commit tagged.source: "./"), name+version aligned, publish.py bumps both atomically.$MAIN_ROOT/reports/migrate-marketplace-architecture/<ts±tz>-<slug>.md| Error | Resolution |
|---|---|
gh auth status fails | BLOCKER (Layout A) — gh auth login, re-audit |
| Working tree dirty | BLOCKER — commit or stash, re-audit |
| Name collision on GitHub | AskUserQuestion: rename, skip, or abort |
| User cancels mid-flow | Write partial log, exit cleanly |
| Validation INVALID | Fix each finding, re-run the validator |
Never force-push or rewrite history. Forward-only commits.
Input: 5 nested plugins, no git tags, mixed authors. Output (A): 5 standalone repos + cleaned marketplace + notify chains. Output (B): Same repo with CPV discipline files and consolidated authors. Output (C): Single-plugin repo gains marketplace.json self-entry, version-synced.
Working Tree Cleanliness · Plugin Inventory Collection · Plugin Manifest Validation · Already-Migrated Detection · Name Collision Detection · Disk Space Check · GitHub Auth Check · MARKETPLACE_PAT Env Check · Audit Report Format
Purpose · Target layout selection · GitHub owner and visibility (Layout A only) · Primary author consolidation (Layout B only) · Per-plugin metadata · Guest contributor handling · Final confirmation
Pre-Flight Checks · Per-Plugin Subtree Split · Per-Plugin Repo Creation · CPV Canonicalization · Per-Plugin Tagging · Per-Plugin Auto-Notify Setup · Marketplace.json Rewrite · Cleanup Commit · Verification · Rollback Recipe
Pre-Flight Checks · Scaffold publish.py · Scaffold cliff.toml · Scaffold validate.yml · Generate CHANGELOG.md · Consolidate Authorship · Why Layout B Does Not Need Auto-Notification · Preserve Guest Contributors · Single Atomic Commit · Tag the Marketplace · Verification · Rollback Recipe
When to migrate to C · Pre-Flight Checks · Migration paths (plugin-only or marketplace-only starting state) · Self-entry construction and version sync · publish.py and atomic commit · Verification and Rollback
setup-marketplace-auto-notification