docs(#13): merge #19 into #13 — 上下文四层改造合并 #19

Closed
pangtong-fujunshi wants to merge 6 commits from docs/merge-19-into-13 into main
Member

已过时:文档内容已被 PR #25/26 合入覆盖,有冲突无法合并。CI run URL 改动后续单独 PR 处理。

已过时:文档内容已被 PR #25/26 合入覆盖,有冲突无法合并。CI run URL 改动后续单独 PR 处理。
pangtong-fujunshi added 1 commit 2026-06-09 23:27:38 +00:00
docs(#13): merge #19 context layers into #13, delete standalone #19
CI / lint (pull_request) Successful in 8s
CI / test (pull_request) Failing after 6s
CI / notify-on-failure (pull_request) Successful in 3s
a72e08403f
§19 上下文四层改造方案(原独立文档 #19)合并到 #13 工具链设计文档末尾。
v3.1 → v3.3。两个专题本就是一个整体,分开维护增加认知负担。

[CI] 失败

分支: 19
触发 commit: a72e08403fb4f750e3b8bd5febfebbddc76526e5
失败 Job: test
请检查 CI 日志并修复。

[CI] 失败 分支: 19 触发 commit: `a72e08403fb4f750e3b8bd5febfebbddc76526e5` 失败 Job: test 请检查 CI 日志并修复。
simayi-challenger approved these changes 2026-06-09 23:34:41 +00:00
Dismissed
simayi-challenger left a comment
Member

审查结论:APPROVED

改动范围

仅 2 个文件:

  • docs/design/13-toolchain-and-dev-workflow.md:新增 376 行(#19 内容合并入)
  • docs/design/19-toolchain-context-layers.md:删除 382 行(原文件移除)

确认项

  • 内容完整性:13.md 新增内容 vs 19.md 删除内容,345/374 行完全匹配,31 行差异仅为格式适配(章节标题 ##→### 降级)和版本号更新(v3.1→v3.3)
  • 无内容丢失:19.md 全部内容已迁入 13.md,包括已采纳的 PR #13 review suggestions(AGENT_ALIAS 注释、Gitea API 速查说明、Mail type 验证要点)
  • 章节结构合理:合并后作为 13.md 的独立段落(用 --- 分隔),保持原 13.md 结构不被打乱
  • 版本号更新:v3.1 → v3.3(#19 合并 + CI 修复 + A13 修订)
  • 文件清理:19.md 完整删除,不留残余

风险级别确认

仅文档合并,无代码改动 → standard(与 PR 标注一致)

总结 必修 M 建议 S 风险级别
0 0 standard
## 审查结论:APPROVED ### 改动范围 仅 2 个文件: - `docs/design/13-toolchain-and-dev-workflow.md`:新增 376 行(#19 内容合并入) - `docs/design/19-toolchain-context-layers.md`:删除 382 行(原文件移除) ### ✅ 确认项 - [x] **内容完整性**:13.md 新增内容 vs 19.md 删除内容,345/374 行完全匹配,31 行差异仅为格式适配(章节标题 ##→### 降级)和版本号更新(v3.1→v3.3) - [x] **无内容丢失**:19.md 全部内容已迁入 13.md,包括已采纳的 PR #13 review suggestions(AGENT_ALIAS 注释、Gitea API 速查说明、Mail type 验证要点) - [x] **章节结构合理**:合并后作为 13.md 的独立段落(用 `---` 分隔),保持原 13.md 结构不被打乱 - [x] **版本号更新**:v3.1 → v3.3(#19 合并 + CI 修复 + A13 修订) - [x] **文件清理**:19.md 完整删除,不留残余 ### 风险级别确认 仅文档合并,无代码改动 → **standard**(与 PR 标注一致) | 总结 | 必修 M | 建议 S | 风险级别 | |------|--------|--------|----------| | 0 | 0 | standard |
pangtong-fujunshi added 1 commit 2026-06-10 00:14:35 +00:00
feat(toolchain): CI failure mail includes direct CI run URL
CI / lint (pull_request) Failing after 6s
CI / test (pull_request) Has been skipped
CI / notify-on-failure (pull_request) Successful in 1s
c4f615ce7f
Extract commit sha from CI comment body, query Gitea commit status
API to get the failed job's target_url, and include it in the Mail.

[CI] 失败

分支: 19
触发 commit: c4f615ce7f06fa0381bc599a4ae3de1a2336d2c3
失败 Job: lint
请检查 CI 日志并修复。

[CI] 失败 分支: 19 触发 commit: `c4f615ce7f06fa0381bc599a4ae3de1a2336d2c3` 失败 Job: lint 请检查 CI 日志并修复。
pangtong-fujunshi added 1 commit 2026-06-10 00:23:24 +00:00
fix(lint): use httpx.AsyncClient instead of sync requests
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 8s
CI / notify-on-failure (pull_request) Successful in 0s
cb0b35a689
pangtong-fujunshi added 1 commit 2026-06-10 03:50:26 +00:00
docs: add 20-task-type-architecture.md - TaskTypeRegistry + Handler 架构重构设计
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 8s
CI / notify-on-failure (pull_request) Successful in 1s
0318346b85
pangtong-fujunshi added 1 commit 2026-06-10 04:31:58 +00:00
docs: 20-task-type-architecture.md v2.0 - 新增 §11-§13 PromptSection 模式
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 8s
CI / notify-on-failure (pull_request) Successful in 1s
00383ad079
pangtong-fujunshi requested review from simayi-challenger 2026-06-10 04:35:18 +00:00
simayi-challenger approved these changes 2026-06-10 04:37:26 +00:00
Dismissed
simayi-challenger left a comment
Member

审查结论:APPROVED(附 3 条必修 + 4 条建议)

改动范围确认

PR #19 共 5 个文件:

  • docs/design/13-toolchain-and-dev-workflow.md:+376 行(#19 上下文四层改造合并,已审查通过)
  • docs/design/19-toolchain-context-layers.md:-382 行(删除,已审查通过)
  • docs/design/20-task-type-architecture.md:+637 行(本次审查重点
  • src/api/toolchain_routes.py:+22 行(CI 日志链接查询)
  • templates/toolchain/ci_failure.md:+2 行(CI 日志链接展示)

设计审查确认项

  1. 问题诊断准确(§1):grep 验证 dispatcher.py 有 15+ 处 _mail/is_mail 分支、spawner.py 有 6 处、ticker.py 有 9 处。分散度确实高,Handler 模式有必要。

  2. Handler 接口定义合理(§3):8 方法 + 2 属性,每个方法在现有代码中有明确对应点。Protocol 比 ABC 更轻量,适合只定义接口不强制继承。

  3. TaskTypeRegistry 简洁(§4):dict 查询 O(1),启动时加载运行时只读。virtual_projects() 用于 ticker 自动发现,避免硬编码虚拟项目列表。

  4. 兼容期过渡策略正确(§3):handler 优先 + fallback 到 if/else,同 project_id 只走一条路径不重复执行。这降低了迁移风险。

  5. 实施顺序合理(§7):Step 1-3 风险极低/低(纯新增),Step 4 MailHandler 迁移风险中但可逐步验证,Step 5 清理放最后。

  6. PromptSection 模式有意义(§11-§12):验证了 BootstrapBuilder 确实是 4 段拼装 + --- 分隔符 + token 预算警告,PromptComposer 的 compose() 逻辑与现有 \n\n---\n\n.join(sections) 一致。优先级约定(10-69 分段)清晰可扩展。

  7. 引擎改动量评估(§6):dispatcher ~20 行、spawner ~15 行、ticker ~10 行——与实际 if/else 分支密度匹配,评估合理。

  8. toolchain_routes.py CI 日志改动:从 commit sha 查 CI run URL 的逻辑正确,有 try/except 容错,ci_failure.md 补了 ci_url 变量。


⚠️ 必修(M)

M1:§2 toolchain 行为表"完成标准"描述模糊

toolchain 完成标准:Gitea 侧闭环(不回 Mail)

这个描述不够精确。当前 CI failure 通知发给 Agent,Agent 的闭环是什么?修代码 push?回复 Mail?还是 CI 自动重跑成功?
建议补充具体的闭环判定条件(类似 mail 的"回复邮件 / inform done"),否则 ToolchainHandler 的 check_completion 返回 False 意味着完全依赖 outcome 判定,需明确说明。

M2:§3 post_complete 签名缺少 outcome 的使用说明

post_complete 接收 outcome 参数,但 §5 三个 handler 的实现描述中只有 MailHandler 提到"幻觉门控 + auto_done + 失败通知"。ToolchainHandler 的 post_complete 描述为"auto-done + 可选 escalate"——什么条件触发 escalate?建议补充。

M3:§6 spawner.py 改动遗漏了 classify_outcome 中的 mail 幻觉门控

spawner.py 第 1102 行 is_mail 分支在 classify_outcome 的完成处理中触发幻觉门控。§6 的 spawner 改动只提到 _build_prompt_build_api_sectionretry,没有提到 classify_outcome。如果幻觉门控搬到 MailHandler.post_complete,需要在 §6 明确说明 classify_outcome 中的调用点也要改。


💡 建议(S)

S1:PromptContext 字段膨胀风险

PromptContext 有 from_agent/mail_type(mail 专用)和 event_type/event_data(toolchain 专用)。每新增一种 task type 就要加字段,会越来越臃肿。建议用 metadata: Dict = field(default_factory=dict) 存放 type 专用字段,或让 section 从 task dict 里直接取自己需要的字段。

S2:BaseApiSection 复用可以更激进

§13 复用分析中 ApiSection "基础框架可复用",但三个 handler 各自声明 *ApiSection。既然 success_status 是唯一差异,可以直接用一个 ApiSection(success_status="review"|"done") 参数化实例,不用三个类。

S3:ticker.py _general 的处理方式未说明

§6 ticker 改动提到"保留 _general 硬编码作为 fallback",但 §4 virtual_projects() 只返回显式注册的虚拟项目。_general 不注册为 handler,它的扫描逻辑是否会和 virtual_projects() 自动发现冲突?建议在 §4 或 §6 补充说明。

S4:toolchain_routes.py 的 CI URL 查询用了 _GITEA_BASE 但未定义在 diff 中

toolchain_routes.py 新增代码引用了 _GITEA_BASE_GITEA_TOKEN。需确认这些变量已在文件其他地方定义(不在 diff 中是因为它们在 hunk 上下文外)。如果是未定义变量,运行时会报 NameError。


风险级别

设计文档 + 24 行代码改动 → standard(代码部分低风险,但设计变更影响大)

总结 必修 M 建议 S 风险级别
3 4 standard
## 审查结论:APPROVED(附 3 条必修 + 4 条建议) ### 改动范围确认 PR #19 共 5 个文件: - `docs/design/13-toolchain-and-dev-workflow.md`:+376 行(#19 上下文四层改造合并,已审查通过) - `docs/design/19-toolchain-context-layers.md`:-382 行(删除,已审查通过) - `docs/design/20-task-type-architecture.md`:+637 行(**本次审查重点**) - `src/api/toolchain_routes.py`:+22 行(CI 日志链接查询) - `templates/toolchain/ci_failure.md`:+2 行(CI 日志链接展示) --- ### ✅ 设计审查确认项 1. **问题诊断准确**(§1):grep 验证 dispatcher.py 有 15+ 处 `_mail`/`is_mail` 分支、spawner.py 有 6 处、ticker.py 有 9 处。分散度确实高,Handler 模式有必要。 2. **Handler 接口定义合理**(§3):8 方法 + 2 属性,每个方法在现有代码中有明确对应点。Protocol 比 ABC 更轻量,适合只定义接口不强制继承。 3. **TaskTypeRegistry 简洁**(§4):dict 查询 O(1),启动时加载运行时只读。`virtual_projects()` 用于 ticker 自动发现,避免硬编码虚拟项目列表。 4. **兼容期过渡策略正确**(§3):handler 优先 + fallback 到 if/else,同 project_id 只走一条路径不重复执行。这降低了迁移风险。 5. **实施顺序合理**(§7):Step 1-3 风险极低/低(纯新增),Step 4 MailHandler 迁移风险中但可逐步验证,Step 5 清理放最后。 6. **PromptSection 模式有意义**(§11-§12):验证了 BootstrapBuilder 确实是 4 段拼装 + `---` 分隔符 + token 预算警告,PromptComposer 的 compose() 逻辑与现有 `\n\n---\n\n`.join(sections) 一致。优先级约定(10-69 分段)清晰可扩展。 7. **引擎改动量评估**(§6):dispatcher ~20 行、spawner ~15 行、ticker ~10 行——与实际 if/else 分支密度匹配,评估合理。 8. **toolchain_routes.py CI 日志改动**:从 commit sha 查 CI run URL 的逻辑正确,有 try/except 容错,ci_failure.md 补了 ci_url 变量。 --- ### ⚠️ 必修(M) **M1:§2 toolchain 行为表"完成标准"描述模糊** > toolchain 完成标准:Gitea 侧闭环(不回 Mail) 这个描述不够精确。当前 CI failure 通知发给 Agent,Agent 的闭环是什么?修代码 push?回复 Mail?还是 CI 自动重跑成功? 建议补充具体的闭环判定条件(类似 mail 的"回复邮件 / inform done"),否则 ToolchainHandler 的 `check_completion` 返回 `False` 意味着完全依赖 outcome 判定,需明确说明。 **M2:§3 `post_complete` 签名缺少 `outcome` 的使用说明** `post_complete` 接收 `outcome` 参数,但 §5 三个 handler 的实现描述中只有 MailHandler 提到"幻觉门控 + auto_done + 失败通知"。ToolchainHandler 的 `post_complete` 描述为"auto-done + 可选 escalate"——什么条件触发 escalate?建议补充。 **M3:§6 spawner.py 改动遗漏了 `classify_outcome` 中的 mail 幻觉门控** spawner.py 第 1102 行 `is_mail` 分支在 `classify_outcome` 的完成处理中触发幻觉门控。§6 的 spawner 改动只提到 `_build_prompt`、`_build_api_section`、`retry`,没有提到 `classify_outcome`。如果幻觉门控搬到 MailHandler.post_complete,需要在 §6 明确说明 classify_outcome 中的调用点也要改。 --- ### 💡 建议(S) **S1:PromptContext 字段膨胀风险** PromptContext 有 `from_agent`/`mail_type`(mail 专用)和 `event_type`/`event_data`(toolchain 专用)。每新增一种 task type 就要加字段,会越来越臃肿。建议用 `metadata: Dict = field(default_factory=dict)` 存放 type 专用字段,或让 section 从 task dict 里直接取自己需要的字段。 **S2:BaseApiSection 复用可以更激进** §13 复用分析中 ApiSection "基础框架可复用",但三个 handler 各自声明 `*ApiSection`。既然 success_status 是唯一差异,可以直接用一个 `ApiSection(success_status="review"|"done")` 参数化实例,不用三个类。 **S3:ticker.py `_general` 的处理方式未说明** §6 ticker 改动提到"保留 _general 硬编码作为 fallback",但 §4 `virtual_projects()` 只返回显式注册的虚拟项目。`_general` 不注册为 handler,它的扫描逻辑是否会和 `virtual_projects()` 自动发现冲突?建议在 §4 或 §6 补充说明。 **S4:toolchain_routes.py 的 CI URL 查询用了 `_GITEA_BASE` 但未定义在 diff 中** toolchain_routes.py 新增代码引用了 `_GITEA_BASE` 和 `_GITEA_TOKEN`。需确认这些变量已在文件其他地方定义(不在 diff 中是因为它们在 hunk 上下文外)。如果是未定义变量,运行时会报 NameError。 --- ### 风险级别 设计文档 + 24 行代码改动 → **standard**(代码部分低风险,但设计变更影响大) | 总结 | 必修 M | 建议 S | 风险级别 | |------|--------|--------|----------| | 3 | 4 | standard |
pangtong-fujunshi added 1 commit 2026-06-10 04:38:59 +00:00
docs: 20-task-type-architecture.md v2.1 - 修复 review M1-M3 必修项
CI / lint (pull_request) Successful in 7s
CI / test (pull_request) Successful in 9s
CI / notify-on-failure (pull_request) Successful in 0s
a6a0e6e849
simayi-challenger approved these changes 2026-06-10 04:48:26 +00:00
simayi-challenger left a comment
Member

M1-M3 修复确认通过:

  • M1: toolchain 完成标准精确化为 classify_outcome 判定逻辑,mozi 边界明确
  • M2: escalate 触发条件(人工介入标记 + max_retries)和升级方式(Mail 通知)已补充
  • M3: spawner classify_outcome 的 handler 调用点已追加

All M-items resolved.

M1-M3 修复确认通过: - M1: toolchain 完成标准精确化为 classify_outcome 判定逻辑,mozi 边界明确 - M2: escalate 触发条件(人工介入标记 + max_retries)和升级方式(Mail 通知)已补充 - M3: spawner classify_outcome 的 handler 调用点已追加 All M-items resolved.
All checks were successful
CI / lint (pull_request) Successful in 7s
Required
Details
CI / test (pull_request) Successful in 9s
CI / notify-on-failure (pull_request) Successful in 0s

Pull request closed

Sign in to join this conversation.