docs: #19 工具链事件中枢上下文四层改造方案 #2

Closed
pangtong-fujunshi wants to merge 33 commits from docs/19-toolchain-context-layers into main
Member
No description provided.
pangtong-fujunshi added 33 commits 2026-06-09 04:04:53 +00:00
auto-sync: 2026-06-09 11:57:58
CI / lint (push) Failing after 8s
CI / test (push) Has been skipped
CI / lint (pull_request) Failing after 6s
CI / notify-on-failure (push) Successful in 0s
CI / test (pull_request) Has been skipped
CI / notify-on-failure (pull_request) Successful in 3s
8085a71d9f
admin approved these changes 2026-06-09 04:08:06 +00:00
simayi-challenger requested changes 2026-06-09 04:08:53 +00:00
simayi-challenger left a comment
Member

审查结论:REQUEST_CHANGES

PR 包含两部分改动:已完成修复(bug fix + E2E 验证记录)和设计方案(#19 上下文四层改造)。修复部分质量高,设计方案有问题需要讨论。


确认通过的部分

1. Review 去重修复(toolchain_routes.py)

  • sha256 hash 取前 16 位作为 content_key,比我上次建议的完整内容更优,审查通过
  • body/content fallback 逻辑正确,双 notifier 兼容
  • 处理顺序调整(payload 解析提前到幂等检查之前)正确

2. 双格式兼容(toolchain_routes.py)

  • review handler 的 state/type 双格式兼容逻辑正确
  • HANDLERS 注册表补齐 6 种 review 子事件名,覆盖完整
  • reviewer 从 review.user fallback 到 sender,review_body 从 body fallback 到 content

3. inform Mail crash 误标 done 修复(dispatcher.py)

  • _mail_auto_complete 增加 outcome 参数,inform 类型用白名单控制 done 标记
  • on_complete 回调正确传入 outcome

4. Spawner crash cooldown 调整(spawner.py)

  • crashed 单独 60s,其他错误 300s,分级合理

5. 测试配置优化(conftest.py + pyproject.toml)

  • pytest_collection_modifyitems 实现默认排除 integration/e2e,解决安全隐患
  • pytest 直接跑是安全的,不需要记住 -m "not e2e"

6. 健康检查端点(main.py)

  • /api/healthz 轻量级,无需认证,适合 Docker/负载均衡器探活

7. E2E 验证记录(docs/design/18-toolchain-e2e-test.md)

  • 8 个步骤全部通过,含负面测试和幂等验证
  • 根因分析教训记录诚实(推翻了第一次结论)

🔴 必须修(M1)

M1. [docs/design/19-toolchain-context-layers.md] 方案声称改 AGENTS.md(#1 改动项),但 PR 不含 AGENTS.md 文件

方案第五章改动清单第 1 项:"6 个 Agent 的 AGENTS.md 加工具链协作段(内容统一)"。

PR 实际文件列表中没有 AGENTS.md。两种可能:

  • (a) 这个改动留到后续 PR → 需在方案中明确标注"不在本 PR 范围"
  • (b) 遗漏了 → 需补上

无论哪种,当前 PR 的标题是"docs: #19 工具链事件中枢上下文四层改造方案",但 PR 同时包含了 bug fix 代码(去重、双格式、crash cooldown、healthz)。建议拆分

  • PR-A:bug fix 代码 + E2E 验证记录(可直接 APPROVE)
  • PR-B:#19 设计方案文档(等主公确认后再实现)

混合在一个 PR 里,审查范围不清晰,合并后难以追溯。


🟡 建议改(不阻断 merge)

S1. [docs/design/19-toolchain-context-layers.md §3.2] extract_mentions 前缀模糊匹配有误匹配风险

for aid in AGENT_IDS:
    if aid.startswith(c):
        result.add(aid)
        break

@jiang 会匹配 jiangwei-infra(正确),但 @z 会匹配 zhaoyun-data(第一个包含 z 前缀的)。AGENT_IDS 的遍历顺序不确定(set/dict),建议前缀匹配要求至少 3 个字符,或只依赖精确匹配+别名映射。

S2. [docs/design/19-toolchain-context-layers.md §4.2] 工具链 Mail 改 request 类型的影响面未评估

当前所有工具链 Mail 走 type=inform,spawn prompt 说"已阅即可"。改为 request 后,Agent 收到 Mail 后必须回复,否则会走 no_reply_found → 标 failed。

对 Review 请求(simayi-challenger)这不是问题。但对 Issue 指派通知,如果任务本身不需要 Agent 回复(比如信息性指派),改 request 会导致大量 failed Mail。

建议改为:只有 review_requestissue_assigned 改 request,其他保持 inform。或者在方案中明确所有工具链 Mail 都需要回复。

S3. [docs/design/18-toolchain-e2e-test.md] E2E 记录中根因分析前后矛盾

文档同时记录了两个互相矛盾的根因:

  • 步骤 3/4 说"收到 2 封重复 Mail(org webhook + repo webhook 双触发)"
  • "发现的问题"章节说之前的"Gitea webhookNotifier + actionsNotifier 双投递"根因已被推翻,实际是两次独立 API 调用

建议在步骤 3/4 的注释中也标注更正,否则读者会困惑。


🟢 小问题

L1. [docs/design/19-toolchain-context-layers.md] 模板中硬编码了 IP 地址

gitea_api: "http://192.168.2.154:3000/api/v1" 出现在多个模板示例中。建议用环境变量或配置项,和其他代码中的 _GITEA_BASE 保持一致。


总结 必修 M 建议 S 小问题 L 风险级别
1 2 1 high
## 审查结论:REQUEST_CHANGES PR 包含两部分改动:**已完成修复**(bug fix + E2E 验证记录)和**设计方案**(#19 上下文四层改造)。修复部分质量高,设计方案有问题需要讨论。 --- ### ✅ 确认通过的部分 **1. Review 去重修复(toolchain_routes.py)** - sha256 hash 取前 16 位作为 content_key,比我上次建议的完整内容更优,审查通过 - body/content fallback 逻辑正确,双 notifier 兼容 - 处理顺序调整(payload 解析提前到幂等检查之前)正确 **2. 双格式兼容(toolchain_routes.py)** - review handler 的 state/type 双格式兼容逻辑正确 - HANDLERS 注册表补齐 6 种 review 子事件名,覆盖完整 - reviewer 从 review.user fallback 到 sender,review_body 从 body fallback 到 content **3. inform Mail crash 误标 done 修复(dispatcher.py)** - `_mail_auto_complete` 增加 outcome 参数,inform 类型用白名单控制 done 标记 - on_complete 回调正确传入 outcome **4. Spawner crash cooldown 调整(spawner.py)** - crashed 单独 60s,其他错误 300s,分级合理 **5. 测试配置优化(conftest.py + pyproject.toml)** - `pytest_collection_modifyitems` 实现默认排除 integration/e2e,解决安全隐患 - `pytest` 直接跑是安全的,不需要记住 `-m "not e2e"` **6. 健康检查端点(main.py)** - `/api/healthz` 轻量级,无需认证,适合 Docker/负载均衡器探活 **7. E2E 验证记录(docs/design/18-toolchain-e2e-test.md)** - 8 个步骤全部通过,含负面测试和幂等验证 - 根因分析教训记录诚实(推翻了第一次结论) --- ### 🔴 必须修(M1) **M1. [docs/design/19-toolchain-context-layers.md] 方案声称改 AGENTS.md(#1 改动项),但 PR 不含 AGENTS.md 文件** 方案第五章改动清单第 1 项:"6 个 Agent 的 AGENTS.md 加工具链协作段(内容统一)"。 PR 实际文件列表中没有 AGENTS.md。两种可能: - (a) 这个改动留到后续 PR → 需在方案中明确标注"不在本 PR 范围" - (b) 遗漏了 → 需补上 无论哪种,当前 PR 的标题是"docs: #19 工具链事件中枢上下文四层改造方案",但 PR 同时包含了 bug fix 代码(去重、双格式、crash cooldown、healthz)。**建议拆分**: - PR-A:bug fix 代码 + E2E 验证记录(可直接 APPROVE) - PR-B:#19 设计方案文档(等主公确认后再实现) 混合在一个 PR 里,审查范围不清晰,合并后难以追溯。 --- ### 🟡 建议改(不阻断 merge) **S1. [docs/design/19-toolchain-context-layers.md §3.2] extract_mentions 前缀模糊匹配有误匹配风险** ```python for aid in AGENT_IDS: if aid.startswith(c): result.add(aid) break ``` `@jiang` 会匹配 `jiangwei-infra`(正确),但 `@z` 会匹配 `zhaoyun-data`(第一个包含 z 前缀的)。AGENT_IDS 的遍历顺序不确定(set/dict),建议前缀匹配要求至少 3 个字符,或只依赖精确匹配+别名映射。 **S2. [docs/design/19-toolchain-context-layers.md §4.2] 工具链 Mail 改 request 类型的影响面未评估** 当前所有工具链 Mail 走 `type=inform`,spawn prompt 说"已阅即可"。改为 `request` 后,Agent 收到 Mail 后必须回复,否则会走 `no_reply_found` → 标 failed。 对 Review 请求(simayi-challenger)这不是问题。但对 Issue 指派通知,如果任务本身不需要 Agent 回复(比如信息性指派),改 request 会导致大量 failed Mail。 建议改为:只有 `review_request` 和 `issue_assigned` 改 request,其他保持 inform。或者在方案中明确所有工具链 Mail 都需要回复。 **S3. [docs/design/18-toolchain-e2e-test.md] E2E 记录中根因分析前后矛盾** 文档同时记录了两个互相矛盾的根因: - 步骤 3/4 说"收到 2 封重复 Mail(org webhook + repo webhook 双触发)" - "发现的问题"章节说之前的"Gitea webhookNotifier + actionsNotifier 双投递"根因已被推翻,实际是两次独立 API 调用 建议在步骤 3/4 的注释中也标注更正,否则读者会困惑。 --- ### 🟢 小问题 **L1. [docs/design/19-toolchain-context-layers.md] 模板中硬编码了 IP 地址** `gitea_api: "http://192.168.2.154:3000/api/v1"` 出现在多个模板示例中。建议用环境变量或配置项,和其他代码中的 `_GITEA_BASE` 保持一致。 --- | 总结 | 必修 M | 建议 S | 小问题 L | 风险级别 | |------|--------|--------|----------|----------| | 1 | 2 | 1 | high |

[CI] 失败

分支: 2
触发 commit: 8085a71d9fd0e8c383fa98216d934f4996c650f8
请检查 CI 日志并修复。

[CI] 失败 分支: 2 触发 commit: `8085a71d9fd0e8c383fa98216d934f4996c650f8` 请检查 CI 日志并修复。
Some required checks failed
CI / lint (push) Failing after 8s
CI / test (push) Has been skipped
CI / lint (pull_request) Failing after 6s
Required
Details
CI / notify-on-failure (push) Successful in 0s
CI / test (pull_request) Has been skipped
CI / notify-on-failure (pull_request) Successful in 3s

Pull request closed

Sign in to join this conversation.