Silent failure detection patterns for frontend code. Triggers: サイレント障害, silent failure, 空のcatch, empty catch, 未処理Promise, unhandled rejection, unhandled promise, Error Boundary, fire and forget, エラーハンドリング, error handling, try-catch.
/plugin marketplace add thkt/claude-config/plugin install complete-workflow-system@thkt-development-workflowsThis skill is limited to using the following tools:
references/detection-patterns.mdreferences/error-boundaries.mdreferences/error-handling.mdTarget: All failures are visible, debuggable, and user-informed.
| Pattern | Risk | Impact |
|---|---|---|
| Empty catch block | 🔴 Critical | Errors completely hidden |
| Promise without catch | 🔴 Critical | Unhandled rejections |
| Fire and forget async | 🟡 High | Lost error context |
| Console.log only | 🟡 High | No user feedback |
| Missing Error Boundary | 🟡 High | App crash on component error |
| Excessive optional chaining | 🟢 Medium | May mask bugs |
| Section | File | Focus | Triggers |
|---|---|---|---|
| Detection | references/detection-patterns.md | Regex patterns, search commands | 空のcatch, empty catch |
| Handling | references/error-handling.md | Proper error handling patterns | エラーハンドリング |
| Boundaries | references/error-boundaries.md | React Error Boundary | Error Boundary |
.catch or try-catch)console.log as only error handling| Principle | Application |
|---|---|
| Fail Fast | Make failures visible and immediate |
| User Feedback | Always inform users of failures |
| Context Logging | Log with enough info to debug |
| Graceful Degradation | Fail gracefully, not silently |
# Empty catch blocks
rg "catch\s*\([^)]*\)\s*\{\s*\}" --glob "*.{ts,tsx}"
# Then without catch
rg "\.then\([^)]+\)$" --glob "*.{ts,tsx}"
# Console.log only error handling
rg "catch.*console\.log" --glob "*.{ts,tsx}"
// ❌ Silent failure
try {
await fetchUserData()
} catch (e) {
// Nothing here - error disappears
}
// ✅ Proper handling
try {
await fetchUserData()
} catch (error) {
logger.error('Failed to fetch user data', { error })
setError('Unable to load user data. Please try again.')
}
// ❌ Unhandled rejection
fetchData().then(data => setData(data))
// ✅ With error handling
fetchData()
.then(data => setData(data))
.catch(error => {
logger.error('Failed to fetch data', error)
setError('Loading failed')
})
reviewing-type-safety - Type safety catches some errors at compile timegenerating-tdd-tests - Test error pathssilent-failure-reviewer - Primary consumer of this skill