# 任务拆解与执行 ## 输入要求 1. **需求或spec**(必填):需要实现的功能描述或已有spec 2. **现有代码**(可选):相关代码片段或文件列表 3. **约束条件**(可选):时间、性能、依赖限制 ## 执行流程 ### 第一步:需求分析 - 理解核心目标和边界 - 不得委派理解:在拆分或调用子 Agent 前,主 Agent 必须先自行确认目标、边界、验收口径和风险点;子 Agent 只能接收明确任务,不能替主 Agent 判断用户真实意图 - 如需求属于做网站/建站/企业官网/CMS网站/营销页/网站上线,先调用 `website-project` 确认站点规划、SEO、部署、验收和运维阶段,再进入任务拆解 - 如需求属于 API服务/后端服务/后台模块/CLI工具/数据脚本/自动化任务/插件项目,先调用 `software-project` 确认边界、架构、数据/API、发布、回滚和交付阶段,再进入任务拆解 - 识别隐含依赖(如"用户系统"依赖"数据库表已存在") - 识别风险点(复杂算法、第三方集成、性能瓶颈) - 识别安全触发面:外部输入、权限、数据库、文件上传、API、后台操作、长任务、第三方回调 ### 第二步:原子任务拆解 将复杂需求拆分为2-7个原子任务(每Wave 2-5个)。每个任务必须满足: - **单一职责**:只解决一个明确问题 - **可独立完成**:一个context window内可完成 - **可验证**:有明确的完成标准 - **可回滚**:失败时不影响其他任务 - **安全可验收**:涉及输入/权限/数据/文件/API/后台操作的任务必须包含安全检查项 - **可委派**:任务目标、输入、输出和验收标准已明确;若仍需判断用户意图或业务边界,须回第一步继续分析 **任务结构(XML格式)**: ```xml [任务名称] [涉及文件列表] [具体执行步骤] [验证方法:测试命令/检查清单/人工确认] [安全验证:SQL注入/XSS/CSRF/权限绕过/文件上传/反序列化/敏感信息泄露;不涉及则写"不涉及,原因:...";**禁止留空**] [完成标准:什么状态算完成] ``` **长任务需求专项拆解**:若需求含"批量导入/导出/生成静态页/重建索引/采集同步/清理缓存/>3 秒或 >100 条处理",不得按单端点单任务拆解,必须按 `Init → Step → Poll` 拆成依赖有序的 Wave: - **Wave 1(Init)**:校验权限/CSRF/参数,创建任务记录,计算总量 → 返回 `task_id`、`total`、`status=queued` - **Wave 2(Step)**:每批 20-100 条,更新进度、持久化状态、检测取消标记、幂等(用 `last_id`/游标保证每批唯一) - **Wave 3(Poll)**:查状态/进度/错误,检测僵尸任务(`running` 超阈值标记 `failed` 或允许 `resume`) - **Wave 4(Cancel)**:标记取消,正在执行的 Step 在下一批次检测取消标记后优雅退出 - **Wave 5(前端轮询交互)**:`Init/Step/Poll/Done/Failed/Cancelled` 状态、轮询间隔 800-2000ms、重试/取消入口、进度感知 - **Wave 6(长任务测试)**:Init/Step/Poll/失败重试/取消/超时/幂等全覆盖 各 Wave 间存在依赖(Step 依赖 Init 的任务记录,Poll 依赖 Step 的进度),必须串行;权限/CSRF/文件/SQL 等安全触发面须在每 Wave 的 `` 写明验证方法。 ### 第三步:Wave分组 按依赖关系将任务分组: ``` Wave 1(并行,无依赖) ├── Task 1.1: [任务A] └── Task 1.2: [任务B] Wave 2(依赖Wave 1) ├── Task 2.1: [任务C,依赖1.1] └── Task 2.2: [任务D,依赖1.2] Wave 3(依赖Wave 2) └── Task 3.1: [任务E,依赖2.1和2.2] ``` **分组原则**: - 无依赖的任务 → 同一Wave,可并行 - 有依赖的任务 → 后续Wave,必须串行 - 可能文件冲突的任务 → 同一Wave内串行或合并为一个任务 - 涉及安全触发面的Wave → 必须安排安全验证任务或在每个相关任务的 `` 中给出验证方法 ### 第四步:上下文隔离 执行单个任务时,只加载必要上下文: ``` 任务上下文 = { spec: [相关requirement和scenario], design: [相关技术决策], files: [该任务需要读写的文件], decisions: [影响该任务的历史决策], previous_summary: [前置Wave的任务summary] } ``` 如平台允许子 Agent 或并行代理执行,必须使用简报式上下文,而不是传递完整对话历史: ```text 委派简报 = { task: [单一任务目标], background: [只保留与任务直接相关的背景], files: [允许读取或修改的文件范围], constraints: [技术/安全/编码/输出限制], verify: [必须返回的验证证据], forbidden: [不得触碰的模块、不得扩展的范围] } ``` **禁止加载**: - 无关模块的代码 - 已完成的无关任务细节 - 未决但无关的讨论 - 完整聊天记录或未经筛选的日志 > 上下文隔离同时受主 SKILL.md「二、子Agent 边界与委派协议 → 2.3」与「长任务执行可靠性(L0)」约束:长任务只加载当前 Wave / 当前原子任务所需上下文,已完成 Wave 细节仅以 `previous_summary` 传递,不回灌完整对话历史,避免上下文污染导致后续 Wave 误判。 ### 第五步:执行与验证闭环 每个任务执行后: 1. **执行**:按action完成代码修改 2. **自测**:运行verify中的验证方法 3. **复核结果**:对照目标完成度、格式合规性、事实准确性、上下文一致性、边界条件和安全约束逐项检查;子 Agent 输出不得未经复核直接转交给用户 4. **记录summary**: ``` ## Task Summary: [任务名] **完成状态**: [完成/部分完成/失败] **修改文件**: [文件列表] **验证证据**: [命令/API响应/测试结果/人工确认] **置信度**: [高/中/低,低置信度必须说明原因] **关键决策**: [执行中做出的决策] **偏差说明**: [与plan的差异及原因] **遗留问题**: [未解决的问题] ``` 5. **验证通过**:标记done,进入下一任务 6. **验证失败**:修复或回滚,重新执行 ### 第六步:记录到项目记忆 所有Wave执行完毕后,将任务执行结果和关键决策沉淀到项目记忆(参见 `project-memory-management.md`): - 汇总各任务的 summary,生成整体执行报告(Session Summary 模式) - 记录执行中的关键决策和偏差(Decision Record 模式):如任务拆分调整、依赖关系变更 - 记录新发现的项目约束和规范(Convention Capture 模式):如文件组织约定、模块边界规则 ## 输出格式 ```` ## 任务拆解报告 ### 需求概述 [一句话总结] ### 任务列表 #### Wave 1(并行) ```xml ... ... ... ... ... ... ``` #### Wave 2(依赖Wave 1) ... ### 执行建议 - 优先执行Wave 1,并行推进 - Wave 2等Wave 1全部完成后再开始 - 每个任务完成后立即验证 ### 风险点 - [风险1及缓解措施] ```` ## 质量标准 - 每个任务必须可在单个context window完成(建议不超过200行代码变更) - 每个任务必须有明确的verify方法,不能是"看起来对就行" - Wave分组必须明确标注依赖关系 - 涉及外部输入、权限、数据库、文件上传、API、后台操作、长任务、第三方回调的任务,必须写明安全验证方法 - 安全验证不得只写"已检查",必须指向具体风险:SQL注入、XSS、CSRF、权限绕过、文件上传、反序列化、敏感信息泄露 - `` 节点禁止为空:涉及安全触发面必须写明验证方法,不涉及必须写明原因 - 任务summary必须记录偏差,不能假装一切按计划进行 - 失败任务必须说明原因,不能默默跳过 - 子 Agent 或并行任务输出必须经过主 Agent 复核后才能计入完成度,不能把“已返回结果”等同于“已验证完成” - 优先"垂直切片"(端到端功能)而非"水平分层"(全部模型→全部API) ## 失败回退机制 | 步骤 | 失败条件 | 回退目标 | 最大重试 | 不可恢复时升级路径 | | ---------------------- | ----------------------------------------------- | --------------------------------------- | -------- | ------------------------------------------- | | 第一步:需求分析 | 需求边界不清,隐含依赖未识别 | 基于已知信息拆解,标注"依赖待确认" | 1 | 输出需求澄清清单,等待用户补充 | | 第二步:原子任务拆解 | 任务数量超出单次context window容量 | 按模块/资源域拆分为多个Wave集合 | 1 | 建议拆分为多个独立Spec驱动开发会话 | | 第三步:Wave分组 | 任务间存在循环依赖 | 识别循环并合并为单任务,或引入中间状态 | 2 | 输出依赖图,建议架构层面解耦 | | 第四步:上下文隔离 | 任务上下文跨Wave污染 | 强制重置context,仅加载previous_summary | 1 | 标注"上下文隔离失败",建议人工接管 | | 委派执行 | 子 Agent 接收到完整对话、模糊目标或缺少验收口径 | 收回任务,重写委派简报后再执行 | 1 | 标注"委派边界失败",由主 Agent 重新分析任务 | | 第五步:执行与验证闭环 | 验证连续失败3次 | 暂停执行,输出差异分析 | 0 | 标记任务为"阻塞",输出阻塞清单移交人工 | | 第六步:记录到项目记忆 | 项目记忆系统不可用 | 输出执行报告和决策到本地文件 | 1 | 标注"执行结果未沉淀",提示用户手动保存 | ## 关联 reference - **website-project**(网站项目总控)— 建站类需求拆解前先定义完整生命周期阶段和上线交付清单 - **software-project**(软件项目总控)— 非网站类完整项目拆解前先定义边界、架构、验证、发布和交付清单 - **spec-driven-development**(Spec驱动开发)— 拆解前用 `spec-driven-development` 确保需求已对齐 - **api-design**(API设计)— API/服务类任务拆解前先定义接口契约、认证、错误码和分页 - **frontend-design**(前端设计)— 页面/后台交互任务拆解前先定义组件、状态、响应式和浏览器验证 - **cms-development**(CMS二次开发)— CMS/PHP二开任务拆解前先确认CMS访问层、插件入口和兼容性 - **mysql-database**(MySQL数据库)— 数据库/SQL任务拆解前先定义表结构、索引、事务、迁移和回滚 - **code-generation**(代码生成)— 每个task可用 `code-generation` 实现具体代码 - **code-review**(代码审查)— 每个task完成后用 `code-review` 检查质量 - **test-generation**(测试用例生成)— 每个Wave完成后补充正常、异常、边界、回归、安全、性能和长任务测试 - **doc-generation**(文档生成)— 交付前生成README、API文档、部署说明和使用说明 - **project-memory-management**(项目记忆管理)— 将task summary和决策记录到项目记忆