mcpField
D
definition-of-done

definition-of-done

github.com/validkeys测试与质量180 次安装19 周前更新
代码仓库

关于 definition-of-done

Definition of Done 是一项用于完善项目里程碑的技能,会依据业务需求及可选的技术需求,为 milestones.yaml 添加验收标准和退出清单。它面向已有规划产物的项目团队,帮助明确每个里程碑何时算完成。

主要功能

  1. 01从需求映射里程碑
  2. 02生成可验证的功能标准
  3. 03纳入适用的非功能标准
  4. 04整理测试与文档要求
  5. 05创建退出清单并备份文件

适用场景

  1. 01为里程碑补充验收标准
  2. 02将业务需求对应到交付阶段
  3. 03根据技术需求设置可测门槛
  4. 04审查里程碑完成情况

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/validkeys/sherpy --skill definition-of-done

安装后在 Claude Code 中输入/definition-of-done确认已加载。

附带文件examples/definition-of-done.yaml

详细介绍

完成定义

在现有的 milestones.yaml 中为每个里程碑添加详细的验收标准。弥合“计划说我们要构建 X”和“我们确定 X 已完成”之间的差距。为每个里程碑添加可选的 acceptance_criteria 和 exit_checklist 字段,内容直接依据需求制定,而不是使用通用清单。

前置条件

  • {base_directory}/implementation/milestones.yaml(由 /implementation-planner 输出)
    • 必须包含带有 id、name、description、success_criteria 的里程碑定义
    • 此技能会添加可选的 acceptance_criteria 和 exit_checklist 字段
  • {base_directory}/requirements/business-requirements.yaml(由 /business-requirements-interview 输出)
  • 可选:{base_directory}/requirements/technical-requirements.yaml,用于根据非功能性需求制定关卡

用法

/definition-of-done [base-directory]

如果未提供目录,则通过查找当前目录中的 implementation/milestones.yaml 自动检测。

如果未找到,请提示用户:“您的规划产物位于哪个位置?”

等待用户提供路径后再继续。将其存储为 base_directory。

流程

第 1 步:确定基础目录并加载产物

如果未提供目录参数,请检查当前目录中是否存在 implementation/milestones.yaml。

  • 如果找到,则使用当前目录作为 base_directory
  • 如果未找到,则提示:“您的规划产物位于哪个位置?”,并等待用户回复

确定 base_directory 后:

读取 {base_directory}/implementation/milestones.yaml,并提取每个里程碑的 id、name、description,以及任何 deliverables 或 tasks 引用。

读取 {base_directory}/requirements/business-requirements.yaml,并将每项功能需求映射到最可能负责交付该需求的里程碑。根据里程碑名称和描述进行判断,不要猜测任务级别的细节。

如果 {base_directory}/requirements/technical-requirements.yaml 存在,则读取它以提取非功能性需求(性能目标、安全要求、测试覆盖率阈值)。

Step 2: 为每个里程碑制定验收标准

为每个里程碑生成以下五类标准:

1. 功能标准 里程碑完成时必须满足的具体、可观察行为。根据映射到此里程碑的业务需求制定。每项标准都必须:

  • 可明确验证(“用户可以使用电子邮件和密码登录” ✓,而“登录可用” ✗)
  • 尽可能关联需求 ID
  • 使用“前提/操作/结果”格式,或使用陈述式现在时

2. 非功能标准 适用于此里程碑产出的性能、安全性、可靠性或无障碍要求。如果存在 technical-requirements.yaml NFR,请从中提取。仅纳入在此里程碑范围内可测试的 NFR——不要将系统级 SLA 应用于早期基础里程碑。

3. 测试要求 在将此里程碑视为完成之前必须具备的测试覆盖:

  • 为新引入的模块/函数提供单元测试覆盖
  • 为跨越的任何新服务边界提供集成测试
  • 为已交付的任何面向用户的流程提供端到端测试场景
  • 回归测试:确认没有现有测试被破坏

4. 文档要求 此里程碑应产出的文档:

  • 为复杂逻辑添加内联代码注释
  • 为任何新端点编写 API 文档
  • 如果设置/用法有变化,更新 README
  • 如果结构有变化,更新架构图

5. 线框图要求(仅适用于 UI 里程碑) 如果此里程碑包含创建或修改 UI 组件的任务(.tsx、.jsx、.vue 文件),请添加:

  • 此里程碑中所有页面的线框图均已审阅并获批
  • 已记录组件状态(空、加载中、错误、成功)
  • 已根据线框图验证用户流程 仅当 ux/wireframe-spec.yaml 存在且 has_ui_changes 为 true 时,才包含此部分。

6. 退出检查清单 用于代码审查/里程碑签署的简短、具体清单。这是快速参考——将上述内容归纳为是/否检查项。

Step 3: 确定跨里程碑门槛

如果某项需求跨越多个里程碑(例如,“端到端加密”需要在 m1、m3 和 m5 中完成工作),请将其标记为跨里程碑门槛:只有在最后一个为其作出贡献的里程碑中,才能验证完整需求。为每个中间里程碑添加 cross_milestone_note。

Step 4: 使用验收标准更新 milestones.yaml

完整读取现有的 {base_directory}/implementation/milestones.yaml 文件。

为 milestones 数组中的每个里程碑添加两个可选字段:

  1. acceptance_criteria 对象,包含五个类别:
