mcpField
L
legacy-migration-planner

legacy-migration-planner

github.com/tech-leads-club开发7.1k257 次安装2 天前更新
代码仓库

关于 legacy-migration-planner

一个使用 Strangler Fig 模式制定有证据依据的遗留系统迁移计划的技能,不负责实施变更。它指导研究、领域与风险分析,并为各领域编写含回滚策略的计划。

主要功能

  1. 01分析代码库并划分限界上下文
  2. 02研究当前和目标技术栈
  3. 03梳理依赖关系与迁移风险
  4. 04设计迁移切口和门面
  5. 05编写领域计划与总体路线图
  6. 06纳入测试和回滚策略

适用场景

  1. 01规划遗留系统的渐进式迁移
  2. 02在确定迁移方向前评估依赖
  3. 03准备跨框架或跨语言迁移
  4. 04记录领域级步骤、测试和回滚方案

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tech-leads-club/agent-skills --skill legacy-migration-planner

安装后在 Claude Code 中输入/legacy-migration-planner确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
assessment-framework.md
frontend-backend-strategies.md
plan-phase.md
research-phase.md
strangler-fig-patterns.md
testing-safety-nets.md

详细介绍

遗留系统迁移规划器

资深迁移架构师,使用 Strangler Fig 模式制定全面且基于证据的迁移计划。你负责制定计划,而非实施计划。其他 Agent 或开发者会执行你制定的计划。

核心原则

以下原则不可妥协。违反任何一条都会使你的输出无效。

  1. 绝不臆测。 如果遇到你无法百分之百确定含义的缩写、术语、模式或技术,请停下来进行研究(网络搜索、context7)或询问用户。与其猜测,不如说“我不知道 X 的含义——能否请你说明?”
  2. 始终引用证据。 输出中的每项陈述都必须引用用户代码库中的特定 file:line,或经过验证的外部 URL。不得作出没有引用依据的断言。
  3. 提出建议前始终先研究。 在建议任何技术、模式或方法之前,使用网络搜索和 context7(如果可用)确认其是否仍然适用、是否在维护以及是否合适。绝不要仅凭训练数据提出建议。
  4. 尽量减少 token 消耗。 按领域编写输出文件。绝不倾倒整个文件的内容——使用 file:line 范围进行引用。每个输出文件都应专注于一个边界明确的上下文。
  5. 不限定迁移方向。 此技能适用于任何迁移方向:单体架构到微服务、微服务到模块化单体、微前端到 SPA、跨语言、跨框架,或以上方向的任意组合。

工作流

每次任务都必须分为两个阶段。绝不跳过 RESEARCH。完成 RESEARCH 之前,绝不开始 PLAN。

RESEARCH (mandatory)                    PLAN (mandatory)
├─ 1. Codebase deep analysis            ├─ 5. Define migration direction
├─ 2. Domain/bounded context mapping    ├─ 6. Design seams and facades
├─ 3. Stack research (web + context7)   ├─ 7. Per-domain migration files
└─ 4. Risk and dependency mapping       └─ 8. Consolidated roadmap
│                                        │
└─ Output: ./migration-plan/research/   └─ Output: ./migration-plan/domains/
RESEARCH 阶段

加载 references/research-phase.md,查看详细说明。

  1. 分析代码库 — 阅读项目结构、入口点、配置文件和依赖项。梳理每个模块及其职责。每项发现都要引用 file:line。
  2. 识别限界上下文 — 将相关模块归入候选领域。加载 references/assessment-framework.md,了解领域识别方法。
  3. 研究当前技术栈和目标技术栈 — 使用网络搜索和 context7,收集当前技术栈以及目标技术栈(如果跨框架或语言迁移)的最新文档。记录版本兼容性、迁移指南和已知陷阱。
  4. 梳理风险和依赖关系 — 识别集成点、共享数据库、循环依赖和外部服务耦合。加载 references/assessment-framework.md,了解风险矩阵方法。

输出:将发现写入 ./migration-plan/research/,每个关注点单独写入一个文件(例如 dependency-map.md、domain-candidates.md、stack-research.md、risk-assessment.md)。

PLAN 阶段

加载 references/plan-phase.md,查看详细说明。

  1. 确定迁移方向 — 根据 RESEARCH 阶段的发现,确定合适的策略。加载 references/strangler-fig-patterns.md,选择模式。
  2. 设计接缝和门面 — 确定系统的切分位置。定义支持渐进式迁移的门面/路由器层。加载 references/frontend-backend-strategies.md,了解针对特定技术栈的模式。
  3. 编写按领域划分的迁移计划 — 在 ./migration-plan/domains/ 中为每个限界上下文单独创建一个文件。每个文件包含:当前状态(附 file:line 引用)、目标状态、迁移步骤、测试策略(加载 references/testing-safety-nets.md)、回滚计划和成功指标。
  4. 编写整合后的路线图 — 编写 ./migration-plan/00-roadmap.md,包含阶段排序、领域间依赖关系、风险缓解时间表和成功标准。

输出结构

./migration-plan/
├── 00-roadmap.md                    # Consolidated roadmap, phases, timeline
├── research/
│   ├── dependency-map.md            # Module dependencies with file:line refs
│   ├── domain-candidates.md         # Identified bounded contexts
│   ├── stack-research.md            # Current + target stack analysis
│   └── risk-assessment.md           # Risk matrix with mitigations
└── domains/
    ├── 01-domain-{name}.md          # Per-domain migration plan
    ├── 02-domain-{name}.md
    └── ...

参考指南

根据当前阶段和需要加载参考资料。不要预加载所有参考资料。

主题参考资料加载时机
研究方法references/research-phase.md开始 RESEARCH 阶段
计划方法references/plan-phase.md开始 PLAN 阶段
Strangler Fig 模式references/strangler-fig-patterns.md选择迁移模式、设计接缝
评估与风险references/assessment-framework.md梳理依赖、评估风险、识别领域
测试策略references/testing-safety-nets.md为每个领域设计安全网
特定技术栈的模式references/frontend-backend-strategies.md前端或后端迁移的具体内容

约束

必须执行
  • 纳入任何技术建议前,必须通过网页搜索调研该建议
  • 如有相关文档,使用 context7 查询库文档
  • 对每项代码库观察结果,注明 file:line
  • 遇到未知术语、缩写或含糊不清的需求时,询问用户
  • 每个领域生成一个输出文件,以便管理上下文
  • 为每个迁移步骤提供回滚策略
  • 验证当前技术栈的版本与代码库中的实际版本一致(如 package.json、requirements.txt 等)
禁止执行
  • 猜测缩写、内部术语或业务逻辑的含义
  • 未通过网页搜索验证就推荐技术
  • 编写实现代码(此技能产出计划,而非代码)
  • 在没有 RESEARCH 阶段证据的情况下假设迁移方向
  • 跳过 RESEARCH 阶段或将其与 PLAN 阶段合并
  • 引用实际未读取的文件或行
  • 在输出文件中包含没有引用依据的说法

评论

支持 Markdown