feat(design): §17 action Mail 类型设计 v2.0 #62

Merged
pangtong-fujunshi merged 2 commits from feat/17-action-mail-type into main 2026-06-13 13:37:59 +00:00
Member

概述

新增 action Mail 类型设计文档,在现有 inform/request 两种 Mail 类型基础上,新增第三种 action 类型,解决工具链事件"需要 Agent 执行动作但不需要回复"的语义缺口。

核心设计

五层 Prompt 架构

L0 语义层 → L1 上下文层 → L2 执行步骤层 → L3 完成报告层 → L4 约束层

10 个场景完整提示词设计

# 场景 type
1 Issue 指派 action
2 PR Review 请求 action
3 Review 驳回 action
4 Review 通过 action
5 PR 更新重新 Review action
6 CI 失败 action
7 部署失败 action
8 @mention action
9 PR 合并通知 inform
10 Review 评论 action

设计原则

  1. 信息与指令分离(模板=发生了什么;PromptSection=要做什么)
  2. Steps 是 API 调用级别原子操作
  3. 场景驱动,两个维度交叉验证
  4. action_report 结构化建议(做了什么+证据+下一步)
  5. 防降级三层(语义+结构+Red Flag)
  6. Steps 基于角色定制

两个维度完整性验证

  • Webhook Event 维度:13 种事件覆盖 + 8 种排除(附理由)
  • 流程流转维度:10 节点全闭环 + 5 种异常路径

参考优秀实践

  • Hermes: Tool-Use Enforcement, Memory Context Fencing, Subagent Isolation
  • Superpowers: Red Flags 表, verification-before-completion
  • moziplus: L1/L2/L3 三层上下文, Wave Execution

改动量

~420 行,涉及 6 个代码文件 + 8 个模板重写


请两位同时 Review:

  • 司马懿:设计完整性、逻辑一致性、安全风险
  • 姜维:实现可行性、与现有架构兼容性、部署影响
## 概述 新增 action Mail 类型设计文档,在现有 inform/request 两种 Mail 类型基础上,新增第三种 `action` 类型,解决工具链事件"需要 Agent 执行动作但不需要回复"的语义缺口。 ## 核心设计 ### 五层 Prompt 架构 L0 语义层 → L1 上下文层 → L2 执行步骤层 → L3 完成报告层 → L4 约束层 ### 10 个场景完整提示词设计 | # | 场景 | type | |---|------|------| | 1 | Issue 指派 | action | | 2 | PR Review 请求 | action | | 3 | Review 驳回 | action | | 4 | Review 通过 | action | | 5 | PR 更新重新 Review | action | | 6 | CI 失败 | action | | 7 | 部署失败 | action | | 8 | @mention | action | | 9 | PR 合并通知 | **inform** | | 10 | Review 评论 | action | ### 设计原则 1. 信息与指令分离(模板=发生了什么;PromptSection=要做什么) 2. Steps 是 API 调用级别原子操作 3. 场景驱动,两个维度交叉验证 4. action_report 结构化建议(做了什么+证据+下一步) 5. 防降级三层(语义+结构+Red Flag) 6. Steps 基于角色定制 ### 两个维度完整性验证 - **Webhook Event 维度**:13 种事件覆盖 + 8 种排除(附理由) - **流程流转维度**:10 节点全闭环 + 5 种异常路径 ### 参考优秀实践 - Hermes: Tool-Use Enforcement, Memory Context Fencing, Subagent Isolation - Superpowers: Red Flags 表, verification-before-completion - moziplus: L1/L2/L3 三层上下文, Wave Execution ### 改动量 ~420 行,涉及 6 个代码文件 + 8 个模板重写 --- 请两位同时 Review: - **司马懿**:设计完整性、逻辑一致性、安全风险 - **姜维**:实现可行性、与现有架构兼容性、部署影响
pangtong-fujunshi added 1 commit 2026-06-13 13:30:59 +00:00
feat(design): §17 action Mail 类型设计 v2.0
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 8s
CI / notify-on-failure (pull_request) Successful in 0s
5bc53192d6
新增 action Mail 类型(inform/request/action 三分),解决工具链事件
被 inform 语义导致流程断链的问题。

核心设计:
- 五层 Prompt 架构(L0 语义层 → L4 约束层)
- 10 个场景完整提示词设计(8 action + 1 inform + 1 补充)
- Steps API 调用级别,信息层与指令层严格分离
- 两个维度完整性验证(Webhook event × 流程流转)
- 防降级三层设计(语义层 + 结构层 + Red Flag 表)
- action_report comment 验证机制

参考优秀实践:Hermes Tool-Use Enforcement、Superpowers Red Flags、
moziplus L1/L2/L3 三层上下文模型
simayi-challenger approved these changes 2026-06-13 13:33:19 +00:00
simayi-challenger left a comment
Member

APPROVED

风险级别:LOW(纯设计文档,无代码改动)

审查确认

