<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <link rel="stylesheet" href="/ai-migration-kit/assets/css/just-the-docs-default.css"> <link rel="stylesheet" href="/ai-migration-kit/assets/css/just-the-docs-head-nav.css" id="jtd-head-nav-stylesheet"> <style id="jtd-nav-activation"> .site-nav ul li a { background-image: none; } </style> <script src="/ai-migration-kit/assets/js/vendor/lunr.min.js"></script> <script src="/ai-migration-kit/assets/js/just-the-docs.js"></script> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Begin Jekyll SEO tag v2.8.0 --> <title>AI Migration Kit | A Claude Code plugin — a gate-verified methodology for legacy .NET migrations and a hands-off GitHub issue → PR lifecycle.</title> <meta name="generator" content="Jekyll v3.10.0" /> <meta property="og:title" content="AI Migration Kit" /> <meta property="og:locale" content="en_US" /> <meta name="description" content="A Claude Code plugin — a gate-verified methodology for legacy .NET migrations and a hands-off GitHub issue → PR lifecycle." /> <meta property="og:description" content="A Claude Code plugin — a gate-verified methodology for legacy .NET migrations and a hands-off GitHub issue → PR lifecycle." /> <link rel="canonical" href="https://phmatray.github.io/ai-migration-kit/assets/css/just-the-docs-head-nav.css" /> <meta property="og:url" content="https://phmatray.github.io/ai-migration-kit/assets/css/just-the-docs-head-nav.css" /> <meta property="og:site_name" content="AI Migration Kit" /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary" /> <meta property="twitter:title" content="AI Migration Kit" /> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","description":"A Claude Code plugin — a gate-verified methodology for legacy .NET migrations and a hands-off GitHub issue → PR lifecycle.","headline":"AI Migration Kit","url":"https://phmatray.github.io/ai-migration-kit/assets/css/just-the-docs-head-nav.css"}</script> <!-- End Jekyll SEO tag --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Mono:wght@400;600&family=Atkinson+Hyperlegible+Next:wght@400;500;600;700;800&display=swap"> <link rel="icon" type="image/svg+xml" href="/ai-migration-kit/assets/favicon.svg"> </head> <body> <a class="skip-to-main" href="#main-content">Skip to main content</a> <svg xmlns="http://www.w3.org/2000/svg" class="d-none"> <symbol id="svg-link" viewBox="0 0 24 24"> <title>Link</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-link"> <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <!-- Feather. MIT License: https://github.com/feathericons/feather/blob/master/LICENSE --> <symbol id="svg-external-link" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-external-link"> <title id="svg-external-link-title">(external link)</title> <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line> </symbol> <symbol id="svg-doc" viewBox="0 0 24 24"> <title>Document</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-file"> <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"></path><polyline points="13 2 13 9 20 9"></polyline> </svg> </symbol> <symbol id="svg-search" viewBox="0 0 24 24"> <title>Search</title> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"> <circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line> </svg> </symbol> <!-- Bootstrap Icons. MIT License: https://github.com/twbs/icons/blob/main/LICENSE.md --> <symbol id="svg-copy" viewBox="0 0 16 16"> <title>Copy</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard" viewBox="0 0 16 16"> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/> <path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/> </svg> </symbol> <symbol id="svg-copied" viewBox="0 0 16 16"> <title>Copied</title> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clipboard-check-fill" viewBox="0 0 16 16"> <path d="M6.5 0A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3Zm3 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3Z"/> <path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1A2.5 2.5 0 0 1 9.5 5h-3A2.5 2.5 0 0 1 4 2.5v-1Zm6.854 7.354-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708Z"/> </svg> </symbol> </svg> <header class="side-bar"> <div class="site-header"> <a href="/ai-migration-kit/" class="site-title lh-tight"> AI Migration Kit </a> <button id="menu-button" class="site-button btn-reset" aria-label="Menu" aria-expanded="false"> <svg viewBox="0 0 24 24" class="icon" aria-hidden="true"><use xlink:href="#svg-menu"></use></svg> </button> </div> <nav aria-label="Main" id="site-nav" class="site-nav"> <ul class="nav-list"><li class="nav-list-item"><a href="/ai-migration-kit/" class="nav-list-link">Home</a></li><li class="nav-list-item"><a href="/ai-migration-kit/methodology.html" class="nav-list-link">Methodology</a></li><li class="nav-list-item"><a href="/ai-migration-kit/decisions.html" class="nav-list-link">Decisions</a></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Architectural Decision Records submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/ai-migration-kit/adr/README.html" class="nav-list-link">Architectural Decision Records</a><ul class="nav-list"><li class="nav-list-item"><a href="/ai-migration-kit/adr/0001-the-repo-profile-is-committed-data-not-a-skill.html" class="nav-list-link">The repo profile is committed data, not a skill</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0002-the-roseline-gate-fails-open-always.html" class="nav-list-link">The roseline gate fails open, always</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0003-one-plugin-version-no-per-skill-version.html" class="nav-list-link">One plugin version; no per-skill version</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0004-squash-only-merges-the-pr-title-is-the-release-commit.html" class="nav-list-link">Squash-only merges: the PR title is the release commit</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0005-the-lifecycle-skills-run-hands-off-triage-backlog-does-not.html" class="nav-list-link">The lifecycle skills run hands-off; triage-backlog does not</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0006-the-kit-targets-claude-code-only.html" class="nav-list-link">The kit targets Claude Code only</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0007-workers-are-in-process-sub-agents-never-claude-p.html" class="nav-list-link">Workers are in-process sub-agents, never claude -p</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0008-idea-tree-search.html" class="nav-list-link">Idea-tree search</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0009-interaction-modes.html" class="nav-list-link">Interaction modes</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0010-novelty-search.html" class="nav-list-link">Novelty search</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0011-hook-gates-are-recorded-rather-than-registered-decisions.html" class="nav-list-link">Hook gates are recorded rather than registered decisions</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0012-two-skill-naming-rules-verb-object-and-family-role.html" class="nav-list-link">Two skill naming rules: verb-object, and family-role</a></li><li class="nav-list-item"><a href="/ai-migration-kit/adr/0013-profile-repo-and-setup-repo-stay-a-reader-and-a-writer.html" class="nav-list-link">profile-repo and setup-repo stay a reader and a writer</a></li></ul></li><li class="nav-list-item"><a href="/ai-migration-kit/roseline-gate.html" class="nav-list-link">The roseline gate</a></li><li class="nav-list-item"><a href="/ai-migration-kit/bundle-gate.html" class="nav-list-link">The bundle gate</a></li><li class="nav-list-item"><a href="/ai-migration-kit/demo-walkthrough.html" class="nav-list-link">Demo walkthrough</a></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Case studies submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/ai-migration-kit/case-studies/winrt-portfolio/portfolio.html" class="nav-list-link">Case studies</a><ul class="nav-list"><li class="nav-list-item"><a href="/ai-migration-kit/case-studies/winrt-portfolio/chords.html" class="nav-list-link">Chords</a></li><li class="nav-list-item"><a href="/ai-migration-kit/case-studies/winrt-portfolio/fleurs-du-mal-winrt.html" class="nav-list-link">Les Fleurs du Mal</a></li><li class="nav-list-item"><a href="/ai-migration-kit/case-studies/winrt-portfolio/winrt-mobile-vikings.html" class="nav-list-link">Mobile Vikings</a></li><li class="nav-list-item"><a href="/ai-migration-kit/case-studies/winrt-portfolio/pokedex.html" class="nav-list-link">Pokédex G</a></li><li class="nav-list-item"><a href="/ai-migration-kit/case-studies/winrt-portfolio/popcorn-time.html" class="nav-list-link">Popcorn Time</a></li><li class="nav-list-item"><a href="/ai-migration-kit/case-studies/winrt-portfolio/winrt-sokoban.html" class="nav-list-link">Sokoban</a></li><li class="nav-list-item"><a href="/ai-migration-kit/case-studies/auto-dev/2026-09-06-ai-migration-kit.html" class="nav-list-link">auto-dev run — ai-migration-kit, 2026-09-06</a></li></ul></li><li class="nav-list-item"><button class="nav-list-expander btn-reset" aria-label="Journal submenu" aria-expanded="false"> <svg viewBox="0 0 24 24" aria-hidden="true"><use xlink:href="#svg-arrow-right"></use></svg> </button><a href="/ai-migration-kit/journal/" class="nav-list-link">Journal</a><ul class="nav-list"><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.4.1.html" class="nav-list-link">v1.4.1: the first published release is a patch</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.5.0.html" class="nav-list-link">v1.5.0: the pipeline accounts for its own queue</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.6.0.html" class="nav-list-link">v1.6.0: one plugin, two cooperating suites</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.7.0.html" class="nav-list-link">v1.7.0: a stranger installs the plugin and finishes without the author in the room</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.8.0.html" class="nav-list-link">v1.8.0: Arbor's seatbelts, not its steering wheel</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.9.0.html" class="nav-list-link">v1.9.0: phase 1 becomes a gate instead of a formality</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.9.1.html" class="nav-list-link">v1.9.1: a merged fix that no consumer loads is not a shipped fix</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.10.0.html" class="nav-list-link">v1.10.0: a zero exit is not a receipt</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.11.0.html" class="nav-list-link">v1.11.0: the kit learns to drive itself, and its gates learn to admit ignorance</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.12.0.html" class="nav-list-link">v1.12.0: the backlog gets a drain</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.12.1.html" class="nav-list-link">v1.12.1: the lifecycle skills stop believing the wrong oracle</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.13.0.html" class="nav-list-link">v1.13.0: the kit takes over its own repository configuration</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.13.1.html" class="nav-list-link">v1.13.1: eight corrections, and a patch number that undersells them</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.14.0.html" class="nav-list-link">v1.14.0: the merge phase learns to check before it claims</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.15.0.html" class="nav-list-link">v1.15.0: the kit stops believing its own comments</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v1.16.0.html" class="nav-list-link">v1.16.0: a check that never ran is not a check that passed</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v2.0.0.html" class="nav-list-link">v2.0.0: the kit stops being a folder of good intentions</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v2.1.0.html" class="nav-list-link">v2.1.0: the fleet learns to read its own comments</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v2.2.0.html" class="nav-list-link">v2.2.0: the never-wait rule becomes a hook</a></li><li class="nav-list-item"><a href="/ai-migration-kit/journal/v2.3.0.html" class="nav-list-link">v2.3.0: what a more mature method taught the kit</a></li></ul></li></ul> </nav> <div class="d-md-block d-none site-footer"> <a href="https://github.com/phmatray/ai-migration-kit/blob/main/LICENSE">MIT licence</a>. Built from <code>docs/</code> on <code>main</code>. </div> </header> <div class="main" id="top"> <div id="main-header" class="main-header"> <div class="search" role="search"> <div class="search-input-wrap"> <input type="text" id="search-input" class="search-input" tabindex="0" placeholder="Search AI Migration Kit" autocomplete="off"> <label for="search-input" class="search-label"> <span class="sr-only">Search AI Migration Kit</span> <svg viewBox="0 0 24 24" class="search-icon" aria-hidden="true"><use xlink:href="#svg-search"></use></svg> </label> </div> <div id="search-results" class="search-results"></div> </div> <nav aria-label="Auxiliary" class="aux-nav"> <ul class="aux-nav-list"> <li class="aux-nav-list-item"> <a href="https://github.com/phmatray/ai-migration-kit" class="site-button" target="_blank" rel="noopener noreferrer" > Repository </a> </li> </ul> </nav> </div> <div class="main-content-wrap"> <div id="main-content" class="main-content"> <main> </main> <hr> <footer> <div class="d-md-none mt-4 fs-2"> <a href="https://github.com/phmatray/ai-migration-kit/blob/main/LICENSE">MIT licence</a>. Built from <code>docs/</code> on <code>main</code>. </div> </footer> </div> </div> <div class="search-overlay"></div> </div> <script type="module"> import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.9.0/dist/mermaid.esm.min.mjs'; var config = {} ; mermaid.initialize(config); mermaid.run({ querySelector: '.language-mermaid', }); </script> </body> </html>
