@nano-step/skill-manager 5.6.0 → 5.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/package.json +1 -1
- package/private-catalog.json +5 -0
- package/skills/deep-design/SKILL.md +402 -0
- package/skills/deep-design/evals/evals.json +23 -0
- package/skills/deep-design/skill.json +7 -0
- package/skills/feature-analysis/SKILL.md +290 -0
- package/skills/feature-analysis/skill.json +15 -0
- package/skills/nano-brain/AGENTS_SNIPPET.md +0 -9
- package/skills/nano-brain/skill.json +7 -0
- package/skills/pr-code-reviewer/CHANGELOG.md +287 -0
- package/skills/pr-code-reviewer/RESEARCH.md +60 -0
- package/skills/pr-code-reviewer/SKILL.md +530 -0
- package/skills/pr-code-reviewer/assets/config.json +47 -0
- package/skills/pr-code-reviewer/checklists/backend-express.md +357 -0
- package/skills/pr-code-reviewer/checklists/ci-cd.md +428 -0
- package/skills/pr-code-reviewer/checklists/consumer-search-matrix.md +339 -0
- package/skills/pr-code-reviewer/checklists/database.md +382 -0
- package/skills/pr-code-reviewer/checklists/frontend-vue-nuxt.md +426 -0
- package/skills/pr-code-reviewer/checklists/review-checklist.md +116 -0
- package/skills/pr-code-reviewer/references/framework-rules/express.md +39 -0
- package/skills/pr-code-reviewer/references/framework-rules/nestjs.md +41 -0
- package/skills/pr-code-reviewer/references/framework-rules/typeorm.md +52 -0
- package/skills/pr-code-reviewer/references/framework-rules/typescript.md +50 -0
- package/skills/pr-code-reviewer/references/framework-rules/vue-nuxt.md +53 -0
- package/skills/pr-code-reviewer/references/nano-brain-integration.md +61 -0
- package/skills/pr-code-reviewer/references/performance-patterns.md +26 -0
- package/skills/pr-code-reviewer/references/quality-patterns.md +25 -0
- package/skills/pr-code-reviewer/references/report-template.md +167 -0
- package/skills/pr-code-reviewer/references/security-patterns.md +31 -0
- package/skills/pr-code-reviewer/references/subagent-prompts.md +323 -0
- package/skills/pr-code-reviewer/skill.json +15 -0
- package/skills/rri-t-testing/SKILL.md +224 -0
- package/skills/rri-t-testing/assets/rri-t-coverage-dashboard.md +138 -0
- package/skills/rri-t-testing/assets/rri-t-memory-protocol.md +271 -0
- package/skills/rri-t-testing/assets/rri-t-persona-interview.md +249 -0
- package/skills/rri-t-testing/assets/rri-t-quality-scorecard.md +122 -0
- package/skills/rri-t-testing/assets/rri-t-risk-matrix.md +87 -0
- package/skills/rri-t-testing/assets/rri-t-stress-matrix.md +100 -0
- package/skills/rri-t-testing/assets/rri-t-test-case.md +181 -0
- package/skills/rri-t-testing/assets/rri-t-testability-gate.md +131 -0
- package/skills/rri-t-testing/assets/rri-t-traceability-matrix.md +105 -0
- package/skills/rri-t-testing/skill.json +9 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# RRI-T Quality Scorecard
|
|
2
|
+
|
|
3
|
+
**Feature:** {feature-name}
|
|
4
|
+
**Date:** {YYYY-MM-DD}
|
|
5
|
+
**Assessor:** {agent/person}
|
|
6
|
+
|
|
7
|
+
## Score Calculation
|
|
8
|
+
|
|
9
|
+
### Starting Score: 100
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Violations
|
|
14
|
+
|
|
15
|
+
### Critical Violations (-10 each)
|
|
16
|
+
|
|
17
|
+
| ID | Violation | Description | Present | Penalty |
|
|
18
|
+
|----|-----------|-------------|---------|---------|
|
|
19
|
+
| CRIT-1 | Hard waits | Using sleep/wait instead of proper assertions | Y / N | -10 |
|
|
20
|
+
| CRIT-2 | Missing assertions | Test has no verification of expected outcome | Y / N | -10 |
|
|
21
|
+
| CRIT-3 | CSS selectors | Using fragile CSS selectors instead of semantic locators | Y / N | -10 |
|
|
22
|
+
| CRIT-4 | Conditional flow | Using if/else in test logic (non-deterministic) | Y / N | -10 |
|
|
23
|
+
|
|
24
|
+
**Critical Subtotal:** -{count} x 10 = -{total}
|
|
25
|
+
|
|
26
|
+
### High Violations (-5 each)
|
|
27
|
+
|
|
28
|
+
| ID | Violation | Description | Present | Penalty |
|
|
29
|
+
|----|-----------|-------------|---------|---------|
|
|
30
|
+
| HIGH-1 | No isolation | Tests share state or depend on execution order | Y / N | -5 |
|
|
31
|
+
| HIGH-2 | Duplicate setup | Same setup code repeated across tests | Y / N | -5 |
|
|
32
|
+
| HIGH-3 | Flaky test | Test fails intermittently without code changes | Y / N | -5 |
|
|
33
|
+
| HIGH-4 | Missing error coverage | No tests for error/edge cases | Y / N | -5 |
|
|
34
|
+
|
|
35
|
+
**High Subtotal:** -{count} x 5 = -{total}
|
|
36
|
+
|
|
37
|
+
### Medium Violations (-2 each)
|
|
38
|
+
|
|
39
|
+
| ID | Violation | Description | Present | Penalty |
|
|
40
|
+
|----|-----------|-------------|---------|---------|
|
|
41
|
+
| MED-1 | Vague names | Test names do not describe what is being tested | Y / N | -2 |
|
|
42
|
+
| MED-2 | File > 300 lines | Test file exceeds 300 lines | Y / N | -2 |
|
|
43
|
+
| MED-3 | Test > 90s | Individual test takes longer than 90 seconds | Y / N | -2 |
|
|
44
|
+
| MED-4 | No test ID | Test cases lack unique identifiers | Y / N | -2 |
|
|
45
|
+
|
|
46
|
+
**Medium Subtotal:** -{count} x 2 = -{total}
|
|
47
|
+
|
|
48
|
+
### Low Violations (-1 each)
|
|
49
|
+
|
|
50
|
+
| ID | Violation | Description | Present | Penalty |
|
|
51
|
+
|----|-----------|-------------|---------|---------|
|
|
52
|
+
| LOW-1 | Style inconsistency | Inconsistent naming, formatting, or structure | Y / N | -1 |
|
|
53
|
+
| LOW-2 | Missing comment | Complex logic without explanatory comment | Y / N | -1 |
|
|
54
|
+
|
|
55
|
+
**Low Subtotal:** -{count} x 1 = -{total}
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Violation Tracking
|
|
60
|
+
|
|
61
|
+
| ID | Description | Severity | Penalty | File/Line |
|
|
62
|
+
|----|-------------|----------|---------|-----------|
|
|
63
|
+
| V-001 | | CRIT / HIGH / MED / LOW | | |
|
|
64
|
+
| V-002 | | | | |
|
|
65
|
+
| V-003 | | | | |
|
|
66
|
+
| V-004 | | | | |
|
|
67
|
+
| V-005 | | | | |
|
|
68
|
+
|
|
69
|
+
**Total Penalties:** -{total}
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Bonuses (+5 each, max +30)
|
|
74
|
+
|
|
75
|
+
| ID | Criteria | Description | Present | Points |
|
|
76
|
+
|----|----------|-------------|---------|--------|
|
|
77
|
+
| BON-1 | Semantic locators | Uses data-testid, aria-label, role selectors | Y / N | +5 |
|
|
78
|
+
| BON-2 | Data factories | Uses factories/fixtures for test data | Y / N | +5 |
|
|
79
|
+
| BON-3 | Network-first | Mocks/intercepts network for determinism | Y / N | +5 |
|
|
80
|
+
| BON-4 | Isolation | Each test is fully independent | Y / N | +5 |
|
|
81
|
+
| BON-5 | Test IDs | All test cases have unique TC-XXX identifiers | Y / N | +5 |
|
|
82
|
+
| BON-6 | BDD style | Uses Given/When/Then or similar structure | Y / N | +5 |
|
|
83
|
+
|
|
84
|
+
**Total Bonuses:** +{total} (capped at +30)
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Final Score Calculation
|
|
89
|
+
|
|
90
|
+
| Component | Value |
|
|
91
|
+
|-----------|-------|
|
|
92
|
+
| Starting Score | 100 |
|
|
93
|
+
| Critical Penalties | -{total} |
|
|
94
|
+
| High Penalties | -{total} |
|
|
95
|
+
| Medium Penalties | -{total} |
|
|
96
|
+
| Low Penalties | -{total} |
|
|
97
|
+
| Bonuses | +{total} |
|
|
98
|
+
| **Final Score** | **{score}** |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Grade
|
|
103
|
+
|
|
104
|
+
| Grade | Score Range | Description |
|
|
105
|
+
|-------|-------------|-------------|
|
|
106
|
+
| A+ | 90-100+ | Excellent - production ready |
|
|
107
|
+
| A | 80-89 | Good - minor improvements suggested |
|
|
108
|
+
| B | 70-79 | Acceptable - improvements needed |
|
|
109
|
+
| C | 60-69 | Below standard - significant issues |
|
|
110
|
+
| F | < 60 | Failing - major rework required |
|
|
111
|
+
|
|
112
|
+
**Final Grade:** {grade}
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Recommendations
|
|
117
|
+
|
|
118
|
+
| Priority | Recommendation |
|
|
119
|
+
|----------|----------------|
|
|
120
|
+
| 1 | |
|
|
121
|
+
| 2 | |
|
|
122
|
+
| 3 | |
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# RRI-T Risk Matrix
|
|
2
|
+
|
|
3
|
+
**Feature:** {feature-name}
|
|
4
|
+
**Owner:** {owner}
|
|
5
|
+
**Date:** {YYYY-MM-DD}
|
|
6
|
+
**Build:** {build-id}
|
|
7
|
+
|
|
8
|
+
## Risk Register
|
|
9
|
+
|
|
10
|
+
| ID | Risk Description | Category | Probability | Impact | Score | Mitigation | Status |
|
|
11
|
+
|----|------------------|----------|-------------|--------|-------|------------|--------|
|
|
12
|
+
| R-001 | API rate limiting not tested under load | PERF | 2 | 3 | 6 | Add load test for 100 concurrent users | OPEN |
|
|
13
|
+
| R-002 | User session not invalidated on role change | SEC | 2 | 3 | 6 | Test role revocation mid-session | OPEN |
|
|
14
|
+
| R-003 | Offline sync may duplicate items on reconnect | DATA | 3 | 2 | 6 | Test offline queue with 50+ pending changes | OPEN |
|
|
15
|
+
| R-004 | | | | | | | |
|
|
16
|
+
| R-005 | | | | | | | |
|
|
17
|
+
| R-006 | | | | | | | |
|
|
18
|
+
| R-007 | | | | | | | |
|
|
19
|
+
| R-008 | | | | | | | |
|
|
20
|
+
| R-009 | | | | | | | |
|
|
21
|
+
| R-010 | | | | | | | |
|
|
22
|
+
|
|
23
|
+
## Scoring Guide
|
|
24
|
+
|
|
25
|
+
### Probability
|
|
26
|
+
|
|
27
|
+
| Score | Definition |
|
|
28
|
+
|-------|------------|
|
|
29
|
+
| 1 | Unlikely - well-tested area, minor change |
|
|
30
|
+
| 2 | Possible - moderate complexity, some unknowns |
|
|
31
|
+
| 3 | Likely - new area, high complexity, many dependencies |
|
|
32
|
+
|
|
33
|
+
### Impact
|
|
34
|
+
|
|
35
|
+
| Score | Definition |
|
|
36
|
+
|-------|------------|
|
|
37
|
+
| 1 | Low - cosmetic, workaround exists |
|
|
38
|
+
| 2 | Medium - feature degraded, user friction |
|
|
39
|
+
| 3 | High - data loss, security breach, revenue impact |
|
|
40
|
+
|
|
41
|
+
### Risk Score = Probability x Impact
|
|
42
|
+
|
|
43
|
+
| Score | Level | Action |
|
|
44
|
+
|-------|-------|--------|
|
|
45
|
+
| 1-2 | LOW | Monitor, test if time permits |
|
|
46
|
+
| 3-5 | MEDIUM | Test with standard coverage |
|
|
47
|
+
| 6-8 | HIGH | Requires mitigation before release |
|
|
48
|
+
| 9 | CRITICAL | Blocks release if unmitigated |
|
|
49
|
+
|
|
50
|
+
## Category Definitions
|
|
51
|
+
|
|
52
|
+
| Code | Category | Description |
|
|
53
|
+
|------|----------|-------------|
|
|
54
|
+
| TECH | Technical | Architecture fragility, integration issues, technical debt |
|
|
55
|
+
| SEC | Security | Authentication, authorization, data exposure, vulnerabilities |
|
|
56
|
+
| PERF | Performance | Response time, throughput, scalability, resource usage |
|
|
57
|
+
| DATA | Data | Integrity, corruption, loss, migration, consistency |
|
|
58
|
+
| BUS | Business | Logic errors, calculation mistakes, workflow issues |
|
|
59
|
+
| OPS | Operational | Deployment, monitoring, recovery, configuration |
|
|
60
|
+
|
|
61
|
+
## Threshold Rules
|
|
62
|
+
|
|
63
|
+
- Score >= 6: Requires documented mitigation plan
|
|
64
|
+
- Score = 9: Blocks release until mitigated and verified
|
|
65
|
+
- SEC category: Always requires security dimension testing
|
|
66
|
+
- DATA category: Always requires data integrity dimension testing
|
|
67
|
+
|
|
68
|
+
## Risk Summary
|
|
69
|
+
|
|
70
|
+
| Metric | Value |
|
|
71
|
+
|--------|-------|
|
|
72
|
+
| Total Risks | {count} |
|
|
73
|
+
| High (>= 6) | {count} |
|
|
74
|
+
| Critical (= 9) | {count} |
|
|
75
|
+
| Mitigated | {count} |
|
|
76
|
+
| Open | {count} |
|
|
77
|
+
|
|
78
|
+
## Risk by Category
|
|
79
|
+
|
|
80
|
+
| Category | Count | Highest Score |
|
|
81
|
+
|----------|-------|---------------|
|
|
82
|
+
| TECH | | |
|
|
83
|
+
| SEC | | |
|
|
84
|
+
| PERF | | |
|
|
85
|
+
| DATA | | |
|
|
86
|
+
| BUS | | |
|
|
87
|
+
| OPS | | |
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# RRI-T Stress Matrix Template
|
|
2
|
+
|
|
3
|
+
## Feature
|
|
4
|
+
- Name: <feature-name>
|
|
5
|
+
- Owner: <owner>
|
|
6
|
+
- Date: <yyyy-mm-dd>
|
|
7
|
+
- Build/Release: <build-id>
|
|
8
|
+
- Environment: <dev/staging/prod>
|
|
9
|
+
|
|
10
|
+
## Summary
|
|
11
|
+
This template covers RRI-T 8-axis stress testing for a household management app
|
|
12
|
+
(inventory, meal planning, shopping lists, finances).
|
|
13
|
+
|
|
14
|
+
## Stress Axes Summary
|
|
15
|
+
| Axis | Name | Focus | Notes |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| 1 | TIME | Deadlines, bulk ops, timeouts | Burst actions, long-running jobs |
|
|
18
|
+
| 2 | DATA | 1000+ rows, search/filter speed | Large inventory, long history |
|
|
19
|
+
| 3 | ERROR | Undo/redo, auto-save recovery, messages | Resilience, recoverability |
|
|
20
|
+
| 4 | COLLAB | Concurrent editing, conflicts, multi-user | Household members overlap |
|
|
21
|
+
| 5 | EMERGENCY | Interruptions, crash recovery | Browser/device failures |
|
|
22
|
+
| 6 | SECURITY | Access revocation, audit logs, session expiry | Role changes, expiring auth |
|
|
23
|
+
| 7 | INFRA | Server crash, RTO<15m, RPO<5m, offline | Service resilience |
|
|
24
|
+
| 8 | LOCALE | Vietnamese diacritics, VND, GMT+7, overflow | Local UX correctness |
|
|
25
|
+
|
|
26
|
+
## Axis Combination Matrix (Test Where X)
|
|
27
|
+
| Axis | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
|
28
|
+
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
29
|
+
| 1 TIME | - | X | X | X | X | X | X | X |
|
|
30
|
+
| 2 DATA | X | - | X | X | | X | X | X |
|
|
31
|
+
| 3 ERROR | X | X | - | X | X | | X | X |
|
|
32
|
+
| 4 COLLAB | X | X | X | - | | X | | X |
|
|
33
|
+
| 5 EMERGENCY | X | | X | | - | X | X | |
|
|
34
|
+
| 6 SECURITY | X | X | | X | X | - | X | X |
|
|
35
|
+
| 7 INFRA | X | X | X | | X | X | - | X |
|
|
36
|
+
| 8 LOCALE | X | X | X | X | | X | X | - |
|
|
37
|
+
|
|
38
|
+
## Stress Scenarios
|
|
39
|
+
|
|
40
|
+
### Axis 1: TIME
|
|
41
|
+
| # | Scenario | Steps | Expected | Priority |
|
|
42
|
+
| --- | --- | --- | --- | --- |
|
|
43
|
+
| S-TIME-001 | Bulk add 500 pantry items before dinner | Start timer 2 min, import CSV of pantry items | Import completes, progress visible, no timeout | P1 |
|
|
44
|
+
| S-TIME-002 | Rapid meal plan edits during 10-min window | Update 10 meals in 60s, save each | Saves succeed, no stale data, UI responsive | P1 |
|
|
45
|
+
| S-TIME-003 | Shopping list sync under poor network | Add 30 items quickly, toggle offline/online | Sync resolves within 60s, no duplicates | P2 |
|
|
46
|
+
| S-TIME-004 | Finance entry auto-save timeout | Create expense, wait 45s idle, resume edit | Auto-save persists, no data loss | P2 |
|
|
47
|
+
|
|
48
|
+
### Axis 2: DATA
|
|
49
|
+
| # | Scenario | Steps | Expected | Priority |
|
|
50
|
+
| S-DATA-001 | Inventory list 1000+ items | Load inventory with 1200 items | Scroll, search, filter remain under 2s | P1 |
|
|
51
|
+
| S-DATA-002 | Shopping history filter speed | Filter 800 past purchases by category | Results appear under 2s, no UI freeze | P2 |
|
|
52
|
+
| S-DATA-003 | Meal plan calendar 6 months | Open 6-month plan view with 180 entries | Render within 3s, no layout shift | P2 |
|
|
53
|
+
| S-DATA-004 | Finance ledger export 2000 rows | Export 2k ledger rows to CSV | Export completes, file accurate | P2 |
|
|
54
|
+
|
|
55
|
+
### Axis 3: ERROR
|
|
56
|
+
| # | Scenario | Steps | Expected | Priority |
|
|
57
|
+
| S-ERROR-001 | Undo/redo inventory quantity changes | Change item qty 5 times, undo 5, redo 5 | Exact state restored each step | P1 |
|
|
58
|
+
| S-ERROR-002 | Auto-save recovery after crash | Edit meal notes, force close tab, reopen | Draft restored with last autosave | P1 |
|
|
59
|
+
| S-ERROR-003 | Validation error messages | Add expense with negative value | Clear inline error, no save | P2 |
|
|
60
|
+
| S-ERROR-004 | Failed bulk import rollback | Import malformed CSV for pantry | No partial data, error list shown | P1 |
|
|
61
|
+
|
|
62
|
+
### Axis 4: COLLAB
|
|
63
|
+
| # | Scenario | Steps | Expected | Priority |
|
|
64
|
+
| S-COLLAB-001 | Two users edit shopping list | User A adds 5 items, User B deletes 2 | Conflict warning, final list consistent | P1 |
|
|
65
|
+
| S-COLLAB-002 | Concurrent budget updates | Two users change monthly budget | Latest change prompts merge dialog | P2 |
|
|
66
|
+
| S-COLLAB-003 | Shared meal plan edit | User A updates recipe, User B updates servings | Both changes applied without loss | P2 |
|
|
67
|
+
| S-COLLAB-004 | New member joins household | Invite new user during active edits | New user sees updated list | P3 |
|
|
68
|
+
|
|
69
|
+
### Axis 5: EMERGENCY
|
|
70
|
+
| # | Scenario | Steps | Expected | Priority |
|
|
71
|
+
| S-EMERGENCY-001 | Browser crash while editing | Edit grocery item notes, kill browser | Reopen, draft restored | P1 |
|
|
72
|
+
| S-EMERGENCY-002 | Power loss during bulk update | Start bulk pantry update, go offline | Partial changes queued or rolled back | P1 |
|
|
73
|
+
| S-EMERGENCY-003 | Device sleep mid-sync | Start sync, close laptop lid | Resume sync without duplication | P2 |
|
|
74
|
+
| S-EMERGENCY-004 | App reload mid-transaction | Save expense, hit refresh instantly | No double charge, one entry saved | P2 |
|
|
75
|
+
|
|
76
|
+
### Axis 6: SECURITY
|
|
77
|
+
| # | Scenario | Steps | Expected | Priority |
|
|
78
|
+
| S-SECURITY-001 | Access revoked during edit | Admin removes user role mid-edit | User warned, changes blocked, data safe | P1 |
|
|
79
|
+
| S-SECURITY-002 | Session expiry while shopping | Session expires, user adds item | Redirect to login, item queued | P1 |
|
|
80
|
+
| S-SECURITY-003 | Audit log for finance edits | Edit expense amount | Audit entry with user, time, change | P2 |
|
|
81
|
+
| S-SECURITY-004 | Private list access attempt | Non-member tries to open list | Access denied, no data leak | P1 |
|
|
82
|
+
|
|
83
|
+
### Axis 7: INFRA
|
|
84
|
+
| # | Scenario | Steps | Expected | Priority |
|
|
85
|
+
| S-INFRA-001 | Server crash during sync | Trigger sync, kill server | Retry logic, no data loss | P1 |
|
|
86
|
+
| S-INFRA-002 | RTO < 15m recovery | Simulate outage, restore service | Service back within 15m, status updated | P1 |
|
|
87
|
+
| S-INFRA-003 | RPO < 5m data recovery | Create 3 entries, failover | Max 5m data loss, latest persists | P1 |
|
|
88
|
+
| S-INFRA-004 | Offline mode for shopping list | Go offline, add 10 items | Local cache used, sync on reconnect | P2 |
|
|
89
|
+
|
|
90
|
+
### Axis 8: LOCALE
|
|
91
|
+
| # | Scenario | Steps | Expected | Priority |
|
|
92
|
+
| S-LOCALE-001 | Diacritic-insensitive search | Search "nguyen" in household members | Finds "Nguyen" matches | P1 |
|
|
93
|
+
| S-LOCALE-002 | VND currency formatting | View finance summary | Shows "1.000.000d" not "1,000,000" | P1 |
|
|
94
|
+
| S-LOCALE-003 | Vietnamese text overflow | Open long Vietnamese recipe names | No overflow, wraps cleanly | P2 |
|
|
95
|
+
| S-LOCALE-004 | Date format DD/MM/YYYY | View meal plan date header | Displays DD/MM/YYYY | P1 |
|
|
96
|
+
|
|
97
|
+
## Notes
|
|
98
|
+
- Attach logs, screenshots, and timings for any P1 or P2 failures.
|
|
99
|
+
- Capture device, OS, browser, and network conditions.
|
|
100
|
+
- Link to any incident or bug IDs created from results.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# RRI-T Test Cases — {Feature Name}
|
|
2
|
+
|
|
3
|
+
**Feature:** {feature-name}
|
|
4
|
+
**Generated from:** Persona Interview ({date})
|
|
5
|
+
**Total Test Cases:** {count}
|
|
6
|
+
|
|
7
|
+
## Priority Distribution
|
|
8
|
+
| Priority | Count | Description |
|
|
9
|
+
|----------|-------|-------------|
|
|
10
|
+
| P0 | 0 | Critical — blocks release |
|
|
11
|
+
| P1 | 0 | Major — fix before release |
|
|
12
|
+
| P2 | 0 | Minor — next sprint |
|
|
13
|
+
| P3 | 0 | Trivial — backlog |
|
|
14
|
+
|
|
15
|
+
## Dimension Distribution
|
|
16
|
+
| Dimension | Count | Target Coverage |
|
|
17
|
+
|-----------|-------|----------------|
|
|
18
|
+
| D1: UI/UX | 0 | >= 85% |
|
|
19
|
+
| D2: API | 0 | >= 85% |
|
|
20
|
+
| D3: Performance | 0 | >= 70% |
|
|
21
|
+
| D4: Security | 0 | >= 85% |
|
|
22
|
+
| D5: Data Integrity | 0 | >= 85% |
|
|
23
|
+
| D6: Infrastructure | 0 | >= 70% |
|
|
24
|
+
| D7: Edge Cases | 0 | >= 85% |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Test Cases
|
|
29
|
+
|
|
30
|
+
### TC-RRI-{FEATURE}-001
|
|
31
|
+
- **Q (Question):** As an end user, what happens when I add an inventory item while on a weak 3G connection?
|
|
32
|
+
- **A (Answer):** The item should be saved locally immediately, show a "syncing" indicator, and sync to the server when connection improves. No data loss should occur.
|
|
33
|
+
- **R (Requirement):** REQ-OFFLINE-001: App must support offline-first operations with automatic sync
|
|
34
|
+
- **P (Priority):** P0
|
|
35
|
+
- **T (Test Case):**
|
|
36
|
+
- **Preconditions:**
|
|
37
|
+
- User logged in to household
|
|
38
|
+
- Device has weak 3G connection (simulated: 500ms latency, 50% packet loss)
|
|
39
|
+
- At least 1 existing inventory item for comparison
|
|
40
|
+
- **Steps:**
|
|
41
|
+
1. Navigate to Inventory screen
|
|
42
|
+
2. Tap "Add Item" button
|
|
43
|
+
3. Fill in: Name "Gao ST25", Quantity "5", Unit "kg", Expiration "2026-03-15"
|
|
44
|
+
4. Tap "Save"
|
|
45
|
+
5. Observe UI feedback
|
|
46
|
+
6. Wait 30 seconds
|
|
47
|
+
7. Check item appears in inventory list
|
|
48
|
+
8. Restore normal network connection
|
|
49
|
+
9. Wait for sync indicator to complete
|
|
50
|
+
10. Verify item exists on server (check from another device)
|
|
51
|
+
- **Expected Result:**
|
|
52
|
+
- Item appears in list immediately with "syncing" badge
|
|
53
|
+
- No error message shown
|
|
54
|
+
- After network restores, item syncs successfully
|
|
55
|
+
- Item visible from other devices within 5 seconds of sync
|
|
56
|
+
- **Dimension:** D3: Performance
|
|
57
|
+
- **Stress Axis:** TIME, INFRA
|
|
58
|
+
- **Source Persona:** End User
|
|
59
|
+
- **Risk Category:** PERF
|
|
60
|
+
- **Risk Score:** 6
|
|
61
|
+
- **Traceability:** REQ-OFFLINE-001
|
|
62
|
+
- **Result:** PASS
|
|
63
|
+
- **Notes:** Tested on iPhone 12 with Network Link Conditioner. Sync completed in 3.2s after network restored.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### TC-RRI-{FEATURE}-002
|
|
68
|
+
- **Q (Question):** As a business analyst, what happens when a household member with "viewer" role tries to delete an inventory item?
|
|
69
|
+
- **A (Answer):** The delete button should be hidden or disabled for viewers. If they somehow trigger a delete (via API manipulation), the server should reject it with a 403 Forbidden error.
|
|
70
|
+
- **R (Requirement):** REQ-RBAC-003: Viewers can only read data, not modify or delete
|
|
71
|
+
- **P (Priority):** P1
|
|
72
|
+
- **T (Test Case):**
|
|
73
|
+
- **Preconditions:**
|
|
74
|
+
- User "viewer@example.com" has "viewer" role in household "Test Family"
|
|
75
|
+
- Household has inventory item "Sua tuoi" (ID: inv_123)
|
|
76
|
+
- User logged in on mobile app
|
|
77
|
+
- **Steps:**
|
|
78
|
+
1. Login as viewer@example.com
|
|
79
|
+
2. Navigate to Inventory screen
|
|
80
|
+
3. Tap on "Sua tuoi" item to view details
|
|
81
|
+
4. Look for delete button/option
|
|
82
|
+
5. (If delete button exists) Attempt to tap it
|
|
83
|
+
6. (Alternative) Use GraphQL client to send deleteInventoryItem mutation directly
|
|
84
|
+
- **Expected Result:**
|
|
85
|
+
- Delete button should not be visible in UI
|
|
86
|
+
- If mutation sent directly, server returns error: `{"errors": [{"message": "Forbidden: insufficient permissions", "extensions": {"code": "FORBIDDEN"}}]}`
|
|
87
|
+
- Item remains in database unchanged
|
|
88
|
+
- **Dimension:** D4: Security
|
|
89
|
+
- **Stress Axis:** SECURITY
|
|
90
|
+
- **Source Persona:** Business Analyst
|
|
91
|
+
- **Risk Category:** SEC
|
|
92
|
+
- **Risk Score:** 6
|
|
93
|
+
- **Traceability:** REQ-RBAC-003
|
|
94
|
+
- **Result:** PAINFUL
|
|
95
|
+
- **Notes:** Delete button is correctly hidden, but when mutation sent via GraphQL Playground, error message is generic "Unauthorized" instead of specific "Forbidden: insufficient permissions". UX improvement: add clearer error messages for debugging. Item was NOT deleted (security works), but error clarity needs improvement.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### TC-RRI-{FEATURE}-003
|
|
100
|
+
- **Q (Question):** As a QA destroyer, what happens when I paste 50,000 characters into the "item name" field?
|
|
101
|
+
- **A (Answer):** The field should enforce a maximum length (e.g., 200 characters), truncate or reject input gracefully, and show a validation error. The app should not crash or freeze.
|
|
102
|
+
- **R (Requirement):** REQ-VALIDATION-005: All text inputs must have reasonable length limits
|
|
103
|
+
- **P (Priority):** P1
|
|
104
|
+
- **T (Test Case):**
|
|
105
|
+
- **Preconditions:**
|
|
106
|
+
- User logged in
|
|
107
|
+
- On "Add Inventory Item" screen
|
|
108
|
+
- Clipboard contains 50,000-character string
|
|
109
|
+
- **Steps:**
|
|
110
|
+
1. Tap into "Item Name" field
|
|
111
|
+
2. Paste 50,000-character string
|
|
112
|
+
3. Observe UI behavior
|
|
113
|
+
4. Attempt to save the form
|
|
114
|
+
- **Expected Result:**
|
|
115
|
+
- Field truncates input to max length (200 chars) OR shows validation error
|
|
116
|
+
- UI remains responsive (no freeze)
|
|
117
|
+
- Save button disabled or shows error: "Item name too long (max 200 characters)"
|
|
118
|
+
- No crash or GraphQL error
|
|
119
|
+
- **Dimension:** D7: Edge Cases
|
|
120
|
+
- **Stress Axis:** DATA, ERROR
|
|
121
|
+
- **Source Persona:** QA Destroyer
|
|
122
|
+
- **Risk Category:** DATA
|
|
123
|
+
- **Risk Score:** 4
|
|
124
|
+
- **Traceability:** REQ-VALIDATION-005
|
|
125
|
+
- **Result:** MISSING
|
|
126
|
+
- **Notes:** Feature not yet implemented. Current behavior: field accepts all 50,000 characters, UI freezes for 2-3 seconds, GraphQL mutation fails with "Payload too large" error. Need to add client-side validation and maxLength attribute.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### TC-RRI-{FEATURE}-004
|
|
131
|
+
- **Q (Question):** {From persona's perspective — what are they trying to do/verify?}
|
|
132
|
+
- **A (Answer):** {Expected behavior — what SHOULD happen}
|
|
133
|
+
- **R (Requirement):** {Requirement ID or description}
|
|
134
|
+
- **P (Priority):** P0 | P1 | P2 | P3
|
|
135
|
+
- **T (Test Case):**
|
|
136
|
+
- **Preconditions:** {required state}
|
|
137
|
+
- **Steps:**
|
|
138
|
+
1. {step 1}
|
|
139
|
+
2. {step 2}
|
|
140
|
+
- **Expected Result:** {specific, measurable outcome}
|
|
141
|
+
- **Dimension:** D{n}: {name}
|
|
142
|
+
- **Stress Axis:** {axis name} (if applicable)
|
|
143
|
+
- **Source Persona:** {persona name}
|
|
144
|
+
- **Risk Category:** TECH | SEC | PERF | DATA | BUS | OPS
|
|
145
|
+
- **Risk Score:** {1-9}
|
|
146
|
+
- **Traceability:** {REQ-XXX}
|
|
147
|
+
- **Result:** PASS | FAIL | PAINFUL | MISSING
|
|
148
|
+
- **Notes:** {observations, screenshots, bug IDs}
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### TC-RRI-{FEATURE}-005
|
|
153
|
+
- **Q (Question):** {From persona's perspective — what are they trying to do/verify?}
|
|
154
|
+
- **A (Answer):** {Expected behavior — what SHOULD happen}
|
|
155
|
+
- **R (Requirement):** {Requirement ID or description}
|
|
156
|
+
- **P (Priority):** P0 | P1 | P2 | P3
|
|
157
|
+
- **T (Test Case):**
|
|
158
|
+
- **Preconditions:** {required state}
|
|
159
|
+
- **Steps:**
|
|
160
|
+
1. {step 1}
|
|
161
|
+
2. {step 2}
|
|
162
|
+
- **Expected Result:** {specific, measurable outcome}
|
|
163
|
+
- **Dimension:** D{n}: {name}
|
|
164
|
+
- **Stress Axis:** {axis name} (if applicable)
|
|
165
|
+
- **Source Persona:** {persona name}
|
|
166
|
+
- **Risk Category:** TECH | SEC | PERF | DATA | BUS | OPS
|
|
167
|
+
- **Risk Score:** {1-9}
|
|
168
|
+
- **Traceability:** {REQ-XXX}
|
|
169
|
+
- **Result:** PASS | FAIL | PAINFUL | MISSING
|
|
170
|
+
- **Notes:** {observations, screenshots, bug IDs}
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Result Legend
|
|
175
|
+
|
|
176
|
+
| Result | Symbol | Description |
|
|
177
|
+
|--------|--------|-------------|
|
|
178
|
+
| PASS | PASS | Test passed, feature works as expected |
|
|
179
|
+
| FAIL | FAIL | Test failed, feature does not work |
|
|
180
|
+
| PAINFUL | PAINFUL | Feature works but UX is poor |
|
|
181
|
+
| MISSING | MISSING | Feature not implemented yet |
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# RRI-T Testability Gate
|
|
2
|
+
|
|
3
|
+
**Feature:** {feature-name}
|
|
4
|
+
**Date:** {YYYY-MM-DD}
|
|
5
|
+
**Assessor:** {agent/person}
|
|
6
|
+
**Build:** {build-id}
|
|
7
|
+
**Environment:** {dev/staging/prod}
|
|
8
|
+
|
|
9
|
+
## Prerequisites Validation
|
|
10
|
+
|
|
11
|
+
| # | Prerequisite | Status | Notes |
|
|
12
|
+
|---|--------------|--------|-------|
|
|
13
|
+
| PRE-1 | Environment accessible | PASS / FAIL | |
|
|
14
|
+
| PRE-2 | Test data available | PASS / FAIL | |
|
|
15
|
+
| PRE-3 | Feature deployed | PASS / FAIL | |
|
|
16
|
+
| PRE-4 | Acceptance criteria exist | PASS / FAIL | |
|
|
17
|
+
| PRE-5 | No blockers from dev | PASS / FAIL | |
|
|
18
|
+
|
|
19
|
+
**Prerequisites Result:** {count}/5 PASS
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Testability Assessment
|
|
24
|
+
|
|
25
|
+
| # | Testability Criteria | Status | Notes |
|
|
26
|
+
|---|---------------------|--------|-------|
|
|
27
|
+
| TEST-1 | Semantic locators present (data-testid, aria-label) | PASS / PARTIAL / FAIL | |
|
|
28
|
+
| TEST-2 | API endpoints documented | PASS / PARTIAL / FAIL | |
|
|
29
|
+
| TEST-3 | Auth flows accessible | PASS / PARTIAL / FAIL | |
|
|
30
|
+
| TEST-4 | Error states reproducible | PASS / PARTIAL / FAIL | |
|
|
31
|
+
| TEST-5 | Performance baselines available | PASS / PARTIAL / FAIL | |
|
|
32
|
+
|
|
33
|
+
**Testability Result:** {count}/5 PASS
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Risk Assessment
|
|
38
|
+
|
|
39
|
+
### Probability (1-3)
|
|
40
|
+
|
|
41
|
+
| Score | Definition |
|
|
42
|
+
|-------|------------|
|
|
43
|
+
| 1 | Unlikely - well-tested area, minor change |
|
|
44
|
+
| 2 | Possible - moderate complexity, some unknowns |
|
|
45
|
+
| 3 | Likely - new area, high complexity, many dependencies |
|
|
46
|
+
|
|
47
|
+
**Probability Score:** {1-3}
|
|
48
|
+
**Rationale:** {why this score}
|
|
49
|
+
|
|
50
|
+
### Impact (1-3)
|
|
51
|
+
|
|
52
|
+
| Score | Definition |
|
|
53
|
+
|-------|------------|
|
|
54
|
+
| 1 | Low - cosmetic, workaround exists |
|
|
55
|
+
| 2 | Medium - feature degraded, user friction |
|
|
56
|
+
| 3 | High - data loss, security breach, revenue impact |
|
|
57
|
+
|
|
58
|
+
**Impact Score:** {1-3}
|
|
59
|
+
**Rationale:** {why this score}
|
|
60
|
+
|
|
61
|
+
### Risk Score Calculation
|
|
62
|
+
|
|
63
|
+
**Risk Score = Probability x Impact = {P} x {I} = {score}**
|
|
64
|
+
|
|
65
|
+
| Score Range | Risk Level | Tier |
|
|
66
|
+
|-------------|------------|------|
|
|
67
|
+
| 1-2 | LOW | Minimal |
|
|
68
|
+
| 3-5 | MEDIUM | Standard |
|
|
69
|
+
| 6-8 | HIGH | Full |
|
|
70
|
+
| 9 | CRITICAL | Full + blocks release if untested |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Category Classification
|
|
75
|
+
|
|
76
|
+
| Category | Code | Applies |
|
|
77
|
+
|----------|------|---------|
|
|
78
|
+
| Technical (architecture/integration) | TECH | Y / N |
|
|
79
|
+
| Security (vulnerabilities) | SEC | Y / N |
|
|
80
|
+
| Performance (scalability) | PERF | Y / N |
|
|
81
|
+
| Data (integrity/corruption) | DATA | Y / N |
|
|
82
|
+
| Business (logic errors) | BUS | Y / N |
|
|
83
|
+
| Operational (deployment) | OPS | Y / N |
|
|
84
|
+
|
|
85
|
+
**Primary Category:** {CODE}
|
|
86
|
+
**Secondary Categories:** {CODE, CODE}
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Tier Selection
|
|
91
|
+
|
|
92
|
+
Based on Risk Score: {score}
|
|
93
|
+
|
|
94
|
+
| Selected | Tier | Personas | Dimensions | Stress Axes |
|
|
95
|
+
|----------|------|----------|------------|-------------|
|
|
96
|
+
| [ ] | Full | 5 | 7 | 8 |
|
|
97
|
+
| [ ] | Standard | 3 | 4 | 4 |
|
|
98
|
+
| [ ] | Minimal | 1 | 2 | 2 |
|
|
99
|
+
|
|
100
|
+
**Selected Tier:** {tier}
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Decision
|
|
105
|
+
|
|
106
|
+
| Decision | Criteria |
|
|
107
|
+
|----------|----------|
|
|
108
|
+
| PROCEED | All prerequisites PASS, testability >= 3/5 PASS |
|
|
109
|
+
| CONCERNS | 1-2 prerequisites FAIL or testability 2/5 PASS |
|
|
110
|
+
| BLOCK | >= 3 prerequisites FAIL or testability < 2/5 PASS |
|
|
111
|
+
|
|
112
|
+
**Decision:** PROCEED / CONCERNS / BLOCK
|
|
113
|
+
|
|
114
|
+
### Action Items (if CONCERNS or BLOCK)
|
|
115
|
+
|
|
116
|
+
| # | Action | Owner | Due |
|
|
117
|
+
|---|--------|-------|-----|
|
|
118
|
+
| 1 | | | |
|
|
119
|
+
| 2 | | | |
|
|
120
|
+
| 3 | | | |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Summary
|
|
125
|
+
|
|
126
|
+
- **Feature:** {feature-name}
|
|
127
|
+
- **Risk Score:** {score} ({level})
|
|
128
|
+
- **Category:** {CODE}
|
|
129
|
+
- **Tier:** {tier}
|
|
130
|
+
- **Decision:** {decision}
|
|
131
|
+
- **Next Phase:** {PREPARE / address blockers}
|