跳转到内容

code-implementor

基于完整规格链(时序图、API YAML、DB DDL、测试用例规格)生成业务代码与测试代码。确保严格忠于规格、嵌入 OpenLogos reporter,并按场景交付闭环批次。

  • Phase:Phase 3 — HOW(实现),Step 4
  • 触发条件
    • 用户请求代码实现或代码生成
    • 用户提到「Phase 3 Step 4」「实现 S01」「生成代码」
    • 测试用例设计已完成(logos/resources/test/ 非空)
  • 时序图位于 logos/resources/prd/3-technical-plan/2-scenario-implementation/(必需)
  • API 规格位于 logos/resources/api/(如有)
  • DB DDL 位于 logos/resources/database/(如有)
  • 测试用例规格位于 logos/resources/test/(必需)
  • logos/logos-project.yaml 中含 tech_stack(必需)

如果时序图或测试用例缺失,提示用户先完成 Step 1(scenario-architect)与 Step 3a(test-writer)。

与 test-writer 和 code-reviewer 的关系

Section titled “与 test-writer 和 code-reviewer 的关系”

此 Skill 位于三 Skill 链条的中间:

Skill角色类比
test-writer(Step 3a)设计测试用例规格文档 —— 定义 UT/ST ID出题人
code-implementor(Step 4)将所有规格转化为可运行的业务代码与测试代码答题人
code-reviewer(Step 4 之后)对照规格审查生成的代码 —— 输出审查报告阅卷人

test-writer 不写代码;code-implementor 不设计测试用例;code-reviewer 不修改代码。三者共同构成设计 → 执行 → 审查的闭环。

  1. 加载完整规格上下文(7 类文档)以建立实现基线
  2. 规划分批执行策略 —— 按场景或模块拆分
  3. 生成与 API YAML 严格一致的业务代码(路由、状态码、错误码、字段)
  4. 生成与 DB DDL 严格对齐的数据访问代码(表名、列名、类型、约束)
  5. 生成 ID 与 test-cases.md 完全匹配的测试代码
  6. 在测试代码中嵌入 OpenLogos reporter(输出到 test-results.jsonl
  7. 每批次后自检以确保忠于规格

在编写任何代码之前,先阅读这些文档以建立完整上下文:

文档路径用途
架构prd/3-technical-plan/1-architecture/结构、框架、模式
时序图prd/3-technical-plan/2-scenario-implementation/实现蓝图
API 规格logos/resources/api/*.yaml端点契约
DB DDLlogos/resources/database/*.sql数据层契约
测试用例规格logos/resources/test/*-test-cases.md验证目标
编排测试logos/resources/scenario/*.json端到端目标(API 项目)
项目配置logos/logos-project.yaml技术栈、依赖

大任务必须分批,但每批都必须闭环

  1. 拆分维度:按场景(S01、S02)或按模块(auth、projects)
  2. 批前声明:列出本批覆盖的 UT/ST 用例 ID,确保可追溯到 logos/resources/test/*.md
  3. 闭环要求:每批交付业务代码 + 测试代码 + reporter
  4. 禁止延后测试:禁止「先写完所有业务代码,之后再补测试」

遵循时序图 Step 序列,并坚持:

API 忠实度 —— 路由路径、HTTP 方法、请求/响应字段、状态码与错误格式必须与 API YAML 定义完全一致。

DB 忠实度 —— 表名、列名、类型与约束必须与 DDL 匹配。多表写入必须使用事务。所有查询都必须参数化。

异常处理 —— 时序图中的每个 EX 情况都需要对应的错误处理分支。不允许空 catch 块。多步骤失败需要补偿/回滚。

测试 ID 契约:测试代码中的 ID 必须与 test-cases.md 完全匹配 —— UT-S01-01 原样使用,不得重命名或缩写。这些 ID 构成跨阶段契约:test-cases.md → 测试代码 → test-results.jsonl → acceptance-report.md。

OpenLogos Reporter:每个测试文件都按 logos/spec/test-results.md 模板嵌入 reporter。输出:logos/resources/verify/test-results.jsonl,JSONL 格式。

每批次后,验证:

  • API 路由与状态码匹配 YAML
  • DB 操作使用 DDL 中的正确名称
  • 多表写入使用事务
  • 所有预先声明的 UT/ST ID 都存在于测试代码中
  • Reporter 已嵌入且输出路径正确
  • 无硬编码的敏感数据
  1. 提示用户运行测试(如 npm testpytest
  2. 确认 test-results.jsonl 已生成
  3. 所有批次完成后:引导用户运行 openlogos verify(Gate 3.5)
  4. 如需代码质量审查:建议使用 code-reviewer
产出目标位置
业务代码项目源码树
测试代码项目测试目录
Reporter嵌入测试代码中
JSONL 结果logos/resources/verify/test-results.jsonl(测试运行时生成)

此 Skill 不在 logos/resources/ 下产生文件 —— 代码进入项目源码树;JSONL 在测试运行时产生。

  • 忠于规格是第一优先级 —— 大多数生产 bug 源自代码与规格之间的细微不一致
  • 同一批次内业务代码先于测试代码无妨,但两者必须在同一批次完成
  • 别忘了 reporter —— 没有 reporter 就无法通过 openlogos verify 自动验证
  • 不要臆造测试 ID —— ID 必须来自 test-cases.md,绝不自行创建
  • 不要跳过异常处理 —— 时序图中的每个 EX 情况都需要一个代码分支
  • 自检比返工便宜 —— 5 分钟的 Step 5 可避免 30 分钟的 code-reviewer 返工
  • 批次粒度 —— 一个场景一批是最佳点;一个端点一批则过细