definition-of-done
Definition of Done
Enhances existing milestones.yaml with detailed acceptance criteria for each milestone. Bridges the gap between "the plan says we're building X" and "we know for certain that X is done." Adds optional acceptance_criteria and exit_checklist fields to each milestone, derived directly from requirements — not generic checklists.
Prerequisites
{base_directory}/implementation/milestones.yaml(output from/implementation-planner)- Must contain milestone definitions with
id,name,description,success_criteria - Skill will add optional
acceptance_criteriaandexit_checklistfields
- Must contain milestone definitions with
{base_directory}/requirements/business-requirements.yaml(output from/business-requirements-interview)- Optional:
{base_directory}/requirements/technical-requirements.yamlfor NFR-derived gates
Usage
/definition-of-done [base-directory]
If no directory is provided, auto-detect by looking for implementation/milestones.yaml in the current directory.
If not found, prompt the user: "Where are your planning artifacts located?"
Wait for the user to provide a path before proceeding. Store as base_directory.
Process
Step 1: Determine Base Directory and Load Artifacts
If no directory parameter was provided, check if implementation/milestones.yaml exists in the current directory.
- If found, use current directory as
base_directory - If not found, prompt: "Where are your planning artifacts located?" and wait for user response
Once base_directory is determined:
Read {base_directory}/implementation/milestones.yaml and extract each milestone's id, name, description, and any deliverables or tasks references.
Read {base_directory}/requirements/business-requirements.yaml and map each functional requirement to the milestone(s) most likely to deliver it. Use the milestone name and description to make this determination — do not guess at task-level details.
If {base_directory}/requirements/technical-requirements.yaml exists, read it to extract non-functional requirements (performance targets, security requirements, test coverage thresholds).
Step 2: Derive Acceptance Criteria per Milestone
For each milestone, generate criteria in five categories:
1. Functional Criteria Specific, observable behaviors that must be true when the milestone is done. Derive these from the business requirements mapped to this milestone. Each criterion must be:
- Verifiable without ambiguity ("users can log in with email and password" ✓ vs "login works" ✗)
- Tied to a requirement ID where possible
- Written as "Given/When/Then" or declarative present tense
2. Non-Functional Criteria
Performance, security, reliability, or accessibility requirements that apply to this milestone's output. Pull from technical-requirements.yaml NFRs if present. Only include NFRs that are testable at this milestone's scope — do not apply system-wide SLAs to early foundational milestones.
3. Testing Requirements What test coverage must exist before this milestone is considered done:
- Unit test coverage for new modules/functions introduced
- Integration tests for any new service boundaries crossed
- E2E scenarios for any user-facing flows delivered
- Regression: confirm no existing tests are broken
4. Documentation Requirements What documentation artifacts are expected from this milestone:
- Inline code comments for complex logic
- API documentation for any new endpoints
- README updates if setup/usage changes
- Architecture diagram updates if structure changes
5. Exit Checklist A short, concrete checklist used at code review / milestone sign-off. This is the quick reference — summarize the above into yes/no checks.
Step 3: Identify Cross-Milestone Gates
If any requirement spans multiple milestones (e.g., "end-to-end encryption" requires work in m1, m3, and m5), note it as a cross-milestone gate: the full requirement is only verifiable at the last milestone that contributes to it. Add a cross_milestone_note to each intermediate milestone.
Step 4: Update milestones.yaml with Acceptance Criteria
Read the existing {base_directory}/implementation/milestones.yaml file completely.
For each milestone in the milestones array, add two optional fields:
- acceptance_criteria object with five categories:
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
- exit_checklist array with 3-10 binary checks:
exit_checklist:
- "[ ] [Functional check with requirement ref]"
- "[ ] All tests pass (≥X% coverage)"
- "[ ] [Documentation check]"
- "[ ] PR approved by at least one reviewer"
Important: Preserve all existing fields in milestones.yaml:
version,project,generated,business_requirements,technical_requirementsmetasection withordering_strategyandordering_rationale- All existing milestone fields:
id,name,description,dependencies,estimated_duration,tasks_file,success_criteria - Optional
project_metadataif present
Write the enhanced milestones.yaml back to {base_directory}/implementation/milestones.yaml.
Backup Strategy:
Before overwriting, create backup at {base_directory}/implementation/milestones.yaml.backup with timestamp.
Step 5: Gap Analysis
Report inline after updating 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]
Output Format
Enhanced milestones.yaml Structure
This skill adds two optional fields to each milestone in the existing milestones.yaml:
Before enhancement:
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"
After enhancement:
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"
Preserved Fields
The skill preserves all existing milestones.yaml content:
- Root metadata:
version,project,generated,business_requirements,technical_requirements metasection:ordering_strategy,ordering_rationale- All milestone fields:
id,name,description,dependencies,estimated_duration,tasks_file,success_criteria - Optional sections:
overview,project_metadata,risks_and_mitigation
Backup File
A timestamped backup is created before modification:
- Location:
{base_directory}/implementation/milestones.yaml.backup.YYYYMMDD-HHMMSS - Contains: Complete original milestones.yaml before enhancement
Example
See /docs/specifications/milestones/example.yaml for milestone m1 with complete acceptance_criteria and exit_checklist.
More from validkeys/sherpy
technical-requirements-interview
Conducts structured interviews to derive technical requirements from business requirements. Requires completed business-requirements.yaml as input. Asks targeted technical questions about architecture, technology stack, data model, APIs, security, testing, and deployment. Generates technical-requirements.yaml output.
48business-requirements-interview
Conducts structured interviews to gather comprehensive business requirements. Asks one question at a time with multiple-choice options, tracks progress in JSONL format, and generates structured business-requirements.yaml output. Use when starting a new project or feature to ensure clear understanding of goals, scope, users, and success criteria.
46implementation-planner
Generates detailed implementation plans with milestones and tasks from business and technical requirements. Embeds best practices including task sizing (30m-2.5h), style anchors, TDD requirements, and quality constraints. Outputs milestones.yaml and milestone-m*.tasks.yaml files ready for development.
42implementation-plan-review
Reviews generated implementation plans against best practices including task sizing (30m-2.5h), style anchors, TDD requirements, drift prevention, and quality constraints. Validates milestones.yaml and task files for completeness, alignment, and development readiness.
39implementation-plan-best-practices
Educational guide on best practices for creating implementation plans that prevent drift. Covers style anchors, task sizing, TDD requirements, affirmative instructions, drift handling, and quality gates. Use when creating or improving implementation plans to ensure they follow proven patterns.
37sherpy-flow
Orchestrates the full Sherpy planning workflow from requirements to QA-ready delivery plan. Detects which artifacts already exist, shows a visual pipeline status, and guides through each skill in sequence — gap analysis, business interview, technical interview, implementation planning, plan review, definition of done, architecture decisions, delivery timeline, QA test plan, and summary generation. Automatically organizes all artifacts into a structured docs/ folder.
31