目标
实现 Task-local merge Gate,解除全局 canMerge() 耦合,通过两个依赖 Task 的全链路测试。
实现要点
canMergeTaskPR()实现 (src/flowrun/merge.ts)typescriptfunction canMergeTaskPR(task: TaskState, flowRun: FlowRun): MergeCheckResult- 检查条件(必须全部满足):
- Task 状态为
reviewing - 该 PR 的 TDD compliance 为
pass或waived - 该 PR 的 CI required checks 通过
- 该 PR 的 review approved
- Branch Protection 已启用
- Task 状态为
- 不调用全局
canMerge() - 不要求全局 review Stage 为
pass
- 检查条件(必须全部满足):
全局
canMerge()语义变更 (src/flowrun/gate.ts)- 修改为只要求所有 Task 为
merged - 不再要求 review Stage 为
pass - 保留给
flow_run finalize使用
- 修改为只要求所有 Task 为
flow_pr merge安全检查- 执行副作用前重新查询 remote head:
gh pr view --json headRefOid - 要求 remote head SHA 与 verified SHA 匹配
- 调用
gh pr merge --match-head-commit <verifiedSha>确保原子性 - 不匹配 → 置 checkpoints 为 pending + 要求 rework
- 执行副作用前重新查询 remote head:
全链路测试
- Scenario: Task A(依赖无)→ Task B(依赖 Task A)
- Task A 完成 TDD → PR created → PR merged → Task A
merged - Task B 变为 ready → PR created → PR merged → Task B
merged - 验证:全程不触发全局 review Stage gate
- 验证:
flow_run finalize成功持久化全局 Stage 和 FlowRuncompleted
验收标准
- [ ]
canMergeTaskPR()全部阻断路径单元测试 - [ ] 两个依赖 Task 的全链路集成测试
- [ ]
--match-head-commit阻止 SHA 不匹配合并的测试 - [ ] 全局
canMerge()语义变更测试
Worktree
- 路径:
.worktree/tdd-e1-task-merge-gate/ - 分支:
feat/tdd-e1-task-merge-gate