@nano-step/skill-manager 5.6.0 → 5.6.1

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.
@@ -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}
@@ -0,0 +1,105 @@
1
+ # RRI-T Traceability Matrix
2
+
3
+ **Feature:** {feature-name}
4
+ **Date:** {YYYY-MM-DD}
5
+ **Scope:** {scope-description}
6
+ **Phase:** {current-phase}
7
+
8
+ ## Coverage Summary
9
+
10
+ | Priority | Total Reqs | Covered | Percentage | Status |
11
+ |----------|------------|---------|------------|--------|
12
+ | P0 | {count} | {count} | {pct}% | PASS / CONCERNS / FAIL |
13
+ | P1 | {count} | {count} | {pct}% | PASS / CONCERNS / FAIL |
14
+ | P2 | {count} | {count} | {pct}% | PASS / CONCERNS / FAIL |
15
+ | P3 | {count} | {count} | {pct}% | PASS / CONCERNS / FAIL |
16
+ | **Total** | {count} | {count} | {pct}% | {status} |
17
+
18
+ ### Status Thresholds
19
+
20
+ | Status | P0 | P1 | Overall |
21
+ |--------|----|----|---------|
22
+ | PASS | 100% | >= 90% | >= 80% |
23
+ | CONCERNS | 100% | 80-89% | 70-79% |
24
+ | FAIL | < 100% | < 80% | < 70% |
25
+
26
+ ---
27
+
28
+ ## Detailed Traceability
29
+
30
+ ### P0 Requirements (Critical)
31
+
32
+ | Req ID | Requirement | Test Cases | Coverage | Result |
33
+ |--------|-------------|------------|----------|--------|
34
+ | REQ-001 | User can login with valid credentials | TC-001, TC-002 | FULL | PASS |
35
+ | REQ-002 | Data persists after session timeout | TC-003 | FULL | PASS |
36
+ | REQ-003 | Payment transactions are atomic | TC-004, TC-005, TC-006 | FULL | FAIL |
37
+ | REQ-004 | | | | |
38
+ | REQ-005 | | | | |
39
+
40
+ ### P1 Requirements (Major)
41
+
42
+ | Req ID | Requirement | Test Cases | Coverage | Result |
43
+ |--------|-------------|------------|----------|--------|
44
+ | REQ-101 | Search supports Vietnamese diacritics | TC-101 | FULL | PASS |
45
+ | REQ-102 | Offline changes sync within 60s | TC-102, TC-103 | PARTIAL | CONCERNS |
46
+ | REQ-103 | Role changes take effect immediately | | NONE | MISSING |
47
+ | REQ-104 | | | | |
48
+ | REQ-105 | | | | |
49
+
50
+ ### P2 Requirements (Minor)
51
+
52
+ | Req ID | Requirement | Test Cases | Coverage | Result |
53
+ |--------|-------------|------------|----------|--------|
54
+ | REQ-201 | | | | |
55
+ | REQ-202 | | | | |
56
+ | REQ-203 | | | | |
57
+
58
+ ### P3 Requirements (Trivial)
59
+
60
+ | Req ID | Requirement | Test Cases | Coverage | Result |
61
+ |--------|-------------|------------|----------|--------|
62
+ | REQ-301 | | | | |
63
+ | REQ-302 | | | | |
64
+
65
+ ---
66
+
67
+ ## Coverage Legend
68
+
69
+ | Coverage | Definition |
70
+ |----------|------------|
71
+ | FULL | All acceptance criteria have test cases |
72
+ | PARTIAL | Some acceptance criteria have test cases |
73
+ | NONE | No test cases mapped to requirement |
74
+
75
+ ---
76
+
77
+ ## Gap Prioritization
78
+
79
+ | Gap # | Requirement | Priority | Risk | Recommendation |
80
+ |-------|-------------|----------|------|----------------|
81
+ | GAP-1 | REQ-103: Role changes take effect immediately | P1 | HIGH | Add TC for role revocation mid-session |
82
+ | GAP-2 | REQ-102: Offline sync (partial coverage) | P1 | MEDIUM | Add TC for 50+ pending changes |
83
+ | GAP-3 | | | | |
84
+ | GAP-4 | | | | |
85
+ | GAP-5 | | | | |
86
+
87
+ ### Gap Severity
88
+
89
+ | Severity | Definition |
90
+ |----------|------------|
91
+ | CRITICAL | P0 requirement with NONE or PARTIAL coverage |
92
+ | HIGH | P1 requirement with NONE coverage |
93
+ | MEDIUM | P1 requirement with PARTIAL coverage |
94
+ | LOW | P2/P3 requirement with NONE or PARTIAL coverage |
95
+
96
+ ---
97
+
98
+ ## Summary
99
+
100
+ - **Total Requirements:** {count}
101
+ - **Fully Covered:** {count} ({pct}%)
102
+ - **Partially Covered:** {count} ({pct}%)
103
+ - **Not Covered:** {count} ({pct}%)
104
+ - **Critical Gaps:** {count}
105
+ - **High Gaps:** {count}
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "rri-t-testing",
3
+ "version": "2.0.0",
4
+ "description": "RRI-T v2: Rapid Risk-Informed Testing with BMAD-enhanced risk scoring, traceability, quality gates, and nano-brain memory persistence",
5
+ "compatibility": "OpenCode",
6
+ "agent": null,
7
+ "commands": [],
8
+ "tags": ["testing", "qa", "rri-t", "release-gates", "test-cases", "risk-scoring", "traceability", "bmad", "nano-brain"]
9
+ }