code-implement
按骨架(design-to-code 产出)分批填充方法实现、解决 TODO:每批先读契约注释 + 调研/依赖文档,完成后验证实现是否满足契约。触发:"骨架编码"、"填充骨架"、"实现代码"、"implement skeleton"、"开始编码实施"。
SKILL.mdskills/code-implement/SKILL.md
GitHubCode Implement(骨架编码实施)
概述
目的:系统化地从代码骨架填充方法实现、解决 TODO 标记,确保实现与骨架契约一致,并与项目现有代码风格统一。
核心问题:design-to-code 生成了骨架+契约注释后,AI 编码是"无结构的"——打开文件就写,没有上下文准备、没有批次策略、没有契约验证,容易偏离设计意图或与现有代码风格不一致。
解决方案:按骨架批次的依赖顺序分批编码,每批编码前先读取骨架契约注释 + code-survey 调研结果 + dependency-docs 依赖文档作为参考上下文,再就地补全方法体、解决 TODO 标记。编码完成后验证实现是否满足骨架契约。
定位
design-craft → ... → design-to-code → code-implement → implementation-report
设计产出 骨架+契约注释 系统化填充实现 归档实现结果
- 输入:design-to-code 产出的骨架文件 + skeleton-status.md + code-survey 调研结果 + dependency-docs 依赖文档
- 输出:已实现的代码文件(方法体已填充、TODO 已解决、契约注释保留为实施参考)
- 边界:只管"按骨架契约填充实现",不管"骨架怎么生成"(design-to-code 负责)和"实现后怎么归档"(implementation-report 负责)
核心原则
- 契约优先:编码前必须读取骨架中的契约注释,理解每个方法的参数、返回值、异常、预期行为
- 上下文准备:每批编码前先读取 code-survey 调研结果 + dependency-docs 依赖文档 + 设计文档(按需),确保实现与项目风格一致
- 依赖拓扑序:复用骨架生成的批次顺序(依赖 DAG),被依赖的批次先编码
- 分批编码 + 并行加速:复用骨架批次的依赖结构,顺序无关批次自动调用 task-dispatch 并行编码
- TODO 就地解决:修改文件的 TODO 标记在编码时就地解决,不集中处理
- 契约验证:编码完成后验证实现是否满足骨架契约(签名一致、异常覆盖、行为完整)
- 骨架注释为准:当骨架契约注释与设计文档内容不一致时,以骨架中的契约注释为准——骨架是 design-to-code 对设计文档的精确转译,如果转译过程中有调整(如接口签名微调、异常场景补充),骨架注释才是编码 AI 应遵循的最终契约
工作流总览
阶段 0:定位骨架与参考文档 → 读取 skeleton-status.md + code-survey + dependency-docs + 设计文档
阶段 1:编码上下文构建 → 从参考文档提取编码所需的风格、模式、依赖信息
阶段 2:编码批次规划 → 复用骨架批次结构,确定编码顺序和并行策略
阶段 3:分批编码实施 → 顺序无关批次调用 task-dispatch 并行;依赖批次串行
阶段 4:实现契约验证 → 比对实现代码与骨架契约,检查遗漏或偏差
阶段 5:落盘与状态更新 → 更新 skeleton-status.md,标记已实现方法
未得到用户对当前阶段的确认前,不进入下一阶段。
阶段 0:定位骨架与参考文档
输入来源
按优先级尝试:
- 用户指定:用户直接提供骨架文件目录或 skeleton-status.md 路径
- 默认位置:
.requirements/{YYYY-MM-DD}-{功能名称}/design/skeleton-status.md
骨架文件定位:从 skeleton-status.md 的"骨架文件清单"表中读取每个骨架文件的项目相对路径,结合项目根目录(从用户指定或 workspace 根推断)计算出绝对路径。子 agent 编码时需使用绝对路径读取骨架文件。
读取内容
| 文件 | 内容 | 作用 |
|---|---|---|
skeleton-status.md |
骨架生成状态:批次结构、文件清单、一致性验证结果 | 确定编码批次、定位骨架文件 |
| 骨架文件组 | 含契约注释的代码骨架文件 | 编码的直接目标 |
reference/code-survey.md |
代码调研结果:风格、架构、模式、惯例(code-survey 产出) | 编码时参考项目现有风格和模式 |
dependencies/ 目录 |
第三方依赖文档(dependency-docs 产出) | 实现调用外部 API/SDK 时查阅接口细节 |
DESIGN.md + 子文档 |
设计文档(按需深查) | 契约注释不够详细时回查设计原文 |
参考文档检测
逐一检测参考文档是否存在,不存在则跳过:
| 参考文档 | 检测位置 | 不存在时的处理 |
|---|---|---|
| code-survey | 设计文档目录下 reference/code-survey.md |
跳过,编码时凭骨架注释+现有代码推断风格 |
| dependency-docs | 设计文档目录下 dependencies/README.md |
跳过,编码时凭骨架注释中的依赖标注自行查阅 |
| 设计文档 | 设计文档目录下 DESIGN.md |
跳过,仅依赖骨架契约注释 |
输出格式
📂 骨架与参考文档定位
骨架状态:skeleton-status.md({路径})
参考文档:
- code-survey:✅ 已定位 / ⚠️ 未检测到
- dependency-docs:✅ 已定位(N 个依赖文档) / ⚠️ 未检测到
- 设计文档:✅ 已定位 / ⚠️ 未检测到
骨架规模:X 个文件(新增 Y / 修改 Z)、A 个类、B 个方法、C 个 TODO 标记
确认后进入阶段 1 构建编码上下文。
阶段 1:编码上下文构建
从参考文档中提取编码所需的风格、模式、依赖信息。只提取与当前骨架相关的信息,不泛读全文。
时效性检测
先比对参考文档与骨架生成的时间顺序:
- code-survey 的时间早于 design-to-code(从 skeleton-status.md 生成时间判断):⚠️ code-survey 可能已过时(骨架文件已写入项目,代码状态变化),编码时优先参考骨架文件中的契约注释和现有代码实际状态
- code-survey 的时间晚于或等于 design-to-code:✅ code-survey 反映最新代码状态,可正常参考
提取维度
| 来源 | 提取内容 | 编码用途 |
|---|---|---|
| code-survey | 代码风格、错误处理模式、测试模式、API 约定 | 确保实现与项目风格一致 |
| dependency-docs | 每个骨架注释中引用的依赖文档路径 → 读取对应依赖文档的接口清单、认证方式、限流策略 | 实现调用外部 API/SDK 时使用正确接口 |
| 骨架契约注释 | 方法签名、参数/返回值/异常/预期行为、依赖文档引用 | 编码的直接契约依据 |
| 设计文档(按需) | 契约注释不够详细时的补充信息 | 深入理解设计意图 |
提取策略
- code-survey:全文读取,提取所有维度(文件不长,全读成本可控)
- dependency-docs:只读取骨架注释中明确引用的依赖文档(按需读取,不全读)
- 设计文档:仅当骨架契约注释中的信息不足以完成编码时,按锚点定位回查
输出格式
🔍 编码上下文提取
风格参考(来自 code-survey):
- 代码风格:{简述}
- 错误处理:{简述}
- API 约定:{简述}
依赖参考(来自 dependency-docs):
- {依赖1}:接口清单 N 个,认证方式 {...}
- {依赖2}:接口清单 M 个,限流策略 {...}
契约核心(来自骨架注释):
- S-01:{N} 个方法需实现,{M} 个 TODO 需解决
- S-02:{K} 个方法需实现,{L} 个 TODO 需解决
确认上下文充分,有无遗漏。
阶段 2:编码批次规划
直接复用骨架生成的批次结构,不重新排序。
复用规则
- 从
skeleton-status.md的"批次状态"表读取批次划分 - 从设计文档的依赖 DAG 读取批次间依赖关系
- 顺序无关批次 → 可并行编码(task-dispatch)
- 依赖批次 → 串行编码(主 agent)
额外考量
骨架批次规划已考虑了依赖关系,但编码时还需注意:
| 场景 | 额外处理 |
|---|---|
| 同一文件跨批次修改 | 后批编码时需读取前批已实现的代码,避免覆盖 |
| TODO 标记跨子需求分布 | 按 TODO 所属子需求分配到对应批次。同一文件跨批次修改时,后批编码前必须读取前批已实现的最新版本 |
| 骨架文件已被手动修改 | 读取最新文件内容,不依赖 skeleton-status.md 的快照 |
输出格式
🔗 编码批次规划
复用骨架批次结构:
第 1 批 [顺序无关]:S-01(X 方法 / Y TODO)→ task-dispatch 并行编码
第 2 批 [依赖前批]:S-03(K 方法 / L TODO)→ 主 agent 串行编码
跨批次注意:
- {文件} 被 S-01 和 S-03 共同修改 → 第 2 批编码时需读取第 1 批实现结果
确认批次规划合理。
阶段 3:分批编码实施
核心阶段。每批独立编码 + 独立验证。
执行策略
┌─ 子需求 < 3:单批次 ───────────────────────┐
│ 主 agent 直接编码全部骨架 → 验证 → 落盘 │
└─────────────────────────────────────────────┘
┌─ 子需求 ≥ 3:分批次 ─────────────────────────────────┐
│ │
│ 第 1 批 [顺序无关] → task-dispatch 并行 ← 加速! │
│ ↓ │
│ 第 2 批 [顺序无关] → task-dispatch 并行 ← 加速! │
│ ↓ │
│ 第 2 批 [依赖前批] → 主 agent 串行 │
│ ↓ │
│ ... 直到全部完成 → 阶段 4 全局契约验证 │
└─────────────────────────────────────────────────────────┘
并行判定
| 当前批次特征 | 策略 |
|---|---|
| 仅 1 个子需求 | 主 agent 直接编码 |
| ≥ 2 个子需求(顺序无关) | 调用 task-dispatch skill 并行编码 |
| 有依赖关系 | 主 agent 串行编码 |
task-dispatch 调度要点
task-name:implement-{功能简称}(如 implement-user-system)
子任务拆分:每个顺序无关的子需求拆为一个子任务:
| 编号 | 子任务 | 子需求 | 涉及文件 | 待实现方法 | 待解决 TODO |
|------|--------|--------|----------|-----------|-------------|
| I-01 | S-01 编码 | 用户服务 | user_service.py | 3 方法 | 1 TODO |
| I-02 | S-02 编码 | 订单服务 | order_service.py | 4 方法 | 0 TODO |
独立性校验:各子需求之间无文件交集(由骨架批次规划保证),可同批并行。
子 agent prompt 要点:
你是子 agent,负责编码子需求 S-{NN}:{名称} 的方法实现 + 解决 TODO 标记。
## 骨架文件
{列出该子需求涉及的骨架文件路径,子 agent 需先读取这些文件}
## 编码上下文
### 风格参考(来自 code-survey)
{从阶段 1 提取的风格参考信息}
### 依赖参考(来自 dependency-docs)
{从阶段 1 提取的、与该子需求相关的依赖文档信息}
依赖文档路径(子 agent 需读取原文以获取接口细节):
- dependencies/{依赖1名称}.md → {文件绝对路径}
- dependencies/{依赖2名称}.md → {文件绝对路径}
## 输出目录
产出:.codebuddy/task-dispatch/implement-{功能简称}/subtasks/I-{NN}/code/
- 代码按项目相对路径摆放(如 src/services/user_service.py)
报告:.codebuddy/task-dispatch/implement-{功能简称}/subtasks/I-{NN}/report.md
## 编码步骤
按顺序执行:
1. 读取骨架文件,理解契约注释(方法签名、参数、返回值、异常、预期行为)
⚠️ **骨架注释为准**:若骨架契约注释与设计文档内容不一致,以骨架注释为准——骨架是设计文档的精确转译,编码遵循骨架中的最终契约
2. 读取 code-survey 调研结果,确保实现符合项目风格
3. 若契约注释引用了依赖文档,读取对应 dependency-docs 了解接口细节
4. 按契约注释就地补全方法体(替换占位符为实现代码)
5. 就地解决 TODO 标记(替换/修改/删除,按变更类型处理)
6. 保留契约注释(不删除,作为实施参考留存)
## 编码原则
### 新增方法编码
- 读取契约注释理解预期行为
- 按"预期行为"中的步骤顺序实现方法体
- 异常处理按契约注释中的"异常"字段实现
- 确保返回值类型和结构与契约一致
- 若引用了依赖文档,按依赖文档的接口清单和认证方式实现调用
### TODO 标记解决
按变更类型分级处理:
| 变更类型 | 解决策略 |
|----------|----------|
| 新增方法 | 删除 TODO 标记,在 TODO 位置实现完整方法体 |
| 修改方法 | 删除 TODO 标记,按 TODO 中描述的变更点修改原实现 |
| 删除方法 | 删除 TODO 标记 + 删除原方法(仅当 TODO 注明可安全删除时),否则保留 TODO 并标注"待人工确认" |
| 重构/替换 | 删除 TODO 标记,按 TODO 中描述的新逻辑替换原实现,确保兼容性要求满足 |
### 契约注释处理
- 保留契约注释作为实施参考,不删除
- 若方法已实现且契约注释过长(> 15 行),可精简为 ≤ 8 行(保留:参数、返回值、异常、预期行为概括、依赖文档、设计文档锚点)
### 依赖文档使用
- 契约注释中标注了"依赖文档:dependencies/{名称}.md"的方法,编码时必须读取对应依赖文档
- 调用外部 API 时按依赖文档的接口清单、认证方式、限流策略实现
- 不猜测外部 API 的参数和返回值格式,严格按依赖文档实现
## 批内自检
编码后自查:
☐ 所有占位符已替换为实现代码
☐ 所有 TODO 标记已解决或标注"待人工确认"
☐ 方法签名与契约注释一致(未擅自修改)
☐ 异常处理覆盖契约注释中的所有异常场景
☐ 返回值类型和结构与契约一致
☐ 实现风格与 code-survey 调研结果一致
☐ 涉及第三方依赖的方法按依赖文档实现
完成后写 report.md,列出产出文件和自检结果。
合并
主 agent 收集各子 agent 产出,按项目相对路径合并已实现文件到项目源码目录。注意:
- 同批顺序无关的产出无文件交集,直接合并
- 跨批次时,后批需读取前批已实现的最新文件再编码
批次完成确认
✅ 第 {N} 批编码完成
并行子任务:M 个(全部完成)
已实现方法:X 个
已解决 TODO:Y 个(待人工确认:Z 个)
进入下一批 / 进入阶段 4 契约验证
阶段 4:实现契约验证
全部批次编码完成后,将实现代码与骨架契约逐项比对。
验证维度
| 维度 | 验证内容 | 通过标准 |
|---|---|---|
| 方法覆盖 | 骨架中所有占位符方法都已实现 | 100% 覆盖 |
| 签名一致 | 实现后的方法签名与骨架契约注释一致 | 零偏差 |
| 异常覆盖 | 实现中处理了契约注释中的所有异常场景 | 100% 覆盖 |
| 行为完整 | 实现逻辑覆盖契约注释中的"预期行为"步骤 | ≥ 95% 覆盖 |
| TODO 解决 | 所有 TODO 标记已解决或标注"待人工确认" | 100% 处理 |
| 依赖正确 | 调用外部 API/SDK 的实现与依赖文档一致 | 零偏差 |
| 风格一致 | 命名规范、注释风格、异常模式、import 组织方式与 code-survey 调研结果一致 | 无明显偏差 |
输出格式
📐 实现契约验证
验证范围:全部 N 批
逐项核对结果:
✅ 方法覆盖:{X}/{X},100%
✅ 签名一致:零偏差
⚠️ TODO 解决:{Y-1}/{Y},1 个标注"待人工确认" → {TODO 内容}
✅ 依赖正确:零偏差
一致性结果:✅ 一致 / ⚠️ 存在偏差(列出偏差项)
### 冲突处理规则
编码过程中若发现骨架契约注释与设计文档不一致:
- **以骨架契约注释为准**——骨架是 design-to-code 对设计文档的精确转译,转译中的调整(如签名微调、异常补充)反映了更准确的实施契约
- 不回退设计文档去"纠正"骨架注释
- 若偏差显著且怀疑骨架有误,向用户确认后再调整
偏差处理:遗漏方法补充实现;签名偏差以骨架契约为准修正;TODO 争议提交用户确认
验证通过后进入阶段 5 落盘。
阶段 5:落盘与状态更新
更新 skeleton-status.md
在原 skeleton-status.md 中追加编码实施状态:
## 编码实施状态
编码时间:{YYYY-MM-DD HH:MM}
编码批数:共 N 批(其中 M 批使用 task-dispatch 并行)
### 实施进度
| 子需求 | 待实现方法 | 已实现方法 | 待解决 TODO | 已解决 TODO | 状态 |
|--------|-----------|-----------|-------------|-------------|------|
| S-01 | 5 | 5 | 1 | 1 | ✅ 已完成 |
| S-02 | 4 | 4 | 0 | 0 | ✅ 已完成 |
### 待人工确认项
{列出标注"待人工确认"的 TODO 或契约偏差项,无则写"无"}
### 契约验证
- 验证结果:✅ 一致 / ⚠️ 存在偏差
- 偏差记录:无 / {偏差列表}
输出格式
✅ 代码实施已落盘
已实现文件:已写入项目源码目录
状态更新:{路径}/skeleton-status.md(追加编码实施状态)
统计:
- 已实现方法:X 个
- 已解决 TODO:Y 个(待人工确认:Z 个)
- 契约验证:✅ 一致 / ⚠️ 存在偏差
🚀 后续行动选择
1. 📋 归档实现结果(implementation-report)
2. 🧪 编写测试(test-planner)
3. ⏭️ 暂不后续
反模式(不要做)
上下文准备层面
- ❌ 不读骨架契约注释直接凭记忆写代码——契约注释就是编码依据
- ❌ 不读 code-survey 调研结果直接按自己习惯写——应与项目风格一致
- ❌ 不读 dependency-docs 依赖文档凭猜测调用外部 API——应按文档精确实现
- ❌ 跳过阶段 0 直接编码——参考文档可能包含关键风格/依赖信息
- ❌ 骨架注释与设计文档不一致时回退设计文档"纠正"骨架——骨架注释为准,是编码应遵循的最终契约
编码执行层面
- ❌ 擅自修改方法签名——发现契约问题应回到 design-craft 修订设计
- ❌ 删除契约注释——保留作为实施参考,可精简但不能删除
- ❌ 忽略 TODO 标记中的影响范围和兼容性要求——编码前必须理解这些信息
- ❌ 把多个 TODO 标记合并处理——应就地逐一解决
- ❌ 实现方法时遗漏契约注释中的异常场景
验证层面
- ❌ 跳过契约验证直接交付——偏差会累积到后续阶段
- ❌ 契约偏差时自行判断以实现为准——应以骨架契约为准修正实现
- ❌ "待人工确认"项自行决定——必须提交用户确认
附加资源
- 骨架生成:
design-to-codeskill(生成骨架+契约注释) - 代码调研:
code-surveyskill(编码前了解项目风格和模式) - 依赖文档:
dependency-docsskill(整理第三方依赖文档) - 并行任务调度:
task-dispatchskill(顺序无关批次并行编码) - 实现结果归档:
implementation-reportskill