aps-agent/docs/adr/0005-cutover-strategy.md

46 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ADR-0005:直接切换,不并行、不迁移
- **状态**:已接受
- **日期**:2026-09-23
- **决策人**:技术负责人
- **相关**:任务表 A0.9、A0.2(决策 D7);设计文档《架构设计》导语
## 背景
重构要把「APS 产品 + 内嵌智能体层」拆成两件事:平台从零重写,APS 搬迁适配。新代码在孤儿分支 `rewrite/platform` 上,与 `main` 的历史没有共同祖先。
两项前提决定了切换该有多重:**项目仍在开发阶段,没有客户试用数据**,因此不存在数据迁移与接口兼容问题;**旧代码仍需可查**,因为 APS 侧搬迁适配要反复对照旧实现。
## 选项
| 选项 | 做法 | 代价 | 不选的理由 |
| --- | --- | --- | --- |
| A 并行运行 | 新旧系统同时对外,逐步切流量 | 两套部署、两套运维、数据同步 | 没有生产流量,并行没有意义 |
| B 冻结期 + 待重写清单 | 冻结 main,跟踪期间新增功能并重写进新分支,再切 | 需要一套跟踪机制,周期拉长 | 旧系统不再演进,清单必然为空,机制纯属负担 |
| C 直接切换 | 旧代码冻结只作参考,新分支准备好后一次切换 | 切换瞬间不可逆(靠备份兜) | 选定 |
## 结论
选 C:**直接切换,不并行、不保留旧库、不设兼容层。**
具体动作:
1. 确认新分支通过 A 线与 B 线的验收(B 线至少要走到 `B5` 契约化接口层)
2. 备份旧代码:`git branch legacy/main main` 并推到远端,设为受保护只读
3. 切换:`git push --force-with-lease origin rewrite/platform:main`
4. 打标签 `platform-1.0.0`
5. 旧分支归档:`legacy/main` 只读,不再接收提交
6. 回退(仅切换后发现问题时):把 `main` 指回 `legacy/main`
## 影响
- **对代码**:`main` 的内容来自孤儿分支;旧实现只在 `legacy/main` 可达
- **对任务**:B2 不写迁移脚本,只做结构拆分;A0.2 的备份与强推规则照此执行;A0.10 的设计文档随首个提交入库
- **对文档**:设计文档《架构设计》导语写明不考虑兼容与迁移
- **不这么做的后果**:选 A 要先建数据同步与双跑运维;选 B 要维护一份注定为空的移植清单,把切换周期无谓拉长
## 遗留
- 切换时点取决于 A 线与 B 线进度,关键约束是 A5 依赖 B5
- 无数据迁移工作。若将来出现真实交付数据并要求延续,需另写 ADR 取代本文件