--- id: "0003" date: 2026-02-15 status: Accepted supersedes: superseded-by: affected-paths: [taskq/notifications.py, taskq/execution.py] affected-components: [notifications, execution] --- # 0003 — Route all job notifications through central NotificationService ## Context Job handlers called notification code directly, causing tight coupling and inconsistent delivery. ## Decision All outbound notifications (webhooks, emails, events) routed through taskq.notifications.NotificationService. Handlers submit notification requests, not execute them directly. ## Consequences Decoupled handlers from notification details. Single place to change delivery policy or add retry logic to notifications. Slightly higher latency (service batches notifications). ## Alternatives rejected Pub/sub system rejected: overkill for current scale. Direct calls rejected: tight coupling.