| name | maintain-team-deprecation-migration |
| description | 弃用与迁移——管理代码生命周期。当需要移除、替换或迁移已有功能/API,或提到"弃用""迁移""deprecation""breaking change" |
Deprecation & Migration — 弃用与迁移
入口/出口
- 入口: 需要移除或替换已有功能、API 版本升级、清理废弃代码
- 出口: 迁移计划 + 兼容层(如需要)+ 文档 + 清理
- 指向: 迁移完成后回到正常 build 流程
- 前置加载: CANON.md
- 输出路径: verify-workflow-review
何时不使用
- 只是新增功能,不移除、替换或改变已有行为
- 废弃范围没有使用数据、兼容要求或迁移窗口
- 只是删除本任务中新建且尚未发布的临时代码
核心原则
Code Is a Liability
代码是负债,不是资产。 未使用的代码仍然需要维护、编译、测试、理解。每行代码都有持续成本。删除代码是改善。
Hyrum 法则使删除困难
有足够用户时,每个可观察到的行为都有人依赖。 即使是未文档化的实现细节、错误消息文本、响应字段排序——某处可能有消费者依赖它。
弃用规划从设计时开始
设计 API 时就为未来弃用规划——使用 Feature Flag 或版本化参数,使旧行为可逐步下线。
弃用决策
在宣布弃用之前回答:
- 有替代方案吗? 用户迁移到哪里?替代至少和旧方案一样好。
- 还有多少用户? 多少人依赖这个 API/功能?实际使用量是多少?
- 迁移成本被承担了吗? 谁负责迁移——提供者还是消费者?迁移工具和文档存在吗?
- 时间线合理吗? 如果消费者团队需要 6 个月,不给他们 2 周。
- 紧急回退可能吗? 如果迁移出问题,可以立即恢复弃用功能吗?
强制 vs 必须弃用
| 类型 | 机制 | 适用 |
|---|
| 强制弃用 | 弃用日期后功能移除。消费者必须迁移。 | 安全修复、无法维护的旧系统 |
| 必须弃用 | 功能可用但文档化和告警说明即将移除。消费者有时间迁移。 | 改进但不紧急 |
"必须弃用"不是永久的。 如果消费者不迁移,"建议"变为"强制"带日期。
迁移模式
Strangler Pattern(最安全)