@tinkcarlos/skillora 0.2.0

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 (234) hide show
  1. package/.claude/skills/.temp-skill-index.md +245 -0
  2. package/.claude/skills/SKILL.md +264 -0
  3. package/.claude/skills/api-scaffolding/SKILL.md +431 -0
  4. package/.claude/skills/api-scaffolding/agents/backend-architect.md +282 -0
  5. package/.claude/skills/api-scaffolding/agents/django-pro.md +144 -0
  6. package/.claude/skills/api-scaffolding/agents/fastapi-pro.md +156 -0
  7. package/.claude/skills/api-scaffolding/agents/graphql-architect.md +146 -0
  8. package/.claude/skills/api-scaffolding/skills/fastapi-templates/SKILL.md +171 -0
  9. package/.claude/skills/api-testing-observability/SKILL.md +583 -0
  10. package/.claude/skills/api-testing-observability/agents/api-documenter.md +146 -0
  11. package/.claude/skills/api-testing-observability/commands/api-mock.md +1320 -0
  12. package/.claude/skills/brainstorming/SKILL.md +283 -0
  13. package/.claude/skills/bug-fixing/SKILL.md +382 -0
  14. package/.claude/skills/bug-fixing/references/backend-guide.md +132 -0
  15. package/.claude/skills/bug-fixing/references/bug-guide.md +354 -0
  16. package/.claude/skills/bug-fixing/references/bug-record-template.md +134 -0
  17. package/.claude/skills/bug-fixing/references/bug-records.md +88 -0
  18. package/.claude/skills/bug-fixing/references/code-review-gate.md +81 -0
  19. package/.claude/skills/bug-fixing/references/common-bugs.md +140 -0
  20. package/.claude/skills/bug-fixing/references/complete-workflow.md +361 -0
  21. package/.claude/skills/bug-fixing/references/config-driven-fixes.md +136 -0
  22. package/.claude/skills/bug-fixing/references/context-isolation-protocol.md +268 -0
  23. package/.claude/skills/bug-fixing/references/cross-surface-regression.md +120 -0
  24. package/.claude/skills/bug-fixing/references/database-investigation.md +129 -0
  25. package/.claude/skills/bug-fixing/references/dependency-and-integrity-protocol.md +369 -0
  26. package/.claude/skills/bug-fixing/references/fix-completeness-checklist.md +239 -0
  27. package/.claude/skills/bug-fixing/references/frontend-guide.md +219 -0
  28. package/.claude/skills/bug-fixing/references/fullstack-joint-guide.md +123 -0
  29. package/.claude/skills/bug-fixing/references/functional-breakage.md +117 -0
  30. package/.claude/skills/bug-fixing/references/ide-lint-errors-guide.md +176 -0
  31. package/.claude/skills/bug-fixing/references/impact-analysis.md +511 -0
  32. package/.claude/skills/bug-fixing/references/investigation-checklist.md +263 -0
  33. package/.claude/skills/bug-fixing/references/knowledge-extraction-guide.md +531 -0
  34. package/.claude/skills/bug-fixing/references/knowledge-workflow.md +212 -0
  35. package/.claude/skills/bug-fixing/references/post-edit-quality-gate.md +30 -0
  36. package/.claude/skills/bug-fixing/references/python-env-and-testing.md +126 -0
  37. package/.claude/skills/bug-fixing/references/rca-guide.md +428 -0
  38. package/.claude/skills/bug-fixing/references/similar-bug-patterns.md +113 -0
  39. package/.claude/skills/bug-fixing/references/skill-delegation-guide.md +350 -0
  40. package/.claude/skills/bug-fixing/references/skill-orchestration.md +155 -0
  41. package/.claude/skills/bug-fixing/references/testing-strategy.md +350 -0
  42. package/.claude/skills/bug-fixing/references/tooling-build-scripts.md +162 -0
  43. package/.claude/skills/bug-fixing/references/user-input-validation.md +77 -0
  44. package/.claude/skills/bug-fixing/references/ux-patterns.md +158 -0
  45. package/.claude/skills/bug-fixing/references/windows-terminal-hygiene.md +106 -0
  46. package/.claude/skills/bug-fixing/references/zero-regression-matrix.md +239 -0
  47. package/.claude/skills/bug-fixing/references/zero-risk-protocol.md +102 -0
  48. package/.claude/skills/bug-fixing/scripts/format_code.py +611 -0
  49. package/.claude/skills/bug-fixing/scripts/generate_report_template.py +74 -0
  50. package/.claude/skills/bug-fixing/scripts/lint_check.py +816 -0
  51. package/.claude/skills/bug-fixing/scripts/requirements.txt +36 -0
  52. package/.claude/skills/cicd-pipeline/SKILL.md +300 -0
  53. package/.claude/skills/code-review/SKILL.md +535 -0
  54. package/.claude/skills/code-review/references/anti-pattern-scan.md +102 -0
  55. package/.claude/skills/code-review/references/automated-analysis.md +456 -0
  56. package/.claude/skills/code-review/references/backend-common-issues.md +589 -0
  57. package/.claude/skills/code-review/references/backend-expert-guide.md +415 -0
  58. package/.claude/skills/code-review/references/backend-review.md +868 -0
  59. package/.claude/skills/code-review/references/batch-processing-strategy.md +198 -0
  60. package/.claude/skills/code-review/references/call-chain-analysis-protocol.md +166 -0
  61. package/.claude/skills/code-review/references/common-patterns.md +321 -0
  62. package/.claude/skills/code-review/references/configuration-review.md +425 -0
  63. package/.claude/skills/code-review/references/control-flow-completeness.md +114 -0
  64. package/.claude/skills/code-review/references/database-review.md +298 -0
  65. package/.claude/skills/code-review/references/dependency-and-integrity-protocol.md +313 -0
  66. package/.claude/skills/code-review/references/external-standards.md +51 -0
  67. package/.claude/skills/code-review/references/feature-review.md +329 -0
  68. package/.claude/skills/code-review/references/file-review-template.md +326 -0
  69. package/.claude/skills/code-review/references/frontend-advanced.md +654 -0
  70. package/.claude/skills/code-review/references/frontend-common-issues.md +482 -0
  71. package/.claude/skills/code-review/references/frontend-expert-guide.md +342 -0
  72. package/.claude/skills/code-review/references/frontend-review.md +783 -0
  73. package/.claude/skills/code-review/references/fullstack-consistency.md +418 -0
  74. package/.claude/skills/code-review/references/fullstack-review.md +477 -0
  75. package/.claude/skills/code-review/references/functional-completeness.md +386 -0
  76. package/.claude/skills/code-review/references/hidden-bugs-detection.md +473 -0
  77. package/.claude/skills/code-review/references/ide-lint-errors-guide.md +173 -0
  78. package/.claude/skills/code-review/references/infrastructure-review.md +453 -0
  79. package/.claude/skills/code-review/references/iteration-review.md +264 -0
  80. package/.claude/skills/code-review/references/job-review.md +335 -0
  81. package/.claude/skills/code-review/references/layered-checklist-protocol.md +157 -0
  82. package/.claude/skills/code-review/references/logic-completeness.md +535 -0
  83. package/.claude/skills/code-review/references/mandatory-checklist.md +288 -0
  84. package/.claude/skills/code-review/references/multi-language-guide.md +800 -0
  85. package/.claude/skills/code-review/references/new-project-review.md +226 -0
  86. package/.claude/skills/code-review/references/non-code-files-review.md +451 -0
  87. package/.claude/skills/code-review/references/overlooked-issues.md +657 -0
  88. package/.claude/skills/code-review/references/platform-specific-review.md +195 -0
  89. package/.claude/skills/code-review/references/precision-analysis-protocol.md +260 -0
  90. package/.claude/skills/code-review/references/python-patterns.md +494 -0
  91. package/.claude/skills/code-review/references/rca-techniques.md +362 -0
  92. package/.claude/skills/code-review/references/report-template.md +430 -0
  93. package/.claude/skills/code-review/references/resource-limits-and-degradation.md +137 -0
  94. package/.claude/skills/code-review/references/review-dimensions.md +311 -0
  95. package/.claude/skills/code-review/references/review-guide.md +202 -0
  96. package/.claude/skills/code-review/references/review-knowledge-workflow.md +257 -0
  97. package/.claude/skills/code-review/references/review-progress-tracker-protocol.md +172 -0
  98. package/.claude/skills/code-review/references/review-record-template.md +195 -0
  99. package/.claude/skills/code-review/references/skill-orchestration.md +143 -0
  100. package/.claude/skills/code-review/references/ui-ux-review.md +470 -0
  101. package/.claude/skills/containerization/SKILL.md +313 -0
  102. package/.claude/skills/database-migrations/agents/database-admin.md +142 -0
  103. package/.claude/skills/database-migrations/agents/database-optimizer.md +144 -0
  104. package/.claude/skills/database-migrations/commands/migration-observability.md +408 -0
  105. package/.claude/skills/database-migrations/commands/sql-migrations.md +492 -0
  106. package/.claude/skills/finishing-a-development-branch/SKILL.md +319 -0
  107. package/.claude/skills/frontend-design/LICENSE.txt +177 -0
  108. package/.claude/skills/frontend-design/SKILL.md +587 -0
  109. package/.claude/skills/frontend-design/references/color-consistency.md +487 -0
  110. package/.claude/skills/frontend-design/references/color-palettes-full.md +657 -0
  111. package/.claude/skills/frontend-design/references/design-system-generator.md +285 -0
  112. package/.claude/skills/frontend-design/references/font-pairings-full.md +705 -0
  113. package/.claude/skills/frontend-design/references/industry-anti-patterns.md +281 -0
  114. package/.claude/skills/frontend-design/references/layout-anti-patterns.md +582 -0
  115. package/.claude/skills/frontend-design/references/motion-patterns.md +659 -0
  116. package/.claude/skills/frontend-design/references/pre-delivery-checklist.md +153 -0
  117. package/.claude/skills/frontend-design/references/responsive-design.md +555 -0
  118. package/.claude/skills/frontend-design/references/style-modification-rules.md +335 -0
  119. package/.claude/skills/frontend-design/references/ui-styles-full.md +383 -0
  120. package/.claude/skills/frontend-design/references/ui-styles-rating.md +191 -0
  121. package/.claude/skills/frontend-design/references/ux-guidelines.md +640 -0
  122. package/.claude/skills/fullstack-developer/SKILL.md +512 -0
  123. package/.claude/skills/fullstack-developer/references/api-contract-guide.md +312 -0
  124. package/.claude/skills/fullstack-developer/references/api-response-patterns.md +223 -0
  125. package/.claude/skills/fullstack-developer/references/async-patterns.md +220 -0
  126. package/.claude/skills/fullstack-developer/references/bug-prevention.md +914 -0
  127. package/.claude/skills/fullstack-developer/references/code-quality-checklist.md +271 -0
  128. package/.claude/skills/fullstack-developer/references/complete-development-workflow.md +278 -0
  129. package/.claude/skills/fullstack-developer/references/context-isolation-protocol.md +256 -0
  130. package/.claude/skills/fullstack-developer/references/database-migration.md +331 -0
  131. package/.claude/skills/fullstack-developer/references/dependency-and-integrity-protocol.md +390 -0
  132. package/.claude/skills/fullstack-developer/references/development-phases.md +333 -0
  133. package/.claude/skills/fullstack-developer/references/expert-guide.md +214 -0
  134. package/.claude/skills/fullstack-developer/references/file-import-patterns.md +114 -0
  135. package/.claude/skills/fullstack-developer/references/graceful-degradation-patterns.md +78 -0
  136. package/.claude/skills/fullstack-developer/references/ide-lint-errors-guide.md +183 -0
  137. package/.claude/skills/fullstack-developer/references/integration-testing.md +301 -0
  138. package/.claude/skills/fullstack-developer/references/mock-api-patterns.md +307 -0
  139. package/.claude/skills/fullstack-developer/references/phase-gate-template.md +249 -0
  140. package/.claude/skills/fullstack-developer/references/post-edit-quality-gate.md +30 -0
  141. package/.claude/skills/fullstack-developer/references/python-engineering.md +79 -0
  142. package/.claude/skills/fullstack-developer/references/skill-orchestration.md +214 -0
  143. package/.claude/skills/fullstack-developer/references/skill-router-table.md +304 -0
  144. package/.claude/skills/fullstack-developer/references/state-sync.md +217 -0
  145. package/.claude/skills/fullstack-developer/references/ui-testing-checklist.md +292 -0
  146. package/.claude/skills/fullstack-developer/scripts/format_code.py +611 -0
  147. package/.claude/skills/fullstack-developer/scripts/lint_check.py +816 -0
  148. package/.claude/skills/fullstack-developer/scripts/requirements.txt +36 -0
  149. package/.claude/skills/performance-optimization/SKILL.md +250 -0
  150. package/.claude/skills/product-requirements/SKILL.md +357 -0
  151. package/.claude/skills/product-requirements/references/acceptance-criteria.md +335 -0
  152. package/.claude/skills/product-requirements/references/answer-first-questioning-protocol.md +299 -0
  153. package/.claude/skills/product-requirements/references/competitive-analysis-guide.md +183 -0
  154. package/.claude/skills/product-requirements/references/document-accuracy-protocol.md +253 -0
  155. package/.claude/skills/product-requirements/references/document-management-protocol.md +278 -0
  156. package/.claude/skills/product-requirements/references/external-standards.md +62 -0
  157. package/.claude/skills/product-requirements/references/feature-spec-template.md +359 -0
  158. package/.claude/skills/product-requirements/references/knowledge-acquisition-protocol.md +251 -0
  159. package/.claude/skills/product-requirements/references/plan-execution-protocol.md +334 -0
  160. package/.claude/skills/product-requirements/references/plan-generation-protocol.md +264 -0
  161. package/.claude/skills/product-requirements/references/prioritization-frameworks.md +80 -0
  162. package/.claude/skills/product-requirements/references/requirement-decomposition-protocol.md +291 -0
  163. package/.claude/skills/product-requirements/references/user-story-examples.md +297 -0
  164. package/.claude/skills/product-requirements/references/workflow-templates.md +266 -0
  165. package/.claude/skills/react-best-practices/SKILL.md +198 -0
  166. package/.claude/skills/react-best-practices/references/advanced-patterns.md +94 -0
  167. package/.claude/skills/react-best-practices/references/bundle-optimization.md +182 -0
  168. package/.claude/skills/react-best-practices/references/client-data-fetching.md +112 -0
  169. package/.claude/skills/react-best-practices/references/complete-guide.md +2249 -0
  170. package/.claude/skills/react-best-practices/references/eliminating-waterfalls.md +169 -0
  171. package/.claude/skills/react-best-practices/references/javascript-performance.md +256 -0
  172. package/.claude/skills/react-best-practices/references/rendering-performance.md +230 -0
  173. package/.claude/skills/react-best-practices/references/rerender-optimization.md +214 -0
  174. package/.claude/skills/react-best-practices/references/server-performance.md +182 -0
  175. package/.claude/skills/security-audit/SKILL.md +226 -0
  176. package/.claude/skills/shared-references/advanced-debugging-techniques.md +186 -0
  177. package/.claude/skills/shared-references/code-quality-checklist.md +218 -0
  178. package/.claude/skills/shared-references/code-review-efficiency-guide.md +125 -0
  179. package/.claude/skills/shared-references/mcp-dependency-compatibility-protocol.md +276 -0
  180. package/.claude/skills/shared-references/skill-call-graph.md +230 -0
  181. package/.claude/skills/shared-references/skill-orchestration-protocol.md +281 -0
  182. package/.claude/skills/shared-references/subagent-dispatch-templates.md +199 -0
  183. package/.claude/skills/skill-expert-skills/LICENSE.txt +204 -0
  184. package/.claude/skills/skill-expert-skills/QUICK_NAVIGATION.md +374 -0
  185. package/.claude/skills/skill-expert-skills/SKILL.md +247 -0
  186. package/.claude/skills/skill-expert-skills/docs/_index.md +91 -0
  187. package/.claude/skills/skill-expert-skills/references/deep-research-methodology.md +389 -0
  188. package/.claude/skills/skill-expert-skills/references/docs-generation-workflow.md +398 -0
  189. package/.claude/skills/skill-expert-skills/references/domain-expertise-protocol.md +343 -0
  190. package/.claude/skills/skill-expert-skills/references/domain-knowledge/_index.md +54 -0
  191. package/.claude/skills/skill-expert-skills/references/domain-knowledge/backend-expertise.md +517 -0
  192. package/.claude/skills/skill-expert-skills/references/domain-knowledge/bug-fixing-expertise.md +363 -0
  193. package/.claude/skills/skill-expert-skills/references/domain-knowledge/code-review-expertise.md +392 -0
  194. package/.claude/skills/skill-expert-skills/references/domain-knowledge/frontend-expertise.md +410 -0
  195. package/.claude/skills/skill-expert-skills/references/domain-knowledge-template.md +503 -0
  196. package/.claude/skills/skill-expert-skills/references/examples.md +782 -0
  197. package/.claude/skills/skill-expert-skills/references/integration-examples.md +655 -0
  198. package/.claude/skills/skill-expert-skills/references/knowledge-validation-checklist.md +246 -0
  199. package/.claude/skills/skill-expert-skills/references/latest-knowledge-acquisition.md +461 -0
  200. package/.claude/skills/skill-expert-skills/references/mcp-tools-guide.md +439 -0
  201. package/.claude/skills/skill-expert-skills/references/official-best-practices.md +616 -0
  202. package/.claude/skills/skill-expert-skills/references/patterns.md +218 -0
  203. package/.claude/skills/skill-expert-skills/references/plugin-skills-guide.md +432 -0
  204. package/.claude/skills/skill-expert-skills/references/requirement-elicitation-protocol.md +290 -0
  205. package/.claude/skills/skill-expert-skills/references/skill-creator-SKILL.md +353 -0
  206. package/.claude/skills/skill-expert-skills/references/skill-templates.md +583 -0
  207. package/.claude/skills/skill-expert-skills/references/skills-knowledge-base.md +561 -0
  208. package/.claude/skills/skill-expert-skills/references/tools-guide.md +379 -0
  209. package/.claude/skills/skill-expert-skills/references/troubleshooting.md +378 -0
  210. package/.claude/skills/skill-expert-skills/references/universality-guide.md +205 -0
  211. package/.claude/skills/skill-expert-skills/references/writing-style-guide.md +466 -0
  212. package/.claude/skills/skill-expert-skills/scripts/__pycache__/quick_validate.cpython-313.pyc +0 -0
  213. package/.claude/skills/skill-expert-skills/scripts/__pycache__/universal_validate.cpython-313.pyc +0 -0
  214. package/.claude/skills/skill-expert-skills/scripts/analyze_trigger.py +425 -0
  215. package/.claude/skills/skill-expert-skills/scripts/diff_with_official.py +188 -0
  216. package/.claude/skills/skill-expert-skills/scripts/init_skill.py +349 -0
  217. package/.claude/skills/skill-expert-skills/scripts/package_skill.py +156 -0
  218. package/.claude/skills/skill-expert-skills/scripts/quick_validate.py +493 -0
  219. package/.claude/skills/skill-expert-skills/scripts/requirements.txt +2 -0
  220. package/.claude/skills/skill-expert-skills/scripts/universal_validate.py +182 -0
  221. package/.claude/skills/skill-expert-skills/scripts/upgrade_skill.py +431 -0
  222. package/.claude/skills/subagent-driven-development/SKILL.md +268 -0
  223. package/.claude/skills/test-driven-development/SKILL.md +246 -0
  224. package/.claude/skills/test-driven-development/references/testing-anti-patterns.md +192 -0
  225. package/.claude/skills/using-git-worktrees/SKILL.md +266 -0
  226. package/.claude/skills/using-skillstack/SKILL.md +127 -0
  227. package/.claude/skills/vercel-deploy/SKILL.md +166 -0
  228. package/.claude/skills/vercel-deploy/scripts/deploy.sh +249 -0
  229. package/.claude/skills/verification-before-completion/SKILL.md +305 -0
  230. package/.claude/skills/writing-plans/SKILL.md +259 -0
  231. package/README.md +69 -0
  232. package/bin/cli.js +468 -0
  233. package/lib/init.js +333 -0
  234. package/package.json +29 -0
