@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,362 @@
|
|
|
1
|
+
# Root Cause Analysis Techniques
|
|
2
|
+
|
|
3
|
+
> Techniques for identifying the true source of bugs, not just 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](#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
|
+
- [Code Path Tracing](#code-path-tracing)
|
|
15
|
+
- [Root Cause Categories](#root-cause-categories)
|
|
16
|
+
- [RCA Report Template](#rca-report-template)
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## RCA Principles
|
|
21
|
+
|
|
22
|
+
1. **Don't fix symptoms** — A fix that addresses symptoms will see the bug return
|
|
23
|
+
2. **Ask "Why?" repeatedly** — Keep digging until you find the fundamental cause
|
|
24
|
+
3. **Verify the cause** — Prove the root cause by showing the fix prevents the bug
|
|
25
|
+
4. **Look for patterns** — Similar bugs may have the same root cause
|
|
26
|
+
5. **Document for learning** — RCA helps prevent future similar bugs
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## RCA Techniques
|
|
31
|
+
|
|
32
|
+
### 1. Five Whys
|
|
33
|
+
|
|
34
|
+
Start with the problem and ask "Why?" five times:
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
**Problem**: Users receive duplicate emails
|
|
38
|
+
|
|
39
|
+
**Why 1**: Why do users receive duplicate emails?
|
|
40
|
+
→ Because the email service is called twice.
|
|
41
|
+
|
|
42
|
+
**Why 2**: Why is the email service called twice?
|
|
43
|
+
→ Because the submit handler fires twice.
|
|
44
|
+
|
|
45
|
+
**Why 3**: Why does the submit handler fire twice?
|
|
46
|
+
→ Because the button click event bubbles and triggers twice.
|
|
47
|
+
|
|
48
|
+
**Why 4**: Why does the event bubble and trigger twice?
|
|
49
|
+
→ Because there's no event.stopPropagation() or debouncing.
|
|
50
|
+
|
|
51
|
+
**Why 5**: Why is there no prevention for double submission?
|
|
52
|
+
→ Because the form component was written without considering rapid clicks.
|
|
53
|
+
|
|
54
|
+
**Root Cause**: Form component lacks double-submission prevention.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 2. Fishbone Diagram (Ishikawa)
|
|
58
|
+
|
|
59
|
+
Categorize potential causes:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
┌─── People ──────┐
|
|
63
|
+
│ - Training gap │
|
|
64
|
+
│ - Human error │
|
|
65
|
+
│ │
|
|
66
|
+
┌─── Process ──────┐│ │┌─── Technology ────┐
|
|
67
|
+
│ - Missing step ││ ││ - System bug │
|
|
68
|
+
│ - Wrong order ││ ││ - Integration issue│
|
|
69
|
+
│ - No validation ││ [BUG] ││ - Performance │
|
|
70
|
+
└──────────────────┘│ │└────────────────────┘
|
|
71
|
+
│ │
|
|
72
|
+
┌─── Environment ──┐│ │┌─── Data ────────────┐
|
|
73
|
+
│ - Config diff ││ ││ - Invalid input │
|
|
74
|
+
│ - Network issue ││ ││ - Corrupted data │
|
|
75
|
+
│ - Resource limit │└──────────────────┘│ - Missing data │
|
|
76
|
+
└──────────────────┘ └──────────────────────┘
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 3. Timeline Analysis
|
|
80
|
+
|
|
81
|
+
For intermittent or timing-related bugs:
|
|
82
|
+
|
|
83
|
+
```markdown
|
|
84
|
+
## Timeline Analysis
|
|
85
|
+
|
|
86
|
+
| Time | Event | System State | Notes |
|
|
87
|
+
|------|-------|--------------|-------|
|
|
88
|
+
| 00:00 | User clicks Submit | Form data valid | |
|
|
89
|
+
| 00:01 | API call initiated | Loading state | |
|
|
90
|
+
| 00:02 | User clicks Submit again | Already loading | No prevention! |
|
|
91
|
+
| 00:03 | First API call completes | Success | |
|
|
92
|
+
| 00:04 | Second API call completes | Duplicate! | |
|
|
93
|
+
|
|
94
|
+
**Root Cause**: No loading state check before submit
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 4. Fault Tree Analysis
|
|
98
|
+
|
|
99
|
+
Work backwards from the failure:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
[Duplicate Email]
|
|
103
|
+
│
|
|
104
|
+
┌────────────┴────────────┐
|
|
105
|
+
│ │
|
|
106
|
+
[Email sent twice] [Two records created]
|
|
107
|
+
│ │
|
|
108
|
+
┌─────────┴─────────┐ │
|
|
109
|
+
│ │ │
|
|
110
|
+
[Double API call] [Retry logic] [Race condition]
|
|
111
|
+
│
|
|
112
|
+
│
|
|
113
|
+
[No debounce on button] ← ROOT CAUSE
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 5. Change Analysis
|
|
117
|
+
|
|
118
|
+
Compare working vs broken states:
|
|
119
|
+
|
|
120
|
+
```markdown
|
|
121
|
+
## Change Analysis
|
|
122
|
+
|
|
123
|
+
| Aspect | Working State | Broken State | Changed? |
|
|
124
|
+
|--------|---------------|--------------|----------|
|
|
125
|
+
| Code version | v1.2.3 | v1.2.4 | Yes ✓ |
|
|
126
|
+
| Config | prod.yaml | prod.yaml | No |
|
|
127
|
+
| Database | schema v42 | schema v42 | No |
|
|
128
|
+
| Dependencies | package.json | package.json | No |
|
|
129
|
+
| Environment | AWS us-east-1 | AWS us-east-1 | No |
|
|
130
|
+
|
|
131
|
+
**Focus Investigation On**: Code changes in v1.2.4
|
|
132
|
+
|
|
133
|
+
**Changed Files**:
|
|
134
|
+
- src/services/email.ts (modified)
|
|
135
|
+
- src/components/Form.tsx (modified) ← likely culprit
|
|
136
|
+
|
|
137
|
+
**Root Cause**: Form.tsx change removed debounce logic
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Code Path Tracing
|
|
143
|
+
|
|
144
|
+
### Step 1: Identify Entry Point
|
|
145
|
+
|
|
146
|
+
Where does the bug manifest?
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
Error message: "Cannot read property 'name' of undefined"
|
|
150
|
+
Stack trace points to:
|
|
151
|
+
src/components/UserProfile.tsx:23
|
|
152
|
+
const name = user.name; // Error here
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Step 2: Trace Data Flow
|
|
156
|
+
|
|
157
|
+
Follow the data from source to error:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
Entry: UserProfile.tsx:23 (user.name)
|
|
161
|
+
↑
|
|
162
|
+
│ user comes from props
|
|
163
|
+
│
|
|
164
|
+
Source: UserProfilePage.tsx:15
|
|
165
|
+
↑
|
|
166
|
+
│ user comes from useUser hook
|
|
167
|
+
│
|
|
168
|
+
Source: hooks/useUser.ts:8
|
|
169
|
+
↑
|
|
170
|
+
│ user comes from API response
|
|
171
|
+
│
|
|
172
|
+
Source: api/users.ts:12
|
|
173
|
+
↑
|
|
174
|
+
│ API returns null when user not found
|
|
175
|
+
│
|
|
176
|
+
ROOT CAUSE: No handling for API returning null
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Step 3: Document the Path
|
|
180
|
+
|
|
181
|
+
```markdown
|
|
182
|
+
## Code Path
|
|
183
|
+
|
|
184
|
+
### Execution Flow
|
|
185
|
+
1. UserProfilePage renders
|
|
186
|
+
└── Calls useUser(userId)
|
|
187
|
+
└── Fetches from /api/users/{id}
|
|
188
|
+
└── API returns null (user deleted)
|
|
189
|
+
└── useUser returns null
|
|
190
|
+
└── UserProfile receives user=null
|
|
191
|
+
└── Accesses user.name
|
|
192
|
+
└── TypeError!
|
|
193
|
+
|
|
194
|
+
### Missing Checks
|
|
195
|
+
| Location | Should Check | Current |
|
|
196
|
+
|----------|-------------|---------|
|
|
197
|
+
| API response | user exists | No ❌ |
|
|
198
|
+
| useUser hook | null handling | No ❌ |
|
|
199
|
+
| UserProfile | user prop | No ❌ |
|
|
200
|
+
|
|
201
|
+
### Fix Location Options
|
|
202
|
+
1. API: Return 404 (proper REST) ← Best
|
|
203
|
+
2. Hook: Return loading/error state
|
|
204
|
+
3. Component: Null check before render
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Root Cause Categories
|
|
210
|
+
|
|
211
|
+
### Logic Errors
|
|
212
|
+
|
|
213
|
+
```python
|
|
214
|
+
# Bug: Off-by-one error
|
|
215
|
+
for i in range(len(array) + 1): # Should be len(array)
|
|
216
|
+
process(array[i]) # IndexError on last iteration
|
|
217
|
+
|
|
218
|
+
# Bug: Wrong operator
|
|
219
|
+
if user.role = 'admin': # = should be ==
|
|
220
|
+
# Always assigns, doesn't compare
|
|
221
|
+
|
|
222
|
+
# Bug: Incorrect condition
|
|
223
|
+
if items.length > 0 or items.length < 10: # or should be and
|
|
224
|
+
# Always true if length > 0
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Async/Timing Errors
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
# Bug: Race condition
|
|
231
|
+
data = None
|
|
232
|
+
async def load_data():
|
|
233
|
+
global data
|
|
234
|
+
data = await fetch_data()
|
|
235
|
+
|
|
236
|
+
load_data() # Not awaited
|
|
237
|
+
print(data) # None - load_data hasn't finished
|
|
238
|
+
|
|
239
|
+
# Bug: Unhandled promise/future rejection
|
|
240
|
+
async def save():
|
|
241
|
+
await api.save(data) # No try/except
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### State Errors
|
|
245
|
+
|
|
246
|
+
```python
|
|
247
|
+
# Bug: Mutation of shared state
|
|
248
|
+
items = []
|
|
249
|
+
def add_item(item):
|
|
250
|
+
items.append(item) # Mutates shared list!
|
|
251
|
+
|
|
252
|
+
# Bug: Invalid state transition
|
|
253
|
+
if status == 'pending':
|
|
254
|
+
status = 'complete'
|
|
255
|
+
elif status == 'processing':
|
|
256
|
+
status = 'complete' # Can go from processing to complete?
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Data Errors
|
|
260
|
+
|
|
261
|
+
```python
|
|
262
|
+
# Bug: Unexpected data type
|
|
263
|
+
def format_date(date):
|
|
264
|
+
return date.isoformat() # Fails if date is string
|
|
265
|
+
|
|
266
|
+
# Bug: Missing data validation
|
|
267
|
+
def create_user(data):
|
|
268
|
+
return {'email': data['email'].lower()} # Fails if email is None
|
|
269
|
+
|
|
270
|
+
# Bug: Data shape assumption
|
|
271
|
+
def get_first_item(response):
|
|
272
|
+
return response['data']['items'][0]['name'] # Many assumptions!
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Integration Errors
|
|
276
|
+
|
|
277
|
+
```python
|
|
278
|
+
# Bug: API contract mismatch
|
|
279
|
+
# Frontend expects: { user: { name: string } }
|
|
280
|
+
# Backend returns: { data: { user: { name: string } } }
|
|
281
|
+
name = response['user']['name'] # KeyError
|
|
282
|
+
|
|
283
|
+
# Bug: Version mismatch
|
|
284
|
+
# Library v1: response.json()
|
|
285
|
+
# Library v2: response.body
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## RCA Report Template
|
|
291
|
+
|
|
292
|
+
```markdown
|
|
293
|
+
# Root Cause Analysis Report
|
|
294
|
+
|
|
295
|
+
## Bug Summary
|
|
296
|
+
| Field | Value |
|
|
297
|
+
|-------|-------|
|
|
298
|
+
| Bug ID | BUG-XXX |
|
|
299
|
+
| Summary | [One line] |
|
|
300
|
+
| Severity | Critical / High / Medium / Low |
|
|
301
|
+
| Date Found | [Date] |
|
|
302
|
+
| Date Fixed | [Date] |
|
|
303
|
+
|
|
304
|
+
## Problem Statement
|
|
305
|
+
[Detailed description of the bug]
|
|
306
|
+
|
|
307
|
+
## Impact
|
|
308
|
+
- Users affected: [Number/scope]
|
|
309
|
+
- Features affected: [List]
|
|
310
|
+
- Duration: [How long issue existed]
|
|
311
|
+
|
|
312
|
+
## Root Cause
|
|
313
|
+
|
|
314
|
+
### 5 Whys Analysis
|
|
315
|
+
[Complete 5 whys]
|
|
316
|
+
|
|
317
|
+
### Root Cause Statement
|
|
318
|
+
**Category**: [Logic/Async/State/Data/Integration]
|
|
319
|
+
|
|
320
|
+
**Description**: [Clear statement of root cause]
|
|
321
|
+
|
|
322
|
+
**Code Location**:
|
|
323
|
+
- File: [path]
|
|
324
|
+
- Line: [number]
|
|
325
|
+
- Function: [name]
|
|
326
|
+
|
|
327
|
+
## Fix
|
|
328
|
+
|
|
329
|
+
### Solution
|
|
330
|
+
[Description of fix]
|
|
331
|
+
|
|
332
|
+
### Code Changes
|
|
333
|
+
[Diff or description]
|
|
334
|
+
|
|
335
|
+
### Why This Fix?
|
|
336
|
+
[Justification]
|
|
337
|
+
|
|
338
|
+
## Verification
|
|
339
|
+
- [ ] Bug cannot be reproduced
|
|
340
|
+
- [ ] Tests added for bug case
|
|
341
|
+
- [ ] Related features verified
|
|
342
|
+
|
|
343
|
+
## Similar Bug Hunt
|
|
344
|
+
- [ ] Pattern extracted
|
|
345
|
+
- [ ] Project-wide search completed
|
|
346
|
+
- [ ] Similar instances fixed
|
|
347
|
+
|
|
348
|
+
## Prevention
|
|
349
|
+
|
|
350
|
+
### Immediate Actions
|
|
351
|
+
- [Action 1]
|
|
352
|
+
- [Action 2]
|
|
353
|
+
|
|
354
|
+
### Long-term Improvements
|
|
355
|
+
- [Improvement 1]
|
|
356
|
+
- [Improvement 2]
|
|
357
|
+
|
|
358
|
+
## Lessons Learned
|
|
359
|
+
- [Lesson 1]
|
|
360
|
+
- [Lesson 2]
|
|
361
|
+
```
|
|
362
|
+
|