Testable Feature Specifications

Turn vague feature requests into scoped specifications with EARS requirements, traceable acceptance criteria, and build checklists.

Development / Engineeringfeature-specificationsrequirements
by AgentVoltv1.0.0
Free to sign up · every skill included with AgentVolt Pro

Before & after

Same prompt, same agent — the only difference is the skill.

Prompt“Write specifications for our new authentication feature”
Beforegeneric AI agent
Writing specs for authentication is important. You'd want to define what users should be able to do, like log in and reset their password. It helps to think about different scenarios - what happens if the password is wrong, or the user forgets their email. You'd probably want to include error messages and some acceptance criteria so you know when it's done. Different teams have different ways of writing specs.
Afterwith Testable Feature Specifications
FEATURE SPECIFICATION: Email + Password Authentication v2

FEATURE ID: AUTH-001-EMAIL-PWD
Priority: P0 (blocks launch)
Stakeholder: VP Product (Sarah)
Target launch: Q4 2024 (Oct 15)
Epic: Authentication System Rebuild

BACKGROUND:
Current system lacks rate limiting and passwordless options; customers requesting multi-factor auth and device trust. This spec covers the foundational email+password auth component; MFA in separate spec (AUTH-002).

USER STORIES & ACCEPTANCE CRITERIA:

STORY 1: User creates account with email and password
AS A new user
I WANT TO create an account with my email and a secure password
SO THAT I can access the platform

