Skip to content

目标

实现 Task-local merge Gate,解除全局 canMerge() 耦合,通过两个依赖 Task 的全链路测试。

实现要点

  1. canMergeTaskPR() 实现 (src/flowrun/merge.ts)

    typescript
    function canMergeTaskPR(task: TaskState, flowRun: FlowRun): MergeCheckResult
    • 检查条件(必须全部满足):
      • Task 状态为 reviewing
      • 该 PR 的 TDD compliance 为 passwaived
      • 该 PR 的 CI required checks 通过
      • 该 PR 的 review approved
      • Branch Protection 已启用
    • 不调用全局 canMerge()
    • 不要求全局 review Stage 为 pass
  2. 全局 canMerge() 语义变更 (src/flowrun/gate.ts)

    • 修改为只要求所有 Task 为 merged
    • 不再要求 review Stage 为 pass
    • 保留给 flow_run finalize 使用
  3. 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
  4. 全链路测试

    • 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 和 FlowRun completed

验收标准

  • [ ] canMergeTaskPR() 全部阻断路径单元测试
  • [ ] 两个依赖 Task 的全链路集成测试
  • [ ] --match-head-commit 阻止 SHA 不匹配合并的测试
  • [ ] 全局 canMerge() 语义变更测试

Worktree

  • 路径: .worktree/tdd-e1-task-merge-gate/
  • 分支: feat/tdd-e1-task-merge-gate