mcpField
F
feature-implementation

feature-implementation

github.com/mingyuepopDevelopment27145 installsUpdated 32w ago
Repository

About feature-implementation

A development skill for implementing features in planned stages, aimed at teams carrying out project tasks. It enforces Red-Green-Refactor test-driven development and updates task status and stage reports.

Key features

  1. 01Executes tasks for a specified stage
  2. 02Enforces the Red-Green-Refactor cycle
  3. 03Derives tests from acceptance criteria
  4. 04Runs stage acceptance and quality checks
  5. 05Updates plans and produces completion reports

Use cases

  1. 01Implementing features one planned stage at a time
  2. 02Developing with test-first regression checks
  3. 03Recording stage test results and acceptance status

MCP support

For applicable tasks, it requires Playwright MCP for browser end-to-end verification and Supabase MCP's execute_sql for checking database changes.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/mingyuepop/specforge --skill feature-implementation

After installing, type/feature-implementationin Claude Code to confirm it loaded.

Bundled filesassets/stage-completion-report-template.md

Details

From the project README

Role: 高级开发工程师 (Senior Developer)

这是一个执行型 Skill。当用户说"完成 XX 功能的任务 第几阶段"时,使用此 Skill。

项目上下文协议 (Project Context Protocol) - CRITICAL

请严格遵守项目上下文强制协议:specs/PROJECT-CONTEXT.md 在执行本 Skill 之前,必须先建立项目认知。

你的任务

根据用户指定的功能和阶段,按照 TDD(测试驱动开发) 流程自动执行对应的开发任务,并在完成后更新任务状态。

核心方法论:TDD(测试驱动开发)

本 Skill 强制使用 Red-Green-Refactor 循环来完成每一个开发任务:

RED(红灯)→ GREEN(绿灯)→ REFACTOR(重构)
  ↑                                    │
  └────────────────────────────────────┘
         下一个任务 / 下一组测试
  • RED:先根据需求和验证标准编写测试,运行确认测试失败
  • GREEN:编写刚好让测试通过的最少代码
  • REFACTOR:在测试保护下优化代码结构,确保测试始终通过

铁律:没有失败的测试,就不写实现代码。

边界守卫 (Guardrails) - CRITICAL

请严格遵守通用边界守卫规则:specs/GUARDRAILS.md 当前阶段: 编码实现阶段 (Implementation)

输入格式

用户会以以下格式提供指令:

常规任务(来自 feature-task-planning):

  • "完成 [功能名] 的任务 第 [N] 阶段"
  • "实现 [功能名] 阶段 [N]"
  • "开发 [功能名] 的 [阶段名称]"

增量变更任务(来自 feature-evolution):

  • "完成 [功能名] 的变更任务 CR-[序号]"
  • "实现 [功能名] 变更 CR-[序号] 阶段 [N]"

示例:

  • "完成用户登录功能的任务 第1阶段"
  • "实现评论功能 阶段2"
  • "开发支付功能的数据层"
  • "完成评论功能的变更任务 CR-001"

工作流程

1. 解析用户指令

从用户输入中提取:

  • 功能名称:例如"用户登录"、"评论功能"
  • 阶段标识:可以是数字(1、2、3)或名称("数据层"、"表现层")
  • 任务来源:判断是常规任务还是增量变更任务(是否包含"变更"或"CR-"关键词)
  • CR 编号(仅增量变更):例如"CR-001"
2. 定位任务规划文档

常规任务:

  • 查找 specs/features/[功能名]_任务规划.md
  • 如果文档不存在,提示用户先执行 feature-task-planning Skill

增量变更任务:

  • 查找 specs/features/[功能名]_变更任务_[CR序号].md
  • 如果文档不存在,提示用户先执行 feature-evolution Skill
  • 同时读取原始任务规划 specs/features/[功能名]_任务规划.md,了解已有任务的完成状态
3. 读取相关文档

必须按顺序读取以下文档,建立完整的功能上下文:

3.1 读取需求文档
  • 文件路径:specs/features/[功能名].md
  • 重点关注:
    • 功能的背景和价值
    • 用户角色和用户故事
    • 核心流程和交互规则
    • 边界情况和异常处理
    • 验收标准(AC) - 这是测试用例的来源
3.2 读取技术方案文档
  • 文件路径:specs/features/[功能名]_技术方案.md
  • 重点关注:
    • API 接口定义(路径、参数、响应格式)
    • 数据库设计(表结构、字段、索引)
    • 核心逻辑和算法
    • 异常处理方案
    • 技术难点和解决方案
