
Definition Of Done
- 68 installs
- 1 repo stars
- Updated June 17, 2026
- validkeys/sherpy
Helps with ai & agent building tasks.
About
definition-of-done is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.
- definition-of-done
- AI & Agent Building
- AI-coding skill
Definition Of Done by the numbers
- 68 all-time installs (skills.sh)
- +3 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #5,858 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/validkeys/sherpy --skill definition-of-doneAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 68 |
|---|---|
| repo stars | ★ 1 |
| Last updated | June 17, 2026 |
| Repository | validkeys/sherpy ↗ |
What it does
Helps with ai & agent building tasks.
Files
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 {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. Wireframe Requirements (UI milestones only) If this milestone contains tasks that create or modify UI components (.tsx, .jsx, .vue files), add:
- Wireframe reviewed and approved for all pages in this milestone
- Component states documented (empty, loading, error, success)
- User flows validated against wireframes
Only include this section if ux/wireframe-spec.yaml exists and has_ui_changes is true.
6. 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:
1. 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 applicable2. 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.
version: "1.0.0"
project: task-automation-cli
generated: "2026-03-26T10:00:00Z"
sources:
milestones: milestones.yaml
business_requirements: business-requirements.yaml
technical_requirements: technical-requirements.yaml
milestones:
# ── m0: Foundation & Project Setup ────────────────────────────────────────
- id: m0
name: Foundation & Project Setup
acceptance_criteria:
functional:
- criterion: "Running `npm install && npm run build` on a clean checkout produces a working CLI binary with no errors"
- criterion: "Running `sherpy --version` prints the current package version and exits 0"
- criterion: "CI pipeline runs on every push and reports pass/fail within 3 minutes"
non_functional:
- criterion: "Build completes in under 2 minutes on CI"
requirement_ref: TR-PERF-002
- criterion: "No lint errors or TypeScript compiler errors at baseline"
testing:
unit: "Test runner is configured and a passing baseline test exists (even if trivial)"
integration: "N/A — no service boundaries crossed in this milestone"
e2e: "N/A — no user-facing flows delivered yet"
regression: "All existing tests pass"
documentation:
- "README includes: prerequisites, install steps, and `npm run build` instructions"
- "CONTRIBUTING.md describes how to run the test suite locally"
exit_checklist:
- "[ ] `npm install && npm run build` succeeds on clean checkout"
- "[ ] `sherpy --version` works"
- "[ ] CI pipeline is green"
- "[ ] README setup instructions are accurate"
- "[ ] PR approved by at least one reviewer"
- "[ ] No open blocking issues"
# ── m1: Workflow Definition & Loading ─────────────────────────────────────
- id: m1
name: Workflow Definition & Loading
acceptance_criteria:
functional:
- criterion: "A valid workflow.yaml is loaded without errors and its task graph is printed to stdout"
requirement_ref: BR-001
- criterion: "A workflow.yaml with a missing required field (`name`, `tasks`) produces a descriptive validation error naming the missing field"
requirement_ref: BR-002
- criterion: "A workflow referencing an unknown task type produces an error with the line number of the offending entry"
requirement_ref: BR-002
- criterion: "Circular task dependencies are detected and reported with the cycle path"
requirement_ref: BR-002
non_functional:
- criterion: "A workflow file with 100 tasks loads and validates in under 200ms"
requirement_ref: TR-PERF-001
testing:
unit: "Unit tests cover: valid load, missing required field, unknown task type, circular dependency detection"
integration: "N/A"
e2e: "N/A"
regression: "All m0 tests continue to pass"
documentation:
- "docs/workflow-schema.md documents every supported field with examples"
- "An example valid workflow.yaml is added to examples/"
exit_checklist:
- "[ ] Valid workflow loads and prints task graph"
- "[ ] Invalid workflows produce clear, actionable error messages"
- "[ ] Circular dependency detection works"
- "[ ] Unit tests pass (all new test cases green)"
- "[ ] workflow-schema.md is accurate and complete"
- "[ ] PR approved by at least one reviewer"
- "[ ] No open blocking issues"
# ── m2: Task Execution Engine ──────────────────────────────────────────────
- id: m2
name: Task Execution Engine
acceptance_criteria:
functional:
- criterion: "Sequential tasks execute in dependency order; logs confirm ordering"
requirement_ref: BR-003
- criterion: "Tasks with no shared dependency execute in parallel; wall-clock time is less than the sum of individual task durations"
requirement_ref: BR-003
- criterion: "When a task fails and `on_failure: stop` is set, no downstream tasks execute and the process exits non-zero"
requirement_ref: BR-004
- criterion: "When a task fails and `on_failure: continue` is set, independent downstream tasks still execute"
requirement_ref: BR-004
- criterion: "Each task's stdout and stderr are captured and written to a per-task log file in `.sherpy/logs/`"
non_functional:
- criterion: "Execution overhead per task (scheduling, logging) is under 10ms"
requirement_ref: TR-PERF-001
- criterion: "Shell tasks cannot read environment variables not declared in the workflow's `env` block"
requirement_ref: TR-SEC-001
cross_milestone_notes:
- "Environment variable isolation (TR-SEC-001) begins here but full audit coverage is verified at m3 (Built-in Task Library)"
testing:
unit: "Unit tests cover: sequential ordering, parallel execution, stop-on-failure, continue-on-failure, log capture"
integration: "Integration test: run a real 3-task workflow end-to-end and assert ordering and exit codes"
e2e: "N/A"
regression: "All m0–m1 tests continue to pass"
documentation:
- "README execution section updated with `on_failure` options and log file location"
exit_checklist:
- "[ ] Sequential and parallel execution work correctly"
- "[ ] `on_failure: stop` and `on_failure: continue` behave as specified"
- "[ ] Logs written to `.sherpy/logs/`"
- "[ ] Env variable isolation verified"
- "[ ] Integration test passes"
- "[ ] PR approved by at least one reviewer"
- "[ ] No open blocking issues"