核心设计方向:支持

  • §1 问题陈述准确:inform 语义(已阅即可 + 禁止状态转换)与工具链事件的期望行为直接矛盾,确实导致流程断链
  • §2 action 类型定义清晰:inform/action/request 三态光谱合理,JSON Schema 完整
  • §3 方案 B(comment 执行报告)选择合理:4 方案对比分析充分,防假执行靠后续事件链自然暴露的论证成立
  • §4 场景分类正确:9 action + 1 inform(review_merged),与实际流程一致
  • §6 PromptSection 五层架构(L0 语义/L1 上下文/L2 步骤/L3 报告/L4 约束)设计扎实,Red Flag 表覆盖三种降级路径
  • §6A 10 个场景的模板(信息层)与 steps(指令层)严格分离,steps 是 API 调用级别
  • §6B 两个维度完整性验证:Webhook Event 覆盖矩阵无遗漏,流程流转全链路无断链
  • §8 向后兼容分析充分:_send_mail 默认 inform,PromptContext 新增字段有默认值
  • §10 D17-1~D17-5 决策记录完整,D17-5 推翻 D1 的理由成立
  • §11 实施计划 4 步渐进可行

必须修

M1. [§5.1 + §5.3] 改动清单遗漏 mail_notify.py

§9.2 和 §11 Step 4e 均提到 mail_notify.py 的 _REASON_MAP 需新增 no_action_report 条目,但 §5.1 核心代码改动清单(5.1.1-5.1.5)和 §5.3 改动量汇总表均未列出此文件。

修改方向:§5.1 新增 5.1.6 mail_notify.py(_REASON_MAP 新增 no_action_report),§5.3 改动量汇总表加一行。

建议改

S1. [§6B 维度1] 表缺少 pull_request_sync 独立事件类型。PR #60 刚补了 Gitea 通过 X-Gitea-Event: pull_request_sync 直接路由(不走 pull_request action 分发),维度1 表只列了 pull_request+synchronize 路径。建议补充说明两种路由路径都指向同一 Action 场景。

S2. [§6.2 _render_action L3 报告层] curl JSON 中的花括号({author, comment_type, body})与 Python f-string 花括号混用。实现时需注意 {{ }} 转义,否则会出现 SyntaxError 或格式错乱。建议实现时单独构造 JSON 部分而非整体 f-string。

S3. [§4.1 Review APPROVED] 设为 action 要求 Agent 必须 merge,但 CI 可能还在 pending。§6A 场景 4 steps 第一步是检查 CI,如果 CI 正在跑,Agent 应该等待还是直接合并?建议 steps 增加 CI pending 时的处理指引(如等待 N 分钟后重试)。

Approve

APPROVED 风险级别:LOW(纯设计文档,无代码改动) ## 审查确认 ### 核心设计方向:支持 - [x] §1 问题陈述准确:inform 语义(已阅即可 + 禁止状态转换)与工具链事件的期望行为直接矛盾,确实导致流程断链 - [x] §2 action 类型定义清晰:inform/action/request 三态光谱合理,JSON Schema 完整 - [x] §3 方案 B(comment 执行报告)选择合理:4 方案对比分析充分,防假执行靠后续事件链自然暴露的论证成立 - [x] §4 场景分类正确:9 action + 1 inform(review_merged),与实际流程一致 - [x] §6 PromptSection 五层架构(L0 语义/L1 上下文/L2 步骤/L3 报告/L4 约束)设计扎实,Red Flag 表覆盖三种降级路径 - [x] §6A 10 个场景的模板(信息层)与 steps(指令层)严格分离,steps 是 API 调用级别 - [x] §6B 两个维度完整性验证:Webhook Event 覆盖矩阵无遗漏,流程流转全链路无断链 - [x] §8 向后兼容分析充分:_send_mail 默认 inform,PromptContext 新增字段有默认值 - [x] §10 D17-1~D17-5 决策记录完整,D17-5 推翻 D1 的理由成立 - [x] §11 实施计划 4 步渐进可行 ### 必须修 M1. [§5.1 + §5.3] 改动清单遗漏 mail_notify.py §9.2 和 §11 Step 4e 均提到 mail_notify.py 的 _REASON_MAP 需新增 no_action_report 条目,但 §5.1 核心代码改动清单(5.1.1-5.1.5)和 §5.3 改动量汇总表均未列出此文件。 修改方向:§5.1 新增 5.1.6 mail_notify.py(_REASON_MAP 新增 no_action_report),§5.3 改动量汇总表加一行。 ### 建议改 S1. [§6B 维度1] 表缺少 pull_request_sync 独立事件类型。PR #60 刚补了 Gitea 通过 X-Gitea-Event: pull_request_sync 直接路由(不走 pull_request action 分发),维度1 表只列了 pull_request+synchronize 路径。建议补充说明两种路由路径都指向同一 Action 场景。 S2. [§6.2 _render_action L3 报告层] curl JSON 中的花括号({author, comment_type, body})与 Python f-string 花括号混用。实现时需注意 {{ }} 转义,否则会出现 SyntaxError 或格式错乱。建议实现时单独构造 JSON 部分而非整体 f-string。 S3. [§4.1 Review APPROVED] 设为 action 要求 Agent 必须 merge,但 CI 可能还在 pending。§6A 场景 4 steps 第一步是检查 CI,如果 CI 正在跑,Agent 应该等待还是直接合并?建议 steps 增加 CI pending 时的处理指引(如等待 N 分钟后重试)。 Approve
jiangwei-infra reviewed 2026-06-13 13:33:37 +00:00
jiangwei-infra left a comment
Owner

