@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.
Files changed (44) hide show
  1. package/dist/utils.d.ts +1 -1
  2. package/dist/utils.js +1 -1
  3. package/package.json +1 -1
  4. package/private-catalog.json +5 -0
  5. package/skills/deep-design/SKILL.md +402 -0
  6. package/skills/deep-design/evals/evals.json +23 -0
  7. package/skills/deep-design/skill.json +7 -0
  8. package/skills/feature-analysis/SKILL.md +290 -0
  9. package/skills/feature-analysis/skill.json +15 -0
  10. package/skills/nano-brain/AGENTS_SNIPPET.md +0 -9
  11. package/skills/nano-brain/skill.json +7 -0
  12. package/skills/pr-code-reviewer/CHANGELOG.md +287 -0
  13. package/skills/pr-code-reviewer/RESEARCH.md +60 -0
  14. package/skills/pr-code-reviewer/SKILL.md +530 -0
  15. package/skills/pr-code-reviewer/assets/config.json +47 -0
  16. package/skills/pr-code-reviewer/checklists/backend-express.md +357 -0
  17. package/skills/pr-code-reviewer/checklists/ci-cd.md +428 -0
  18. package/skills/pr-code-reviewer/checklists/consumer-search-matrix.md +339 -0
  19. package/skills/pr-code-reviewer/checklists/database.md +382 -0
  20. package/skills/pr-code-reviewer/checklists/frontend-vue-nuxt.md +426 -0
  21. package/skills/pr-code-reviewer/checklists/review-checklist.md +116 -0
  22. package/skills/pr-code-reviewer/references/framework-rules/express.md +39 -0
  23. package/skills/pr-code-reviewer/references/framework-rules/nestjs.md +41 -0
  24. package/skills/pr-code-reviewer/references/framework-rules/typeorm.md +52 -0
  25. package/skills/pr-code-reviewer/references/framework-rules/typescript.md +50 -0
  26. package/skills/pr-code-reviewer/references/framework-rules/vue-nuxt.md +53 -0
  27. package/skills/pr-code-reviewer/references/nano-brain-integration.md +61 -0
  28. package/skills/pr-code-reviewer/references/performance-patterns.md +26 -0
  29. package/skills/pr-code-reviewer/references/quality-patterns.md +25 -0
  30. package/skills/pr-code-reviewer/references/report-template.md +167 -0
  31. package/skills/pr-code-reviewer/references/security-patterns.md +31 -0
  32. package/skills/pr-code-reviewer/references/subagent-prompts.md +323 -0
  33. package/skills/pr-code-reviewer/skill.json +15 -0
  34. package/skills/rri-t-testing/SKILL.md +224 -0
  35. package/skills/rri-t-testing/assets/rri-t-coverage-dashboard.md +138 -0
  36. package/skills/rri-t-testing/assets/rri-t-memory-protocol.md +271 -0
  37. package/skills/rri-t-testing/assets/rri-t-persona-interview.md +249 -0
  38. package/skills/rri-t-testing/assets/rri-t-quality-scorecard.md +122 -0
  39. package/skills/rri-t-testing/assets/rri-t-risk-matrix.md +87 -0
  40. package/skills/rri-t-testing/assets/rri-t-stress-matrix.md +100 -0
  41. package/skills/rri-t-testing/assets/rri-t-test-case.md +181 -0
  42. package/skills/rri-t-testing/assets/rri-t-testability-gate.md +131 -0
  43. package/skills/rri-t-testing/assets/rri-t-traceability-matrix.md +105 -0
  44. 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}