"The system should be fast and user-friendly" has survived a thousand reviews and caused a thousand disputes. This playbook runs an AI ambiguity lint over your requirements — vague quantifiers, passive-voice actor gaps, compound statements, unbounded lists — and rewrites each flagged item into atomic, testable EARS form, with you accepting or rejecting per flag.
Workflow area: Requirements Quality · Tier: Core · Hands-on time: ~30 minutes
Ambiguity is the cheapest defect to fix at draft time and the most expensive to fix in UAT, when "fast" turns out to mean 200 milliseconds to the sponsor and two seconds to the vendor. Human reviewers are bad at catching it because the brain autocompletes vagueness with its own assumptions — everyone reads "the data shall be archived" and silently supplies a different actor and a different retention period. Models are excellent pattern-matchers for exactly these constructions, and EARS (Easy Approach to Requirements Syntax) gives the rewrite a target shape: a trigger, a named system, a "shall," and a measurable response. The discipline that keeps this honest: the lint proposes, the rewrite is reviewed clause by clause, and any number the model had to invent to make a requirement testable is a placeholder to elicit — never a fact.
Stage the requirements with IDs. Export the set with stable identifiers (BR-001...) — flags must be traceable back. Include the glossary if you have one, so the lint distinguishes your defined terms from genuine vagueness.
Run the lint-then-rewrite. Paste into Claude or ChatGPT with this prompt:
You are a requirements-quality linter. Lint first, rewrite second.
Glossary of defined terms (do not flag these): [PASTE OR "none"]
PASS 1 — LINT. For each requirement, flag every instance of:
- vague quantifiers ("fast", "user-friendly", "minimal",
"appropriate", "as needed", "etc.")
- passive voice hiding the actor ("data shall be archived" — by
whom/what?)
- compound requirements (two shalls, "and/or", hidden second
requirement)
- unbounded terms ("all", "any", "always" without scope)
- untestable claims (no observable pass/fail)
Output: ID | flagged text | defect type | why it is a defect.
Flag nothing that is precise. If a requirement is clean, say so.
PASS 2 — REWRITE. For each flagged requirement, rewrite into EARS:
- Ubiquitous: The <system> shall <response>.
- Event: WHEN <trigger>, the <system> shall <response>.
- State: WHILE <state>, the <system> shall <response>.
- Unwanted: IF <condition>, THEN the <system> shall <response>.
Split compounds into numbered atomic requirements.
CRITICAL: where a rewrite needs a number, threshold or actor the
original does not supply, insert [TBD: what to elicit and from
whom] — NEVER invent a value.
Requirements:
[PASTE]
Review flags and rewrites separately. Good output looks like this:
BR-012 | "Invoices should be processed quickly during month-end"
| vague quantifier + untestable | "quickly" has no measure; no
pass/fail is observable.
Rewrite:
BR-012a WHILE the month-end close window is open, the invoicing
service shall complete invoice validation within [TBD: target
seconds — elicit from finance ops lead].
BR-012b WHEN validation exceeds the BR-012a target, the system
shall queue the invoice and notify [TBD: role — finance ops?].
Adjudicate every flag: accept, reject with a reason (some "vague" terms are defined elsewhere), or escalate (the politically vague ones). Check every rewrite for meaning drift — an EARS sentence that says something subtly different from the stakeholder's intent is a new defect wearing a suit.
Chase the [TBD]s — they are the real findings. Each placeholder is a specific elicitation question with a named target. Batch them by stakeholder and clear them in one round of short calls. A [TBD] that survives into baseline must be logged as an explicit open item with an owner and date, not left as decoration.
Update, log, and re-lint. Apply accepted rewrites under version control, record rejected flags with reasons (your audit trail that the lint ran and was judged), and run one final lint pass — clean output or adjudicated flags only — before the set goes to review or baseline.
Requirements sets reveal roadmap, controls and commercial commitments — lint them only in your organization's approved AI workspace, and treat vendor-authored documents as confidential to the counterparty when choosing where to process them.
The lint is cheap; the judgment is the job — AI finds every "quickly" and rewrites it into testable EARS shape, but only you can tell a missing number from a missing decision, and only elicitation can fill a [TBD].