From quoin
Analyzes requirement statements (FR/NFR/StR) for EARS requirement-grammar conformance and produces a SpecReview document with findings.
How this skill is triggered — by the user, by Claude, or both
Slash command
/quoin:spec-ears-analysisThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill analyzes the natural-language **requirement statements** in a spec
This skill analyzes the natural-language requirement statements in a spec
(FR Description/Behavior/Constraints, NFR Statement, StR Stakeholder Need)
against EARS (Easy Approach to Requirements Syntax), and authors one
SpecReview document recording the findings.
It pairs the deterministic engine check (quire-rs FR-042, the iso-spec-core
grammar) with the semantic judgment the engine cannot make — together they
form the lens.
Run the engine check. From the repo root:
quire validate --scope . "spec/**/*.md" --summary
Read the [ears:<check>] warnings and the GrammarSummary line. The engine
flags, per statement:
non-singular — more than one shall (can't map cleanly to one AC).vague-response — support/handle/manage/process/provide/
enable/be able to (unverifiable).missing-subject — no named system/actor before shall.non-canonical-trigger — On …/Upon/After/During instead of
When …/While ….unclassifiable — has shall but matches no EARS pattern.These are advisory (they never fail quire validate); this lens records
them as review findings.
Add the semantic judgment (what the engine cannot check deterministically):
When … statement describe a momentary
event, or is it really a continuous While … state (or vice-versa)?When … instead of If … then ….Author the SpecReview. Fetch the template once:
quoin write --types SpecReview
Write one document to spec/reviews/ears-conformance.md with
analysis: ears-conformance in the frontmatter, a ## Summary (one or two
sentences: how many statements, how many clean, the dominant defect), and a
validated ## Findings table:
| ID | Severity | Summary | Refs |
|---|---|---|---|
| FND-001 | medium | FR-001 Description packs two shall into one statement — split into atomic requirements | FR-001 |
| FND-002 | low | FR-003 leads with On startup, …; use When the service starts, … | FR-003 |
Severity ∈ low/medium/high. Suggested mapping: non-singular
and missing-subject → medium (they degrade traceability);
vague-response/unclassifiable → medium when the response is truly
unverifiable, else low; non-canonical-trigger → low (cosmetic).
Raise to high any statement whose ambiguity changes what gets built.Refs names the offending FR/NFR/StR id.Validate + record.
quire validate --scope . "spec/reviews/ears-conformance.md"
Fix any structural errors in the review doc. The doc syncs into filament-core
as a SpecReview artifact like every other analysis lens.
As a / I want / So that) and tests are out of scope.quire validate --strict in that repo's CI — --strict escalates
the EARS warnings to a failing exit.The X SHALL: + numbered list is one statement; StR may use a
stakeholder subject; an NFR with no trigger is fine.npx claudepluginhub agent-ix/quoin --plugin quoinValidates requirements documents for EARS compliance, glossary consistency, completeness, and testability. Flags contradictions and scope gaps before design work begins.
Reviews requirements artefacts for quality, consistency, and completeness using a checklist and optional analyses (failure-domain, integrity, etc.). Useful before implementation.
Converts natural-language requirements, Gherkin scenarios, or user stories into testable EARS specifications with stable semantic IDs.