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

This commit is contained in:
cfdaily
2026-06-10 12:38:55 +08:00
parent 00383ad079
commit a6a0e6e849
+15 -3
View File
@@ -38,7 +38,7 @@ moziplus v2 的任务调度系统当前通过 `if/else` 硬编码区分两种 ta
| 状态流转 | pending→claimed→working→review→done | 跳过 claimedauto-working→auto-done | auto-working→auto-done |
| prompt 构建 | BootstrapBuilder L0-L3 | MAIL_INFORM / MAIL_REQUEST 精简模板 | TOOLCHAIN 模板 + 事件上下文 |
| guardrail | 正常检查 | 跳过 | 跳过 |
| 完成标准 | 产出物 + review | 回复邮件 / inform done | Gitea 侧闭环(不回 Mail |
| 完成标准 | 产出物 + review | 回复邮件 / inform done | Agent 处理完毕自动 done(无需回复)。闭环由 classify_outcome 判定:Agent 输出含实质行动(代码修复/分析结论)→ done;输出为空/幻觉 → failed。CI/Deploy 类事件最终闭环在 Gitea 侧(Agent push 修复后 CI 自动重跑),mozi 不跟踪 Gitea 侧最终结果。 |
| on_complete | classify_outcome → 状态机 | 幻觉门控 + 失败通知 | auto-done + 可选 escalate |
| 路由 | Router 四条快速路径 + 广播认领 | 直接路由到收件人 | 直接路由到事件相关 agent |
| retry | 标准 `RETRY_PROMPT` | `MAIL_RETRY_PROMPT` | 标准(或专用) |
@@ -251,8 +251,8 @@ TaskTypeRegistry.register(ToolchainHandler())
| `build_api_section` | `success_status = "done"` |
| `skip_guardrail` | `True` |
| `pre_spawn` | auto_working 回调 |
| `post_complete` | auto-done + 可选 escalate |
| `check_completion` | `False` |
| `post_complete` | auto-done。escalate 触发条件:Agent 输出包含"需要人工介入"标记(如 block/无法修复/权限不足),或连续 retry 失败达到 max_retries(默认 2 次)。escalate 方式:通过 Mail 通知项目负责人(pangtong-fujunshi |
| `check_completion` | `False`(由 post_complete 中 classify_outcome 判定,不需要额外的完成检查) |
| `build_retry_prompt` | 标准 `RETRY_PROMPT`(或后续定制) |
**改动量**~100 行,全新代码。
@@ -308,6 +308,18 @@ if handler:
)
```
**classify_outcome 完成处理**
- spawner.py 第 1102 行 `is_mail` 分支在 `classify_outcome` 后触发幻觉门控
- 迁移到 MailHandler.post_complete 后,此处的 `is_mail` 判断改为查注册表:
```python
handler = TaskTypeRegistry.get_by_project(project_id)
if handler:
handler.post_complete(task_id, agent_id, outcome, db_path, must_haves, self)
else:
# 兼容期:现有 classify_outcome 逻辑
...
```
## ticker.py~10 行改动)
```python