chore: standardize ESLint/Prettier formatting across codebase
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
docOutputLocation: docs/brainstorming-session-results.md
|
||||
template: "{root}/templates/brainstorming-output-tmpl.yaml"
|
||||
template: '{root}/templates/brainstorming-output-tmpl.yaml'
|
||||
---
|
||||
|
||||
# Facilitate Brainstorming Session Task
|
||||
|
||||
@@ -6,18 +6,19 @@ Quick NFR validation focused on the core four: security, performance, reliabilit
|
||||
|
||||
```yaml
|
||||
required:
|
||||
- story_id: "{epic}.{story}" # e.g., "1.3"
|
||||
- story_path: "docs/stories/{epic}.{story}.*.md"
|
||||
|
||||
- story_id: '{epic}.{story}' # e.g., "1.3"
|
||||
- story_path: 'docs/stories/{epic}.{story}.*.md'
|
||||
|
||||
optional:
|
||||
- architecture_refs: "docs/architecture/*.md"
|
||||
- technical_preferences: "docs/technical-preferences.md"
|
||||
- architecture_refs: 'docs/architecture/*.md'
|
||||
- technical_preferences: 'docs/technical-preferences.md'
|
||||
- acceptance_criteria: From story file
|
||||
```
|
||||
|
||||
## Purpose
|
||||
|
||||
Assess non-functional requirements for a story and generate:
|
||||
|
||||
1. YAML block for the gate file's `nfr_validation` section
|
||||
2. Brief markdown assessment saved to `docs/qa/assessments/{epic}.{story}-nfr-{YYYYMMDD}.md`
|
||||
|
||||
@@ -26,6 +27,7 @@ Assess non-functional requirements for a story and generate:
|
||||
### 0. Fail-safe for Missing Inputs
|
||||
|
||||
If story_path or story file can't be found:
|
||||
|
||||
- Still create assessment file with note: "Source story not found"
|
||||
- Set all selected NFRs to CONCERNS with notes: "Target unknown / evidence missing"
|
||||
- Continue with assessment to provide value
|
||||
@@ -38,7 +40,7 @@ If story_path or story file can't be found:
|
||||
```text
|
||||
Which NFRs should I assess? (Enter numbers or press Enter for default)
|
||||
[1] Security (default)
|
||||
[2] Performance (default)
|
||||
[2] Performance (default)
|
||||
[3] Reliability (default)
|
||||
[4] Maintainability (default)
|
||||
[5] Usability
|
||||
@@ -52,6 +54,7 @@ Which NFRs should I assess? (Enter numbers or press Enter for default)
|
||||
### 2. Check for Thresholds
|
||||
|
||||
Look for NFR requirements in:
|
||||
|
||||
- Story acceptance criteria
|
||||
- `docs/architecture/*.md` files
|
||||
- `docs/technical-preferences.md`
|
||||
@@ -72,6 +75,7 @@ No security requirements found. Required auth method?
|
||||
### 3. Quick Assessment
|
||||
|
||||
For each selected NFR, check:
|
||||
|
||||
- Is there evidence it's implemented?
|
||||
- Can we validate it?
|
||||
- Are there obvious gaps?
|
||||
@@ -86,24 +90,24 @@ Generate ONLY for NFRs actually assessed (no placeholders):
|
||||
# Gate YAML (copy/paste):
|
||||
nfr_validation:
|
||||
_assessed: [security, performance, reliability, maintainability]
|
||||
security:
|
||||
security:
|
||||
status: CONCERNS
|
||||
notes: "No rate limiting on auth endpoints"
|
||||
notes: 'No rate limiting on auth endpoints'
|
||||
performance:
|
||||
status: PASS
|
||||
notes: "Response times < 200ms verified"
|
||||
notes: 'Response times < 200ms verified'
|
||||
reliability:
|
||||
status: PASS
|
||||
notes: "Error handling and retries implemented"
|
||||
notes: 'Error handling and retries implemented'
|
||||
maintainability:
|
||||
status: CONCERNS
|
||||
notes: "Test coverage at 65%, target is 80%"
|
||||
notes: 'Test coverage at 65%, target is 80%'
|
||||
```
|
||||
|
||||
## Deterministic Status Rules
|
||||
|
||||
- **FAIL**: Any selected NFR has critical gap or target clearly not met
|
||||
- **CONCERNS**: No FAILs, but any NFR is unknown/partial/missing evidence
|
||||
- **CONCERNS**: No FAILs, but any NFR is unknown/partial/missing evidence
|
||||
- **PASS**: All selected NFRs meet targets with evidence
|
||||
|
||||
## Quality Score Calculation
|
||||
@@ -123,18 +127,21 @@ If `technical-preferences.md` defines custom weights, use those instead.
|
||||
|
||||
```markdown
|
||||
# NFR Assessment: {epic}.{story}
|
||||
|
||||
Date: {date}
|
||||
Reviewer: Quinn
|
||||
|
||||
<!-- Note: Source story not found (if applicable) -->
|
||||
|
||||
## Summary
|
||||
|
||||
- Security: CONCERNS - Missing rate limiting
|
||||
- Performance: PASS - Meets <200ms requirement
|
||||
- Reliability: PASS - Proper error handling
|
||||
- Maintainability: CONCERNS - Test coverage below target
|
||||
|
||||
## Critical Issues
|
||||
|
||||
1. **No rate limiting** (Security)
|
||||
- Risk: Brute force attacks possible
|
||||
- Fix: Add rate limiting middleware to auth endpoints
|
||||
@@ -144,6 +151,7 @@ Reviewer: Quinn
|
||||
- Fix: Add tests for uncovered branches
|
||||
|
||||
## Quick Wins
|
||||
|
||||
- Add rate limiting: ~2 hours
|
||||
- Increase test coverage: ~4 hours
|
||||
- Add performance monitoring: ~1 hour
|
||||
@@ -152,6 +160,7 @@ Reviewer: Quinn
|
||||
## Output 3: Story Update Line
|
||||
|
||||
**End with this line for the review task to quote:**
|
||||
|
||||
```
|
||||
NFR assessment: docs/qa/assessments/{epic}.{story}-nfr-{YYYYMMDD}.md
|
||||
```
|
||||
@@ -159,6 +168,7 @@ NFR assessment: docs/qa/assessments/{epic}.{story}-nfr-{YYYYMMDD}.md
|
||||
## Output 4: Gate Integration Line
|
||||
|
||||
**Always print at the end:**
|
||||
|
||||
```
|
||||
Gate NFR block ready → paste into docs/qa/gates/{epic}.{story}-{slug}.yml under nfr_validation
|
||||
```
|
||||
@@ -166,66 +176,82 @@ Gate NFR block ready → paste into docs/qa/gates/{epic}.{story}-{slug}.yml unde
|
||||
## Assessment Criteria
|
||||
|
||||
### Security
|
||||
|
||||
**PASS if:**
|
||||
|
||||
- Authentication implemented
|
||||
- Authorization enforced
|
||||
- Input validation present
|
||||
- No hardcoded secrets
|
||||
|
||||
**CONCERNS if:**
|
||||
|
||||
- Missing rate limiting
|
||||
- Weak encryption
|
||||
- Incomplete authorization
|
||||
|
||||
**FAIL if:**
|
||||
|
||||
- No authentication
|
||||
- Hardcoded credentials
|
||||
- SQL injection vulnerabilities
|
||||
|
||||
### Performance
|
||||
|
||||
**PASS if:**
|
||||
|
||||
- Meets response time targets
|
||||
- No obvious bottlenecks
|
||||
- Reasonable resource usage
|
||||
|
||||
**CONCERNS if:**
|
||||
|
||||
- Close to limits
|
||||
- Missing indexes
|
||||
- No caching strategy
|
||||
|
||||
**FAIL if:**
|
||||
|
||||
- Exceeds response time limits
|
||||
- Memory leaks
|
||||
- Unoptimized queries
|
||||
|
||||
### Reliability
|
||||
|
||||
**PASS if:**
|
||||
|
||||
- Error handling present
|
||||
- Graceful degradation
|
||||
- Retry logic where needed
|
||||
|
||||
**CONCERNS if:**
|
||||
|
||||
- Some error cases unhandled
|
||||
- No circuit breakers
|
||||
- Missing health checks
|
||||
|
||||
**FAIL if:**
|
||||
|
||||
- No error handling
|
||||
- Crashes on errors
|
||||
- No recovery mechanisms
|
||||
|
||||
### Maintainability
|
||||
|
||||
**PASS if:**
|
||||
|
||||
- Test coverage meets target
|
||||
- Code well-structured
|
||||
- Documentation present
|
||||
|
||||
**CONCERNS if:**
|
||||
|
||||
- Test coverage below target
|
||||
- Some code duplication
|
||||
- Missing documentation
|
||||
|
||||
**FAIL if:**
|
||||
|
||||
- No tests
|
||||
- Highly coupled code
|
||||
- No documentation
|
||||
@@ -283,7 +309,7 @@ maintainability:
|
||||
|
||||
1. **Functional Suitability**: Completeness, correctness, appropriateness
|
||||
2. **Performance Efficiency**: Time behavior, resource use, capacity
|
||||
3. **Compatibility**: Co-existence, interoperability
|
||||
3. **Compatibility**: Co-existence, interoperability
|
||||
4. **Usability**: Learnability, operability, accessibility
|
||||
5. **Reliability**: Maturity, availability, fault tolerance
|
||||
6. **Security**: Confidentiality, integrity, authenticity
|
||||
@@ -291,6 +317,7 @@ maintainability:
|
||||
8. **Portability**: Adaptability, installability
|
||||
|
||||
Use these when assessing beyond the core four.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
@@ -304,12 +331,13 @@ performance_deep_dive:
|
||||
p99: 350ms
|
||||
database:
|
||||
slow_queries: 2
|
||||
missing_indexes: ["users.email", "orders.user_id"]
|
||||
missing_indexes: ['users.email', 'orders.user_id']
|
||||
caching:
|
||||
hit_rate: 0%
|
||||
recommendation: "Add Redis for session data"
|
||||
recommendation: 'Add Redis for session data'
|
||||
load_test:
|
||||
max_rps: 150
|
||||
breaking_point: 200 rps
|
||||
```
|
||||
</details>
|
||||
|
||||
</details>
|
||||
|
||||
@@ -27,11 +27,11 @@ Slug rules:
|
||||
|
||||
```yaml
|
||||
schema: 1
|
||||
story: "{epic}.{story}"
|
||||
story: '{epic}.{story}'
|
||||
gate: PASS|CONCERNS|FAIL|WAIVED
|
||||
status_reason: "1-2 sentence explanation of gate decision"
|
||||
reviewer: "Quinn"
|
||||
updated: "{ISO-8601 timestamp}"
|
||||
status_reason: '1-2 sentence explanation of gate decision'
|
||||
reviewer: 'Quinn'
|
||||
updated: '{ISO-8601 timestamp}'
|
||||
top_issues: [] # Empty array if no issues
|
||||
waiver: { active: false } # Only set active: true if WAIVED
|
||||
```
|
||||
@@ -40,20 +40,20 @@ waiver: { active: false } # Only set active: true if WAIVED
|
||||
|
||||
```yaml
|
||||
schema: 1
|
||||
story: "1.3"
|
||||
story: '1.3'
|
||||
gate: CONCERNS
|
||||
status_reason: "Missing rate limiting on auth endpoints poses security risk."
|
||||
reviewer: "Quinn"
|
||||
updated: "2025-01-12T10:15:00Z"
|
||||
status_reason: 'Missing rate limiting on auth endpoints poses security risk.'
|
||||
reviewer: 'Quinn'
|
||||
updated: '2025-01-12T10:15:00Z'
|
||||
top_issues:
|
||||
- id: "SEC-001"
|
||||
- id: 'SEC-001'
|
||||
severity: high # ONLY: low|medium|high
|
||||
finding: "No rate limiting on login endpoint"
|
||||
suggested_action: "Add rate limiting middleware before production"
|
||||
- id: "TEST-001"
|
||||
finding: 'No rate limiting on login endpoint'
|
||||
suggested_action: 'Add rate limiting middleware before production'
|
||||
- id: 'TEST-001'
|
||||
severity: medium
|
||||
finding: "No integration tests for auth flow"
|
||||
suggested_action: "Add integration test coverage"
|
||||
finding: 'No integration tests for auth flow'
|
||||
suggested_action: 'Add integration test coverage'
|
||||
waiver: { active: false }
|
||||
```
|
||||
|
||||
@@ -61,20 +61,20 @@ waiver: { active: false }
|
||||
|
||||
```yaml
|
||||
schema: 1
|
||||
story: "1.3"
|
||||
story: '1.3'
|
||||
gate: WAIVED
|
||||
status_reason: "Known issues accepted for MVP release."
|
||||
reviewer: "Quinn"
|
||||
updated: "2025-01-12T10:15:00Z"
|
||||
status_reason: 'Known issues accepted for MVP release.'
|
||||
reviewer: 'Quinn'
|
||||
updated: '2025-01-12T10:15:00Z'
|
||||
top_issues:
|
||||
- id: "PERF-001"
|
||||
- id: 'PERF-001'
|
||||
severity: low
|
||||
finding: "Dashboard loads slowly with 1000+ items"
|
||||
suggested_action: "Implement pagination in next sprint"
|
||||
finding: 'Dashboard loads slowly with 1000+ items'
|
||||
suggested_action: 'Implement pagination in next sprint'
|
||||
waiver:
|
||||
active: true
|
||||
reason: "MVP release - performance optimization deferred"
|
||||
approved_by: "Product Owner"
|
||||
reason: 'MVP release - performance optimization deferred'
|
||||
approved_by: 'Product Owner'
|
||||
```
|
||||
|
||||
## Gate Decision Criteria
|
||||
|
||||
@@ -6,10 +6,10 @@ Perform a comprehensive test architecture review with quality gate decision. Thi
|
||||
|
||||
```yaml
|
||||
required:
|
||||
- story_id: "{epic}.{story}" # e.g., "1.3"
|
||||
- story_path: "{devStoryLocation}/{epic}.{story}.*.md" # Path from core-config.yaml
|
||||
- story_title: "{title}" # If missing, derive from story file H1
|
||||
- story_slug: "{slug}" # If missing, derive from title (lowercase, hyphenated)
|
||||
- story_id: '{epic}.{story}' # e.g., "1.3"
|
||||
- story_path: '{devStoryLocation}/{epic}.{story}.*.md' # Path from core-config.yaml
|
||||
- story_title: '{title}' # If missing, derive from story file H1
|
||||
- story_slug: '{slug}' # If missing, derive from title (lowercase, hyphenated)
|
||||
```
|
||||
|
||||
## Prerequisites
|
||||
@@ -191,19 +191,19 @@ Gate file structure:
|
||||
|
||||
```yaml
|
||||
schema: 1
|
||||
story: "{epic}.{story}"
|
||||
story_title: "{story title}"
|
||||
story: '{epic}.{story}'
|
||||
story_title: '{story title}'
|
||||
gate: PASS|CONCERNS|FAIL|WAIVED
|
||||
status_reason: "1-2 sentence explanation of gate decision"
|
||||
reviewer: "Quinn (Test Architect)"
|
||||
updated: "{ISO-8601 timestamp}"
|
||||
status_reason: '1-2 sentence explanation of gate decision'
|
||||
reviewer: 'Quinn (Test Architect)'
|
||||
updated: '{ISO-8601 timestamp}'
|
||||
|
||||
top_issues: [] # Empty if no issues
|
||||
waiver: { active: false } # Set active: true only if WAIVED
|
||||
|
||||
# Extended fields (optional but recommended):
|
||||
quality_score: 0-100 # 100 - (20*FAILs) - (10*CONCERNS) or use technical-preferences.md weights
|
||||
expires: "{ISO-8601 timestamp}" # Typically 2 weeks from review
|
||||
expires: '{ISO-8601 timestamp}' # Typically 2 weeks from review
|
||||
|
||||
evidence:
|
||||
tests_reviewed: { count }
|
||||
@@ -215,24 +215,24 @@ evidence:
|
||||
nfr_validation:
|
||||
security:
|
||||
status: PASS|CONCERNS|FAIL
|
||||
notes: "Specific findings"
|
||||
notes: 'Specific findings'
|
||||
performance:
|
||||
status: PASS|CONCERNS|FAIL
|
||||
notes: "Specific findings"
|
||||
notes: 'Specific findings'
|
||||
reliability:
|
||||
status: PASS|CONCERNS|FAIL
|
||||
notes: "Specific findings"
|
||||
notes: 'Specific findings'
|
||||
maintainability:
|
||||
status: PASS|CONCERNS|FAIL
|
||||
notes: "Specific findings"
|
||||
notes: 'Specific findings'
|
||||
|
||||
recommendations:
|
||||
immediate: # Must fix before production
|
||||
- action: "Add rate limiting"
|
||||
refs: ["api/auth/login.ts"]
|
||||
- action: 'Add rate limiting'
|
||||
refs: ['api/auth/login.ts']
|
||||
future: # Can be addressed later
|
||||
- action: "Consider caching"
|
||||
refs: ["services/data.ts"]
|
||||
- action: 'Consider caching'
|
||||
refs: ['services/data.ts']
|
||||
```
|
||||
|
||||
### Gate Decision Criteria
|
||||
|
||||
@@ -6,10 +6,10 @@ Generate a comprehensive risk assessment matrix for a story implementation using
|
||||
|
||||
```yaml
|
||||
required:
|
||||
- story_id: "{epic}.{story}" # e.g., "1.3"
|
||||
- story_path: "docs/stories/{epic}.{story}.*.md"
|
||||
- story_title: "{title}" # If missing, derive from story file H1
|
||||
- story_slug: "{slug}" # If missing, derive from title (lowercase, hyphenated)
|
||||
- story_id: '{epic}.{story}' # e.g., "1.3"
|
||||
- story_path: 'docs/stories/{epic}.{story}.*.md'
|
||||
- story_title: '{title}' # If missing, derive from story file H1
|
||||
- story_slug: '{slug}' # If missing, derive from title (lowercase, hyphenated)
|
||||
```
|
||||
|
||||
## Purpose
|
||||
@@ -79,14 +79,14 @@ For each category, identify specific risks:
|
||||
|
||||
```yaml
|
||||
risk:
|
||||
id: "SEC-001" # Use prefixes: SEC, PERF, DATA, BUS, OPS, TECH
|
||||
id: 'SEC-001' # Use prefixes: SEC, PERF, DATA, BUS, OPS, TECH
|
||||
category: security
|
||||
title: "Insufficient input validation on user forms"
|
||||
description: "Form inputs not properly sanitized could lead to XSS attacks"
|
||||
title: 'Insufficient input validation on user forms'
|
||||
description: 'Form inputs not properly sanitized could lead to XSS attacks'
|
||||
affected_components:
|
||||
- "UserRegistrationForm"
|
||||
- "ProfileUpdateForm"
|
||||
detection_method: "Code review revealed missing validation"
|
||||
- 'UserRegistrationForm'
|
||||
- 'ProfileUpdateForm'
|
||||
detection_method: 'Code review revealed missing validation'
|
||||
```
|
||||
|
||||
### 2. Risk Assessment
|
||||
@@ -133,20 +133,20 @@ For each identified risk, provide mitigation:
|
||||
|
||||
```yaml
|
||||
mitigation:
|
||||
risk_id: "SEC-001"
|
||||
strategy: "preventive" # preventive|detective|corrective
|
||||
risk_id: 'SEC-001'
|
||||
strategy: 'preventive' # preventive|detective|corrective
|
||||
actions:
|
||||
- "Implement input validation library (e.g., validator.js)"
|
||||
- "Add CSP headers to prevent XSS execution"
|
||||
- "Sanitize all user inputs before storage"
|
||||
- "Escape all outputs in templates"
|
||||
- 'Implement input validation library (e.g., validator.js)'
|
||||
- 'Add CSP headers to prevent XSS execution'
|
||||
- 'Sanitize all user inputs before storage'
|
||||
- 'Escape all outputs in templates'
|
||||
testing_requirements:
|
||||
- "Security testing with OWASP ZAP"
|
||||
- "Manual penetration testing of forms"
|
||||
- "Unit tests for validation functions"
|
||||
residual_risk: "Low - Some zero-day vulnerabilities may remain"
|
||||
owner: "dev"
|
||||
timeline: "Before deployment"
|
||||
- 'Security testing with OWASP ZAP'
|
||||
- 'Manual penetration testing of forms'
|
||||
- 'Unit tests for validation functions'
|
||||
residual_risk: 'Low - Some zero-day vulnerabilities may remain'
|
||||
owner: 'dev'
|
||||
timeline: 'Before deployment'
|
||||
```
|
||||
|
||||
## Outputs
|
||||
@@ -172,12 +172,12 @@ risk_summary:
|
||||
highest:
|
||||
id: SEC-001
|
||||
score: 9
|
||||
title: "XSS on profile form"
|
||||
title: 'XSS on profile form'
|
||||
recommendations:
|
||||
must_fix:
|
||||
- "Add input sanitization & CSP"
|
||||
- 'Add input sanitization & CSP'
|
||||
monitor:
|
||||
- "Add security alerts for auth endpoints"
|
||||
- 'Add security alerts for auth endpoints'
|
||||
```
|
||||
|
||||
### Output 2: Markdown Report
|
||||
|
||||
@@ -6,10 +6,10 @@ Create comprehensive test scenarios with appropriate test level recommendations
|
||||
|
||||
```yaml
|
||||
required:
|
||||
- story_id: "{epic}.{story}" # e.g., "1.3"
|
||||
- story_path: "{devStoryLocation}/{epic}.{story}.*.md" # Path from core-config.yaml
|
||||
- story_title: "{title}" # If missing, derive from story file H1
|
||||
- story_slug: "{slug}" # If missing, derive from title (lowercase, hyphenated)
|
||||
- story_id: '{epic}.{story}' # e.g., "1.3"
|
||||
- story_path: '{devStoryLocation}/{epic}.{story}.*.md' # Path from core-config.yaml
|
||||
- story_title: '{title}' # If missing, derive from story file H1
|
||||
- story_slug: '{slug}' # If missing, derive from title (lowercase, hyphenated)
|
||||
```
|
||||
|
||||
## Purpose
|
||||
@@ -62,13 +62,13 @@ For each identified test need, create:
|
||||
|
||||
```yaml
|
||||
test_scenario:
|
||||
id: "{epic}.{story}-{LEVEL}-{SEQ}"
|
||||
requirement: "AC reference"
|
||||
id: '{epic}.{story}-{LEVEL}-{SEQ}'
|
||||
requirement: 'AC reference'
|
||||
priority: P0|P1|P2|P3
|
||||
level: unit|integration|e2e
|
||||
description: "What is being tested"
|
||||
justification: "Why this level was chosen"
|
||||
mitigates_risks: ["RISK-001"] # If risk profile exists
|
||||
description: 'What is being tested'
|
||||
justification: 'Why this level was chosen'
|
||||
mitigates_risks: ['RISK-001'] # If risk profile exists
|
||||
```
|
||||
|
||||
### 5. Validate Coverage
|
||||
|
||||
@@ -31,21 +31,21 @@ Identify all testable requirements from:
|
||||
For each requirement, document which tests validate it. Use Given-When-Then to describe what the test validates (not how it's written):
|
||||
|
||||
```yaml
|
||||
requirement: "AC1: User can login with valid credentials"
|
||||
requirement: 'AC1: User can login with valid credentials'
|
||||
test_mappings:
|
||||
- test_file: "auth/login.test.ts"
|
||||
test_case: "should successfully login with valid email and password"
|
||||
- test_file: 'auth/login.test.ts'
|
||||
test_case: 'should successfully login with valid email and password'
|
||||
# Given-When-Then describes WHAT the test validates, not HOW it's coded
|
||||
given: "A registered user with valid credentials"
|
||||
when: "They submit the login form"
|
||||
then: "They are redirected to dashboard and session is created"
|
||||
given: 'A registered user with valid credentials'
|
||||
when: 'They submit the login form'
|
||||
then: 'They are redirected to dashboard and session is created'
|
||||
coverage: full
|
||||
|
||||
- test_file: "e2e/auth-flow.test.ts"
|
||||
test_case: "complete login flow"
|
||||
given: "User on login page"
|
||||
when: "Entering valid credentials and submitting"
|
||||
then: "Dashboard loads with user data"
|
||||
- test_file: 'e2e/auth-flow.test.ts'
|
||||
test_case: 'complete login flow'
|
||||
given: 'User on login page'
|
||||
when: 'Entering valid credentials and submitting'
|
||||
then: 'Dashboard loads with user data'
|
||||
coverage: integration
|
||||
```
|
||||
|
||||
@@ -67,19 +67,19 @@ Document any gaps found:
|
||||
|
||||
```yaml
|
||||
coverage_gaps:
|
||||
- requirement: "AC3: Password reset email sent within 60 seconds"
|
||||
gap: "No test for email delivery timing"
|
||||
- requirement: 'AC3: Password reset email sent within 60 seconds'
|
||||
gap: 'No test for email delivery timing'
|
||||
severity: medium
|
||||
suggested_test:
|
||||
type: integration
|
||||
description: "Test email service SLA compliance"
|
||||
description: 'Test email service SLA compliance'
|
||||
|
||||
- requirement: "AC5: Support 1000 concurrent users"
|
||||
gap: "No load testing implemented"
|
||||
- requirement: 'AC5: Support 1000 concurrent users'
|
||||
gap: 'No load testing implemented'
|
||||
severity: high
|
||||
suggested_test:
|
||||
type: performance
|
||||
description: "Load test with 1000 concurrent connections"
|
||||
description: 'Load test with 1000 concurrent connections'
|
||||
```
|
||||
|
||||
## Outputs
|
||||
@@ -95,11 +95,11 @@ trace:
|
||||
full: Y
|
||||
partial: Z
|
||||
none: W
|
||||
planning_ref: "docs/qa/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md"
|
||||
planning_ref: 'docs/qa/assessments/{epic}.{story}-test-design-{YYYYMMDD}.md'
|
||||
uncovered:
|
||||
- ac: "AC3"
|
||||
reason: "No test found for password reset timing"
|
||||
notes: "See docs/qa/assessments/{epic}.{story}-trace-{YYYYMMDD}.md"
|
||||
- ac: 'AC3'
|
||||
reason: 'No test found for password reset timing'
|
||||
notes: 'See docs/qa/assessments/{epic}.{story}-trace-{YYYYMMDD}.md'
|
||||
```
|
||||
|
||||
### Output 2: Traceability Report
|
||||
|
||||
Reference in New Issue
Block a user