@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,138 @@
1
+ # RRI-T Coverage Dashboard — {feature_name}
2
+
3
+ Feature: {feature_name}
4
+ Date: {date}
5
+ Release Gate Status: {release_gate_status}
6
+ Release Version: {release_version}
7
+ Owner: {owner}
8
+ Prepared By: {prepared_by}
9
+
10
+ ## Release Gate Criteria
11
+
12
+ | Rule | Criteria | Status |
13
+ | --- | --- | --- |
14
+ | RG-1 | All 7 dimensions >= 70% coverage | PASS / CONCERNS / FAIL / WAIVED |
15
+ | RG-2 | At least 5/7 dimensions >= 85% coverage | PASS / CONCERNS / FAIL / WAIVED |
16
+ | RG-3 | Zero P0 items in FAIL state | PASS / CONCERNS / FAIL / WAIVED |
17
+ | RG-4 | P0 coverage = 100% | PASS / CONCERNS / FAIL / WAIVED |
18
+ | RG-5 | P1 coverage >= 90% | PASS / CONCERNS / FAIL / WAIVED |
19
+
20
+ ### Gate Status Definitions
21
+
22
+ | Status | Definition |
23
+ | --- | --- |
24
+ | PASS | Criteria fully met |
25
+ | CONCERNS | Criteria partially met with documented mitigations |
26
+ | FAIL | Criteria not met |
27
+ | WAIVED | Criteria not met but approved with owner, expiry, remediation |
28
+
29
+ ## Dimension Coverage
30
+
31
+ | Dimension | Total | PASS | FAIL | PAINFUL | MISSING | Coverage % | Risk Score | Gate |
32
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- |
33
+ | D1: UI/UX | {d1_total} | {d1_pass} | {d1_fail} | {d1_painful} | {d1_missing} | {d1_coverage} | {d1_risk} | PASS / CONCERNS / FAIL / WAIVED |
34
+ | D2: API | {d2_total} | {d2_pass} | {d2_fail} | {d2_painful} | {d2_missing} | {d2_coverage} | {d2_risk} | PASS / CONCERNS / FAIL / WAIVED |
35
+ | D3: Performance | {d3_total} | {d3_pass} | {d3_fail} | {d3_painful} | {d3_missing} | {d3_coverage} | {d3_risk} | PASS / CONCERNS / FAIL / WAIVED |
36
+ | D4: Security | {d4_total} | {d4_pass} | {d4_fail} | {d4_painful} | {d4_missing} | {d4_coverage} | {d4_risk} | PASS / CONCERNS / FAIL / WAIVED |
37
+ | D5: Data Integrity | {d5_total} | {d5_pass} | {d5_fail} | {d5_painful} | {d5_missing} | {d5_coverage} | {d5_risk} | PASS / CONCERNS / FAIL / WAIVED |
38
+ | D6: Infrastructure | {d6_total} | {d6_pass} | {d6_fail} | {d6_painful} | {d6_missing} | {d6_coverage} | {d6_risk} | PASS / CONCERNS / FAIL / WAIVED |
39
+ | D7: Edge Cases | {d7_total} | {d7_pass} | {d7_fail} | {d7_painful} | {d7_missing} | {d7_coverage} | {d7_risk} | PASS / CONCERNS / FAIL / WAIVED |
40
+
41
+ Legend: PASS | FAIL | PAINFUL | MISSING
42
+
43
+ ## Priority Breakdown
44
+
45
+ | Priority | Total | PASS | FAIL | PAINFUL | MISSING | Coverage % | Gate |
46
+ | --- | --- | --- | --- | --- | --- | --- | --- |
47
+ | P0 | {p0_total} | {p0_pass} | {p0_fail} | {p0_painful} | {p0_missing} | {p0_coverage} | PASS / CONCERNS / FAIL / WAIVED |
48
+ | P1 | {p1_total} | {p1_pass} | {p1_fail} | {p1_painful} | {p1_missing} | {p1_coverage} | PASS / CONCERNS / FAIL / WAIVED |
49
+ | P2 | {p2_total} | {p2_pass} | {p2_fail} | {p2_painful} | {p2_missing} | {p2_coverage} | PASS / CONCERNS / FAIL / WAIVED |
50
+ | P3 | {p3_total} | {p3_pass} | {p3_fail} | {p3_painful} | {p3_missing} | {p3_coverage} | PASS / CONCERNS / FAIL / WAIVED |
51
+
52
+ ## Summary Metrics
53
+
54
+ - Total Test Cases: {total_tc}
55
+ - Overall Coverage %: {overall_coverage}
56
+ - Dimensions Passing Gate: {dimensions_passing_gate}
57
+ - P0 FAIL Count: {p0_fail_count}
58
+ - P0 PAINFUL Count: {p0_painful_count}
59
+ - MISSING Count: {missing_count}
60
+ - Quality Score: {quality_score} (Grade: {grade})
61
+ - Latest Update: {latest_update}
62
+ - Notes: {summary_notes}
63
+ - Risks: {summary_risks}
64
+
65
+ ## Trend Tracking
66
+
67
+ | Metric | This Release | Last Release | Delta |
68
+ | --- | --- | --- | --- |
69
+ | Overall Coverage | {this_coverage}% | {last_coverage}% | {delta}% |
70
+ | P0 Pass Rate | {this_p0}% | {last_p0}% | {delta}% |
71
+ | P1 Pass Rate | {this_p1}% | {last_p1}% | {delta}% |
72
+ | Quality Score | {this_quality} | {last_quality} | {delta} |
73
+ | FAIL Count | {this_fail} | {last_fail} | {delta} |
74
+ | PAINFUL Count | {this_painful} | {last_painful} | {delta} |
75
+
76
+ ## Waiver Log
77
+
78
+ | Waiver ID | Item | Reason | Owner | Approved By | Expiry | Remediation Plan |
79
+ | --- | --- | --- | --- | --- | --- | --- |
80
+ | W-001 | | | | | | |
81
+ | W-002 | | | | | | |
82
+ | W-003 | | | | | | |
83
+
84
+ ## FAIL Items
85
+
86
+ | TC ID | Priority | Dimension | Description | Assigned To |
87
+ | --- | --- | --- | --- | --- |
88
+ | {fail_tc_id_1} | {fail_priority_1} | {fail_dimension_1} | {fail_description_1} | {fail_assigned_to_1} |
89
+ | {fail_tc_id_2} | {fail_priority_2} | {fail_dimension_2} | {fail_description_2} | {fail_assigned_to_2} |
90
+ | {fail_tc_id_3} | {fail_priority_3} | {fail_dimension_3} | {fail_description_3} | {fail_assigned_to_3} |
91
+ | {fail_tc_id_4} | {fail_priority_4} | {fail_dimension_4} | {fail_description_4} | {fail_assigned_to_4} |
92
+ | {fail_tc_id_5} | {fail_priority_5} | {fail_dimension_5} | {fail_description_5} | {fail_assigned_to_5} |
93
+
94
+ ## PAINFUL Items
95
+
96
+ | TC ID | Priority | Dimension | Description | UX Impact |
97
+ | --- | --- | --- | --- | --- |
98
+ | {painful_tc_id_1} | {painful_priority_1} | {painful_dimension_1} | {painful_description_1} | {painful_ux_impact_1} |
99
+ | {painful_tc_id_2} | {painful_priority_2} | {painful_dimension_2} | {painful_description_2} | {painful_ux_impact_2} |
100
+ | {painful_tc_id_3} | {painful_priority_3} | {painful_dimension_3} | {painful_description_3} | {painful_ux_impact_3} |
101
+ | {painful_tc_id_4} | {painful_priority_4} | {painful_dimension_4} | {painful_description_4} | {painful_ux_impact_4} |
102
+ | {painful_tc_id_5} | {painful_priority_5} | {painful_dimension_5} | {painful_description_5} | {painful_ux_impact_5} |
103
+
104
+ ## MISSING Items
105
+
106
+ | TC ID | Priority | Dimension | Description | User Need |
107
+ | --- | --- | --- | --- | --- |
108
+ | {missing_tc_id_1} | {missing_priority_1} | {missing_dimension_1} | {missing_description_1} | {missing_user_need_1} |
109
+ | {missing_tc_id_2} | {missing_priority_2} | {missing_dimension_2} | {missing_description_2} | {missing_user_need_2} |
110
+ | {missing_tc_id_3} | {missing_priority_3} | {missing_dimension_3} | {missing_description_3} | {missing_user_need_3} |
111
+ | {missing_tc_id_4} | {missing_priority_4} | {missing_dimension_4} | {missing_description_4} | {missing_user_need_4} |
112
+ | {missing_tc_id_5} | {missing_priority_5} | {missing_dimension_5} | {missing_description_5} | {missing_user_need_5} |
113
+
114
+ ## Regression Test List
115
+
116
+ | Test ID | Title | Dimension | Priority | Status |
117
+ | --- | --- | --- | --- | --- |
118
+ | {regression_id_1} | {regression_title_1} | {regression_dimension_1} | {regression_priority_1} | {regression_status_1} |
119
+ | {regression_id_2} | {regression_title_2} | {regression_dimension_2} | {regression_priority_2} | {regression_status_2} |
120
+ | {regression_id_3} | {regression_title_3} | {regression_dimension_3} | {regression_priority_3} | {regression_status_3} |
121
+ | {regression_id_4} | {regression_title_4} | {regression_dimension_4} | {regression_priority_4} | {regression_status_4} |
122
+ | {regression_id_5} | {regression_title_5} | {regression_dimension_5} | {regression_priority_5} | {regression_status_5} |
123
+
124
+ ## Sign-off
125
+
126
+ | Role | Name | Decision | Notes |
127
+ | --- | --- | --- | --- |
128
+ | QA Lead | {qa_lead_name} | APPROVE / REJECT / WAIVE | {qa_lead_notes} |
129
+ | Dev Lead | {dev_lead_name} | APPROVE / REJECT / WAIVE | {dev_lead_notes} |
130
+ | Product | {product_name} | APPROVE / REJECT / WAIVE | {product_notes} |
131
+
132
+ ## Final Gate Decision
133
+
134
+ **Decision:** PASS / CONCERNS / FAIL / WAIVED
135
+
136
+ **Rationale:** {rationale}
137
+
138
+ **Next Steps:** {next_steps}
@@ -0,0 +1,271 @@
1
+ # RRI-T Memory Protocol
2
+
3
+ ## Purpose
4
+
5
+ This protocol defines how RRI-T testing sessions persist state to nano-brain for cross-session continuity. Every phase saves its outputs, enabling resume from any point and cross-feature learning.
6
+
7
+ ## Save Format
8
+
9
+ ### Tag Convention
10
+
11
+ ```
12
+ rri-t/{feature-slug}/{phase}
13
+ ```
14
+
15
+ Examples:
16
+ - `rri-t/checkout-flow/assess`
17
+ - `rri-t/user-registration/discover`
18
+ - `rri-t/inventory-sync/execute`
19
+
20
+ ### Content Structure
21
+
22
+ ```markdown
23
+ ## RRI-T {Phase} Complete: {Feature}
24
+
25
+ - **Phase:** {0-5}
26
+ - **Date:** {ISO-8601}
27
+ - **Status:** COMPLETE / PARTIAL / BLOCKED
28
+ - **Tier:** Full / Standard / Minimal
29
+ - **Risk Score:** {1-9}
30
+
31
+ ### Key Outputs
32
+ {phase-specific data}
33
+
34
+ ### Decisions Made
35
+ {rationale for key decisions}
36
+
37
+ ### Next Phase
38
+ {what the next phase needs from this phase}
39
+
40
+ ### Risks Identified
41
+ {new or updated risks}
42
+ ```
43
+
44
+ ---
45
+
46
+ ## Phase-Specific Outputs
47
+
48
+ ### Phase 0: ASSESS
49
+
50
+ Save after completing testability gate and risk assessment.
51
+
52
+ ```markdown
53
+ ### Key Outputs
54
+ - Testability: {count}/5 prerequisites, {count}/5 testability criteria
55
+ - Risk Score: {P} x {I} = {score} ({level})
56
+ - Category: {CODE}
57
+ - Tier: {Full/Standard/Minimal}
58
+ - Decision: {PROCEED/CONCERNS/BLOCK}
59
+
60
+ ### Decisions Made
61
+ - Selected {tier} tier because {rationale}
62
+ - Primary risk category is {CODE} because {rationale}
63
+
64
+ ### Next Phase
65
+ - Personas to assign: {count}
66
+ - Dimensions to cover: {count}
67
+ - Blockers to address: {list or "none"}
68
+
69
+ ### Risks Identified
70
+ - R-001: {description} (Score: {score})
71
+ - R-002: {description} (Score: {score})
72
+ ```
73
+
74
+ ### Phase 1: PREPARE
75
+
76
+ Save after defining scope and assignments.
77
+
78
+ ```markdown
79
+ ### Key Outputs
80
+ - Personas: {list of assigned personas}
81
+ - Dimensions: {list of selected dimensions}
82
+ - Coverage targets: P0={pct}%, P1={pct}%, Overall={pct}%
83
+
84
+ ### Decisions Made
85
+ - Excluded {persona/dimension} because {rationale}
86
+ - Prioritized {dimension} because {rationale}
87
+
88
+ ### Next Phase
89
+ - Interview {count} personas
90
+ - Focus on {key areas}
91
+ ```
92
+
93
+ ### Phase 2: DISCOVER
94
+
95
+ Save after completing persona interviews.
96
+
97
+ ```markdown
98
+ ### Key Outputs
99
+ - Questions generated: {count}
100
+ - Test ideas: {count}
101
+ - Key concerns: {list}
102
+
103
+ ### Decisions Made
104
+ - Prioritized {concern} because {rationale}
105
+ - Deprioritized {area} because {rationale}
106
+
107
+ ### Next Phase
108
+ - Create {count} test cases
109
+ - Focus stress axes: {list}
110
+
111
+ ### Risks Identified
112
+ - R-003: {new risk from interviews}
113
+ ```
114
+
115
+ ### Phase 3: STRUCTURE
116
+
117
+ Save after creating test cases and traceability.
118
+
119
+ ```markdown
120
+ ### Key Outputs
121
+ - Test cases: {count} (P0: {n}, P1: {n}, P2: {n}, P3: {n})
122
+ - Traceability: {count} requirements mapped
123
+ - Coverage gaps: {count}
124
+ - Stress axes selected: {list}
125
+
126
+ ### Decisions Made
127
+ - Prioritized {test case} because {rationale}
128
+ - Deferred {test case} because {rationale}
129
+
130
+ ### Next Phase
131
+ - Execute {count} test cases
132
+ - Focus on {priority areas}
133
+ ```
134
+
135
+ ### Phase 4: EXECUTE
136
+
137
+ Save after executing tests and calculating quality score.
138
+
139
+ ```markdown
140
+ ### Key Outputs
141
+ - Results: PASS={n}, FAIL={n}, PAINFUL={n}, MISSING={n}
142
+ - Quality Score: {score} (Grade: {grade})
143
+ - Bugs found: {count}
144
+ - Evidence captured: {count} screenshots, {count} logs
145
+
146
+ ### Decisions Made
147
+ - Marked {test} as PAINFUL because {rationale}
148
+ - Skipped {test} because {rationale}
149
+
150
+ ### Next Phase
151
+ - Analyze {count} results
152
+ - Address {count} failures
153
+ - Fill coverage dashboard
154
+
155
+ ### Risks Identified
156
+ - R-004: {new risk from execution}
157
+ ```
158
+
159
+ ### Phase 5: ANALYZE
160
+
161
+ Save after completing analysis and gate decision.
162
+
163
+ ```markdown
164
+ ### Key Outputs
165
+ - Gate Decision: {PASS/CONCERNS/FAIL/WAIVED}
166
+ - Coverage: P0={pct}%, P1={pct}%, Overall={pct}%
167
+ - Dimensions passing: {count}/7
168
+ - Waivers: {count}
169
+
170
+ ### Decisions Made
171
+ - Gate decision is {decision} because {rationale}
172
+ - Waived {item} because {rationale}
173
+
174
+ ### Lessons Learned
175
+ - {lesson 1}
176
+ - {lesson 2}
177
+
178
+ ### Reusable Patterns
179
+ - {pattern for future features}
180
+ ```
181
+
182
+ ---
183
+
184
+ ## Resume Protocol
185
+
186
+ When resuming an interrupted session:
187
+
188
+ 1. **Query memory:**
189
+ ```
190
+ memory_query("rri-t {feature-name}")
191
+ ```
192
+
193
+ 2. **Find latest completed phase:**
194
+ Look for most recent phase with Status: COMPLETE
195
+
196
+ 3. **Load outputs as context:**
197
+ Read Key Outputs and Next Phase sections
198
+
199
+ 4. **Continue from next phase:**
200
+ Start the phase indicated in Next Phase
201
+
202
+ ---
203
+
204
+ ## Cross-Feature Learning
205
+
206
+ Save reusable patterns for future features:
207
+
208
+ ### Tag Convention
209
+
210
+ ```
211
+ rri-t/patterns/{category}
212
+ ```
213
+
214
+ Examples:
215
+ - `rri-t/patterns/auth-testing`
216
+ - `rri-t/patterns/offline-sync`
217
+ - `rri-t/patterns/vietnamese-locale`
218
+
219
+ ### Content Structure
220
+
221
+ ```markdown
222
+ ## RRI-T Pattern: {Pattern Name}
223
+
224
+ - **Category:** {category}
225
+ - **Discovered:** {date}
226
+ - **Source Feature:** {feature-name}
227
+
228
+ ### Pattern
229
+ {description of reusable approach}
230
+
231
+ ### When to Apply
232
+ {conditions when this pattern is useful}
233
+
234
+ ### Example
235
+ {concrete example from source feature}
236
+ ```
237
+
238
+ ---
239
+
240
+ ## Example: Phase 0 ASSESS Memory Save
241
+
242
+ ```
243
+ memory_write("## RRI-T ASSESS Complete: checkout-flow
244
+
245
+ - **Phase:** 0
246
+ - **Date:** 2025-03-08T10:30:00Z
247
+ - **Status:** COMPLETE
248
+ - **Tier:** Full
249
+ - **Risk Score:** 6
250
+
251
+ ### Key Outputs
252
+ - Testability: 5/5 prerequisites, 4/5 testability criteria
253
+ - Risk Score: 2 x 3 = 6 (HIGH)
254
+ - Category: DATA
255
+ - Tier: Full
256
+ - Decision: PROCEED
257
+
258
+ ### Decisions Made
259
+ - Selected Full tier because risk score 6 requires comprehensive coverage
260
+ - Primary risk category is DATA because checkout involves payment transactions
261
+
262
+ ### Next Phase
263
+ - Personas to assign: 5 (all)
264
+ - Dimensions to cover: 7 (all)
265
+ - Blockers to address: none
266
+
267
+ ### Risks Identified
268
+ - R-001: Payment state inconsistent on network failure (Score: 6)
269
+ - R-002: Cart not cleared after successful checkout (Score: 4)
270
+ ")
271
+ ```
@@ -0,0 +1,249 @@
1
+ # RRI-T Persona Interview — {Feature Name}
2
+
3
+ **Feature:** {feature-name}
4
+ **Date:** {YYYY-MM-DD}
5
+ **Interviewer:** {agent/person}
6
+
7
+ ## Interview Summary
8
+ | Persona | Questions Generated | Key Concerns |
9
+ |---------|-------------------|--------------|
10
+ | End User | 0/25 | |
11
+ | Business Analyst | 0/25 | |
12
+ | QA Destroyer | 0/25 | |
13
+ | DevOps Tester | 0/25 | |
14
+ | Security Auditor | 0/25 | |
15
+ | **Total** | **0/125** | |
16
+
17
+ ---
18
+
19
+ ## Persona 1: End User (Nguoi dung cuoi)
20
+
21
+ ### Context
22
+ As a household member using {feature-name} daily to manage my family's shared resources, I need the feature to work reliably across different devices, network conditions, and usage patterns. I care about speed, clarity, and not losing my work.
23
+
24
+ ### Questions
25
+ 1. What happens when I add an inventory item while my phone has weak 3G signal? `[PERF]` `[D3: Performance]`
26
+ 2. What happens when I start editing a shopping list on mobile, then switch to desktop mid-task? `[DATA]` `[D5: Data Integrity]`
27
+ 3. What happens when I search for "nguyen" but the item name is "Nguyen Van A"? `[DATA]` `[D1: UI/UX]`
28
+ 4. What happens when I accidentally navigate away from a half-filled form? `[DATA]` `[D1: UI/UX]`
29
+ 5. What happens when I try to delete an item that another household member is currently editing? `[DATA]` `[D5: Data Integrity]`
30
+ 6. What happens when I upload a photo of a receipt and the file is 10MB? `[PERF]` `[D3: Performance]`
31
+ 7. What happens when I filter 500+ inventory items by expiration date on a mid-range phone? `[PERF]` `[D3: Performance]`
32
+ 8. What happens when I receive a phone call while recording a voice note for a meal plan? `[TECH]` `[D7: Edge Cases]`
33
+ 9. What happens when the app shows "1,000,000d" instead of "1.000.000d" for Vietnamese currency? `[BUS]` `[D1: UI/UX]`
34
+ 10. What happens when I'm offline for 2 days and then reconnect with 50 pending changes? `[DATA]` `[D6: Infrastructure]`
35
+ 11.
36
+ 12.
37
+ 13.
38
+ 14.
39
+ 15.
40
+ 16.
41
+ 17.
42
+ 18.
43
+ 19.
44
+ 20.
45
+ 21.
46
+ 22.
47
+ 23.
48
+ 24.
49
+ 25.
50
+
51
+ ### Key Concerns
52
+ - {list concerns discovered}
53
+
54
+ ---
55
+
56
+ ## Persona 2: Business Analyst (Phan tich nghiep vu)
57
+
58
+ ### Context
59
+ As someone responsible for ensuring business rules are correctly implemented, I need to verify that household permissions, data ownership, financial calculations, and multi-household scenarios work as specified. I care about data consistency and rule enforcement.
60
+
61
+ ### Questions
62
+ 1. What happens when a household member with "viewer" role tries to delete an inventory item? `[SEC]` `[D4: Security]`
63
+ 2. What happens when a user belongs to 3 households and switches between them rapidly? `[DATA]` `[D5: Data Integrity]`
64
+ 3. What happens when two members simultaneously mark the same shopping list item as "purchased"? `[DATA]` `[D5: Data Integrity]`
65
+ 4. What happens when a household admin removes a member who has pending edits? `[BUS]` `[D4: Security]`
66
+ 5. What happens when the total expense calculation includes items in different currencies (VND and USD)? `[BUS]` `[D5: Data Integrity]`
67
+ 6. What happens when a recurring meal plan conflicts with a one-time event on the same date? `[BUS]` `[D7: Edge Cases]`
68
+ 7. What happens when a user tries to share an inventory item with a household they don't belong to? `[SEC]` `[D4: Security]`
69
+ 8. What happens when the system calculates "items expiring in 3 days" across different timezones? `[BUS]` `[D7: Edge Cases]`
70
+ 9. What happens when a household reaches the maximum allowed inventory items (if there's a limit)? `[BUS]` `[D7: Edge Cases]`
71
+ 10. What happens when a deleted household still has active shopping lists in other members' offline caches? `[DATA]` `[D6: Infrastructure]`
72
+ 11.
73
+ 12.
74
+ 13.
75
+ 14.
76
+ 15.
77
+ 16.
78
+ 17.
79
+ 18.
80
+ 19.
81
+ 20.
82
+ 21.
83
+ 22.
84
+ 23.
85
+ 24.
86
+ 25.
87
+
88
+ ### Key Concerns
89
+ - {list concerns discovered}
90
+
91
+ ---
92
+
93
+ ## Persona 3: QA Destroyer (Pha hoai vien QA)
94
+
95
+ ### Context
96
+ As someone whose job is to break things, I need to find every edge case, race condition, and unexpected input that could crash the system or corrupt data. I care about boundary conditions, malformed inputs, and timing attacks.
97
+
98
+ ### Questions
99
+ 1. What happens when I paste 50,000 characters into the "item name" field? `[DATA]` `[D7: Edge Cases]`
100
+ 2. What happens when I rapidly click "save" 20 times in 1 second? `[PERF]` `[D7: Edge Cases]`
101
+ 3. What happens when I set my device date to 2099 and create an inventory item? `[DATA]` `[D7: Edge Cases]`
102
+ 4. What happens when I upload a file named `"; DROP TABLE inventory; --"` as an item photo? `[SEC]` `[D4: Security]`
103
+ 5. What happens when I create an item with expiration date "yesterday" and quantity "-5"? `[DATA]` `[D7: Edge Cases]`
104
+ 6. What happens when I open the app in 10 browser tabs and edit the same item in all of them? `[DATA]` `[D5: Data Integrity]`
105
+ 7. What happens when I force-kill the app during a GraphQL mutation? `[DATA]` `[D6: Infrastructure]`
106
+ 8. What happens when I inject `<script>alert('xss')</script>` into a meal plan description? `[SEC]` `[D4: Security]`
107
+ 9. What happens when I create a circular dependency (Item A requires Item B, Item B requires Item A)? `[BUS]` `[D7: Edge Cases]`
108
+ 10. What happens when I change my device timezone mid-session and create a timestamped event? `[DATA]` `[D7: Edge Cases]`
109
+ 11.
110
+ 12.
111
+ 13.
112
+ 14.
113
+ 15.
114
+ 16.
115
+ 17.
116
+ 18.
117
+ 19.
118
+ 20.
119
+ 21.
120
+ 22.
121
+ 23.
122
+ 24.
123
+ 25.
124
+
125
+ ### Key Concerns
126
+ - {list concerns discovered}
127
+
128
+ ---
129
+
130
+ ## Persona 4: DevOps Tester (Kiem thu ha tang)
131
+
132
+ ### Context
133
+ As someone responsible for deployment, monitoring, and infrastructure reliability, I need to verify that the feature works under load, handles server restarts gracefully, and doesn't leak resources. I care about scalability, observability, and recovery.
134
+
135
+ ### Questions
136
+ 1. What happens when the GraphQL server restarts while a user is mid-sync? `[OPS]` `[D6: Infrastructure]`
137
+ 2. What happens when 100 users simultaneously bulk-import 500 inventory items each? `[PERF]` `[D3: Performance]`
138
+ 3. What happens when the database connection pool is exhausted during peak usage? `[OPS]` `[D6: Infrastructure]`
139
+ 4. What happens when the CDN serving item photos goes down? `[OPS]` `[D6: Infrastructure]`
140
+ 5. What happens when a GraphQL query takes longer than the 30-second timeout? `[PERF]` `[D3: Performance]`
141
+ 6. What happens when the Redis cache is cleared while users have active sessions? `[OPS]` `[D6: Infrastructure]`
142
+ 7. What happens when a deployment rolls out a new schema version while old clients are still connected? `[OPS]` `[D2: API]`
143
+ 8. What happens when disk space runs out during a photo upload? `[OPS]` `[D6: Infrastructure]`
144
+ 9. What happens when the monitoring system detects 500 errors but the app still appears functional? `[OPS]` `[D6: Infrastructure]`
145
+ 10. What happens when a user's offline queue grows to 1000+ pending mutations? `[PERF]` `[D3: Performance]`
146
+ 11.
147
+ 12.
148
+ 13.
149
+ 14.
150
+ 15.
151
+ 16.
152
+ 17.
153
+ 18.
154
+ 19.
155
+ 20.
156
+ 21.
157
+ 22.
158
+ 23.
159
+ 24.
160
+ 25.
161
+
162
+ ### Key Concerns
163
+ - {list concerns discovered}
164
+
165
+ ---
166
+
167
+ ## Persona 5: Security Auditor (Kiem toan bao mat)
168
+
169
+ ### Context
170
+ As someone responsible for security compliance, I need to verify that authentication, authorization, data exposure, and audit trails are properly implemented. I care about access control, data leakage, and attack surface.
171
+
172
+ ### Questions
173
+ 1. What happens when a user's JWT token expires mid-session? `[SEC]` `[D4: Security]`
174
+ 2. What happens when a user tries to access another household's data by guessing the household ID? `[SEC]` `[D4: Security]`
175
+ 3. What happens when a removed household member still has cached data on their device? `[SEC]` `[D4: Security]`
176
+ 4. What happens when someone intercepts the GraphQL request and replays it with modified variables? `[SEC]` `[D4: Security]`
177
+ 5. What happens when a user tries to upload a malicious file disguised as an image? `[SEC]` `[D4: Security]`
178
+ 6. What happens when the audit log shows who deleted an item, but the user claims they didn't? `[SEC]` `[D4: Security]`
179
+ 7. What happens when a user shares their session token with someone outside the household? `[SEC]` `[D4: Security]`
180
+ 8. What happens when someone uses SQL injection in a search query (even though it's GraphQL)? `[SEC]` `[D4: Security]`
181
+ 9. What happens when a user's password is compromised and they don't realize it for 3 days? `[SEC]` `[D4: Security]`
182
+ 10. What happens when the system logs sensitive data (like financial amounts) in plain text? `[SEC]` `[D4: Security]`
183
+ 11.
184
+ 12.
185
+ 13.
186
+ 14.
187
+ 15.
188
+ 16.
189
+ 17.
190
+ 18.
191
+ 19.
192
+ 20.
193
+ 21.
194
+ 22.
195
+ 23.
196
+ 24.
197
+ 25.
198
+
199
+ ### Key Concerns
200
+ - {list concerns discovered}
201
+
202
+ ---
203
+
204
+ ## Consolidation Method
205
+
206
+ After completing all persona interviews, consolidate findings into the risk register:
207
+
208
+ 1. **Group by Category:** Organize questions by risk category (TECH, SEC, PERF, DATA, BUS, OPS)
209
+ 2. **Identify Patterns:** Look for concerns raised by multiple personas
210
+ 3. **Score Risks:** For each unique risk, assign Probability (1-3) x Impact (1-3)
211
+ 4. **Prioritize:** Sort by risk score descending
212
+ 5. **Map to Dimensions:** Ensure each risk maps to at least one dimension (D1-D7)
213
+ 6. **Create Test Cases:** Convert high-priority risks into test cases using Q-A-R-P-T format
214
+
215
+ ### Consolidation Table
216
+
217
+ | Risk ID | Description | Raised By | Category | Dimension | P | I | Score |
218
+ |---------|-------------|-----------|----------|-----------|---|---|-------|
219
+ | R-001 | | | | | | | |
220
+ | R-002 | | | | | | | |
221
+ | R-003 | | | | | | | |
222
+ | R-004 | | | | | | | |
223
+ | R-005 | | | | | | | |
224
+
225
+ ---
226
+
227
+ ## Raw Test Ideas (Consolidated)
228
+ | # | Idea | Source Persona | Potential Dimension | Priority Estimate |
229
+ |---|------|---------------|--------------------|--------------------|
230
+ | 1 | | | | |
231
+ | 2 | | | | |
232
+ | 3 | | | | |
233
+ | 4 | | | | |
234
+ | 5 | | | | |
235
+ | 6 | | | | |
236
+ | 7 | | | | |
237
+ | 8 | | | | |
238
+ | 9 | | | | |
239
+ | 10 | | | | |
240
+ | 11 | | | | |
241
+ | 12 | | | | |
242
+ | 13 | | | | |
243
+ | 14 | | | | |
244
+ | 15 | | | | |
245
+ | 16 | | | | |
246
+ | 17 | | | | |
247
+ | 18 | | | | |
248
+ | 19 | | | | |
249
+ | 20 | | | | |