@@ -0,0 +1,350 @@
1
+ # Testing Strategy for Bug Fixes
2
+
3
+ > Comprehensive testing approach to verify bug fixes and prevent regressions.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Testing Philosophy](#testing-philosophy)
8
+ - [Test Pyramid for Bug Fixes](#test-pyramid-for-bug-fixes)
9
+ - [Mandatory Test Types](#mandatory-test-types)
10
+ - [Test Writing Guidelines](#test-writing-guidelines)
11
+ - [Coverage Requirements](#coverage-requirements)
12
+ - [Test Templates](#test-templates)
13
+
14
+ ---
15
+
16
+ ## Testing Philosophy
17
+
18
+ 1. **Prove the bug existed** - Write a test that fails before the fix
19
+ 2. **Prove the fix works** - Same test passes after the fix
20
+ 3. **Prove nothing broke** - All existing tests still pass
21
+ 4. **Prevent recurrence** - Test stays in the codebase forever
22
+
23
+ ---
24
+
25
+ ## Test Pyramid for Bug Fixes
26
+
27
+ ```
28
+ ┌─────────────────┐
29
+ │ E2E │ ← Critical path only
30
+ │ (Playwright) │
31
+ └────────┬────────┘
32
+
33
+ ┌─────────────┴─────────────┐
34
+ │ Integration │ ← API contracts, DB
35
+ │ (Testcontainers/MSW) │
36
+ └────────────┬──────────────┘
37
+
38
+ ┌───────────────────┴───────────────────┐
39
+ │ Unit Tests │ ← Most bug fix tests
40
+ │ (Jest/Vitest/Pytest) │
41
+ └───────────────────────────────────────┘
42
+ ```
43
+
44
+ **For bug fixes, prioritize:**
45
+ 1. **Unit test** that reproduces the exact bug condition
46
+ 2. **Integration test** if bug involves multiple components
47
+ 3. **E2E test** only if bug is user-journey critical
48
+
49
+ ---
50
+
51
+ ## Mandatory Test Types
52
+
53
+ ### 1. Bug Reproduction Test
54
+
55
+ Must be written **before** the fix:
56
+
57
+ ```typescript
58
+ // ❌ This test should FAIL on main branch
59
+ describe('BUG-1234: User profile crashes on null avatar', () => {
60
+ it('should handle missing avatar gracefully', () => {
61
+ const user = { name: 'John', avatar: null };
62
+
63
+ // This would crash before fix
64
+ expect(() => renderProfile(user)).not.toThrow();
65
+ expect(screen.getByText('John')).toBeInTheDocument();
66
+ });
67
+ });
68
+ ```
69
+
70
+ ### 2. Fix Verification Test
71
+
72
+ Same test **passes** after fix:
73
+
74
+ ```typescript
75
+ // ✅ This test should PASS after fix
76
+ it('should display default avatar when user.avatar is null', () => {
77
+ const user = { name: 'John', avatar: null };
78
+ renderProfile(user);
79
+
80
+ expect(screen.getByAltText('Default avatar')).toBeInTheDocument();
81
+ });
82
+ ```
83
+
84
+ ### 3. Edge Case Tests
85
+
86
+ Cover related edge cases discovered during RCA:
87
+
88
+ ```typescript
89
+ describe('Avatar edge cases', () => {
90
+ it.each([
91
+ [null, 'default.png'],
92
+ [undefined, 'default.png'],
93
+ ['', 'default.png'],
94
+ ['valid-url.jpg', 'valid-url.jpg'],
95
+ ])('avatar=%s should display %s', (avatar, expected) => {
96
+ const user = { name: 'John', avatar };
97
+ renderProfile(user);
98
+
99
+ expect(screen.getByRole('img').src).toContain(expected);
100
+ });
101
+ });
102
+ ```
103
+
104
+ ### 4. Regression Tests
105
+
106
+ Verify existing functionality unchanged:
107
+
108
+ ```typescript
109
+ describe('Profile regression tests', () => {
110
+ it('should still display user name correctly', () => { /* ... */ });
111
+ it('should still allow avatar upload', () => { /* ... */ });
112
+ it('should still link to settings', () => { /* ... */ });
113
+ });
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Test Writing Guidelines
119
+
120
+ ### Do's ✅
121
+
122
+ ```typescript
123
+ // ✅ Descriptive test name includes bug ID
124
+ it('BUG-1234: should not crash when avatar is null');
125
+
126
+ // ✅ Test the exact failure condition
127
+ const user = { avatar: null }; // Exact trigger
128
+
129
+ // ✅ Assert specific behavior, not just "no error"
130
+ expect(component).toHaveAttribute('src', 'default.png');
131
+
132
+ // ✅ Use realistic data
133
+ const user = userFactory.build({ avatar: null });
134
+ ```
135
+
136
+ ### Don'ts ❌
137
+
138
+ ```typescript
139
+ // ❌ Vague test name
140
+ it('should work correctly');
141
+
142
+ // ❌ Testing implementation, not behavior
143
+ expect(useState).toHaveBeenCalledWith(null);
144
+
145
+ // ❌ Multiple bugs in one test
146
+ it('should handle null avatar and empty name and missing email');
147
+
148
+ // ❌ Skipping cleanup
149
+ afterEach(() => cleanup()); // Don't forget!
150
+ ```
151
+
152
+ ---
153
+
154
+ ## Coverage Requirements
155
+
156
+ | Fix Scope | Required Coverage |
157
+ |-----------|-------------------|
158
+ | Single function | 100% on changed lines |
159
+ | Multiple functions | 100% on changed + 80% on callers |
160
+ | Cross-module | 100% on changed + integration tests |
161
+ | Critical path | All above + E2E test |
162
+
163
+ ### Coverage Commands
164
+
165
+ ```bash
166
+ # JavaScript/TypeScript
167
+ npx vitest run --coverage --reporter=html
168
+ npx jest --coverage --collectCoverageFrom='src/**/*.{ts,tsx}'
169
+
170
+ # Python
171
+ pytest --cov=src --cov-report=html
172
+ coverage run -m pytest
173
+ coverage report --fail-under=80
174
+
175
+ # Go
176
+ go test -coverprofile=coverage.out ./...
177
+ go tool cover -html=coverage.out
178
+ ```
179
+
180
+ ---
181
+
182
+ ## Test Templates
183
+
184
+ ### Unit Test Template (TypeScript)
185
+
186
+ ```typescript
187
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
188
+ import { render, screen, cleanup } from '@testing-library/react';
189
+
190
+ describe('BUG-XXXX: [Brief description]', () => {
191
+ beforeEach(() => {
192
+ // Setup: mock dependencies, reset state
193
+ });
194
+
195
+ afterEach(() => {
196
+ cleanup();
197
+ vi.restoreAllMocks();
198
+ });
199
+
200
+ describe('Bug reproduction', () => {
201
+ it('should [expected behavior] when [trigger condition]', () => {
202
+ // Arrange: setup the exact bug trigger
203
+ const input = { /* bug trigger data */ };
204
+
205
+ // Act: execute the buggy code path
206
+ const result = functionUnderTest(input);
207
+
208
+ // Assert: verify correct behavior
209
+ expect(result).toBe(expected);
210
+ });
211
+ });
212
+
213
+ describe('Edge cases', () => {
214
+ it.each([
215
+ ['case 1', input1, expected1],
216
+ ['case 2', input2, expected2],
217
+ ])('%s', (name, input, expected) => {
218
+ expect(functionUnderTest(input)).toBe(expected);
219
+ });
220
+ });
221
+
222
+ describe('Regression', () => {
223
+ it('should still [existing behavior]', () => {
224
+ // Verify existing functionality unchanged
225
+ });
226
+ });
227
+ });
228
+ ```
229
+
230
+ ### Integration Test Template (Python)
231
+
232
+ ```python
233
+ import pytest
234
+ from unittest.mock import patch, MagicMock
235
+
236
+ class TestBugXXXX:
237
+ """BUG-XXXX: [Brief description]"""
238
+
239
+ @pytest.fixture(autouse=True)
240
+ def setup(self, db_session):
241
+ """Setup test fixtures."""
242
+ self.session = db_session
243
+ # Create test data
244
+
245
+ def test_bug_reproduction(self):
246
+ """Should [expected] when [trigger]."""
247
+ # Arrange
248
+ user = User(avatar=None) # Bug trigger
249
+
250
+ # Act
251
+ result = get_user_profile(user.id)
252
+
253
+ # Assert
254
+ assert result.avatar_url == "default.png"
255
+
256
+ @pytest.mark.parametrize("avatar,expected", [
257
+ (None, "default.png"),
258
+ ("", "default.png"),
259
+ ("valid.jpg", "valid.jpg"),
260
+ ])
261
+ def test_edge_cases(self, avatar, expected):
262
+ """Edge case: avatar={avatar}."""
263
+ user = User(avatar=avatar)
264
+ result = get_user_profile(user.id)
265
+ assert result.avatar_url == expected
266
+
267
+ def test_regression_existing_users(self):
268
+ """Existing users should still work."""
269
+ user = User(avatar="existing.jpg")
270
+ result = get_user_profile(user.id)
271
+ assert result.avatar_url == "existing.jpg"
272
+ ```
273
+
274
+ ### E2E Test Template (Playwright)
275
+
276
+ ```typescript
277
+ import { test, expect } from '@playwright/test';
278
+
279
+ test.describe('BUG-XXXX: [Brief description]', () => {
280
+ test.beforeEach(async ({ page }) => {
281
+ // Login, navigate to page
282
+ await page.goto('/profile');
283
+ });
284
+
285
+ test('should display default avatar for user without avatar', async ({ page }) => {
286
+ // Setup: Create user without avatar via API
287
+ await api.createUser({ name: 'Test', avatar: null });
288
+
289
+ // Navigate
290
+ await page.goto('/profile/test-user');
291
+
292
+ // Assert
293
+ await expect(page.getByAltText('User avatar')).toHaveAttribute(
294
+ 'src',
295
+ /default\.png/
296
+ );
297
+ });
298
+
299
+ test('regression: should still display custom avatar', async ({ page }) => {
300
+ await api.createUser({ name: 'Test', avatar: 'custom.jpg' });
301
+ await page.goto('/profile/test-user');
302
+
303
+ await expect(page.getByAltText('User avatar')).toHaveAttribute(
304
+ 'src',
305
+ /custom\.jpg/
306
+ );
307
+ });
308
+ });
309
+ ```
310
+
311
+ ---
312
+
313
+ ## Test Execution Checklist
314
+
315
+ Before submitting the fix:
316
+
317
+ ```markdown
318
+ ### Test Verification Checklist
319
+
320
+ - [ ] Bug reproduction test written and fails on main
321
+ - [ ] Fix applied and reproduction test now passes
322
+ - [ ] Edge case tests added (null, undefined, empty, boundary)
323
+ - [ ] Regression tests for affected callers pass
324
+ - [ ] Full test suite green (`npm test` / `pytest`)
325
+ - [ ] Coverage on changed files = 100%
326
+ - [ ] No flaky tests introduced (run 3x to verify)
327
+ - [ ] Test naming follows convention: `BUG-XXXX: should...`
328
+ ```
329
+
330
+ ---
331
+
332
+ ## Quick Reference: Test Commands
333
+
334
+ ```bash
335
+ # Run specific test file
336
+ npx vitest run src/components/Profile.test.tsx
337
+ pytest tests/test_profile.py -v
338
+
339
+ # Run tests matching pattern
340
+ npx vitest run -t "BUG-1234"
341
+ pytest -k "bug_1234"
342
+
343
+ # Watch mode during development
344
+ npx vitest watch
345
+ pytest-watch
346
+
347
+ # Coverage report
348
+ npx vitest run --coverage
349
+ pytest --cov --cov-report=term-missing
350
+ ```
@@ -0,0 +1,162 @@
1
+ # Tooling & Build Scripts — Bug Fixing Guide (Zero Regression)
2
+
3
+ Use this guide when the “bug” lives in:
4
+ - build scripts (`.bat`, `.sh`, Makefiles)
5
+ - packaging tools (Electron Builder, PyInstaller, installers)
6
+ - CI/CD pipelines (GitHub Actions, GitLab CI, Jenkins, etc.)
7
+
8
+ The failure mode here is common: the fix “seems right” but breaks a different branch (interactive vs non-interactive, admin vs non-admin, CI vs local), or the output is too quiet so it looks “stuck”.
9
+
10
+ ---
11
+
12
+ ## 1) Triage (fast classifier)
13
+
14
+ Ask 1–2 questions:
15
+ - **Entry point**:
16
+ - (A) double-click / GUI runner
17
+ - (B) interactive terminal
18
+ - (C) CI job / pipeline step
19
+ - **Final outcome**:
20
+ - (A) fails with an error
21
+ - (B) “hangs” / no progress output
22
+ - (C) succeeds but produces wrong artifact (wrong folder / missing files)
23
+
24
+ Then capture **evidence**:
25
+ - exact command line (or “double-click”)
26
+ - working directory
27
+ - tool versions (node/npm/python/electron-builder/pyinstaller if relevant)
28
+ - last ~30 lines of output + **exit code**
29
+
30
+ ---
31
+
32
+ ## 2) Baseline (BEFORE fixing)
33
+
34
+ ### 2.1 Make the script observable (no “it looks stuck”)
35
+
36
+ If output is too quiet:
37
+ - remove silent flags (`-q`, `--silent`) for install/build steps
38
+ - enable progress (`pip --progress-bar on`, package manager progress, verbose flags)
39
+ - print step boundaries and timestamps
40
+
41
+ ### 2.2 Make runs deterministic (reduce flakiness)
42
+
43
+ - avoid interactive prompts; provide non-interactive flags where possible
44
+ - pin versions for toolchains when feasible
45
+ - isolate caches (or document how to clear them)
46
+
47
+ ### 2.3 Baseline matrix (minimum)
48
+
49
+ Record these as a table: **command → expected → actual → exit code → evidence**.
50
+
51
+ Typical minimal set:
52
+ - `script --help` (prints options, exits 0)
53
+ - `script --check-only` (validates env, exits 0/1 deterministically)
54
+ - “fast path” / “skip” flags (should not run heavy steps)
55
+ - “full path” once (the real end-to-end build)
56
+
57
+ ---
58
+
59
+ ## 3) Windows Batch (`.bat`) pitfall checklist (common root causes)
60
+
61
+ ### 3.1 Control flow inside parentheses
62
+
63
+ Avoid `goto` inside parenthesized blocks, e.g.:
64
+
65
+ ```bat
66
+ if exist "X" (
67
+ goto :Label REM fragile
68
+ )
69
+ ```
70
+
71
+ Prefer a flag variable and jump once outside the block.
72
+
73
+ ### 3.2 Delayed expansion and `!`
74
+
75
+ If using `setlocal enabledelayedexpansion`, any `!` in values can be expanded unexpectedly.
76
+ Be explicit about when delayed expansion is required, and avoid printing unescaped `!`.
77
+
78
+ ### 3.3 Special characters and quoting
79
+
80
+ Windows batch is sensitive to `&`, `|`, `<`, `>`, `(`, `)`, `^`, `%`.
81
+ Always quote paths with spaces and escape special characters when echoing commands.
82
+
83
+ ### 3.4 Encoding / non-ASCII
84
+
85
+ Non-ASCII output can break in surprising ways depending on:
86
+ - file encoding (UTF-8 with/without BOM)
87
+ - code page (`chcp`)
88
+ - console host
89
+
90
+ Recommendation for robustness:
91
+ - keep control keywords and critical command lines ASCII-only
92
+ - if localized output is required, test on the real target console host
93
+
94
+ ### 3.5 “Double-click closes instantly”
95
+
96
+ If users double-click the script, the window closes on completion or error.
97
+ Options:
98
+ - add a final `pause` (or a `--no-pause` flag)
99
+ - instruct users to run from an existing terminal so output remains visible
100
+
101
+ ---
102
+
103
+ ## 4) Packaging toolchain pitfalls (general)
104
+
105
+ ### 4.1 Code signing on Windows
106
+
107
+ If you do not have a code-signing certificate, **disable signing**.
108
+ Otherwise tools may download signing helpers and fail due to permissions/symlink extraction, especially on locked-down machines.
109
+
110
+ ### 4.2 Symlink permissions (Windows)
111
+
112
+ Creating symlinks often requires:
113
+ - Administrator privileges, or
114
+ - enabling Developer Mode
115
+
116
+ If a tool tries to extract archives containing symlinks, prefer a no-symlink path or disable the feature that requires it.
117
+
118
+ ### 4.3 Caches
119
+
120
+ Build tools cache downloads aggressively. When you see repeated failures with “cannot execute”, “corrupt archive”, “permission denied”, try clearing the tool’s cache directory and retry once.
121
+
122
+ ---
123
+
124
+ ## 5) Verification gate (tooling-specific)
125
+
126
+ Don’t declare “fixed” until ALL pass:
127
+
128
+ ### 5.1 Correctness
129
+ - original failing command now succeeds (or fails with the intended error message)
130
+ - expected artifacts are produced in the expected location
131
+
132
+ ### 5.2 Regression
133
+ - other entry points still work (double-click vs terminal vs CI)
134
+ - “fast path” flags still skip heavy work
135
+
136
+ ### 5.3 Observability
137
+ - progress is visible for long steps (no false “hang” reports)
138
+ - error messages are actionable (tell user what to install/enable)
139
+
140
+ ### 5.4 Evidence (mandatory)
141
+
142
+ Provide:
143
+ - the exact commands used
144
+ - exit codes
145
+ - the relevant log tail for each command
146
+
147
+ ---
148
+
149
+ ## 6) Output template (copy/paste)
150
+
151
+ ```markdown
152
+ ## Tooling Verification Matrix
153
+
154
+ | Case | Command / Entry point | Expected | Actual | Exit code | Evidence |
155
+ |------|------------------------|----------|--------|----------:|----------|
156
+ | 1 | `script --help` | prints help | | | |
157
+ | 2 | `script --check-only` | env validated | | | |
158
+ | 3 | fast path | skips heavy steps | | | |
159
+ | 4 | full path | artifact produced | | | |
160
+ ```
161
+
162
+
@@ -0,0 +1,77 @@
1
+ # User Input & External Data Validation
2
+
3
+ When bugs involve user input or external data (file imports, API responses, form data), incorrect assumptions about data format are the #1 cause of multi-fix loops.
4
+
5
+ ## Common Input Format Traps
6
+
7
+ | Category | Trap | Reality | Prevention |
8
+ |----------|------|---------|------------|
9
+ | **Column/Field Names** | Names are plain identifiers | Users may use wrapper syntax, templates, or special chars | Normalize names at parse time; strip common wrappers |
10
+ | **Data Types** | All values are strings | May be numbers, dates, booleans, nulls | Explicit type conversion with fallbacks |
11
+ | **Empty Values** | Empty means empty string | Could be null, undefined, missing key, or whitespace-only | Define and handle all empty variants |
12
+ | **Encoding** | File is UTF-8 | Could be UTF-8 BOM, UTF-16, ISO-8859-1 | Detect encoding or specify in docs |
13
+ | **Line Endings** | LF only | Windows CRLF, old Mac CR | Normalize line endings at parse |
14
+ | **Response Body** | HTTP success = business success | 200 with `{"code": -1, "error": "..."}` | Parse response body; check business status fields |
15
+
16
+ ## File Import Checklist
17
+
18
+ ### Parse Phase
19
+
20
+ - [ ] **Column name normalization**: Strip wrapper syntax (e.g., `${name}` → `name`)
21
+ - [ ] **Type detection**: Number, date, boolean, string
22
+ - [ ] **Null handling**: Define what empty/missing values become
23
+ - [ ] **Encoding handling**: BOM, charset detection
24
+
25
+ ### Validation Phase
26
+
27
+ - [ ] **Required fields**: Check presence and non-empty
28
+ - [ ] **Format validation**: Regex/pattern for constrained fields
29
+ - [ ] **Range validation**: Min/max for numbers, length for strings
30
+
31
+ ### Integration Phase
32
+
33
+ - [ ] **Data stored correctly**: Compare input → storage → retrieval
34
+ - [ ] **Display matches input**: Compare original input → final render
35
+ - [ ] **Edge cases work**: Special chars, very long values, unicode
36
+
37
+ ## API Response Validation
38
+
39
+ ### Common Response Patterns
40
+
41
+ ```
42
+ Pattern A: { "code": 0, "message": "ok", "data": {...} }
43
+ Pattern B: { "success": true, "result": {...} }
44
+ Pattern C: { "status": "success", "payload": {...} }
45
+ Pattern D: { "error": null, "data": {...} }
46
+ ```
47
+
48
+ ### Response Validation Checklist
49
+
50
+ - [ ] **Identify response structure**: What fields indicate success/failure?
51
+ - [ ] **Define success condition**: Not just HTTP 2xx, but also body fields
52
+ - [ ] **Extract error info**: message/msg/error field for user display
53
+ - [ ] **Handle edge cases**: Non-JSON response, empty body, timeout
54
+
55
+ ## Assumption Verification Template
56
+
57
+ When fixing a bug involving external data, fill this table BEFORE coding:
58
+
59
+ | Assumption | How to Verify | Evidence | Status |
60
+ |------------|---------------|----------|--------|
61
+ | Input format is X | Check actual sample data | | ⬜ |
62
+ | Parser handles format Y | Read parser code | | ⬜ |
63
+ | Data is normalized before use | Trace data flow | | ⬜ |
64
+ | Edge case Z is handled | Test with edge case input | | ⬜ |
65
+ | Response structure is A | Check API implementation | | ⬜ |
66
+
67
+ ## Red Flags (Trigger Deeper Investigation)
68
+
69
+ If any of these appear, explicitly verify input handling:
70
+
71
+ - Bug report mentions "sometimes works, sometimes doesn't"
72
+ - Bug involves file upload/import functionality
73
+ - Bug involves third-party API integration
74
+ - User says "I followed the format exactly"
75
+ - Error occurs only for certain users/inputs
76
+ - Data looks correct in DB but wrong on display
77
+