# 迁移工作流并交付可审查的毕业项目

## When to use

当 BLOGE 已获得有边界的 `ADOPT` 结论或成功的 probe，并且一个工作流可以开始迁移时使用本任务。所有权、预期业务行为或回滚权限缺失时必须停止。

## Inspect first

- 记录当前工作流的输入、输出、分支、失败行为、副作用和运维信号。
- 找到已有测试与生产证据；不得默认当前实现就是业务标准答案。
- 选择一个能够新旧并行比较或安全切回的边界。
- 阅读[迁移章节](/zh-CN/v/0.9.8-RC1/33-migration-and-comparison)，并选择一个[毕业项目层级](/zh-CN/v/0.9.8-RC1/34-labs)。

## Required inputs

取得 Owner 批准的场景与结果、等价标准、允许变化、流量或数据边界、迁移窗口、回滚触发条件、副作用 reconciliation 方法和发布批准人。

## Implementation path

1. 固定代表性输入和 Owner 批准的预期结果。
2. 提取 Operator，不改变业务行为。
3. 显式建模 graph 依赖、分支、韧性和副作用。
4. 在可行时以无副作用方式比较新旧路径。
5. 为变化的承诺同时加入技术测试与业务正确性证据。
6. 只发布到最小边界，完成观测，并保留测试过的回滚点。
7. 输出审查包：graph、假设、命令、结果、差异和剩余未知项。

## MUST / SHOULD / MAY

- **MUST** 保持每个业务可观察行为不变，或明确重新确认变化。
- **MUST** 让外部副作用比较不会重复执行，并满足幂等要求。
- **MUST** 在切换前定义回滚，并验证它仍可执行。
- **SHOULD** 先迁移一个垂直工作流切片，而不是先迁移共享基础设施。
- **SHOULD** 将差异归因到输入、源码、配置或实现变化。
- **MAY** 把转换后的 BPMN 模型作为起点；转换结果仍需审查和测试。

## Failure patterns

- 当前代码成为唯一 oracle：取得业务批准的 expected case，并记录差异。
- 大爆炸迁移无法比较：加入路由 seam 或分阶段边界。
- shadow 执行重复副作用：stub、抑制或 reconciliation 副作用 Operator。
- “测试通过”就关闭迁移：补上生产观测和回滚证据。

## Validation

依次运行语法/编译检查、聚焦 graph 测试、受影响模块测试和 Owner 批准的场景套件。跨模块发布按仓库要求运行 reactor。跳过场景和未解释差异会阻止无条件完成结论。

## Evidence

- [迁移与比较](/zh-CN/v/0.9.8-RC1/33-migration-and-comparison)
- [三层毕业项目](/zh-CN/v/0.9.8-RC1/34-labs)
- [业务正确性任务](/agent/zh-CN/v/0.9.8-RC1/tasks/verify-business-correctness.md)
- [副作用与幂等参考](/agent/zh-CN/v/0.9.8-RC1/reference/effects-and-idempotency.md)
