Task 15 of the slice plan. Strategy §4.1 immediate-reward toast. celebrate(noteId) deterministically picks one of the 4 reward copies via SHA-256(noteId)[0] % 4, then forwards to the injected send() callback (which Task 30 wires to a real electron Notification). Skips silently when isSupported() is false (denied OS permission), and swallows send() errors so that capture path never fails because of a notification quirk. Verification: `npx vitest run tests/unit/NotificationService.test.ts` 3 passed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.3 KiB
1.3 KiB