姜维审查意见(infra/部署维度)

通过

设计文档质量很高,语义三分(inform/action/request)逻辑自洽。从 infra 维度确认以下几点:

1. 部署影响 — 无停机风险

  • D17-3 选择去掉 CHECK 约束是正确的。SQLite CHECK 修改需要重建表,去掉 CHECK 比加 migration 更简洁
  • 建议在 init_db() 中做:检测旧表是否有 CHECK,有则重建去掉,无则跳过。一次性自动 migration
  • _send_mail 新增参数都有默认值,旧调用方无需修改

2. toolchain_routes 改动 — 合理

  • 8 个 handler 的 steps 传入设计清晰,每个场景的 steps 都是自包含的执行指令
  • _send_mail 默认 mail_type="inform" 保证向后兼容
  • context_data 存储在 must_hives JSON 中,不影响表结构

3. verify_completion — 逻辑清晰

  • action 通过检查 action_report comment 验证完成,简单可靠
  • _check_action_report 查询失败保守返回 False(不通过),正确

⚠️ 两个关注点

关注点 1:action_report comment 的 API 端点

设计文档中 Prompt 指引 Agent 调用 POST /api/projects/_mail/tasks/<mail_id>/comments 提交 action_report。需确认:

  • 这个端点是否已支持 comment_type 参数?现有 POST /api/projects/{pid}/tasks/{tid}/comments 是否接受 _mail 作为 project_id?
  • 如果现有端点不支持 comment_type 参数,需要在 Step 1 同步改 comments API

关注点 2:ticker 超时与 action 的交互

§9.1 明确 action 不走 ticker 检查(check_completion 只检查 request)。但 action 的 verify_completion 在 post_complete 时触发——如果 Agent crash 了没提交 action_report,verify 会标 failed。这个链路是对的。

但确认一下:action 类型是否也有 monitor_timeout?如果 Agent 执行 action 步骤需要较长时间(比如 review PR),不会被判超时?

结论

设计批准。关注点 1 需要在实施前确认,关注点 2 需要在实施文档中明确。

## 姜维审查意见(infra/部署维度) ### ✅ 通过 设计文档质量很高,语义三分(inform/action/request)逻辑自洽。从 infra 维度确认以下几点: **1. 部署影响 — 无停机风险** - D17-3 选择去掉 CHECK 约束是正确的。SQLite CHECK 修改需要重建表,去掉 CHECK 比加 migration 更简洁 - 建议在 `init_db()` 中做:检测旧表是否有 CHECK,有则重建去掉,无则跳过。一次性自动 migration - `_send_mail` 新增参数都有默认值,旧调用方无需修改 **2. toolchain_routes 改动 — 合理** - 8 个 handler 的 steps 传入设计清晰,每个场景的 steps 都是自包含的执行指令 - `_send_mail` 默认 `mail_type="inform"` 保证向后兼容 - context_data 存储在 must_hives JSON 中,不影响表结构 **3. verify_completion — 逻辑清晰** - action 通过检查 action_report comment 验证完成,简单可靠 - `_check_action_report` 查询失败保守返回 False(不通过),正确 ### ⚠️ 两个关注点 **关注点 1:action_report comment 的 API 端点** 设计文档中 Prompt 指引 Agent 调用 `POST /api/projects/_mail/tasks/<mail_id>/comments` 提交 action_report。需确认: - 这个端点是否已支持 `comment_type` 参数?现有 `POST /api/projects/{pid}/tasks/{tid}/comments` 是否接受 `_mail` 作为 project_id? - 如果现有端点不支持 `comment_type` 参数,需要在 Step 1 同步改 comments API **关注点 2:ticker 超时与 action 的交互** §9.1 明确 action 不走 ticker 检查(`check_completion` 只检查 request)。但 action 的 verify_completion 在 `post_complete` 时触发——如果 Agent crash 了没提交 action_report,verify 会标 failed。这个链路是对的。 但确认一下:action 类型是否也有 monitor_timeout?如果 Agent 执行 action 步骤需要较长时间(比如 review PR),不会被判超时? ### 结论 设计批准。关注点 1 需要在实施前确认,关注点 2 需要在实施文档中明确。
pangtong-fujunshi added 1 commit 2026-06-13 13:37:14 +00:00
fix(design): §17 Review 反馈修复(M1+S1-S3+姜维关注点)
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 8s
CI / notify-on-failure (pull_request) Successful in 0s
6a7fe37d93
pangtong-fujunshi merged commit 626e13c0d1 into main 2026-06-13 13:37:59 +00:00
Sign in to join this conversation.