Acceptance Criteria:
→ AC1.1: Email field accepts valid email format (RFC 5322)
→ AC1.2: Email must be unique (case-insensitive); error: "Email already registered"
→ AC1.3: Password field shows/hide toggle (show password icon)
→ AC1.4: Password strength meter displays (0-4 levels)
→ AC1.5: Minimum password requirements: 12 characters, 1 uppercase, 1 number, 1 special char (@, !, #, $, %)
→ AC1.6: Password meter prevents form submission if <level 2 (medium strength)
→ AC1.7: Confirm password field matches password (real-time validation)
→ AC1.8: Submit button disabled until all validations pass
→ AC1.9: On submit, hash password with bcrypt (cost: 12 rounds); never store plaintext
→ AC1.10: Confirmation email sent within 10 seconds (verify email address owns account)
→ AC1.11: New account created in pending state (not active until email verified)
→ AC1.12: 24-hour expiry on confirmation link; error: "Link expired. Resend confirmation."
→ AC1.13: Success page: "Check your email to complete signup" with resend link

STORY 2: User logs in with email and password
AS AN existing user
I WANT TO log in with my registered email and password
SO THAT I can access my account

Acceptance Criteria:
→ AC2.1: Email and password fields present on login screen
→ AC2.2: Form submission triggers credentials validation
→ AC2.3: Invalid credentials (wrong email OR wrong password): generic error "Invalid email or password" (no user enumeration)
→ AC2.4: API rate limiting: Max 5 failed attempts per IP per 15 minutes
→ AC2.5: On 5th failed attempt: Account locked for 30 minutes + email alert sent
→ AC2.6: Successful login returns session token (JWT, 30-day expiry)
→ AC2.7: Session stored in secure HTTP-only cookie (not accessible via JavaScript)
→ AC2.8: User redirected to dashboard on successful login
→ AC2.9: "Remember me" checkbox (optional): Session extends to 90 days if checked
→ AC2.10: Session invalidated on logout (cookie deleted, server-side revocation)

STORY 3: User resets forgotten password
AS A user who forgot my password
I WANT TO reset my password via email
SO THAT I can regain account access

Acceptance Criteria:
→ AC3.1: "Forgot password" link on login screen
→ AC3.2: Forgot password form: Email field only
→ AC3.3: Email submission triggers check (success regardless of whether email exists, for security)
→ AC3.4: If email exists: Password reset link sent within 30 seconds
→ AC3.5: If email does not exist: Display "If that email exists, we sent a link" (no enumeration)
→ AC3.6: Reset link expires after 1 hour
→ AC3.7: Reset link single-use (after 1 successful use, link invalid)
→ AC3.8: New password must meet same strength requirements as signup (AC1.5)
→ AC3.9: Old password is NOT required (passwordless reset)
→ AC3.10: On successful reset: Display "Password updated. You can now log in." with login link
→ AC3.11: All active sessions invalidated after password reset (forces re-login on all devices)

EARS-FORMAT FUNCTIONAL REQUIREMENTS:

Requirement 1: Password Storage
WHEN a user creates an account or resets password
THE system MUST hash the password using bcrypt with cost parameter 12
AND store only the hash in the database (never plaintext)
SO THAT passwords cannot be exposed even if database is compromised

Requirement 2: Session Management
WHEN a user successfully logs in
THE system MUST create a JWT token with the following claims:
├ sub (subject): user_id
├ iat (issued at): current timestamp
├ exp (expiration): current timestamp + 30 days
├ role: user_role (admin, creator, user)
AND return the token in an HTTP-only, secure, same-site cookie
SO THAT session tokens cannot be accessed by JavaScript or sent cross-site

Requirement 3: Rate Limiting
WHEN a user attempts to log in
IF more than 5 failed attempts occur from the same IP within 15 minutes
THE system MUST temporarily lock the account for 30 minutes
AND send an email alert to the account owner
SO THAT brute-force attacks are prevented

Requirement 4: Email Verification
WHEN a user creates a new account
THE system MUST send a verification email with a unique, single-use link
AND mark the account as inactive until the link is clicked
AND set link expiry to 24 hours
SO THAT account ownership is verified and valid contact info is confirmed

Requirement 5: Password Reset Token
WHEN a user requests a password reset
THE system MUST generate a cryptographically secure random token
AND send it via email in a time-limited reset link (1-hour expiry)
AND mark the token as single-use (invalid after 1 redemption)
SO THAT compromised reset links cannot be reused

NON-FUNCTIONAL REQUIREMENTS:

Security:
→ All authentication endpoints use HTTPS only (no HTTP fallback)
→ Passwords never logged (including debug logs)
→ Rate limiting must account for proxy/load balancer IP headers
→ OWASP Top 10 validation: no SQL injection, XSS, CSRF vulnerabilities
→ Secrets (API keys, signing keys) stored in environment variables, never in code

Performance:
→ Login endpoint latency: <500ms p95 (including bcrypt verification)
→ Password reset email delivery: <30 seconds (SLA 95%)
→ Session validation on each request: <10ms (cached)

Scalability:
→ Support 10,000 concurrent sessions
→ Database queries optimized (index on email column)
→ Rate limiting: Redis-backed (distributed rate limit across servers)

Availability:
→ Authentication system must be always-on (part of critical path)
→ If auth service is down: Deny access (fail-secure, not fail-open)
→ SLA: 99.95% uptime

IMPLEMENTATION CHECKLIST:

Phase 1: Backend (2 weeks)
□ Database schema: users table with email, password_hash, email_verified, created_at
□ API endpoints: POST /auth/signup, POST /auth/login, POST /auth/logout, POST /auth/forgot-password, POST /auth/reset-password
□ Bcrypt integration + rate limiting middleware
□ Email service integration (SendGrid or similar)
□ JWT token generation and verification
□ Session invalidation on logout / password reset
□ Unit tests: 100% coverage on auth logic
□ Integration tests: Login flow, password reset flow, rate limiting

Phase 2: Frontend (1.5 weeks)
□ Signup page: email, password, confirm password, password strength meter
□ Login page: email, password, forgot password link, remember me checkbox
□ Forgot password page: email field, resend link button
□ Reset password page: new password, confirm password, submit button
□ Error messages and success states
□ Loading states and spinners
□ Form validation (client-side + server-side redundancy)
□ E2E tests: Full signup, login, logout, password reset flow

Phase 3: Testing & Launch (1 week)
□ Security audit: Penetration testing on authentication endpoints
□ Load testing: Verify rate limiting under 1000 req/sec
□ Accessibility review: Keyboard navigation, screen reader compatibility
□ Cross-browser testing: Chrome, Safari, Firefox, Edge
□ Production deployment: Blue-green deployment, rollback plan
□ Monitoring: Alert on auth failures, rate limit triggers

DEPENDENCIES:
→ Email service provider API (SendGrid, Mailgun, AWS SES)
→ Database migration: users table schema
→ JWT library (jsonwebtoken for Node.js)
→ Bcrypt library (bcryptjs for Node.js)
→ Redis for distributed rate limiting

OPEN QUESTIONS:
→ Should passwordless authentication (magic link) be in this spec or separate?
→ Should we support social login (Google, GitHub) in Phase 1 or Phase 2?
→ Rate limiting: Per-IP or per-email? Current spec assumes per-IP.
→ Session timeout: 30 days with "remember me", or shorter default (e.g., 24 hours)?

About this skill

“We agreed on the feature, but engineering and QA understood different things.” This skill turns scattered requests into a specification that names the triggers, permissions, state changes, and failure behavior people usually discover after development starts.

What it does

  • Separates confirmed requirements, assumptions, unresolved decisions, and implementation suggestions.
  • Defines the smallest useful feature boundary, including explicit exclusions and adjacent behavior that must remain intact.
  • Writes atomic EARS requirements using event, state, optional-feature, and unwanted-behavior patterns correctly.
  • Links each requirement to acceptance criteria with observable results, including denied actions and failure paths.
  • Finds missing rules around permissions, concurrency, retries, data boundaries, and measurable quality targets.
  • Produces a dependency-ordered implementation checklist without presenting architectural guesses as requirements.

What you get

A reviewable feature specification with user stories, numbered requirements, acceptance criteria, open decisions, and an implementation checklist. For a quick question or one broken requirement, you get a focused correction instead of a full document.

Best for

Developers, technical product managers, and engineering teams defining a feature before implementation, consolidating stakeholder notes, or giving QA a testable contract.

SKILL.md preview

SKILL.md
---
name: testable-feature-specifications
description: 'Turns feature ideas and scattered stakeholder notes into scoped specifications using structured discovery, atomic EARS requirements, and acceptance criteria linked to requirement IDs. Use when the user says "spec this feature", "turn these notes into requirements", "write EARS requirements", "QA has nothing to test against", "our tickets keep changing scope", "what edge cases are we missing?", or "review this PRD before engineering starts".'
---

# Testable Feature Specifications

… (sign up to view the full skill)
Sign up to view, copy, and install the full skill

More development skills

View all Development skills →