feat(error): add error handling foundation (Day 0)

- extractErrorMessage(err: unknown) normalizes any error shape to string
- handleError/handleInfraError dual utilities (user-facing vs infra-only)
- error-classifier extended with ipc/database/filesystem types (9 total)
- Toast rate-limiting (max 3 per type per 30s) in notifications store
- Infrastructure bridges use documented console.warn (recursion prevention)
- 13 new tests for extractErrorMessage
This commit is contained in:
Hibryda 2026-03-18 01:19:23 +01:00
parent bfc01192d2
commit dcdb741403
7 changed files with 215 additions and 4 deletions

View file

@ -13,7 +13,10 @@ export function sendDesktopNotification(
body: string,
urgency: NotificationUrgency = 'normal',
): void {
invoke('notify_desktop', { title, body, urgency }).catch(() => {
// Swallow IPC errors — notifications must never break the app
invoke('notify_desktop', { title, body, urgency }).catch((_e: unknown) => {
// Intentional: notification daemon may not be running. Cannot use handleInfraError
// here — it calls tel.error, and notify() calls sendDesktopNotification, creating a loop.
// eslint-disable-next-line no-console
console.warn('[notifications-bridge] Desktop notification failed:', _e);
});
}