@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.
- package/.claude/skills/.temp-skill-index.md +245 -0
- package/.claude/skills/SKILL.md +264 -0
- package/.claude/skills/api-scaffolding/SKILL.md +431 -0
- package/.claude/skills/api-scaffolding/agents/backend-architect.md +282 -0
- package/.claude/skills/api-scaffolding/agents/django-pro.md +144 -0
- package/.claude/skills/api-scaffolding/agents/fastapi-pro.md +156 -0
- package/.claude/skills/api-scaffolding/agents/graphql-architect.md +146 -0
- package/.claude/skills/api-scaffolding/skills/fastapi-templates/SKILL.md +171 -0
- package/.claude/skills/api-testing-observability/SKILL.md +583 -0
- package/.claude/skills/api-testing-observability/agents/api-documenter.md +146 -0
- package/.claude/skills/api-testing-observability/commands/api-mock.md +1320 -0
- package/.claude/skills/brainstorming/SKILL.md +283 -0
- package/.claude/skills/bug-fixing/SKILL.md +382 -0
- package/.claude/skills/bug-fixing/references/backend-guide.md +132 -0
- package/.claude/skills/bug-fixing/references/bug-guide.md +354 -0
- package/.claude/skills/bug-fixing/references/bug-record-template.md +134 -0
- package/.claude/skills/bug-fixing/references/bug-records.md +88 -0
- package/.claude/skills/bug-fixing/references/code-review-gate.md +81 -0
- package/.claude/skills/bug-fixing/references/common-bugs.md +140 -0
- package/.claude/skills/bug-fixing/references/complete-workflow.md +361 -0
- package/.claude/skills/bug-fixing/references/config-driven-fixes.md +136 -0
- package/.claude/skills/bug-fixing/references/context-isolation-protocol.md +268 -0
- package/.claude/skills/bug-fixing/references/cross-surface-regression.md +120 -0
- package/.claude/skills/bug-fixing/references/database-investigation.md +129 -0
- package/.claude/skills/bug-fixing/references/dependency-and-integrity-protocol.md +369 -0
- package/.claude/skills/bug-fixing/references/fix-completeness-checklist.md +239 -0
- package/.claude/skills/bug-fixing/references/frontend-guide.md +219 -0
- package/.claude/skills/bug-fixing/references/fullstack-joint-guide.md +123 -0
- package/.claude/skills/bug-fixing/references/functional-breakage.md +117 -0
- package/.claude/skills/bug-fixing/references/ide-lint-errors-guide.md +176 -0
- package/.claude/skills/bug-fixing/references/impact-analysis.md +511 -0
- package/.claude/skills/bug-fixing/references/investigation-checklist.md +263 -0
- package/.claude/skills/bug-fixing/references/knowledge-extraction-guide.md +531 -0
- package/.claude/skills/bug-fixing/references/knowledge-workflow.md +212 -0
- package/.claude/skills/bug-fixing/references/post-edit-quality-gate.md +30 -0
- package/.claude/skills/bug-fixing/references/python-env-and-testing.md +126 -0
- package/.claude/skills/bug-fixing/references/rca-guide.md +428 -0
- package/.claude/skills/bug-fixing/references/similar-bug-patterns.md +113 -0
- package/.claude/skills/bug-fixing/references/skill-delegation-guide.md +350 -0
- package/.claude/skills/bug-fixing/references/skill-orchestration.md +155 -0
- package/.claude/skills/bug-fixing/references/testing-strategy.md +350 -0
- package/.claude/skills/bug-fixing/references/tooling-build-scripts.md +162 -0
- package/.claude/skills/bug-fixing/references/user-input-validation.md +77 -0
- package/.claude/skills/bug-fixing/references/ux-patterns.md +158 -0
- package/.claude/skills/bug-fixing/references/windows-terminal-hygiene.md +106 -0
- package/.claude/skills/bug-fixing/references/zero-regression-matrix.md +239 -0
- package/.claude/skills/bug-fixing/references/zero-risk-protocol.md +102 -0
- package/.claude/skills/bug-fixing/scripts/format_code.py +611 -0
- package/.claude/skills/bug-fixing/scripts/generate_report_template.py +74 -0
- package/.claude/skills/bug-fixing/scripts/lint_check.py +816 -0
- package/.claude/skills/bug-fixing/scripts/requirements.txt +36 -0
- package/.claude/skills/cicd-pipeline/SKILL.md +300 -0
- package/.claude/skills/code-review/SKILL.md +535 -0
- package/.claude/skills/code-review/references/anti-pattern-scan.md +102 -0
- package/.claude/skills/code-review/references/automated-analysis.md +456 -0
- package/.claude/skills/code-review/references/backend-common-issues.md +589 -0
- package/.claude/skills/code-review/references/backend-expert-guide.md +415 -0
- package/.claude/skills/code-review/references/backend-review.md +868 -0
- package/.claude/skills/code-review/references/batch-processing-strategy.md +198 -0
- package/.claude/skills/code-review/references/call-chain-analysis-protocol.md +166 -0
- package/.claude/skills/code-review/references/common-patterns.md +321 -0
- package/.claude/skills/code-review/references/configuration-review.md +425 -0
- package/.claude/skills/code-review/references/control-flow-completeness.md +114 -0
- package/.claude/skills/code-review/references/database-review.md +298 -0
- package/.claude/skills/code-review/references/dependency-and-integrity-protocol.md +313 -0
- package/.claude/skills/code-review/references/external-standards.md +51 -0
- package/.claude/skills/code-review/references/feature-review.md +329 -0
- package/.claude/skills/code-review/references/file-review-template.md +326 -0
- package/.claude/skills/code-review/references/frontend-advanced.md +654 -0
- package/.claude/skills/code-review/references/frontend-common-issues.md +482 -0
- package/.claude/skills/code-review/references/frontend-expert-guide.md +342 -0
- package/.claude/skills/code-review/references/frontend-review.md +783 -0
- package/.claude/skills/code-review/references/fullstack-consistency.md +418 -0
- package/.claude/skills/code-review/references/fullstack-review.md +477 -0
- package/.claude/skills/code-review/references/functional-completeness.md +386 -0
- package/.claude/skills/code-review/references/hidden-bugs-detection.md +473 -0
- package/.claude/skills/code-review/references/ide-lint-errors-guide.md +173 -0
- package/.claude/skills/code-review/references/infrastructure-review.md +453 -0
- package/.claude/skills/code-review/references/iteration-review.md +264 -0
- package/.claude/skills/code-review/references/job-review.md +335 -0
- package/.claude/skills/code-review/references/layered-checklist-protocol.md +157 -0
- package/.claude/skills/code-review/references/logic-completeness.md +535 -0
- package/.claude/skills/code-review/references/mandatory-checklist.md +288 -0
- package/.claude/skills/code-review/references/multi-language-guide.md +800 -0
- package/.claude/skills/code-review/references/new-project-review.md +226 -0
- package/.claude/skills/code-review/references/non-code-files-review.md +451 -0
- package/.claude/skills/code-review/references/overlooked-issues.md +657 -0
- package/.claude/skills/code-review/references/platform-specific-review.md +195 -0
- package/.claude/skills/code-review/references/precision-analysis-protocol.md +260 -0
- package/.claude/skills/code-review/references/python-patterns.md +494 -0
- package/.claude/skills/code-review/references/rca-techniques.md +362 -0
- package/.claude/skills/code-review/references/report-template.md +430 -0
- package/.claude/skills/code-review/references/resource-limits-and-degradation.md +137 -0
- package/.claude/skills/code-review/references/review-dimensions.md +311 -0
- package/.claude/skills/code-review/references/review-guide.md +202 -0
- package/.claude/skills/code-review/references/review-knowledge-workflow.md +257 -0
- package/.claude/skills/code-review/references/review-progress-tracker-protocol.md +172 -0
- package/.claude/skills/code-review/references/review-record-template.md +195 -0
- package/.claude/skills/code-review/references/skill-orchestration.md +143 -0
- package/.claude/skills/code-review/references/ui-ux-review.md +470 -0
- package/.claude/skills/containerization/SKILL.md +313 -0
- package/.claude/skills/database-migrations/agents/database-admin.md +142 -0
- package/.claude/skills/database-migrations/agents/database-optimizer.md +144 -0
- package/.claude/skills/database-migrations/commands/migration-observability.md +408 -0
- package/.claude/skills/database-migrations/commands/sql-migrations.md +492 -0
- package/.claude/skills/finishing-a-development-branch/SKILL.md +319 -0
- package/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/.claude/skills/frontend-design/SKILL.md +587 -0
- package/.claude/skills/frontend-design/references/color-consistency.md +487 -0
- package/.claude/skills/frontend-design/references/color-palettes-full.md +657 -0
- package/.claude/skills/frontend-design/references/design-system-generator.md +285 -0
- package/.claude/skills/frontend-design/references/font-pairings-full.md +705 -0
- package/.claude/skills/frontend-design/references/industry-anti-patterns.md +281 -0
- package/.claude/skills/frontend-design/references/layout-anti-patterns.md +582 -0
- package/.claude/skills/frontend-design/references/motion-patterns.md +659 -0
- package/.claude/skills/frontend-design/references/pre-delivery-checklist.md +153 -0
- package/.claude/skills/frontend-design/references/responsive-design.md +555 -0
- package/.claude/skills/frontend-design/references/style-modification-rules.md +335 -0
- package/.claude/skills/frontend-design/references/ui-styles-full.md +383 -0
- package/.claude/skills/frontend-design/references/ui-styles-rating.md +191 -0
- package/.claude/skills/frontend-design/references/ux-guidelines.md +640 -0
- package/.claude/skills/fullstack-developer/SKILL.md +512 -0
- package/.claude/skills/fullstack-developer/references/api-contract-guide.md +312 -0
- package/.claude/skills/fullstack-developer/references/api-response-patterns.md +223 -0
- package/.claude/skills/fullstack-developer/references/async-patterns.md +220 -0
- package/.claude/skills/fullstack-developer/references/bug-prevention.md +914 -0
- package/.claude/skills/fullstack-developer/references/code-quality-checklist.md +271 -0
- package/.claude/skills/fullstack-developer/references/complete-development-workflow.md +278 -0
- package/.claude/skills/fullstack-developer/references/context-isolation-protocol.md +256 -0
- package/.claude/skills/fullstack-developer/references/database-migration.md +331 -0
- package/.claude/skills/fullstack-developer/references/dependency-and-integrity-protocol.md +390 -0
- package/.claude/skills/fullstack-developer/references/development-phases.md +333 -0
- package/.claude/skills/fullstack-developer/references/expert-guide.md +214 -0
- package/.claude/skills/fullstack-developer/references/file-import-patterns.md +114 -0
- package/.claude/skills/fullstack-developer/references/graceful-degradation-patterns.md +78 -0
- package/.claude/skills/fullstack-developer/references/ide-lint-errors-guide.md +183 -0
- package/.claude/skills/fullstack-developer/references/integration-testing.md +301 -0
- package/.claude/skills/fullstack-developer/references/mock-api-patterns.md +307 -0
- package/.claude/skills/fullstack-developer/references/phase-gate-template.md +249 -0
- package/.claude/skills/fullstack-developer/references/post-edit-quality-gate.md +30 -0
- package/.claude/skills/fullstack-developer/references/python-engineering.md +79 -0
- package/.claude/skills/fullstack-developer/references/skill-orchestration.md +214 -0
- package/.claude/skills/fullstack-developer/references/skill-router-table.md +304 -0
- package/.claude/skills/fullstack-developer/references/state-sync.md +217 -0
- package/.claude/skills/fullstack-developer/references/ui-testing-checklist.md +292 -0
- package/.claude/skills/fullstack-developer/scripts/format_code.py +611 -0
- package/.claude/skills/fullstack-developer/scripts/lint_check.py +816 -0
- package/.claude/skills/fullstack-developer/scripts/requirements.txt +36 -0
- package/.claude/skills/performance-optimization/SKILL.md +250 -0
- package/.claude/skills/product-requirements/SKILL.md +357 -0
- package/.claude/skills/product-requirements/references/acceptance-criteria.md +335 -0
- package/.claude/skills/product-requirements/references/answer-first-questioning-protocol.md +299 -0
- package/.claude/skills/product-requirements/references/competitive-analysis-guide.md +183 -0
- package/.claude/skills/product-requirements/references/document-accuracy-protocol.md +253 -0
- package/.claude/skills/product-requirements/references/document-management-protocol.md +278 -0
- package/.claude/skills/product-requirements/references/external-standards.md +62 -0
- package/.claude/skills/product-requirements/references/feature-spec-template.md +359 -0
- package/.claude/skills/product-requirements/references/knowledge-acquisition-protocol.md +251 -0
- package/.claude/skills/product-requirements/references/plan-execution-protocol.md +334 -0
- package/.claude/skills/product-requirements/references/plan-generation-protocol.md +264 -0
- package/.claude/skills/product-requirements/references/prioritization-frameworks.md +80 -0
- package/.claude/skills/product-requirements/references/requirement-decomposition-protocol.md +291 -0
- package/.claude/skills/product-requirements/references/user-story-examples.md +297 -0
- package/.claude/skills/product-requirements/references/workflow-templates.md +266 -0
- package/.claude/skills/react-best-practices/SKILL.md +198 -0
- package/.claude/skills/react-best-practices/references/advanced-patterns.md +94 -0
- package/.claude/skills/react-best-practices/references/bundle-optimization.md +182 -0
- package/.claude/skills/react-best-practices/references/client-data-fetching.md +112 -0
- package/.claude/skills/react-best-practices/references/complete-guide.md +2249 -0
- package/.claude/skills/react-best-practices/references/eliminating-waterfalls.md +169 -0
- package/.claude/skills/react-best-practices/references/javascript-performance.md +256 -0
- package/.claude/skills/react-best-practices/references/rendering-performance.md +230 -0
- package/.claude/skills/react-best-practices/references/rerender-optimization.md +214 -0
- package/.claude/skills/react-best-practices/references/server-performance.md +182 -0
- package/.claude/skills/security-audit/SKILL.md +226 -0
- package/.claude/skills/shared-references/advanced-debugging-techniques.md +186 -0
- package/.claude/skills/shared-references/code-quality-checklist.md +218 -0
- package/.claude/skills/shared-references/code-review-efficiency-guide.md +125 -0
- package/.claude/skills/shared-references/mcp-dependency-compatibility-protocol.md +276 -0
- package/.claude/skills/shared-references/skill-call-graph.md +230 -0
- package/.claude/skills/shared-references/skill-orchestration-protocol.md +281 -0
- package/.claude/skills/shared-references/subagent-dispatch-templates.md +199 -0
- package/.claude/skills/skill-expert-skills/LICENSE.txt +204 -0
- package/.claude/skills/skill-expert-skills/QUICK_NAVIGATION.md +374 -0
- package/.claude/skills/skill-expert-skills/SKILL.md +247 -0
- package/.claude/skills/skill-expert-skills/docs/_index.md +91 -0
- package/.claude/skills/skill-expert-skills/references/deep-research-methodology.md +389 -0
- package/.claude/skills/skill-expert-skills/references/docs-generation-workflow.md +398 -0
- package/.claude/skills/skill-expert-skills/references/domain-expertise-protocol.md +343 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/_index.md +54 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/backend-expertise.md +517 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/bug-fixing-expertise.md +363 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/code-review-expertise.md +392 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge/frontend-expertise.md +410 -0
- package/.claude/skills/skill-expert-skills/references/domain-knowledge-template.md +503 -0
- package/.claude/skills/skill-expert-skills/references/examples.md +782 -0
- package/.claude/skills/skill-expert-skills/references/integration-examples.md +655 -0
- package/.claude/skills/skill-expert-skills/references/knowledge-validation-checklist.md +246 -0
- package/.claude/skills/skill-expert-skills/references/latest-knowledge-acquisition.md +461 -0
- package/.claude/skills/skill-expert-skills/references/mcp-tools-guide.md +439 -0
- package/.claude/skills/skill-expert-skills/references/official-best-practices.md +616 -0
- package/.claude/skills/skill-expert-skills/references/patterns.md +218 -0
- package/.claude/skills/skill-expert-skills/references/plugin-skills-guide.md +432 -0
- package/.claude/skills/skill-expert-skills/references/requirement-elicitation-protocol.md +290 -0
- package/.claude/skills/skill-expert-skills/references/skill-creator-SKILL.md +353 -0
- package/.claude/skills/skill-expert-skills/references/skill-templates.md +583 -0
- package/.claude/skills/skill-expert-skills/references/skills-knowledge-base.md +561 -0
- package/.claude/skills/skill-expert-skills/references/tools-guide.md +379 -0
- package/.claude/skills/skill-expert-skills/references/troubleshooting.md +378 -0
- package/.claude/skills/skill-expert-skills/references/universality-guide.md +205 -0
- package/.claude/skills/skill-expert-skills/references/writing-style-guide.md +466 -0
- package/.claude/skills/skill-expert-skills/scripts/__pycache__/quick_validate.cpython-313.pyc +0 -0
- package/.claude/skills/skill-expert-skills/scripts/__pycache__/universal_validate.cpython-313.pyc +0 -0
- package/.claude/skills/skill-expert-skills/scripts/analyze_trigger.py +425 -0
- package/.claude/skills/skill-expert-skills/scripts/diff_with_official.py +188 -0
- package/.claude/skills/skill-expert-skills/scripts/init_skill.py +349 -0
- package/.claude/skills/skill-expert-skills/scripts/package_skill.py +156 -0
- package/.claude/skills/skill-expert-skills/scripts/quick_validate.py +493 -0
- package/.claude/skills/skill-expert-skills/scripts/requirements.txt +2 -0
- package/.claude/skills/skill-expert-skills/scripts/universal_validate.py +182 -0
- package/.claude/skills/skill-expert-skills/scripts/upgrade_skill.py +431 -0
- package/.claude/skills/subagent-driven-development/SKILL.md +268 -0
- package/.claude/skills/test-driven-development/SKILL.md +246 -0
- package/.claude/skills/test-driven-development/references/testing-anti-patterns.md +192 -0
- package/.claude/skills/using-git-worktrees/SKILL.md +266 -0
- package/.claude/skills/using-skillstack/SKILL.md +127 -0
- package/.claude/skills/vercel-deploy/SKILL.md +166 -0
- package/.claude/skills/vercel-deploy/scripts/deploy.sh +249 -0
- package/.claude/skills/verification-before-completion/SKILL.md +305 -0
- package/.claude/skills/writing-plans/SKILL.md +259 -0
- package/README.md +69 -0
- package/bin/cli.js +468 -0
- package/lib/init.js +333 -0
- package/package.json +29 -0
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
# Root Cause Analysis Guide
|
|
2
|
+
|
|
3
|
+
> RCA techniques to identify true bug sources, not symptoms.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [RCA Principles](#rca-principles)
|
|
8
|
+
- [RCA Techniques](#rca-techniques)
|
|
9
|
+
- [Five Whys](#1-five-whys)
|
|
10
|
+
- [Fishbone Diagram (Ishikawa)](#2-fishbone-diagram-ishikawa)
|
|
11
|
+
- [Timeline Analysis](#3-timeline-analysis)
|
|
12
|
+
- [Fault Tree Analysis](#4-fault-tree-analysis)
|
|
13
|
+
- [Change Analysis](#5-change-analysis)
|
|
14
|
+
- [Git Bisect](#6-git-bisect-binary-search-debugging)
|
|
15
|
+
- [Code Path Tracing](#code-path-tracing)
|
|
16
|
+
- [Root Cause Categories](#root-cause-categories)
|
|
17
|
+
- [RCA Report Template](#rca-report-template)
|
|
18
|
+
|
|
19
|
+
Techniques for identifying the true source of bugs, not just symptoms.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## RCA Principles
|
|
24
|
+
|
|
25
|
+
1. **Don't fix symptoms** - A fix that addresses symptoms will see the bug return
|
|
26
|
+
2. **Ask "Why?" repeatedly** - Keep digging until you find the fundamental cause
|
|
27
|
+
3. **Verify the cause** - Prove the root cause by showing the fix prevents the bug
|
|
28
|
+
4. **Look for patterns** - Similar bugs may have the same root cause
|
|
29
|
+
5. **Document for learning** - RCA helps prevent future similar bugs
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## RCA Techniques
|
|
34
|
+
|
|
35
|
+
### 1. Five Whys
|
|
36
|
+
|
|
37
|
+
Start with the problem and ask "Why?" five times:
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
**Problem**: Users receive duplicate emails
|
|
41
|
+
|
|
42
|
+
**Why 1**: Why do users receive duplicate emails?
|
|
43
|
+
→ Because the email service is called twice.
|
|
44
|
+
|
|
45
|
+
**Why 2**: Why is the email service called twice?
|
|
46
|
+
→ Because the submit handler fires twice.
|
|
47
|
+
|
|
48
|
+
**Why 3**: Why does the submit handler fire twice?
|
|
49
|
+
→ Because the button click event bubbles and triggers twice.
|
|
50
|
+
|
|
51
|
+
**Why 4**: Why does the event bubble and trigger twice?
|
|
52
|
+
→ Because there's no event.stopPropagation() or debouncing.
|
|
53
|
+
|
|
54
|
+
**Why 5**: Why is there no prevention for double submission?
|
|
55
|
+
→ Because the form component was written without considering rapid clicks.
|
|
56
|
+
|
|
57
|
+
**Root Cause**: Form component lacks double-submission prevention.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 2. Fishbone Diagram (Ishikawa)
|
|
61
|
+
|
|
62
|
+
Categorize potential causes:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
┌─── People ──────┐
|
|
66
|
+
│ - Training gap │
|
|
67
|
+
│ - Human error │
|
|
68
|
+
│ │
|
|
69
|
+
┌─── Process ──────┐│ │┌─── Technology ────┐
|
|
70
|
+
│ - Missing step ││ ││ - System bug │
|
|
71
|
+
│ - Wrong order ││ ││ - Integration issue│
|
|
72
|
+
│ - No validation ││ [BUG] ││ - Performance │
|
|
73
|
+
└──────────────────┘│ │└────────────────────┘
|
|
74
|
+
│ │
|
|
75
|
+
┌─── Environment ──┐│ │┌─── Data ────────────┐
|
|
76
|
+
│ - Config diff ││ ││ - Invalid input │
|
|
77
|
+
│ - Network issue ││ ││ - Corrupted data │
|
|
78
|
+
│ - Resource limit │└──────────────────┘│ - Missing data │
|
|
79
|
+
└──────────────────┘ └──────────────────────┘
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 3. Timeline Analysis
|
|
83
|
+
|
|
84
|
+
For intermittent or timing-related bugs:
|
|
85
|
+
|
|
86
|
+
```markdown
|
|
87
|
+
## Timeline Analysis
|
|
88
|
+
|
|
89
|
+
| Time | Event | System State | Notes |
|
|
90
|
+
|------|-------|--------------|-------|
|
|
91
|
+
| 00:00 | User clicks Submit | Form data valid | |
|
|
92
|
+
| 00:01 | API call initiated | Loading state | |
|
|
93
|
+
| 00:02 | User clicks Submit again | Already loading | No prevention! |
|
|
94
|
+
| 00:03 | First API call completes | Success | |
|
|
95
|
+
| 00:04 | Second API call completes | Duplicate! | |
|
|
96
|
+
|
|
97
|
+
**Root Cause**: No loading state check before submit
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 4. Fault Tree Analysis
|
|
101
|
+
|
|
102
|
+
Work backwards from the failure:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
[Duplicate Email]
|
|
106
|
+
│
|
|
107
|
+
┌────────────┴────────────┐
|
|
108
|
+
│ │
|
|
109
|
+
[Email sent twice] [Two records created]
|
|
110
|
+
│ │
|
|
111
|
+
┌─────────┴─────────┐ │
|
|
112
|
+
│ │ │
|
|
113
|
+
[Double API call] [Retry logic] [Race condition]
|
|
114
|
+
│
|
|
115
|
+
│
|
|
116
|
+
[No debounce on button] ← ROOT CAUSE
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 5. Change Analysis
|
|
120
|
+
|
|
121
|
+
Compare working vs broken states:
|
|
122
|
+
|
|
123
|
+
```markdown
|
|
124
|
+
## Change Analysis
|
|
125
|
+
|
|
126
|
+
| Aspect | Working State | Broken State | Changed? |
|
|
127
|
+
|--------|---------------|--------------|----------|
|
|
128
|
+
| Code version | v1.2.3 | v1.2.4 | Yes ✓ |
|
|
129
|
+
| Config | prod.yaml | prod.yaml | No |
|
|
130
|
+
| Database | schema v42 | schema v42 | No |
|
|
131
|
+
| Dependencies | package.json | package.json | No |
|
|
132
|
+
| Environment | AWS us-east-1 | AWS us-east-1 | No |
|
|
133
|
+
|
|
134
|
+
**Focus Investigation On**: Code changes in v1.2.4
|
|
135
|
+
|
|
136
|
+
**Changed Files**:
|
|
137
|
+
- src/services/email.ts (modified)
|
|
138
|
+
- src/components/Form.tsx (modified) ← likely culprit
|
|
139
|
+
|
|
140
|
+
**Root Cause**: Form.tsx change removed debounce logic
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 6. Git Bisect (Binary Search Debugging)
|
|
144
|
+
|
|
145
|
+
**Best for**: Regression bugs where you know "it worked before"
|
|
146
|
+
|
|
147
|
+
When a recent change broke functionality, use binary search to find the culprit commit:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# Start bisect session
|
|
151
|
+
git bisect start
|
|
152
|
+
|
|
153
|
+
# Mark current commit as broken
|
|
154
|
+
git bisect bad HEAD
|
|
155
|
+
|
|
156
|
+
# Mark last known working version
|
|
157
|
+
git bisect good v1.2.3 # or commit hash
|
|
158
|
+
|
|
159
|
+
# Git checks out middle commit - test it manually
|
|
160
|
+
# Then mark result:
|
|
161
|
+
git bisect good # if this commit works
|
|
162
|
+
git bisect bad # if this commit is broken
|
|
163
|
+
|
|
164
|
+
# Repeat until Git identifies the first bad commit
|
|
165
|
+
# Output: "abc1234 is the first bad commit"
|
|
166
|
+
|
|
167
|
+
# End session and return to original state
|
|
168
|
+
git bisect reset
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Automated Bisect** (with test script):
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Run test automatically on each commit
|
|
175
|
+
git bisect start HEAD v1.2.3
|
|
176
|
+
git bisect run npm test # or any command that exits 0=good, 1=bad
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**When to Use Git Bisect**:
|
|
180
|
+
|
|
181
|
+
| Scenario | Use Bisect? |
|
|
182
|
+
|----------|-------------|
|
|
183
|
+
| "It worked last week" | ✅ Yes |
|
|
184
|
+
| "It never worked" | ❌ No |
|
|
185
|
+
| Many commits between good/bad | ✅ Yes (efficient) |
|
|
186
|
+
| Only 2-3 commits | ❌ No (just check manually) |
|
|
187
|
+
| Can't reproduce reliably | ❌ No (need consistent test) |
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Code Path Tracing
|
|
192
|
+
|
|
193
|
+
### Step 1: Identify Entry Point
|
|
194
|
+
|
|
195
|
+
Where does the bug start?
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
// Error message: "Cannot read property 'name' of undefined"
|
|
199
|
+
// Stack trace points to:
|
|
200
|
+
src/components/UserProfile.tsx:23
|
|
201
|
+
const name = user.name; // Error here
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Step 2: Trace Data Flow
|
|
205
|
+
|
|
206
|
+
Follow the data from source to error:
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
Entry: UserProfile.tsx:23 (user.name)
|
|
210
|
+
↑
|
|
211
|
+
│ user comes from props
|
|
212
|
+
│
|
|
213
|
+
Source: UserProfilePage.tsx:15
|
|
214
|
+
↑
|
|
215
|
+
│ user comes from useUser hook
|
|
216
|
+
│
|
|
217
|
+
Source: hooks/useUser.ts:8
|
|
218
|
+
↑
|
|
219
|
+
│ user comes from API response
|
|
220
|
+
│
|
|
221
|
+
Source: api/users.ts:12
|
|
222
|
+
↑
|
|
223
|
+
│ API returns null when user not found
|
|
224
|
+
│
|
|
225
|
+
ROOT CAUSE: No handling for API returning null
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Step 3: Document the Path
|
|
229
|
+
|
|
230
|
+
```markdown
|
|
231
|
+
## Code Path
|
|
232
|
+
|
|
233
|
+
### Execution Flow
|
|
234
|
+
```
|
|
235
|
+
1. UserProfilePage renders
|
|
236
|
+
└── Calls useUser(userId)
|
|
237
|
+
└── Fetches from /api/users/{id}
|
|
238
|
+
└── API returns null (user deleted)
|
|
239
|
+
└── useUser returns null
|
|
240
|
+
└── UserProfile receives user=null
|
|
241
|
+
└── Accesses user.name
|
|
242
|
+
└── TypeError!
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Missing Checks
|
|
246
|
+
| Location | Should Check | Current |
|
|
247
|
+
|----------|-------------|---------|
|
|
248
|
+
| API response | user exists | No ❌ |
|
|
249
|
+
| useUser hook | null handling | No ❌ |
|
|
250
|
+
| UserProfile | user prop | No ❌ |
|
|
251
|
+
|
|
252
|
+
### Fix Location Options
|
|
253
|
+
1. API: Return 404 (proper REST) ← Best
|
|
254
|
+
2. Hook: Return loading/error state
|
|
255
|
+
3. Component: Null check before render
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Root Cause Categories
|
|
260
|
+
|
|
261
|
+
### Logic Errors
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
// Bug: Off-by-one error
|
|
265
|
+
for (let i = 0; i <= array.length; i++) { // <= should be <
|
|
266
|
+
process(array[i]); // undefined on last iteration
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Bug: Wrong operator
|
|
270
|
+
if (user.role = 'admin') { // = should be ===
|
|
271
|
+
// Always true, assigns 'admin' to role
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Bug: Incorrect condition
|
|
275
|
+
if (items.length > 0 || items.length < 10) { // || should be &&
|
|
276
|
+
// Always true if length > 0
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Async/Timing Errors
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
// Bug: Race condition
|
|
284
|
+
let data;
|
|
285
|
+
async function loadData() {
|
|
286
|
+
data = await fetchData();
|
|
287
|
+
}
|
|
288
|
+
loadData();
|
|
289
|
+
console.log(data); // undefined - loadData hasn't finished
|
|
290
|
+
|
|
291
|
+
// Bug: Stale closure
|
|
292
|
+
useEffect(() => {
|
|
293
|
+
const interval = setInterval(() => {
|
|
294
|
+
setCount(count + 1); // count is stale
|
|
295
|
+
}, 1000);
|
|
296
|
+
}, []); // missing count dependency
|
|
297
|
+
|
|
298
|
+
// Bug: Unhandled promise rejection
|
|
299
|
+
async function save() {
|
|
300
|
+
await api.save(data); // No try/catch
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### State Errors
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
// Bug: Mutation of state
|
|
308
|
+
const [items, setItems] = useState([]);
|
|
309
|
+
function addItem(item) {
|
|
310
|
+
items.push(item); // Mutates state directly!
|
|
311
|
+
setItems(items); // Same reference, no re-render
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Bug: Invalid state transition
|
|
315
|
+
if (status === 'pending') {
|
|
316
|
+
setStatus('complete');
|
|
317
|
+
} else if (status === 'processing') {
|
|
318
|
+
setStatus('complete'); // Can go from processing to complete?
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Data Errors
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
// Bug: Unexpected data type
|
|
326
|
+
function formatDate(date) {
|
|
327
|
+
return date.toISOString(); // Fails if date is string
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Bug: Missing data validation
|
|
331
|
+
function createUser(data) {
|
|
332
|
+
return { email: data.email.toLowerCase() }; // Fails if email undefined
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Bug: Data shape assumption
|
|
336
|
+
function getFirstItem(response) {
|
|
337
|
+
return response.data.items[0].name; // Many assumptions!
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Integration Errors
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
// Bug: API contract mismatch
|
|
345
|
+
// Frontend expects: { user: { name: string } }
|
|
346
|
+
// Backend returns: { data: { user: { name: string } } }
|
|
347
|
+
const name = response.user.name; // undefined
|
|
348
|
+
|
|
349
|
+
// Bug: Version mismatch
|
|
350
|
+
// Library v1: axios.get().then(res => res.data)
|
|
351
|
+
// Library v2: axios.get().then(res => res.body)
|
|
352
|
+
|
|
353
|
+
// Bug: Environment difference
|
|
354
|
+
const apiUrl = process.env.API_URL; // undefined in production
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## RCA Report Template
|
|
360
|
+
|
|
361
|
+
```markdown
|
|
362
|
+
# Root Cause Analysis Report
|
|
363
|
+
|
|
364
|
+
## Bug Summary
|
|
365
|
+
| Field | Value |
|
|
366
|
+
|-------|-------|
|
|
367
|
+
| Bug ID | BUG-XXX |
|
|
368
|
+
| Summary | [One line] |
|
|
369
|
+
| Severity | Critical / High / Medium / Low |
|
|
370
|
+
| Date Found | [Date] |
|
|
371
|
+
| Date Fixed | [Date] |
|
|
372
|
+
|
|
373
|
+
## Problem Statement
|
|
374
|
+
[Detailed description of the bug]
|
|
375
|
+
|
|
376
|
+
## Impact
|
|
377
|
+
- Users affected: [Number/scope]
|
|
378
|
+
- Features affected: [List]
|
|
379
|
+
- Duration: [How long issue existed]
|
|
380
|
+
|
|
381
|
+
## Root Cause
|
|
382
|
+
|
|
383
|
+
### 5 Whys Analysis
|
|
384
|
+
[Complete 5 whys]
|
|
385
|
+
|
|
386
|
+
### Root Cause Statement
|
|
387
|
+
**Category**: [Logic/Async/State/Data/Integration]
|
|
388
|
+
|
|
389
|
+
**Description**: [Clear statement of root cause]
|
|
390
|
+
|
|
391
|
+
**Code Location**:
|
|
392
|
+
- File: [path]
|
|
393
|
+
- Line: [number]
|
|
394
|
+
- Function: [name]
|
|
395
|
+
|
|
396
|
+
## Fix
|
|
397
|
+
|
|
398
|
+
### Solution
|
|
399
|
+
[Description of fix]
|
|
400
|
+
|
|
401
|
+
### Code Changes
|
|
402
|
+
[Diff or description]
|
|
403
|
+
|
|
404
|
+
### Why This Fix?
|
|
405
|
+
[Justification]
|
|
406
|
+
|
|
407
|
+
## Verification
|
|
408
|
+
- [ ] Bug cannot be reproduced
|
|
409
|
+
- [ ] Tests added for bug case
|
|
410
|
+
- [ ] Related features verified
|
|
411
|
+
|
|
412
|
+
## Prevention
|
|
413
|
+
|
|
414
|
+
### Immediate Actions
|
|
415
|
+
- [Action 1]
|
|
416
|
+
- [Action 2]
|
|
417
|
+
|
|
418
|
+
### Long-term Improvements
|
|
419
|
+
- [Improvement 1]
|
|
420
|
+
- [Improvement 2]
|
|
421
|
+
|
|
422
|
+
## Lessons Learned
|
|
423
|
+
- [Lesson 1]
|
|
424
|
+
- [Lesson 2]
|
|
425
|
+
|
|
426
|
+
## Related Bugs
|
|
427
|
+
- [BUG-XXX] - Similar issue in [component]
|
|
428
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Similar Bug Patterns & Search Strategies
|
|
2
|
+
|
|
3
|
+
修复一个 bug 后,使用本指南搜索整个项目中的相似问题。
|
|
4
|
+
|
|
5
|
+
## 核心方法
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
1. 提取模式 → 2. 构建搜索 → 3. 全项目扫描 → 4. 逐一验证 → 5. 批量修复
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 常见 Bug 模式
|
|
12
|
+
|
|
13
|
+
### 1. 硬编码数据 (Hardcoded Data)
|
|
14
|
+
|
|
15
|
+
**特征**: 使用静态值而非从配置/API获取
|
|
16
|
+
|
|
17
|
+
**搜索策略**:
|
|
18
|
+
- 搜索相同的硬编码值
|
|
19
|
+
- 搜索 `INITIAL_*`, `DEFAULT_*`, `MOCK_*` 常量
|
|
20
|
+
- 搜索初始化为非空数组的状态
|
|
21
|
+
|
|
22
|
+
**验证**: 该值应该从哪里获取?配置文件?API?
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
### 2. 占位符代码 (Placeholder Code)
|
|
27
|
+
|
|
28
|
+
**特征**: 函数只有日志/注释,没有实际逻辑
|
|
29
|
+
|
|
30
|
+
**搜索策略**:
|
|
31
|
+
- 搜索 `// TODO`, `// FIXME`, `// 后续实现`
|
|
32
|
+
- 搜索只有 `console.log` 的处理函数
|
|
33
|
+
- 搜索带 `placeholder`, `stub`, `mock` 注释的代码
|
|
34
|
+
|
|
35
|
+
**验证**: 函数应该做什么?实际做了吗?
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
### 3. 缺少集成 (Missing Integration)
|
|
40
|
+
|
|
41
|
+
**特征**: 前端有操作但没调用后端,或反之
|
|
42
|
+
|
|
43
|
+
**搜索策略**:
|
|
44
|
+
- 列出所有 `handle*` / `on*` 函数
|
|
45
|
+
- 检查哪些没有 API 调用
|
|
46
|
+
- 对比前端功能与后端 API 清单
|
|
47
|
+
|
|
48
|
+
**验证**: 每个用户操作都有对应的后端调用吗?
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### 4. 契约不匹配 (Contract Mismatch)
|
|
53
|
+
|
|
54
|
+
**特征**: 前后端字段名/结构不一致
|
|
55
|
+
|
|
56
|
+
**搜索策略**:
|
|
57
|
+
- 对比前端表单字段与后端 Schema
|
|
58
|
+
- 搜索驼峰/下划线命名不一致
|
|
59
|
+
- 检查请求体结构与 API 期望
|
|
60
|
+
|
|
61
|
+
**验证**: 前端发送的字段名与后端期望的完全一致吗?
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### 5. 状态不同步 (State Not Synced)
|
|
66
|
+
|
|
67
|
+
**特征**: 本地状态与服务器数据脱节
|
|
68
|
+
|
|
69
|
+
**搜索策略**:
|
|
70
|
+
- 搜索初始化为空但无数据获取的状态
|
|
71
|
+
- 搜索 CUD 操作后没有刷新列表的代码
|
|
72
|
+
- 检查乐观更新是否有回滚机制
|
|
73
|
+
|
|
74
|
+
**验证**: 状态从哪里来?操作后如何同步?
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 搜索执行模板
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# 通用搜索模板(根据实际情况调整)
|
|
82
|
+
# 建议:先缩小范围(疑似目录 + glob),再逐步扩展到全仓库(.)
|
|
83
|
+
|
|
84
|
+
# 1. 搜索特定值
|
|
85
|
+
rg -n "搜索词" path/to/suspected/area/ --glob "*.ext"
|
|
86
|
+
|
|
87
|
+
# 2. 搜索模式
|
|
88
|
+
rg -n "pattern" path/to/suspected/area/ --glob "*.{ts,tsx}"
|
|
89
|
+
|
|
90
|
+
# 3. 列出文件后人工检查
|
|
91
|
+
rg -l "pattern" path/to/suspected/area/ --glob "*.tsx"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## 报告模板
|
|
95
|
+
|
|
96
|
+
```markdown
|
|
97
|
+
## Similar Bug Hunt Report
|
|
98
|
+
|
|
99
|
+
**原始 Bug**: [简述]
|
|
100
|
+
**Bug 模式**: [硬编码/占位符/缺少集成/契约不匹配/状态不同步]
|
|
101
|
+
**搜索关键词**: [实际搜索的内容]
|
|
102
|
+
|
|
103
|
+
### 搜索结果
|
|
104
|
+
|
|
105
|
+
| 文件 | 行号 | 问题描述 | 状态 |
|
|
106
|
+
|------|------|----------|------|
|
|
107
|
+
| xxx.tsx | 123 | 同样的问题 | ✅ 已修复 |
|
|
108
|
+
| yyy.tsx | 45 | 误报 | ⏭️ 跳过 |
|
|
109
|
+
|
|
110
|
+
### 结论
|
|
111
|
+
共发现 N 处相似问题,已全部修复。
|
|
112
|
+
```
|
|
113
|
+
|