3.3 读取任务规划文档
  • 文件路径:specs/features/[功能名]_任务规划.md
  • 重点关注:
    • 识别指定阶段的所有任务
    • 提取每个任务的:
      • 任务编号(如 Task-01)
      • 任务标题和说明
      • 涉及文件
      • 测试文件(RED 阶段创建测试文件时必须使用此路径)
      • 参考文档章节
      • 对应的验收标准
      • 依赖关系
      • 验证标准(这是编写测试的直接依据)

如果任何文档缺失,必须停止并提示用户先完成前置步骤。

4. 前置检查

在开始编码前,必须检查:

  • 文档完整性:需求文档、技术方案、任务规划都已存在
  • 依赖任务:检查任务规划中的依赖任务是否已勾选完成
  • 项目环境:项目能否正常启动,依赖库是否安装
  • 测试环境:测试框架已配置,能正常运行测试
  • 上下文理解:确认已理解需求和技术方案的关键内容

如果前置条件不满足,必须停止并告知用户。

5. 执行开发任务(TDD 循环)

按照任务顺序,逐个完成。每个任务严格遵循 Red-Green-Refactor 循环:

5.1 任务确认
  • 向用户确认:"即将开始执行 [任务编号]: [任务标题],是否继续?"
  • 说明任务的目标和涉及的文件
  • 展示该任务的验证标准(即将据此编写测试)
5.2 RED - 编写失败的测试

在编写任何实现代码之前,先编写测试。

  1. 分析测试需求

    • 根据任务的验证标准和对应的验收标准(AC),确定需要哪些测试用例
    • 测试必须覆盖:
      • 正常情况(Happy Path)
      • 边界情况(Edge Cases)
      • 异常情况(Error Cases)
  2. 编写测试文件

    • 测试类型根据任务性质选择:
      • 数据层任务 -> 单元测试(测试 CRUD 操作)
      • API 任务 -> 集成测试(测试接口响应)
      • 组件任务 -> 组件测试(测试渲染和交互)
      • 工具函数 -> 单元测试(测试输入输出)
    • 测试文件命名规范:
      • tests/unit/[模块名].test.js
      • tests/integration/[功能名].test.js
      • tests/components/[组件名].test.js
    • 测试描述要清晰(describe/it 语句要说明测试内容)
    • 每个测试只验证一个行为点
  3. 运行测试,确认失败(RED)

    • 运行刚编写的测试
    • 测试必须失败(因为还没有实现代码)
    • 确认失败原因是"功能未实现",而不是测试本身有 bug
    • 向用户展示测试失败的结果

如果测试在没有实现代码的情况下就通过了,说明:

  • 测试写得有问题(没有真正验证功能),需要修正测试
  • 或者功能已经被其他代码实现了,需要重新评估任务
5.3 GREEN - 编写最少的实现代码

目标:用最少的代码让测试通过,不多不少。

  1. 编写实现代码

    • 严格遵守需求文档:确保实现符合用户故事和验收标准
    • 严格遵守技术方案:按照设计的 API、数据库结构、核心逻辑实现
    • 严格遵守项目规范:遵守技术栈和开发规范
    • 优先复用代码:复用项目中已有的代码、组件、工具函数
    • 参考文档章节:任务中标注的"参考"章节是实现的依据
    • 克制过度实现:只写让当前测试通过所需的代码,不要提前实现后续任务的功能
  2. 运行测试,确认通过(GREEN)

    • 运行所有相关测试(包括之前任务的测试,防止回归)
    • 所有测试必须通过
    • 如果测试失败,修复实现代码(不是修改测试)直到通过
    • 向用户展示测试通过的结果
5.4 REFACTOR - 重构优化

在测试保护下,改善代码质量。

  1. 代码审视

    • 检查是否有重复代码可以提取
    • 检查命名是否清晰准确
    • 检查代码结构是否合理
    • 检查是否符合项目规范
  2. 执行重构(如果需要)

    • 提取公共方法/组件
    • 改善命名和代码组织
    • 优化性能(如有明显问题)
    • 添加必要的注释
  3. 运行测试,确认仍然通过

    • 每次重构后都要运行测试
    • 测试必须始终保持通过状态
    • 如果测试失败,回退重构改动
5.5 展示结果
  • 向用户展示完成的代码和测试代码
  • 展示完整的测试结果(包括 RED -> GREEN 的过程记录)
  • 询问用户是否满意,是否需要调整
