requirements-testing
Skill1 starsChanged 6 months agoMITView on GitHub
Test the requirements themselves BEFORE development — analyze a PRD / requirements doc / Jira ticket / user story for ambiguity, completeness gaps, internal conflicts, untestable statements, missing acceptance criteria, and implicit security risks. Outputs a categorised list of issues with concrete suggested fixes (better wording, missing AC, edge cases to add). If a Jira ticket key was provided AND a Jira MCP server is available, posts the findings as a comment on the ticket; otherwise prints the list to the console. Use when the user asks to "review requirements", "test the requirements", "requirements testing for <ticket>", "analyze the requirements for ambiguity", "find gaps in the PRD", "check requirements quality", or names a Jira ticket key with intent to review. NOT for generating test cases (that's observo-test-cases) — this skill stops at fixing the requirement.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- jdm4pku/RE-Skillstheir own version, first seen Apr 5, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- jdm4pku/RE-Skills★ 26same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- observo-code-verifierSkill
- observo-review-test-caseSkill
- observo-test-casesSkill
- observo-toolkit-bootstrapSkill
- prdSkill
- pw-generateSkill
- pw-runSkill
The file
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 9 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 41
If the source is a multi-section doc (typical for as-built specs with many ACs), enumerate sections so each defect can be cited by section …
- Distinctive: line 73
When AC is present, walk every AC bullet and ask "what's NOT covered that should be?"
- Distinctive: line 77
If the source has multiple requirements (sections, tickets, or linked items), look for pairs that contradict.
- Very specific: line 83
If only a single requirement is in scope (one user story, one Jira ticket without linked items), this axis returns n/a — say so explicitly …
- Distinctive: line 98
If the requirement has no AC section, OR the AC section is shorter / vaguer than the prose body, propose AC bullets that are:
- Distinctive: line 139
Use the appropriate Jira MCP tool.
- Distinctive: line 142
After successful post, return to the user: comment URL (or ticket URL with anchor) and a one-line summary.
- Distinctive: line 143
If posting fails → fall back to 4.2 (console output) with a note explaining the failure.
- Distinctive: line 147
When no Jira ticket is in scope, OR no Jira MCP is registered, OR posting failed: return the findings inline to the user.
- Distinctive: line 177
After either output path, end with one short line so the user knows what to do next:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Requirements Testing
QA-side review of requirements before the team starts coding. The output is a list of defects in the requirements, not in the code. Goal: catch ambiguity / missing rules / conflicts / untestable statements / missing AC early — when they're cheap to fix.
This is distinct from observo-test-cases (which assumes the requirement is good enough and creates test scenarios for it). When in doubt, run this skill first.
Trigger
User asks to review or test requirements as a deliverable, not yet asking for test cases. Phrases:
- "review the PRD / requirements doc"
- "review the requirements for
<X>" - "find gaps / ambiguity in the requirements"
- "requirements testing for <ticket / file>"
- "analyze for completeness / conflicts"
- "check requirements quality for
<topic>" - User pastes / names a Jira ticket and asks "what's wrong here?", "any problems?", "does this look right?"
Inputs
One of the following must be supplied (ask once via AskUserQuestion if it's not clear from the conversation):
- File path to a requirements / PRD / spec / user story doc (typical:
./docs/requirements/<file>.md,./docs/PRDs/<file>.md, or wherever your repo keeps them). - Jira ticket key (e.g.
OB-123,PROJ-456). Detected as[A-Z][A-Z0-9]+-\d+in the user's message. - Inline text (user pasted the user story / requirement directly).
- Multiple of the above — e.g. a doc + several linked tickets. Conflict-checking across them is a feature, not a problem.
Workflow
1. Load the source
- File:
Readthe file. - Jira: detect a Jira-like MCP in this session's tool list. Common name patterns:
mcp__*jira*,mcp__*atlassian*. Use the read-call (e.g.jira_get /rest/api/3/issue/<KEY>, orgetJiraIssueif exposed) to fetch the description and any sub-task list. If no Jira MCP is registered, ask the user to paste the ticket body instead — do not block. - Inline text: use as supplied.
If the source is a multi-section doc (typical for as-built specs with many ACs), enumerate sections so each defect can be cited by section + line / heading.
2. Run the five-axis quality checks
For every distinct requirement / AC bullet in the source, evaluate each axis. Cite specific quotes when flagging — never paraphrase the source.
2.1 Clarity
Flag if the requirement leaves who / what / when / under which conditions unclear. Specifically:
- Vague modal verbs without conditions: "should", "may", "can" with no actor or trigger.
- Undefined nouns / terms that the doc hasn't established (e.g. "the user" without saying which role).
- Passive voice with no subject ("the transaction is confirmed" — by whom? when? on which event?).
- Pronouns with ambiguous antecedent.
Example of a clarity defect:
"User should be able to confirm transaction safely." → unclear: which user role? what does "safely" mean here? what triggers confirmation?
2.2 Completeness
For every action / state transition the requirement describes, check whether the doc answers the standard what-if checklist:
- Negative paths: what if the input is missing / invalid / duplicated / expired / unauthorised?
- Limits: file sizes, list lengths, time windows, rate limits, retention periods.
- Error handling: which errors are returned? what wording? to whom?
- Concurrency / idempotency: what if the action is retried? two users do it at once?
- Side effects: which background jobs / emails / webhooks / Stripe / Slack events are triggered?
- Cleanup: what gets deleted? what gets retained? PII handling?
- Anti-enumeration / security: same response for existing-vs-non-existing entities where it matters?
- Access control: who is allowed to do this? what roles? cross-account boundary?
When AC is present, walk every AC bullet and ask "what's NOT covered that should be?"
2.3 Conflicts (cross-requirement)
If the source has multiple requirements (sections, tickets, or linked items), look for pairs that contradict. Examples:
- "Transaction can be confirmed only after funds are received" vs "User can confirm transaction immediately after order creation" — direct conflict.
- "Email is unique in the system" vs "User can register with a duplicate email if from a different account" — narrower conflict.
- "All endpoints require Bearer token" vs an endpoint definition that says "no auth needed" — implicit conflict.
If only a single requirement is in scope (one user story, one Jira ticket without linked items), this axis returns n/a — say so explicitly rather than silently skipping.
2.4 Testability
A requirement is testable if a QA engineer (or automated test) can deterministically decide pass / fail. Untestable patterns to flag:
- Non-measurable adjectives: "fast", "easy", "user-friendly", "intuitive", "robust", "scalable" without numeric thresholds or observable behavior.
- Subjective verbs: "should look professional", "should feel responsive".
- Conditions without thresholds: "loads quickly" (vs "loads within 2s for up to 10,000 records").
- Promises without observable consequence: "system is secure" (vs concrete: "all PII fields are encrypted at rest using AES-256").
Suggested rewrite for every untestable statement.
2.5 Missing acceptance criteria
If the requirement has no AC section, OR the AC section is shorter / vaguer than the prose body, propose AC bullets that are:
- Concrete (specific actor, action, expected observable outcome)
- Independently verifiable (one AC, one expectation)
- Cover happy path + at least one negative path
- Reference numeric / time limits where the prose implies them
Format proposed AC as a markdown checklist so the user can paste them into the source doc.
3. Categorise findings
Each defect gets a structured entry:
- id: D-1
axis: clarity | completeness | conflict | testability | missing-ac | security-risk
severity: blocker | major | minor
location: "<doc-section or AC bullet number, with the literal quote>"
quote: "the exact words from the source"
issue: "<one-sentence diagnosis>"
suggested_fix: "<concrete replacement wording, or 'add the following AC: …'>"
rationale: "<one line on why this matters>"Severity policy:
- blocker — the requirement cannot be implemented unambiguously (conflict, fundamental clarity gap, missing key business rule).
- major — implementable but at high risk of building the wrong thing (untestable, missing AC, large completeness gap).
- minor — wording / polish.
4. Output destinations
There are two output paths. Pick based on the input:
4.1 Jira ticket + Jira MCP available → post a comment to the ticket
- Detect a Jira-like MCP: scan the available tools list for names matching
mcp__*jira*ormcp__*atlassian*. If multiple are registered, prefer the project-scoped one (declared in.mcp.json) over global ones; if a hostCLAUDE.mdnames a specific Jira MCP to use for this repo, follow that. - Format the comment in Atlassian Document Format (ADF) when posting via REST v3, or plain markdown if the MCP wrapper accepts it. Structure:
- One-line headline with counts (e.g. "Requirements testing — 3 blockers, 5 majors, 2 minors").
- Per-defect block: severity badge, axis, location quote, suggested fix.
- Final block: proposed AC checklist (if missing-AC findings exist).
- Use the appropriate Jira MCP tool. Common variants:
- Generic REST passthrough (e.g.
mcp__<server>__jira_post) →POST /rest/api/3/issue/<KEY>/commentwith ADF body. - Atlassian official MCP →
addCommentToJiraIssue(or similarly named) — pass markdown / ADF as the tool's input requires.
- Generic REST passthrough (e.g.
- After successful post, return to the user: comment URL (or ticket URL with anchor) and a one-line summary.
- If posting fails → fall back to 4.2 (console output) with a note explaining the failure.
4.2 Otherwise → console list
When no Jira ticket is in scope, OR no Jira MCP is registered, OR posting failed: return the findings inline to the user. Structure:
## Requirements testing — <source>
🟥 Blockers (N)
D-1 · conflict · Section X
Quote: "…"
Fix: …
Why: …
🟧 Major (N)
D-2 · completeness · AC bullet #3
Quote: "…"
Fix: …
Why: …
🟨 Minor (N)
D-… · …
## Proposed acceptance criteria
- [ ] …
- [ ] …Plain text, copy-paste ready. No HTML / fancy formatting that won't render in a console.
5. Summary line
After either output path, end with one short line so the user knows what to do next:
"Found N blockers, M majors, K minors. Once the source is updated, you can run
/observo-test-casesto generate test cases from the cleaned-up requirement."
Anti-patterns
- ❌ Generating test cases. This skill stops at "here's what's wrong with the requirement". Test cases are
observo-test-cases. - ❌ Rewriting the whole requirement. Flag defects and propose targeted fixes — never replace the user's doc wholesale.
- ❌ Paraphrasing without quoting. Every defect must cite the literal text from the source.
- ❌ Silently skipping the conflict axis when only one requirement is in scope — explicitly mark it
n/aso the user knows the check ran. - ❌ Refusing to run when no Jira MCP is connected. Console fallback is a first-class output, not a degraded one.
- ❌ Posting to Jira without surfacing the comment URL back to the user.
- ❌ Fabricating "missing" issues to look thorough. If the requirement is genuinely complete, say so. False positives erode trust.
- ❌ Mixing implementation concerns into requirement findings. Don't say "the handler uses bad regex" — that's code review. Stay at the requirement layer.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

