Dev — 任务实施
实施一个任务包并将其移交给 QA。本技能定义了流程,并在 references/role-boundaries.md 中包含了自身的角色边界。如果采用仓库定义了代理规则(AGENTS.md、角色规则目录或同等文件),则在存在时阅读并遵循它们;本技能从不授予额外权限。
何时使用
- 当
tasks/<task-id>/下的任务已完成01-contract.md,且你是 Dev 角色时。 - 当你需要实施一个垂直切片、运行其 DoD 命令、记录证据并移交时。
- 当你在 QA 发出
REWORK_REQUIRED后重新处理任务时。
何时不使用
- 合约缺失、不完整或有争议时——将其返回给 Planner。
- 当你被要求计划、拆分或审查任务,或验证其他代理的工作时。
- 当请求的更改超出合约的
touch_files时——升级或拆分任务。
输入
tasks/<task-id>/01-contract.md——权威的 YAML frontmatter、touch_files、dod、第 4 节 BDD 行为场景(Given-When-Then 不变量)以及继承的 ADR。- 合约引用的规范锚点。
- 用于类型检查和 lint 的项目命令、现有测试套件以及
dod.test_file中声明的 QA 拥有的验收目标。 tasks/<task-id>/02-dev-workspace.md——你需要填写的空白表单。
输出
- 仅对
touch_files中列出的路径进行代码更改。 - 遵循 BDD 不变量和圈复杂度限制的代码(标准 $V(G) \le 10$,$11-15$ 在
02中需说明理由,临界 $> 15$ 禁止)。 - 一个完整的
02-dev-workspace.md,包含元数据、实际更改、自我验证以及实施偏差表(行号DEV-001、DEV-002、... 或显式的 None 行)。 - 恰好一个移交标记:
- [x] WAITING_FOR_QA,仅当每个 DoD 项都通过时勾选。 - 不编辑
01-contract.md、03-qa-verification.md、04-process.md或tests/acceptance/**。
工作流
- 确认范围与 BDD 合约。 阅读
01-contract.md的 frontmatter 和第 4 节 BDD 场景。检查task_id是否等于目录名称,并且touch_files、dod、adherence_adrs和 Given-When-Then 不变量是否已定义。将缺失或矛盾的项目报告给 Planner。 - 准备工作。 记录基础提交并遵守项目的分支/提交约定。除非审查者重新打开,否则不要重新打开已接受的任务。
- 在 BDD 和复杂度限制下实施垂直切片。 仅更改
touch_files中的文件。实施满足第 4 节和dod.edge_cases中声明的 Given-When-Then 不变量的逻辑。控制单函数圈复杂度(标准 $V(G) \le 10$)。如果复杂度接近警告限制($11-15$),应用重构模式(提取方法、策略/查找表、Guard Clauses)。如果 $V(G) > 15$,先重构再继续。不要编辑或创建tests/acceptance/**。 - 运行机器可检查的 DoD 和自验证。 执行
dod.type_check和dod.lint,然后运行项目现有的测试;考虑每个dod.edge_cases项。对所有触及过的函数进行圈复杂度自审计。验收目标(dod.test_file)归 QA 所有:仅当它已存在时才运行,永远不要编写或编辑它。如果它尚不存在,在02中记录下来,并由 QA 在验证时运行。捕获命令/结果。 - 填写
02-dev-workspace.md。 记录分支、基础/移交提交、设计说明、每个实际更改的文件一行、净行数计数,并勾选每个为真的自验证项。对任何具有警告复杂度($11 \le V(G) \le 15$)的函数包含显式的架构理由。未通过的项留空。完成实施偏差表:每一行对应代码与合约或规范有差异的位置(DEV-001、DEV-002、...;操作add|modify|remove;一个#sec-*锚点),或者当没有偏离时在每个单元格中写入 None。 - 移交给 QA。 仅当每个自验证项都通过且满足复杂度限制时,将
- [ ] WAITING_FOR_QA更改为- [x] WAITING_FOR_QA。这单个勾选的框就是移交触发条件。不要编辑03或04。 - 返工。 阅读
03-qa-verification.md中 QA 的失败追踪,仅在合约范围内修复,重新运行 DoD,为新尝试更新02并再次移交。将重复失败升级,而不是绕过合约。
质量门(在声明完成前)
- 每个更改的路径都在
01-contract.md→touch_files中列出。 - 没有创建或修改影响范围外的文件。
- 实施遵循所有 Given-When-Then BDD 场景和行为不变量。
- 类型检查和 lint 成功退出;项目现有测试通过。
- 圈复杂度自审计通过:所有函数满足 $V(G) \le 10$(或 $11-15$ 且在
02中有理由);没有超过 $V(G) > 15$ 的。 - QA 拥有的验收目标(
dod.test_file)已声明;如果尚未编写,则已记录供 QA 使用。 - 每个
dod.edge_cases项都有实施/测试依据。 - 本次尝试的
02-dev-workspace.md已完整,包括实施偏差表(未偏离时使用显式 None 行)。 - 仅勾选了
WAITING_FOR_QA;03和04未改动。
失败处理
- 合约缺失或矛盾:停止;报告该字段并请 Planner 修复。
- 需要超出范围更改:拆分任务或升级;永远不要在
touch_files之外编辑。 - DoD 命令缺失或不可运行:报告该命令和错误;不要敷衍检查。
- DoD 失败:修复实施并重新运行。在检查失败时不要勾选移交框。
- 复杂度超过阈值($V(G) > 15$):在移交前使用提取方法、策略/查找表、Guard Clauses 或状态模式重构;永远不要移交临界复杂度。
- 工具不可用:使用项目的手动命令并在
02中记录证据;工作流不能依赖可选工具。
04-process.md 和工具
04-process.md 是派生输出。在移交复选框被勾选后,可选的仓库工具会附加 HANDOFF_QA_REQUESTED 并更新 macro_status/current_lock_holder。永远不要手工编辑 04;没有工具时,依赖 git/CI 和已勾选的框。
QA_PASSED 之后:规范回写所有权
实施偏差表是 Dev 对该任务的最后交付物。在 QA 记录 QA_PASSED 后,converge 技能拥有规范回写所有权:它将确认的偏差折叠到 .specs/02-tech-spec.md 中,归档任务包并关闭变更提案。
- Dev 从不编辑
.specs/02-tech-spec.md,也从不归档任务包。 - 结构性偏差(新组件、更改的边界、新的 ADR 级别决策)升级给 Planner/
spec-generator,而不是静默收敛。 - 如果 QA 请求返工,为新尝试更新偏差表;不要预先编写规范正文。
参考
references/dev-protocol.md——详细的检查表、范围验证、McCabe 圈复杂度限制、重构模式、移交和返工程序。- 角色边界:
references/role-boundaries.md——写入范围、只读范围、不变量和诚实执行模型(捆绑;无需外部文件)。 - 仓库规则:当采用项目定义了
AGENTS.md和任何角色规则文件时阅读它们;它们可能会增加要求,但并非本技能工作的必要条件。 - 任务包格式:
task-decomposition技能(可选兄弟技能;本技能仅消费其制品)。
诚实限制
本技能不授予写入访问权限,也无法强制角色隔离。当仓库具有 CI(例如基于 git 的角色审计)或分支保护时,那是权威层。合约(而非本文档)定义了允许的影响范围。