requirement-parser·authoring·active

Requirement Parser

Reads ambiguous user stories, Jira tickets, or PRDs. Extracts actors, contracts, side effects, and constraints into a normalized intent graph.

TARAcursorclaude-codetrigger · agent
Requirement Parser
Reads ambiguous natural-language requirements and extracts a normalized intent graph that downstream skills can act on without re-interpreting.
When this skill fires
·A user pastes a Jira ticket, PRD excerpt, or one-paragraph user story into TARA
·TARA pulls a story directly from a sprint via the Jira MCP
·An upstream agent passes a free-form acceptance criterion that needs structuring
What it reads
·The raw requirement text (any length, any format)
·Any inline data examples, sample payloads, or constraints embedded in the prose
·Linked PRD/Confluence content if a URL is present and the Confluence MCP is connected
What it produces
A normalized intent graph with:
·Actors — every party that interacts with the system (user, admin, third-party API, scheduler)
·Contracts — the input/output shape each actor expects
·Side effects — emails, audit logs, downstream events, persistent state changes
·Constraints — timing, rate limits, data formats, ordering guarantees
How it works
Actor extraction runs first. Pronouns ("the user", "they") are resolved against named entities defined elsewhere in the text.
Contract extraction looks for verbs that imply state transitions ("submits", "is locked", "is dispatched") and pairs each with its observable consequence.
Side-effect extraction is intentionally aggressive — TARA prefers false positives here becauseScenario Decomposer discards anything that doesn't decompose into a testable scenario.
Constraint extraction picks up explicit numbers ("under 400ms", "5 attempts in 15 minutes")and implicit ones ("immediately", "eventually consistent").
Example
Input:"When a user fails to log in 5 times in 15 minutes, the account is locked for 30 minutes and an email is sent."
Output:
·Actor: user, Actor: auth-service, Actor: email-dispatcher
·Contract: POST /login401 on invalid credentials
·Side effect: failed_attempts++, account.locked_until = now + 30m, email.send(account_locked)
·Constraint: window=15m, threshold=5, lockout=30m