Blueprint Migration Expert skill for migrating blueprint structures between format versions. This skill is triggered by and handles version-specific migration logic. When to Use This Skill | Use this skill when... | Use blueprint-upgrade instead when... | |---|---| | You need version-specific migration logic (v3.0→v3.1, v3.2→v3.3, etc.) | You're invoking the user-facing upgrade workflow with prompts | | You need content hashing to detect manual modifications during migration | You want the high-level "upgrade my blueprint" entry point | | You're implementing a new migration step between forma…

\\\n | wc -l)\n```\n\n- If `ancestor_root` is set → **child** role (ask user to confirm).\n- Else if `descendant_count > 0` → **root** role.\n- Otherwise → **standalone**: skip Step 2, proceed to Step 3 with no\n `workspaces` block.\n\n### Step 2: Add the `workspaces` block\n\n**Child manifest**:\n\n```bash\nroot_rel=$(python3 -c \"import os,sys; print(os.path.relpath(sys.argv[1], sys.argv[2]))\" \"$ancestor_root\" \"$(pwd)\")\njq --arg rel \"$root_rel\" '\n .workspaces = {\n \"role\": \"child\",\n \"root_relative_path\": $rel\n }\n' \"$MANIFEST\" > \"$MANIFEST\".tmp && \\\nmv \"$MANIFEST\".tmp \"$MANIFEST\"\n```\n\n**Root manifest**:\n\n```bash\njq '\n .workspaces = {\n \"role\": \"root\",\n \"discovery_strategy\": \"auto-cache\",\n \"last_scanned_at\": null,\n \"children\": []\n }\n' \"$MANIFEST\" > \"$MANIFEST\".tmp && \\\nmv \"$MANIFEST\".tmp \"$MANIFEST\"\n```\n\n### Step 3: Bump `format_version` and record upgrade history\n\n```bash\njq '\n .format_version = \"3.3.0\" |\n .updated_at = (now | strftime(\"%Y-%m-%dT%H:%M:%SZ\")) |\n .upgrade_history = ((.upgrade_history // []) + [{\n \"from\": \"3.2.0\",\n \"to\": \"3.3.0\",\n \"date\": (now | strftime(\"%Y-%m-%dT%H:%M:%SZ\")),\n \"changes\": [\n \"Added workspaces block for monorepo support\",\n \"Enabled cross-workspace cross-references (`\u003cpath>/ADR-NNN`, `/ADR-NNN`)\",\n \"Optional: implemented_by portfolio links in feature-tracker.json\"\n ]\n }])\n' \"$MANIFEST\" > \"$MANIFEST\".tmp && \\\nmv \"$MANIFEST\".tmp \"$MANIFEST\"\n```\n\n### Step 4: Populate `workspaces.children` (root only)\n\nRun the workspace scan to discover child blueprints and cache their stats:\n\n```\n/blueprint:workspace-scan\n```\n\nThis is idempotent — children that have not yet migrated to 3.3 are still\nlisted; their `manifest_format_version` will show `3.2.0` until they migrate.\n\n### Step 5: (Optional) Opt into portfolio feature tracking\n\nOnly when the user wants to track portfolio-level FRs that span workspaces:\n\n```bash\n# Add an empty top-level workspaces summary to the root feature-tracker.\nif [[ -f docs/blueprint/feature-tracker.json ]]; then\n jq '.workspaces = (.workspaces // {})' docs/blueprint/feature-tracker.json \\\n > docs/blueprint/feature-tracker.json.tmp && \\\n mv docs/blueprint/feature-tracker.json.tmp docs/blueprint/feature-tracker.json\nfi\n```\n\nThe user then hand-adds `implemented_by` arrays to the portfolio FRs they care\nabout and runs `/blueprint:feature-tracker-sync` at the root to derive statuses.\n\n## Post-Migration Verification\n\n```bash\n# 1. format_version is 3.3.0\njq -r '.format_version' \"$MANIFEST\"\n# Expected: 3.3.0\n\n# 2. workspaces.role is set (root/child) or absent (standalone) as expected\njq -r '.workspaces.role // \"(standalone)\"' \"$MANIFEST\"\n\n# 3. Root: children populated\njq '.workspaces.children | length' \"$MANIFEST\"\n\n# 4. Child: root_relative_path resolves\nrel=$(jq -r '.workspaces.root_relative_path // empty' \"$MANIFEST\")\nif [[ -n \"$rel\" ]]; then\n test -f \"$rel/\"$MANIFEST\"\" && echo \"root link resolves: OK\"\nfi\n\n# 5. Upgrade history recorded\njq '.upgrade_history[-1]' \"$MANIFEST\"\n```\n\n## Migration Summary Template\n\n```\nBlueprint Migration Complete (v3.2 → v3.3)\n\nMonorepo support enabled:\n- Role: {root|child|standalone}\n- Children discovered: {N} (root only)\n- Cross-workspace references now resolvable in ADR validation\n\nManifest updated:\n- format_version: 3.3.0\n- upgrade_history entry added\n\nNext steps:\n1. Run /blueprint:status to view the new portfolio section (root only)\n2. (Optional) Add implemented_by links to portfolio FRs, then run\n /blueprint:feature-tracker-sync\n3. Commit the migration\n```\n\n## Rollback\n\nBecause v3.3 is purely additive, rollback is straightforward:\n\n```bash\njq 'del(.workspaces) | .format_version = \"3.2.0\"' \"$MANIFEST\" \\\n > \"$MANIFEST\".tmp && \\\nmv \"$MANIFEST\".tmp \"$MANIFEST\"\n\n# Optionally remove the top-level workspaces summary from feature-tracker.json:\nif [[ -f docs/blueprint/feature-tracker.json ]]; then\n jq 'del(.workspaces)' docs/blueprint/feature-tracker.json \\\n > docs/blueprint/feature-tracker.json.tmp && \\\n mv docs/blueprint/feature-tracker.json.tmp docs/blueprint/feature-tracker.json\nfi\n```\n\n`implemented_by` entries, if added, remain valid JSON under v3.2 schema\nvalidation (schemas did not forbid unknown keys on feature objects) but will\nbe treated as plain data until re-upgraded.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":6985,"content_sha256":"0e085ceeb1923a22d86d5fb65873a47f75320c313eb3635613f103161a58b61f"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Blueprint Migration","type":"text"}]},{"type":"paragraph","content":[{"text":"Expert skill for migrating blueprint structures between format versions. This skill is triggered by ","type":"text"},{"text":"/blueprint:upgrade","type":"text","marks":[{"type":"code_inline"}]},{"text":" and handles version-specific migration logic.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"When to Use This Skill","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use this skill when...","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use blueprint-upgrade instead when...","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"You need version-specific migration logic (v3.0→v3.1, v3.2→v3.3, etc.)","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"You're invoking the user-facing upgrade workflow with prompts","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"You need content hashing to detect manual modifications during migration","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"You want the high-level \"upgrade my blueprint\" entry point","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"You're implementing a new migration step between format versions","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Use blueprint-init instead when the project has no manifest yet","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Core Expertise","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Reading and parsing the blueprint manifest (","type":"text"},{"text":"docs/blueprint/manifest.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" in v3.0+, or legacy ","type":"text"},{"text":".claude/blueprints/.manifest.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" in v1.x/v2.x) for current version","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Determining appropriate migration path based on version comparison","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Executing versioned migration steps with user confirmation","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Content hashing for detecting manual modifications","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Safe file moves with rollback capability","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Canonical Manifest Filename","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"v3.0+","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":"docs/blueprint/manifest.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" (canonical, no dot prefix — produced by ","type":"text"},{"text":"/blueprint:init","type":"text","marks":[{"type":"code_inline"}]},{"text":"). Some repos carry a legacy ","type":"text"},{"text":"docs/blueprint/.manifest.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" from earlier v3.0 migrations; upgrade tooling tolerates both via the ","type":"text"},{"text":"$MANIFEST","type":"text","marks":[{"type":"code_inline"}]},{"text":" variable resolved in ","type":"text"},{"text":"/blueprint:upgrade","type":"text","marks":[{"type":"code_inline"}]},{"text":" Step 2.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"v1.x/v2.x (historical)","type":"text","marks":[{"type":"strong"}]},{"text":": ","type":"text"},{"text":".claude/blueprints/.manifest.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" — references to this path in v1/v2 migration documents are historical and must not be renamed.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Migration Workflow","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"1. Read current manifest version\n2. Compare with target version (latest: 3.3.0)\n3. Load migration document for version range\n4. Execute migration steps sequentially\n5. Confirm each destructive operation\n6. Update manifest to target version\n7. Report migration summary","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Available Migrations","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"From","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"To","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Document","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"1.0.x","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"1.1.x","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"migrations/v1.0-to-v1.1.md","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"1.x.x","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"2.0.0","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"migrations/v1.x-to-v2.0.md","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"2.x.x","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3.0.0","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"migrations/v2.x-to-v3.0.md","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3.0.x","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3.1.0","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"migrations/v3.0-to-v3.1.md","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3.1.x","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3.2.0","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"inline in ","type":"text"},{"text":"blueprint-upgrade","type":"text","marks":[{"type":"code_inline"}]},{"text":" (step 3a)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3.2.x","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3.3.0","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"migrations/v3.2-to-v3.3.md","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Version Detection","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Resolve manifest path — canonical first, then tolerated variants\nif [[ -f docs/blueprint/manifest.json ]]; then\n MANIFEST=docs/blueprint/manifest.json\nelif [[ -f docs/blueprint/.manifest.json ]]; then\n MANIFEST=docs/blueprint/.manifest.json\nelif [[ -f .claude/blueprints/.manifest.json ]]; then\n MANIFEST=.claude/blueprints/.manifest.json\nfi\n\njq -r '.format_version // \"1.0.0\"' \"$MANIFEST\"\n\n# Detect v1.0 (no format_version field — legacy v1.x/v2.x location only)\nif [[ -f .claude/blueprints/.manifest.json ]] && \\\n ! jq -e '.format_version' .claude/blueprints/.manifest.json > /dev/null 2>&1; then\n echo \"v1.0.0\"\nfi","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Content Hashing","type":"text"}]},{"type":"paragraph","content":[{"text":"For detecting modifications to generated content:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# Generate SHA256 hash of file content\nsha256sum path/to/file | cut -d' ' -f1\n\n# Compare with stored hash in manifest (use $MANIFEST from Version Detection above)\njq -r '.generated.skills[\"skill-name\"].content_hash' \"$MANIFEST\"","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Migration Execution Pattern","type":"text"}]},{"type":"paragraph","content":[{"text":"When executing migrations:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Announce step","type":"text","marks":[{"type":"strong"}]},{"text":" - Explain what will happen","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Check prerequisites","type":"text","marks":[{"type":"strong"}]},{"text":" - Verify source exists, target doesn't","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Confirm with user","type":"text","marks":[{"type":"strong"}]},{"text":" - Use AskUserQuestion for destructive operations","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Execute","type":"text","marks":[{"type":"strong"}]},{"text":" - Perform the migration step","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Verify","type":"text","marks":[{"type":"strong"}]},{"text":" - Check operation succeeded","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Update manifest","type":"text","marks":[{"type":"strong"}]},{"text":" - Track completion in manifest","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Error Handling","type":"text"}]},{"type":"paragraph","content":[{"text":"If migration fails:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Stop immediately (fail-fast)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Report which step failed and why","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Preserve original files (don't delete until confirmed)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Provide manual recovery instructions","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Quick Reference","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Operation","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Command","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Check version","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"jq -r '.format_version' \"$MANIFEST\"","type":"text","marks":[{"type":"code_inline"}]},{"text":" (resolve ","type":"text"},{"text":"$MANIFEST","type":"text","marks":[{"type":"code_inline"}]},{"text":" first; see Version Detection)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Hash file","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"sha256sum file | cut -d' ' -f1","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Safe move","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"cp -r source target && rm -rf source","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Check empty dir","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"[ -z \"$(ls -A dir)\" ]","type":"text","marks":[{"type":"code_inline"}]}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"blueprint-migration","author":"@skillopedia","source":{"stars":35,"repo_name":"claude-plugins","origin_url":"https://github.com/laurigates/claude-plugins/blob/HEAD/blueprint-plugin/skills/blueprint-migration/skill.md","repo_owner":"laurigates","body_sha256":"c3b21e230a96495987c7754dff324a14f0a3678adebdcbccf20f1edd1a8f91c2","cluster_key":"338c7dceebf1537ee93a2a6210a9cea3f664c9538b5fc3d9f1e649b9e76c1cc4","clean_bundle":{"format":"clean-skill-bundle-v1","source":"laurigates/claude-plugins/blueprint-plugin/skills/blueprint-migration/skill.md","attachments":[{"id":"311443c7-cd8d-5e6e-837e-1170abde095f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/311443c7-cd8d-5e6e-837e-1170abde095f/attachment.md","path":"migrations/v1.0-to-v1.1.md","size":1903,"sha256":"90f14637683124fb61b202eab7d4112e963e739d0fdcf93ec65b6c214731affe","contentType":"text/markdown; charset=utf-8"},{"id":"e34d8b19-3e65-5b2f-8c25-0f6c942648fe","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e34d8b19-3e65-5b2f-8c25-0f6c942648fe/attachment.md","path":"migrations/v1.x-to-v2.0.md","size":6093,"sha256":"45e87e15246a394f4398134a7d15e8e4d872d3883c0cee3af79a0401426243c8","contentType":"text/markdown; charset=utf-8"},{"id":"009cb243-a0a8-5e29-90f8-49d8e1a9e86c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/009cb243-a0a8-5e29-90f8-49d8e1a9e86c/attachment.md","path":"migrations/v2.x-to-v3.0.md","size":12434,"sha256":"cd2f6aef6755dc2e89d8dde0971a1e6a956a4689248f5ad1fb6d8f9a3cd6d306","contentType":"text/markdown; charset=utf-8"},{"id":"0477d68c-5d68-5fb2-bb35-95be58e2de84","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0477d68c-5d68-5fb2-bb35-95be58e2de84/attachment.md","path":"migrations/v3.0-to-v3.1.md","size":8120,"sha256":"bffaa6c8d44d0cfade60729fa4bb2f9f03b1425dee448280b2e76c74699a06ad","contentType":"text/markdown; charset=utf-8"},{"id":"7b1e9297-68ca-5ee6-9eb6-1409f8e88f49","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7b1e9297-68ca-5ee6-9eb6-1409f8e88f49/attachment.md","path":"migrations/v3.2-to-v3.3.md","size":6985,"sha256":"0e085ceeb1923a22d86d5fb65873a47f75320c313eb3635613f103161a58b61f","contentType":"text/markdown; charset=utf-8"}],"bundle_sha256":"6244d0acf607302b0f60e717e94ee839ff6cb504f5a6fb86da54b4984da12dbd","attachment_count":5,"text_attachments":5,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"blueprint-plugin/skills/blueprint-migration/skill.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"media-content","category_label":"Media"},"exact_dupes_collapsed_into_this":0},"created":"2025-12-22T00:00:00.000Z","version":"v1","category":"media-content","modified":"2026-05-09T00:00:00.000Z","reviewed":"2026-04-25T00:00:00.000Z","import_tag":"clean-skills-v1","description":"Versioned migration procedures for blueprint format upgrades (v1.x to v3.3). Use when blueprint-upgrade needs version-specific logic, content hashing, or rollback.","allowed-tools":"Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion, TodoWrite","user-invocable":false}},"renderedAt":1782980740100}

Blueprint Migration Expert skill for migrating blueprint structures between format versions. This skill is triggered by and handles version-specific migration logic. When to Use This Skill | Use this skill when... | Use blueprint-upgrade instead when... | |---|---| | You need version-specific migration logic (v3.0→v3.1, v3.2→v3.3, etc.) | You're invoking the user-facing upgrade workflow with prompts | | You need content hashing to detect manual modifications during migration | You want the high-level "upgrade my blueprint" entry point | | You're implementing a new migration step between forma…