code-implementor
暂无简介
- License 许可
- Apache-2.0
- 最近更新
- 2026-10-18
- Stars
- ★ 581
- Forks
- 9
02 资源文件 1
- 参考文档SKILL.en.md10.9 KB
03 SKILL.md 正文
Skill: Code Implementor
基于完整规格链(时序图、API YAML、DB DDL、测试用例规格)生成业务代码和测试代码。确保代码与规格严格一致,嵌入 OpenLogos reporter,按场景分批交付闭环产物。
触发条件
- 用户要求实现代码、生成代码或编写代码
- 用户提到 "Phase 3 Step 5"、"代码生成"、"帮我实现 S01"
- 测试用例设计已完成(
logos/resources/test/非空),需要开始编码 - 用户指定某个场景编号(如 S01)需要实现
前置依赖
logos/resources/prd/3-technical-plan/2-scenario-implementation/中包含场景时序图(必需)logos/resources/api/中包含 API 规格(有则读取)logos/resources/database/中包含 DB DDL(有则读取)logos/resources/test/中包含测试用例规格(必需)logos/logos-project.yaml中包含tech_stack(必需)
如果时序图或测试用例目录为空,提示用户先完成 Phase 3 Step 1(scenario-architect)和 Step 4a(test-writer)。
核心能力
- 加载完整规格上下文,建立实现基准
- 规划分批策略,按场景或模块拆分大任务
- 生成与 API YAML 严格一致的业务代码(路由、状态码、错误码、字段)
- 生成与 DB DDL 严格对齐的数据访问代码(表名、列名、类型、约束)
- 生成与 test-cases.md 中 ID 完全对齐的测试代码
- 在测试代码中嵌入 OpenLogos reporter(输出到
test-results.jsonl) - 每批完成后执行自检,确保规格一致性
与 test-writer 和 code-reviewer 的关系
本 Skill 处于三者链条的中间位置:
- test-writer(Step 4a):设计测试用例规格文档(Markdown),定义 UT/ST ID——是"出卷人"
- code-implementor(Step 5,本 Skill):将所有规格转化为可运行的业务代码和测试代码——是"答卷人"
- code-reviewer(Step 5 之后):拿着规格审计已生成的业务代码,输出审查报告——是"阅卷人"
test-writer 不写代码;code-implementor 不设计用例;code-reviewer 不修改代码。三者形成 设计 → 执行 → 审查 闭环。
执行步骤
Step 1: 加载规格上下文
在写任何一行代码之前,必须读取以下文档建立完整上下文:
| 文档 | 路径 | 用途 |
|---|---|---|
| 技术架构 | prd/3-technical-plan/1-architecture/ |
整体结构、框架、设计模式 |
| 场景时序图 | prd/3-technical-plan/2-scenario-implementation/ |
实现蓝图——Step 序列即代码调用链 |
| API 规格 | logos/resources/api/*.yaml |
端点契约——路由、方法、状态码、字段定义 |
| DB DDL | logos/resources/database/*.sql |
数据层契约——表结构、约束、索引 |
| 测试用例规格 | logos/resources/test/*-test-cases.md |
验证目标——UT/ST ID、预期输入输出 |
| 编排测试 | logos/resources/scenario/*.json |
端到端验证目标(API 项目) |
| 项目配置 | logos/logos-project.yaml |
tech_stack、external_dependencies |
| 源码位置 | logos/logos.config.json → sourceRoots |
业务代码和测试代码的输出根目录 |
读取完成后,确认以下信息:
- 本次实现涉及哪些场景(S01、S02...)
- 涉及哪些 API 端点和 DB 表
- 对应的 UT/ST 用例总数
- 技术栈确认(语言、框架、测试框架)
- 源码输出目录确认(读取
sourceRoots.src和sourceRoots.test,若不存在则默认src/和test/) - verify 预跑配置确认:
verify.pre_run_command、verify.regression_command或verify.incremental_command至少存在一个;若缺失则需要在实现前补齐或明确诊断
Step 2: 规划分批策略
⚠️ 适用范围(必读):本 Step 的「六维打分 + 分批 / 切片判定」仅适用于 initial 阶段——首轮从 0 到 1 开发,没有变更提案、没有
tasks.md,需由实现者自行按场景 / 子模块分批。launched 变更下本 Step 不适用:切片数量已由
slice-planner在 merge 之后的slice段(ready-to-implement)用六维打分 + 垂直/横向判别器 + 删后续证伪门写进tasks.md的[code]section(每个未勾行 = 一片,是唯一事实源;见skills/slice-planner/SKILL.md)。code-implementor 在 launched 下不得重新打分、不得自行分批,必须逐行消费[code]切片——做哪一片、做几片,一律以[code]为准(具体执行见下方「Step 2 补充」的激活门)。
(以下仅 initial)只有大任务才拆批;大任务 = 切片评分 8 分及以上。每批必须闭环。
在规划分批前,先按 6 个维度打分(每项 0/1/2,总分 0-12):
| 维度 | 0 分 | 1 分 | 2 分 |
|---|---|---|---|
| 影响范围 | 1 个文件或局部函数 | 2-5 个相关文件 | 跨模块 / 跨服务 / 跨端 |
| 行为复杂度 | 单一路径 bugfix | 2-3 个分支 | 多场景 / 状态机 / 异步流程 |
| 契约变化 | 无 | CLI/API 输出小改 | API/DB/flow/兼容契约变更 |
| 测试规模 | 1-3 个用例 | 4-8 个用例 | 9+ 个用例或多类测试矩阵 |
| 风险等级 | 易回滚 | 有兼容性风险 | 涉数据、安全、部署、迁移 |
| 不确定性 | 原因明确 | 1 个待验证假设 | 多个未知点 / 需要探索 |
判定规则:
- 0-7 分:不是大任务,必须单批 / 单切片实现,不得把测试、reporter、golden baseline 拆成独立批次。
- 8 分及以上:定义为大任务,需要拆批 / 切片实现。
- 无法垂直闭环时仍单批:即使达到 8 分,如果拆不出独立可验证的垂直闭环,保留单批并说明原因。
- 拆分维度:按场景(S01、S02)或按模块(auth、projects)拆分
- 批前声明:每批开始前,列出本批覆盖的 UT/ST case ID 清单,确保与
logos/resources/test/*.md可追溯 - 闭环要求:每批必须同时交付三要素——业务代码 + 测试代码 + reporter
- 不得延迟测试:不允许"先写完所有业务代码,最后统一补测试"
输出格式示例:
## 本批次范围
- 场景:S01(用户注册)
- 端点:POST /api/auth/register, POST /api/auth/verify-email
- DB 表:users, profiles
- 覆盖用例:UT-S01-01 ~ UT-S01-08, ST-S01-01 ~ ST-S01-03
Step 2 补充:切片循环驱动模型(change-flow-redesign)
自 change-flow-redesign 起,launched
implement默认以切片循环推进(场景 S31)。tasks.md的[code]section 每个未勾行 = 一个切片,由宿主(如 RunLogos driver)逐片驱动;Step 2 的"分批策略"在 launched 下即对齐这些切片。
? 激活前提(最高优先级,必读):下列「每轮只实现一片」的纪律,仅当
openlogos next实际返回了next_node.slice(即宿主 / driver 正逐片注入「只做这一片」的上下文)时才适用。若你并未被逐片注入——例如手动执行、没有 driver 驱动循环、或所用
openlogosCLI 不支持切片循环(< 0.11,next不输出next_node.slice/slice_state)——则必须在本次实现里把整个[code]section 的所有未勾切片一次性全部实现完(每片仍各自闭环:业务代码 + 该片 UT/ST + reporter),全部完成后再交verify。严禁在没有逐片注入的情况下,自行把单个
[code]行当作「第一个切片」、实现完就停下等下一轮。为什么:切片只 scopecode的上下文注入、不 scope verify(verify 永远全量回归);只做完一片就跑全量 verify 必然飘红(其余切片的测试尚不存在 / 不过),循环无法出环,会直接死锁在verify-failed。
切片循环下的实现纪律(仅在上述激活前提满足、即宿主正逐片注入时适用):
- 每轮只实现一片:宿主读
openlogos next的next_node.slice/slice_state.current注入"只做这一片 + 该片相关 spec/测试"的上下文。逐片注入正是为规避"一次塞太多导致 AI 失败"。 - 每片自闭环:该片的业务代码 + 该片 UT/ST 测试 + reporter 同批交付(与既有 Step 2「闭环要求」一致),切片 ID 来自
[code]行标注的UT-Sxx-../ST-Sxx-..。 - verify 跑全量回归,不只跑本片:
openlogos verify始终全量执行——切片只 scopecode的上下文注入,不 scope verify;这样后做切片若打断先做切片,全量 verify 会飘红、loop 不出环,从模型层杜绝"局部绿全局红"。 - 绿后才勾该片:该片相关测试(及全量回归)满足后,由宿主把
tasks.md[code]该行勾上——OpenLogos 只派生、不代勾。 - 收敛 = 全部切片勾选 ∧ 末轮全量测试绿(
code_slices_green);达max_iters(默认 30)仍未达成升级gate:implement:loop-exhausted(skippable:false,默认不放行未完成大功能)。 - 修哪片由 verify 失败输出决定:
next_node.slice提示的是"下一个未建切片",不是"该修哪片";回归飘红时具体修复目标由全量 verify 失败信息判断,归宿主/实现者,引擎不代判。
非 launched(initial 单模块默认 / initial 多模块)不默认激活切片循环,沿用既有"按场景/子模块分批"策略。
Step 3: 生成业务代码
按时序图 Step 序列逐步实现业务逻辑,严格遵守以下规格一致性规则:
API 一致性(必须遵守)
| 规则 | 说明 |
|---|---|
| 路由路径 | 代码中的路由必须与 API YAML 的 paths 完全一致 |
| HTTP 方法 | GET/POST/PUT/DELETE 必须匹配 |
| 请求体字段 | 代码必须读取 YAML requestBody.schema 中定义的所有 required 字段 |
| 字段验证 | type、format(email/uuid)、minLength 等约束必须在代码中实现验证 |
| 响应字段 | 返回的 JSON 字段名和类型必须与 YAML responses.schema 一致 |
| HTTP 状态码 | 正常和错误情况的状态码必须与 YAML 定义一致(不能把 201 写成 200) |
| 错误响应格式 | 必须遵循统一的 { code, message, details? } 格式 |
DB 一致性(必须遵守)
| 规则 | 说明 |
|---|---|
| 表名和列名 | 代码中引用的表名、列名必须与 DDL 一致(无拼写错误、大小写差异) |
| 字段类型 | 传入的值类型必须与 DDL 定义匹配(如金额字段用分而非元) |
| 约束遵守 | NOT NULL 字段必须有值;UNIQUE 字段必须处理冲突;CHECK 约束的枚举值需有对应常量 |
| 事务使用 | 多表写操作必须包裹在事务中 |
| 参数化查询 | 禁止字符串拼接 SQL,必须使用参数化查询 |
异常处理(必须遵守)
- 时序图中的每个 EX 异常用例必须在代码中有对应的错误处理分支
- 外部服务调用(DB、第三方 API)必须有超时和错误处理
- 不允许空 catch 块(静默吞异常)
- 多步写入失败时需要有补偿/回滚机制
Step 4: 生成测试代码
测试 ID 契约
测试代码中的用例 ID 必须与 test-cases.md 中定义的 完全一致:
UT-S01-01在测试代码中必须原封不动使用,不允许改名、缩写或重排序- 这些 ID 是跨阶段契约:test-cases.md → 测试代码 → test-results.jsonl → acceptance-report.md
OpenLogos Reporter 嵌入(强制前置)
⚠️ Reporter 是第零步,不是最后一步。 在写任何测试用例代码之前,必须先创建共享 reporter 工具文件。没有 reporter,
openlogos verify无法读取结果,Gate 3.5 永远无法通过。
第一步:创建共享 reporter 文件
在测试目录下创建共享 reporter 工具文件(根据 tech_stack 选择语言),所有测试文件统一从这里 import,不要在每个测试文件里重复内联:
<sourceRoots.test>/
└── helpers/
└── reporter.ts ← 先建这个,再写测试用例
reporter 模板见 logos/spec/test-results.md。核心要求:
- 输出路径:
logos/resources/verify/test-results.jsonl - 格式:JSONL(每行一个 JSON 对象)
- 每个用例输出:
{ "id": "UT-S01-01", "status": "pass"|"fail"|"skip", ... } - 首次运行 truncate 文件,后续 append
- 写入前确保
logos/resources/verify/目录存在
第二步:在每个测试文件顶部 import reporter
import { reportResult } from './helpers/reporter';
第三步:每个测试用例用 try/catch 包裹并调用 reportResult
it('UT-S01-01: ...', () => {
const start = Date.now();
try {
// 测试逻辑
reportResult('UT-S01-01', 'pass', undefined, Date.now() - start);
} catch (e) {
reportResult('UT-S01-01', 'fail', String(e), Date.now() - start);
throw e;
}
});
Playwright E2E 测试使用 test.afterEach + fixture 捕获结果,参见 logos/spec/test-results.md 中的 Playwright 模板。
Smoke Runner / Reporter 闭环(强制)
如果本批实现新增或修改了 logos/resources/test/smoke/*.md,或当前活跃提案的 deltas/test/smoke/ 中存在新增/修改的 SMOKE-* 用例,必须在同一批代码中同步交付 smoke 可执行验收:
- 提取本提案新增或修改的
SMOKE-*用例 ID,逐项列入本批覆盖清单。 - 实现或更新
scripts/smoke-*.sh、scripts/smoke-*.js或等效 smoke runner;runner 必须执行真实检查,不能只伪造 pass 记录。 - smoke runner 必须将每个新增
SMOKE-*的执行结果写入logos/resources/verify/smoke-results.jsonl,或写入logos.config.json.smoke.result_path指定路径。 - 确保
logos.config.json.smoke.command能执行新增 runner;推荐使用统一scripts/run-smoke.jssmoke dispatcher 自动发现并顺序运行scripts/smoke-*。 - 完成后运行 smoke runner、
openlogos smoke --format json,或等效 smoke 覆盖预检;如出现smoke_runner_missing、smoke_reporter_missing、smoke_cases_uncovered,不得标记[code]任务完成。
测试代码结构
- 单元测试:每个 UT 用例对应一个独立的测试函数
- 场景测试:每个 ST 用例对应一个端到端流程测试
- 测试数据:每个测试准备独立的测试数据,测试后清理,确保幂等性
Step 5: 自检
每批代码完成后,执行以下自检(相当于 code-reviewer 的前置轻量版本):
- [ ] API 路由路径和 HTTP 方法与 YAML 一致
- [ ] HTTP 状态码(正常 + 异常)与 YAML 一致
- [ ] 错误响应格式遵循
{ code, message }规范 - [ ] DB 操作的表名、列名与 DDL 一致
- [ ] 多表写操作已使用事务
- [ ] 批前声明的所有 UT/ST ID 在测试代码中都存在
- [ ] 共享 reporter 文件已创建(
<test>/helpers/reporter.ts或等效路径) - [ ] 每个测试文件都已 import reporter,无遗漏
- [ ] 每个测试用例都有 try/catch + reportResult 调用,无遗漏
- [ ] 运行测试后
logos/resources/verify/test-results.jsonl已生成且非空 - [ ] 若本批新增或修改
SMOKE-*:smoke runner / reporter / dispatcher 已实现,smoke-results.jsonl覆盖新增 ID,且 smoke 覆盖预检无smoke_runner_missing/smoke_reporter_missing/smoke_cases_uncovered - [ ] 无硬编码敏感信息(密码、密钥、测试数据)
如果发现不一致,立即修正后再交付,不要等到 code-reviewer 阶段。
Step 6: 引导下一步
每批完成后:
-
提示运行测试:告诉用户运行测试命令(如
npm test、pytest) -
提示检查结果:确认
logos/resources/verify/test-results.jsonl已生成 -
所有批次完成后:引导用户运行
openlogos verify执行 Gate 3.5 验收 -
更新 sourceRoots:如果实际使用的源码目录与
logos.config.json中的sourceRoots不同,更新配置文件以反映实际路径。例如,如果业务代码放在app/而非默认的src/,将sourceRoots.src更新为["app"] -
自动写入
verify.pre_run_command:检查logos.config.json是否已有verify.pre_run_command、verify.regression_command或verify.incremental_command字段。若没有,根据logos-project.yaml的tech_stack推断默认命令并写入,确保后续openlogos verify能自动跑全量测试:tech_stack 关键词 写入命令 vitest npx vitest runjest npx jestpytest pytestgo test go test ./...cargo test cargo test无法推断 提示用户手动在 logos.config.json的verify.pre_run_command字段填写测试命令为什么必须配置:
openlogos-reporter每次运行测试时会清空test-results.jsonl,若只跑部分场景的测试,JSONL 将缺少其他场景的结果,导致openlogos verify覆盖率不足而失败。配置预跑命令后,openlogos verify会在读取 JSONL 前自动执行全量测试,确保覆盖率完整。若项目明确使用两阶段模型,也可写入verify.regression_command与verify.incremental_command,并保证阶段结果不会互相覆盖。 -
写入实现清单:在
logos/resources/implementation/目录下创建实现清单文件(如implementation-manifest.md),记录本次实现覆盖的场景、端点、用例 ID 等信息,标记 Phase 3-4 完成
如果用户希望审查代码质量,引导使用 code-reviewer Skill。
输出规范
- 业务代码:输出到
sourceRoots.src指定的目录(默认src/,以logos.config.json配置为准) - 测试代码:输出到
sourceRoots.test指定的目录(默认test/,以logos.config.json配置为准) - Reporter:嵌入测试代码中(非独立文件)
- JSONL 结果:
logos/resources/verify/test-results.jsonl - 实现清单:
logos/resources/implementation/implementation-manifest.md(所有批次完成后创建)
实践经验
- 规格一致性是第一优先级:代码必须与 API YAML / DB DDL 严格对齐——大部分生产 Bug 来自代码与规格的细微不一致
- 先写业务代码后写测试是允许的,但必须在同一批次内完成,不允许拆到不同批次
- Reporter 不要忘记:这是
openlogos verify能自动验收的关键——没有 reporter 就没有自动化验收 - 不要发明用例 ID:测试代码中的 ID 必须来自 test-cases.md,不允许自行新增或改名
- 不要跳过异常处理:时序图中标注的每个 EX 用例必须在代码中有对应分支
- 自检比返工便宜:Step 5 的 5 分钟自检可以避免 code-reviewer 阶段 30 分钟的返工
- 分批粒度:单批次不宜过大(一个场景是合适的粒度),也不宜过小(一个 API 端点太碎)
推荐提示词
以下提示词可以直接复制给 AI 使用:
帮我实现 S01 的代码基于规格文档帮我生成 S01 的业务代码和测试代码执行 Phase 3 Step 4,按场景分批实现帮我实现 S01,确保与 API YAML 和 DB DDL 一致Please execute Phase 3 Step 4 for S01. Deliver business code + test code + OpenLogos reporter in each batch.
04 同仓库更多 Skills
ui-ux-pro-max
UI/UX design intelligence. 67 styles, 96 palettes, 57 font pairings, 25 charts, 13 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient. Integrations: shadcn/ui MCP for component search and examples.
test-writer
暂无简介
test-orchestrator
暂无简介
slice-planner
暂无简介
scenario-architect
暂无简介
project-init
暂无简介