skills/project-mgmt/issue-tracker-toolkit/acceptance-criteria/SKILL.md
Write clear, testable acceptance criteria for user stories and feature delivery; use when defining done conditions, creating measurable requirements, applying INVEST checks, documenting negative scenarios, and aligning product, engineering, and QA on expected outcomes.
npx skillsauth add pantheon-org/tekhne acceptance-criteriaInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Navigation hub for writing measurable, test-ready acceptance criteria.
Starting Point (Vague Requirement):
"Users should be able to reset their password easily."
Step 1: Capture Intent
Step 2: Select Format Choose Given/When/Then (Gherkin) for clarity.
Step 3: Draft Must-Pass Criteria
Given a user is on the login page
When they click "Forgot Password"
Then a password reset form appears within 1 second
Given a user enters a valid email in the reset form
When they click "Send Reset Link"
Then an email is sent within 30 seconds
And the email contains a clickable reset link valid for 24 hours
Given a user clicks the reset link from the email
When they enter a new password (min 8 chars, 1 uppercase, 1 number)
And click "Update Password"
Then the password is updated
And they are redirected to login within 2 seconds
Step 4: Add Negative & Boundary Scenarios
Given a user enters an unregistered email
When they click "Send Reset Link"
Then they see "Email not found" message (no account enumeration)
Given a user's reset link has expired (>24 hours old)
When they click the link
Then they see "Link expired, request a new one"
Given a user enters a weak password (e.g., "pass")
When they click "Update Password"
Then validation error appears: "Password must be 8+ chars with uppercase and number"
Step 5: Validation Checklist
# Find vague language
grep -nE "\b(should be|user-friendly|fast|easy|good)\b" <file>.md
# Count checklist criteria lines
grep -nE "^- \[ \]" <file>.md | wc -l
# Detect missing negative/error words
grep -niE "invalid|error|timeout|denied|failed" <file>.md
User Story:
As a [role], I want [action], so that [benefit].
Acceptance Criteria (Must Have):
- [ ] ...
- [ ] ...
Negative/Edge Scenarios:
- [ ] ...
Out of Scope:
- ...
WHY: vague language cannot be tested objectively. BAD: "The system should be fast." GOOD: "Search returns in <= 2s for 95% of requests."
WHY: criteria define outcomes, not implementation details. BAD: "Use JavaScript validation on submit button click." GOOD: "Invalid form input shows error message within 1 second."
WHY: real users hit error and edge conditions. BAD: only valid-login scenario listed. GOOD: include invalid credentials, timeout, and expired session behavior.
WHY: broad criteria hide failure source and reduce test clarity. BAD: "Checkout and email and invoice should work." GOOD: split into separate measurable criteria.
WHY: misalignment causes rework at QA/review time. BAD: criteria written without stakeholder validation. GOOD: confirm criteria with product and QA before implementation.
| Topic | Reference | | --- | --- | | INVEST criteria | references/invest-criteria.md | | Gherkin examples | references/gherkin-examples.md | | Pattern selection | references/patterns-by-type.md | | Scenario examples | references/examples.md | | Reusable templates | references/templates.md |
tools
A skill that produces warnings but no errors.
testing
A well-formed example skill for testing the validator.
development
A skill with code blocks and imperative instructions for testing content and contamination analysis.
tools