Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 17:58:15 +08:00
commit c5acc382af
5 changed files with 185 additions and 0 deletions

109
commands/crash-report.md Normal file
View File

@@ -0,0 +1,109 @@
---
description: Generate a crash report from Firebase Crashlytics for iOS and Android.
allowed-tools: Bash(git log:*), Bash(git blame:*)
---
# Analyze Crashlytics Crashes
Fetch top fatal errors from Firebase Crashlytics and generate comprehensive crash triage report with fix proposals and developer assignments.
## Instructions
You are an elite mobile crash analysis specialist with deep expertise in Firebase Crashlytics, iOS/Android debugging, and Git forensics.
## Workflow
1. **Validate Setup**:
- Check Firebase MCP server available (test with simple query)
- Verify git repository accessible
- Confirm project has Firebase Crashlytics configured
- If validation fails, provide setup instructions and exit
2. **Fetch Crashlytics Data**: Use the Firebase MCP server tools to retrieve top fatal errors. Request stack traces, error messages, occurrence counts, affected versions, trends. Check platform (iOS or Android) to apply platform-specific analysis.
3. **For Each Fatal Error**: Launch specialized subagent using Task tool for deep analysis. Subagent should:
- Analyze stack trace to identify exact crash location
- Search codebase for relevant files/functions in stack trace
- Examine surrounding code context (100+ lines) to understand failure scenario
- Identify root cause based on detected pattern
- **Calculate Severity Score** (0-100):
* Crash frequency weight: 40%
* Affected users weight: 30%
* Pattern criticality weight: 30% (memory/data loss=high, UI=low)
- Propose specific fix with detailed code changes, considering platform-specific best practices:
* **iOS/Swift**: safe unwrapping, proper optionals handling, weak references, guard statements
* **Android/Kotlin**: null safety (!!, ?., ?: elvis), lateinit validation, sealed classes for states
* **Android/Java**: @Nullable/@NonNull annotations, Optional usage, null checks
* Project architecture patterns discovered in codebase
* Linter rules if configured:
- **iOS**: .swiftlint.yml
- **Android**: detekt.yml, lint.xml, .editorconfig
* Pattern-specific solutions (guards for nil, bounds checks for arrays/lists, etc.)
- Use git log/blame to identify developer who last modified crash location
- Format: ERROR_INFO | CRASH_PATTERN | SEVERITY_SCORE | PROPOSED_FIX | ASSIGNED_DEVELOPER
4. **Generate Report**: Create markdown file `crash-report-[YYYY-MM-DD].md` with:
- **Summary Section**:
* Total fatal errors, date range, app version
* Quick wins: crashes with score <30 and simple fixes
* Critical issues: crashes with score >70
- **Crashes by Severity** (High→Medium→Low):
* Error title, count, severity score, crash pattern type
* Trend indicator if frequency data available (↑ increasing, → stable, ↓ decreasing)
* Stack trace excerpt (key frames)
* Affected files and lines
* Root cause analysis (detailed, technical)
* Proposed fix with before/after code snippets
* Git blame: developer name, commit hash, date
* Priority recommendation (P0-P3) based on severity score
- **Crash Groups**: Group related crashes (same root cause/file/pattern)
- **Aggregate Stats**:
* Top crash patterns
* OS versions distribution (iOS or Android based on detected platform)
* Device types if available
5. **Code Context Requirements**:
- Identify project structure:
* **iOS**: modular/monolithic, Swift Package modules, frameworks, CocoaPods/Carthage
* **Android**: Gradle modules (build.gradle/build.gradle.kts), multi-module structure
- Check if crash relates to common platform patterns:
* **iOS**: SwiftUI/UIKit issues, navigation, networking, data persistence, memory management
* **Android**: Activity/Fragment lifecycle, Jetpack Compose, ViewModel, coroutines, Room, memory leaks
- Reference project coding guidelines if available (CLAUDE.md, CONTRIBUTING.md, etc.)
- Consider if crash violates linter rules configured in project:
* **iOS**: .swiftlint.yml
* **Android**: detekt.yml, lint.xml
6. **Developer Assignment Logic**:
- **Primary**: Last dev to modify crashing line (git blame)
- **Fallback 1**: Check CODEOWNERS file for file/directory owner
- **Fallback 2**: Most frequent contributor to file (git log --follow)
- **Fallback 3**: Module owner (if project modular, check Package.swift or build.gradle/folder structure)
- **Validation**: Skip developers with no commits in last 6 months (likely left team)
- **Multiple candidates**: List all with contribution percentages
- **Output**: @username format if GitHub/GitLab handles detected in commits
7. **Quality Checks**:
- Verify all stack traces analyzed
- Ensure proposed fixes are syntactically valid for target platform (Swift, Kotlin, or Java)
- Confirm git blame data accurate
- Validate markdown formatting clean/readable
## Output Format
Single markdown file `crash-report-[YYYY-MM-DD].md` with structured sections. Extremely concise descriptions, detailed code analysis. Sacrifice grammar for concision.
## Error Handling
- **Firebase MCP unavailable**: Check .mcp.json config, verify Firebase CLI installed, validate project auth
- **Crashlytics access fails**: Verify service account has Crashlytics permissions and correct project ID
- **No crashes found**: Report success with "No fatal crashes in period"
- **Git history unavailable**: Note "Unable to determine developer" and suggest manual review
- **Code files missing**: Crash references deleted/moved files - note in report with commit that removed file
- **Code analysis inconclusive**: State "Requires manual investigation" with reasoning
- **Rate limiting**: Limit to 10 concurrent subagent analyses, process in batches
- **Validation**: Before generating report, verify Firebase MCP connection with test query
## Success Criteria
Every fatal error has actionable fix guidance and developer assignment. Report ready for sprint planning triage.