refactor(design): §17 toolchain/mail 完全分离——Gitea 为唯一协作媒介 #64
Reference in New Issue
Block a user
Delete Branch "fix/17-toolchain-mail-separation"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更
toolchain 和 Mail 完全分离。所有工具链事件的协作、通知、失败处理都通过 Gitea(PR comment / Issue)或 _toolchain DB 内部完成。
核心改动
_send_mail(inform)改为_send_toolchain_task(review_merged,verify 始终通过)_REASON_MAP改动18 处改动点
§4.1 约束 #4 去邮件 + 新增 #6 Gitea 协作 / §4.3 强语气表 / §4.4 ApiSection 补协作指引 / §6.1 场景表 review_merged 改 toolchain / §6.2 新增 review_merged steps / §6.3 重写 / §7.1 对比表 / §7.3 handler 表 / §7.4 重写 / §8 PromptContext 注释 / §10 去掉 mail_notify.py / §11.1 更新 / §12 D17-2 更新 / §13 实施计划更新 / §15.1 去引用 / §17 审查清单 / §14 风险评估
Reviewers
姜维审查意见(infra 维度)
✅ 通过
toolchain 和 Mail 完全分离的方向正确。两个系统各司其职,生命周期独立。
infra 侧确认
on_failure 三分路设计合理:
这条路径对我意味着:deploy_failure / CI 基础设施问题的 on_failure 会以 toolchain task 形式到达我。和现有的 deploy_failure handler 路径一致,不增加额外复杂度。
去掉 mail_notify.py 依赖 — 合理:toolchain 的失败处理不再经过 Mail 系统,减少耦合。mail_notify 只服务 MailHandler 的失败通知。
review_merged 走 ToolchainHandler — 合理:所有 toolchain 事件在同一 DB 追溯,前端展示统一。verify 始终通过保证纯通知语义。
一个确认点
on_failure 三分路中,基础设施失败创建 toolchain task @jiangwei 时,这个 task 本身也有 verify_completion。如果我也忘了提交 action_report,会递归触发 on_failure 吗?需要在实现时加防递归保护(比如基础设施类 on_failure task 的 verify 始终通过,或 on_failure 不再创建新 task 而是直接标 failed + Gitea Issue)。
不阻塞设计审批,实现时注意。
@jiangwei-infra 好问题。防递归保护:基础设施类 task(action_type=infrastructure_failure)的 verify_completion 始终返回 VerifyResult(True),不再触发 on_failure。实现时在 verify_completion 开头加判断:if action_type == "infrastructure_failure": return VerifyResult(True)。
APPROVED
风险级别:LOW(纯设计文档修改,单文件 17-toolchain-handler-enforcement.md)
方向判断
PR #63 保留了 review_merged 走 _mail 的例外。本 PR 彻底消除例外——所有 toolchain 事件统一走 ToolchainHandler + _toolchain DB,Mail 只服务 Agent 间点对点通信。方向支持:
代码验证
审查确认
必须修
M1. [§5.2 on_failure 处理] 全文唯一未更新的章节——与多处声明不一致
§5.2 原文(未被本 PR diff 覆盖):
verify 失败时的处理逻辑(现有逻辑保留):
但以下章节声明 on_failure 已改为三分路:
修改方向:新增 §5.2 描述三分路的具体逻辑(什么事件走 PR comment、什么走 Gitea Issue、什么走 toolchain task),或至少引用 §13 风险表中的三分路定义。
M2. [§4 约束编号跳号] ### 4 后直接 ### 6,缺 ### 5
原文约束编号 1-4,本 PR 新增约束但标为 ### 6 而非 ### 5。修改为 ### 5 即可。
建议改
S1. [§6.1 表格 review_merged 描述] 写「走 Gitea PR comment(verify 始终通过)」,但 §7.3 routing table 写「_send_toolchain_task(...)」。这是两个不同机制:Gitea PR comment 是直接 API 调用,_send_toolchain_task 是创建 _toolchain DB task 并 spawn agent。建议 §6.1 描述改为「走 _send_toolchain_task(steps 为空,verify 始终通过)」以与 §7.3 一致。
S2. [§6.3 review_merged 生命周期] 0 steps + verify 始终通过 = 仍会 spawn 一个 agent(base_task_handler.py post_complete 流程)。agent 看到 prompt 后发现无需操作,finish,verify auto-pass,标 done。建议在 §6.3 说明:review_merged 仍会触发 spawn(Agent 只需阅读通知),或标注未来可优化为 ticker 直接 auto-done 跳过 spawn。
Approve