acceptance_criteria:
  functional:
    - criterion: "[verifiable statement]"
      requirement_ref: "BR-FUNC-001"
  non_functional:
    - criterion: "[measurable threshold]"
      requirement_ref: "NFR-PERF-002"
  testing:
    unit: "[coverage expectation]"
    integration: "[test expectations or N/A]"
    e2e: "[E2E expectations or N/A]"
    regression: "All existing tests pass"
  documentation:
    - "[specific artifact]"
  cross_milestone_notes:
    - "[spanning requirement note]"  # if applicable
  1. exit_checklist 数组,包含 3-10 项二元检查:
exit_checklist:
  - "[ ] [Functional check with requirement ref]"
  - "[ ] All tests pass (≥X% coverage)"
  - "[ ] [Documentation check]"
  - "[ ] PR approved by at least one reviewer"

**重要:**保留 milestones.yaml 中的所有现有字段:

  • version、project、generated、business_requirements、technical_requirements
  • 包含 ordering_strategy 和 ordering_rationale 的 meta 部分
  • 所有现有里程碑字段:id、name、description、dependencies、estimated_duration、tasks_file、success_criteria
  • 如存在,则保留可选的 project_metadata

将增强后的 milestones.yaml 写回 {base_directory}/implementation/milestones.yaml。

备份策略: 覆盖前,在 {base_directory}/implementation/milestones.yaml.backup 创建带时间戳的备份。

Step 5: 差距分析

更新 milestones.yaml 后,在文中报告:

## Definition of Done Enhancement Complete

**Project:** [name]
**Milestones Enhanced:** [n]/[n]
**Functional Requirements Mapped:** [n]/[n]

**Acceptance Criteria Added:**
- Functional: [n] criteria across [n] milestones
- Non-Functional: [n] NFR criteria
- Testing: [n] milestones with test requirements
- Documentation: [n] milestones with doc requirements

**Criteria Quality:**
[✓ / ✗] All functional criteria are verifiable (no vague language)
[✓ / ✗] NFR criteria tied to specific thresholds (not just "must be fast")
[✓ / ✗] Every milestone has at least one testing requirement
[✓ / ✗] Cross-milestone requirements identified

**Unmapped Requirements:** [none / list requirements not tied to any milestone]

**Updated File:** implementation/milestones.yaml
**Backup Created:** implementation/milestones.yaml.backup.[timestamp]

**Recommendations:** [none / list]

输出格式

增强后的 milestones.yaml 结构

此技能会在现有 milestones.yaml 的每个里程碑中添加两个可选字段:

增强前:

milestones:
  - id: m1
    name: "User Authentication"
    description: |
      Build authentication system...
    dependencies: [m0]
    estimated_duration: "5-6 hours"
    tasks_file: milestone-m1.tasks.yaml
    success_criteria:
      - "Users can sign up and log in"
      - "Password security meets requirements"

增强后:

milestones:
  - id: m1
    name: "User Authentication"
    description: |
      Build authentication system...
    dependencies: [m0]
    estimated_duration: "5-6 hours"
    tasks_file: milestone-m1.tasks.yaml
    success_criteria:
      - "Users can sign up and log in"
      - "Password security meets requirements"

    # NEW: Detailed acceptance criteria added by /definition-of-done
    acceptance_criteria:
      functional:
        - criterion: "Users can create account with email and password"
          requirement_ref: BR-FUNC-001
        - criterion: "Users can log in and receive JWT token valid for 24h"
          requirement_ref: BR-FUNC-002
      non_functional:
        - criterion: "Passwords hashed using bcrypt with cost factor ≥12"
          requirement_ref: NFR-SEC-001
        - criterion: "/auth/login responds within 300ms for 95% of requests"
          requirement_ref: NFR-PERF-001
      testing:
        unit: "≥85% coverage for auth service and JWT utilities"
        integration: "Test auth service ↔ user database interaction"
        e2e: "Happy path: signup → login → protected access → logout"
        regression: "All existing tests pass"
      documentation:
        - "API documentation for /auth/signup, /auth/login, /auth/logout"
        - "Authentication flow diagram"
      cross_milestone_notes:
        - "Role-based access control foundation in m1, full RBAC at m2"

    # NEW: Exit checklist added by /definition-of-done
    exit_checklist:
      - "[ ] Users can sign up and log in (BR-FUNC-001, BR-FUNC-002)"
      - "[ ] Password security meets requirements (bcrypt ≥12, NFR-SEC-001)"
      - "[ ] All unit tests pass with ≥85% coverage"
      - "[ ] Integration tests cover auth ↔ database"
      - "[ ] E2E test covers full signup → login flow"
      - "[ ] API documentation complete"
      - "[ ] PR approved by at least one reviewer"
保留的字段

该技能会保留现有 milestones.yaml 的所有内容:

  • 根元数据:version、project、generated、business_requirements、technical_requirements
  • meta 部分:ordering_strategy、ordering_rationale
  • 所有里程碑字段:id、name、description、dependencies、estimated_duration、tasks_file、success_criteria
  • 可选部分:overview、project_metadata、risks_and_mitigation
备份文件

修改前会创建带时间戳的备份:

  • 位置:{base_directory}/implementation/milestones.yaml.backup.YYYYMMDD-HHMMSS
  • 内容:增强前完整的原始 milestones.yaml

示例

请参阅 /docs/specifications/milestones/example.yaml,其中包含里程碑 m1 的完整 acceptance_criteria 和 exit_checklist。

评论

支持 Markdown