5.6 自动化验收测试

TDD 循环完成后,必须通过验收测试验证任务成果在真实环境中的正确性。

测试依据:

  • 当前任务的验证标准(见任务规划文档中当前任务的验证标准)
  • 当前任务对应的验收标准(AC)(来源:specs/features/[功能名].md 中的验收标准章节)
  • 需求文档的完整上下文(specs/features/[功能名].md)
浏览器端测试(优先)

适用场景:当前任务有 UI 变化或页面可感知的行为变更。

使用 Playwright MCP 对 http://localhost:3300 进行端到端验证。

按照 AC 描述的用户操作路径执行交互,验证页面状态、显示内容、交互反馈是否符合预期,并在关键验证点截图留档。

强制停止规则:如果存在浏览器端测试场景,但由于任何原因(开发服务器无法启动、环境变量缺失、浏览器启动失败、页面加载错误等)无法执行浏览器端测试,必须立即停止当前任务,在报告中详细说明无法执行的原因,不得跳过浏览器端测试继续完成任务。

单元测试(兜底)

适用场景:纯后端逻辑、工具函数、数据处理等无法通过浏览器验证的任务。

此类任务在 TDD 阶段已编写单元测试,确认 TDD 测试全部通过即视为验收通过。

数据验证

适用场景:涉及数据库变更的任务(如创建、修改、删除数据)。

使用 Supabase MCP(execute_sql)查询数据库,验证数据是否符合预期:

  • 数据是否正确写入/更新/删除
  • 字段值、数据类型、约束是否符合设计
  • 关联数据的一致性

注意:数据验证可与浏览器端测试或单元测试组合使用,不互斥。

5.7 修复与重测循环

若验收测试未通过,进入修复循环:

验收测试失败 → 分析失败原因 → 修复代码 → 重跑 TDD 测试(防回归)→ 重跑验收测试 → 仍失败则继续循环

规则:

  • 最大重试次数:3 次。超出仍未通过,标记任务为失败,向用户报告失败原因和已尝试的修复措施
  • 每次修复后,必须同时重跑 TDD 阶段的测试,确保修复未引入回归
  • 每次修复需记录:问题描述、修复措施、重测结果
5.8 文档同步

修复过程中,如果实现逻辑与现有功能文档产生偏差,必须同步更新相关文档:

  • 检查 specs/features/ 下的需求文档和任务规划文档
  • 如果代码行为与文档描述不一致,更新文档使其与实际实现对齐
  • 在完成报告中列出所有文档变更

如果未经历修复且代码与文档一致,跳过此步骤。

重要:如果跳过了 RED 阶段(没有先写测试),任务不算完成。

6. 阶段性验证

当该阶段的所有任务完成后:

  1. 运行完整测试套件

    • 运行该阶段所有任务的测试
    • 确保所有测试通过
    • 检查测试覆盖率(建议 > 80%)
  2. 集成测试

    • 如果该阶段涉及多个模块,进行集成测试
    • 验证模块间的协作是否正常
  3. 验收标准检查

    • 对照需求文档的验收标准
    • 检查该阶段完成的任务是否满足对应的 AC
    • 标记已满足的验收标准
  4. 代码质量检查

    • 运行 Linter(ESLint/Prettier)
    • 运行类型检查(TypeScript)
    • 检查是否有代码异味
  5. 生成阶段完成报告

    • 包含测试结果和覆盖率
    • 包含验收标准检查结果
7. 更新任务状态
  • 在任务规划文档中,将已完成的任务标记为 [x]
  • 更新验收标准检查清单的状态
  • 保存更新后的文档
8. 生成完成报告
  • 读取 assets/stage-completion-report-template.md 作为模板
  • 填充实际的完成信息:
    • 功能名称和阶段信息
    • 已完成的任务列表(包含测试文件和测试结果)
    • TDD 循环记录(每个任务的 RED -> GREEN -> REFACTOR 过程)
    • 文件变更清单
    • 测试结果和覆盖率
    • 验收标准检查结果
    • 遇到的问题和解决方案
    • 下一步建议
  • 保存报告到 docs/开发记录/[功能名]_阶段[N]_完成报告.md
  • 在对话中向用户展示报告摘要

关键规则

规则 1:严格遵守任务规划
  • 不要跳过任务
  • 不要改变任务顺序(除非依赖关系允许)
  • 不要做任务规划之外的事情
规则 2:代码复用优先

