docs: Task 系统架构重构设计 v3.0 — 五层架构+BaseTaskHandler+执行流程+决策记录 #23
Reference in New Issue
Block a user
Delete Branch "docs/task-type-architecture"
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?
[CI] 失败
分支: 23
触发 commit:
474f6baaa2b3af0df4b9f9f2d4142da1f086eee3失败 Job: lint
请检查 CI 日志并修复。
审查结论:REQUEST_CHANGES(4 条必修 + 3 条建议)
改动范围确认
PR #23 共 3 个文件:
docs/design/20-task-type-architecture.md:v2.0→v3.0,+771/-13行(新增 §14-§18 五章)src/daemon/prompt_composer.py:+127行(PromptSection Protocol + PromptContext + PromptComposer)src/daemon/task_type_registry.py:+137行(TaskTypeHandler Protocol + TaskTypeRegistry)✅ 设计审查确认项
§14 五层架构:L0-L4 定义清晰,去重规则具体可执行(Agent 身份→L1、API 方法→L2 任务级、Skill 全文→L3、安全红线→L0)。层间引导语设计好。
§15 Spawner/Handler 职责边界:划分精确——spawner 管进程生命周期(exit分类/retry/counter),handler 管业务调度(prompt/verify/mark/notify)。on_complete 作为桥梁的模式正确。
§16 BaseTaskHandler 基类:
post_complete统一 4 步流程(crash→verify→mark→notify)合理。"为什么删掉"表帮助理解设计意图。crash rollback 补上 mail 的 bug 值得肯定。§17 执行流程:统一流程骨架 + 三个 handler 差异化表格,差异收敛表做得清晰。Mail 补 crash rollback 的 bug 修复说明到位。
§18 设计决策记录 D1-D11:决策过程透明,D4(verify 统一为所有 handler 必须实现)和 D8(L2 Skill 段最小化到 ~100 token)是高质量决策。
prompt_composer.py 实现质量:
compose()六步流程正确(filter→sort→render→filter empty→join→token warn),与 BootstrapBuilder 现有逻辑兼容。task_type_registry.py 实现质量:
clear()方法为测试预留,register()含重复注册保护。virtual_projects()用于 ticker 自动发现。⚠️ 必修(M)
M1:task_type_registry.py Protocol 与设计 §16 不一致——仍包含已删除的方法
grep 验证:
skip_guardrail:仍在 Protocol 第 103 行附近,但设计 §16 和 D6 明确"从 handler 接口删除"build_retry_prompt:仍在 Protocol,但设计 §16 和 D4 说明"retry 是 spawner 层的职责"build_api_section:仍在 Protocol,但设计 D7 说 prompt 构建迁移到 handler → 应由 PromptComposer 统一接管要么删掉这三方法,要么在设计文档中说明 Protocol 分 v3.0(新)和 v2.0(兼容)两个版本,标注哪些是待废弃的兼容方法。
M2:post_complete 签名不一致
post_complete(task_id, agent_id, outcome, db_path, must_haves, dispatcher)→ 6 参数post_complete(task_id, agent_id, outcome, db_path)→ 4 参数BaseTaskHandler 的 post_complete 不再需要
must_haves和dispatcher。Protocol 和设计必须对齐。M3:build_prompt 签名不一致
build_prompt(task_id, title, description, must_haves, project_id, agent_id, task, spawn_type, spawner)→ 10 参数build_prompt(self, context: PromptContext) -> str→ 1 个 PromptContext设计 §16 明确改用 PromptContext 统一数据传递。Protocol 需更新。
M4:§14 内容在文档中重复出现两次
grep 确认:
§14 上下文五层架构统一(作为 §12 更新的一部分嵌入)§14 上下文五层架构统一(独立的 §14 章节)方案二选一:
💡 建议(S)
S1:base_task_handler.py 未在 PR 中但设计 §16 详细定义
§7 Step 1 和附录文件结构都包含
base_task_handler.py,但本次 PR 只有 3 个文件。如果在后续 PR 实现,请在设计 §7 Step 1 中加[将在后续 PR 实现]标注。S2:prompt_composer.py 类型标注宽松
self._sections: List[Any]— 应改为List[PromptSection]add(section: Any)— 应改为add(section: PromptSection)add_many(sections: List[Any])— 同理PromptSection是 Protocol 直接可用,不需要 Any。S3:Protocol 中 pre_spawn 签名也不一致
pre_spawn(task_id, db_path, dispatcher) -> Optional[Any]pre_spawn(task_id, db_path) -> bool不需要
dispatcher参数(handler 不该依赖 dispatcher),返回值应该是bool而不是Optional[Any]。风险级别
新增 264 行基础设施代码 + 771 行设计文档 → standard
[CI] 失败
分支: 23
触发 commit:
8ebfeeec7d07365c8a127588b1c816421622e0c8失败 Job: lint
请检查 CI 日志并修复。
M1-M4 + S3 修复确认通过:
All issues resolved. LGTM.
8ebfeeec7dto0e4d12898d[CI] 失败
分支: 23
触发 commit:
0e4d12898d3df2f7491ddfee891eb35fa077705e失败 Job: lint
请检查 CI 日志并修复。