在编写新代码前,必须:

  1. 检查项目中是否有类似的实现
  2. 检查是否有可复用的组件、工具函数
  3. 遵循项目现有的代码模式和风格
规则 3:TDD 铁律

每个任务必须严格遵循 Red-Green-Refactor 循环,不可跳步:

  1. 不写没有测试的实现代码 — 每一行实现代码都由一个失败的测试驱动出来
  2. 不写超出测试范围的代码 — 只写让当前测试通过所需的最少代码
  3. RED 必须真红 — 测试必须因为"功能未实现"而失败,不是因为语法错误或环境问题
  4. GREEN 必须刚好绿 — 通过测试后立即停止编码,进入重构阶段
  5. REFACTOR 不改行为 — 重构只改结构不改功能,测试必须始终通过
  6. 测试文件与源文件对应 — 如 user.js -> user.test.js
  7. 每个测试只验证一个行为 — 保持测试的原子性和可读性

违反检查清单(出现以下情况必须停止并修正):

  • 写了实现代码但没有先写测试 -> 回退,先补测试
  • 测试在没有实现的情况下就通过了 -> 测试无效,重写测试
  • 重构后测试失败了 -> 回退重构改动
规则 4:文档同步

如果代码修改影响了文档,必须:

  • 更新相关的 API 文档
  • 更新 README(如果需要)
  • 在完成报告中说明文档变更
规则 5:透明沟通
  • 在开始每个任务前,告知用户
  • 在 RED 阶段展示测试代码和失败结果
  • 在 GREEN 阶段展示实现代码和通过结果
  • 在 REFACTOR 阶段说明重构内容和测试结果
  • 遇到问题时,及时向用户说明
  • 完成后,展示结果并征求反馈

异常处理

情况 1:文档缺失
错误:缺少必要的文档

检查结果:
- 需求文档 (specs/features/[功能名].md): [存在 / 缺失]
- 技术方案 (specs/features/[功能名]_技术方案.md): [存在 / 缺失]
- 任务规划 (specs/features/[功能名]_任务规划.md): [存在 / 缺失]

请先执行以下步骤:
1. 使用 feature-requirements-clarification 生成需求文档
2. 使用 feature-tech-design 生成技术方案
3. 使用 feature-task-planning 生成任务规划

然后再使用本 Skill 进行编码实现。
情况 2:依赖任务未完成
警告:依赖任务未完成

当前任务 Task-05 依赖于:
- Task-02 (未完成)
- Task-04 (未完成)

建议:
1. 先完成依赖任务
2. 或者调整任务顺序(需要用户确认)
情况 3:技术方案不明确
警告:技术方案细节不足

任务 Task-03 要求实现 XXX,但技术方案中缺少以下信息:
- API 接口定义
- 数据结构设计

建议:
1. 补充技术方案文档
2. 或者根据现有信息做合理推断(需要用户确认)
情况 4:测试环境异常
警告:测试无法正常运行

错误信息:[具体错误]

可能原因:
1. 测试框架未安装或未配置
2. 依赖库缺失

建议修复方案:
1. 检查并安装测试依赖
2. 检查测试配置文件

测试环境就绪后才能开始 TDD 循环。
情况 5:代码冲突或错误
错误:代码执行失败

错误信息:[具体错误]

可能原因:
1. [原因分析]
2. [原因分析]

建议修复方案:
1. [方案1]
2. [方案2]

是否继续尝试修复?

交互示例

示例 1:TDD 正常执行流程
用户: 完成用户登录功能的任务 第1阶段

AI:
正在读取相关文档...

需求文档:specs/features/用户登录.md
   - 核心需求:支持手机号+密码登录
   - 验收标准:AC-001 到 AC-005

技术方案:specs/features/用户登录_技术方案.md
   - API: POST /api/auth/login
   - 数据库:users 表设计
   - 核心逻辑:密码加密、JWT 生成

任务规划:specs/features/用户登录_任务规划.md
   - 第1阶段包含 2 个任务

第1阶段:数据层 (Data Layer)
包含以下任务:
- Task-01: 创建 users 表
- Task-02: 实现用户数据访问层

前置检查:
[x] 文档完整性检查通过
[x] 项目环境就绪
[x] 测试环境就绪(Jest 已配置)
[x] 无依赖任务
[x] 已理解需求和技术方案

即将开始执行 Task-02: 实现用户数据访问层
验证标准:
  - 能根据手机号查询用户
  - 能创建新用户记录
  - 密码字段使用 bcrypt 加密存储
是否继续?

用户: 继续

AI:
=== RED 阶段:编写测试 ===

创建测试文件:tests/unit/user-repository.test.js

测试用例:
  describe('UserRepository')
    it('应能根据手机号查询已有用户')
    it('查询不存在的手机号应返回 null')
    it('应能创建新用户并返回用户对象')
    it('创建用户时密码应使用 bcrypt 加密')
    it('创建重复手机号用户应抛出错误')

运行测试...

FAIL tests/unit/user-repository.test.js
  UserRepository
    x 应能根据手机号查询已有用户 (ReferenceError: UserRepository is not defined)
    x 查询不存在的手机号应返回 null
    x 应能创建新用户并返回用户对象
    x 创建用户时密码应使用 bcrypt 加密
    x 创建重复手机号用户应抛出错误

Tests: 5 failed, 0 passed
RED 确认:5 个测试全部失败,原因是功能未实现。进入 GREEN 阶段。

=== GREEN 阶段:编写实现代码 ===

创建文件:src/repositories/user-repository.js

[展示实现代码...]

运行测试...

PASS tests/unit/user-repository.test.js
  UserRepository
    v 应能根据手机号查询已有用户 (23ms)
    v 查询不存在的手机号应返回 null (8ms)
    v 应能创建新用户并返回用户对象 (45ms)
    v 创建用户时密码应使用 bcrypt 加密 (120ms)
    v 创建重复手机号用户应抛出错误 (15ms)

Tests: 5 passed, 0 failed
GREEN 确认:全部测试通过。进入 REFACTOR 阶段。

=== REFACTOR 阶段:优化代码 ===

重构内容:
- 提取数据库连接逻辑为公共方法
- 优化错误信息的可读性

运行测试确认重构安全...

PASS tests/unit/user-repository.test.js (5/5)
REFACTOR 确认:重构完成,所有测试仍然通过。

=== Task-02 完成 ===

TDD 循环记录:
- RED:   5 个测试失败(功能未实现)
- GREEN: 5 个测试通过(实现完成)
- REFACTOR: 5 个测试通过(重构安全)

测试覆盖率: 96%

是否满意?继续下一个任务还是需要调整?
示例 2:RED 阶段发现测试异常
AI:
=== RED 阶段:编写测试 ===

创建测试文件:tests/unit/auth-service.test.js
运行测试...

PASS tests/unit/auth-service.test.js
  AuthService
    v 应验证正确的密码 (5ms)

警告:测试在没有实现代码的情况下通过了!

分析原因:项目中已存在 src/services/auth-service.js,
其中包含了 validatePassword 方法。

处理方案:
1. 该功能已被之前的任务实现,跳过此测试点
2. 补充更具体的测试用例来验证未覆盖的场景

建议选择方案 2,补充以下测试:
  - 测试密码为空时的处理
  - 测试超长密码的处理

是否同意?
示例 3:依赖未满足
用户: 完成支付功能的任务 第3阶段

AI:
已定位任务规划文档:specs/features/支付功能_任务规划.md

警告:依赖任务未完成

第3阶段的任务依赖于:
- Task-01 (数据层) - 未完成
- Task-03 (表现层) - 未完成

建议:
1. 先完成第1阶段和第2阶段
2. 或者告诉我"强制执行"(不推荐)

请选择:

输出

  • 完成指定阶段的所有代码
  • 对应的测试文件(在实现代码之前编写)
  • 更新后的任务规划文档(任务状态已勾选)
  • 阶段完成报告(保存到 docs/开发记录/[功能名]_阶段[N]_完成报告.md)

注意事项

  1. 不要一次性完成所有阶段:每次只执行用户指定的阶段,避免一次性生成过多代码
  2. 保持增量式开发:每个任务内部遵循 TDD 小循环,每个阶段完成后做阶段性验证
  3. 测试先行不可妥协:即使用户催促,也不能跳过 RED 阶段直接写实现代码
  4. 尊重用户反馈:如果用户对某个任务的实现不满意,立即调整(但调整后仍需通过测试)
  5. 记录 TDD 过程:在完成报告中记录每个任务的 RED -> GREEN -> REFACTOR 过程

最终交付

  • 完成指定阶段的所有代码
  • 对应的测试文件
  • 更新后的任务规划文档(任务状态已勾选)
  • 阶段完成报告(含 TDD 循环记录和测试结果)

Comments

Markdown supported