{ "planPath": "docs/plans/2026-05-19-notification-outbox-implementation.md", "tasks": [ {"id": 18, "subject": "Task 1: Notification enums", "status": "pending"}, {"id": 19, "subject": "Task 2: Notification entity POCO", "status": "pending", "blockedBy": [18]}, {"id": 20, "subject": "Task 3: Type field on NotificationList", "status": "pending", "blockedBy": [19]}, {"id": 21, "subject": "Task 4: Notification EF configuration + DbSet", "status": "pending", "blockedBy": [20]}, {"id": 22, "subject": "Task 5: NotificationOutbox repository", "status": "pending", "blockedBy": [21]}, {"id": 23, "subject": "Task 6: EF migration AddNotificationsTable", "status": "pending", "blockedBy": [22]}, {"id": 24, "subject": "Task 7: Site/central notification message contracts", "status": "pending", "blockedBy": [23]}, {"id": 25, "subject": "Task 8: Outbox query/action contracts", "status": "pending", "blockedBy": [24]}, {"id": 26, "subject": "Task 9: Scaffold ScadaLink.NotificationOutbox project", "status": "pending", "blockedBy": [25]}, {"id": 27, "subject": "Task 10: NotificationOutboxOptions", "status": "pending", "blockedBy": [26]}, {"id": 28, "subject": "Task 11: Delivery adapter abstraction", "status": "pending", "blockedBy": [27]}, {"id": 29, "subject": "Task 12: Email delivery adapter", "status": "pending", "blockedBy": [28]}, {"id": 30, "subject": "Task 13: NotificationOutboxActor ingest", "status": "pending", "blockedBy": [29]}, {"id": 31, "subject": "Task 14: Dispatcher loop", "status": "pending", "blockedBy": [30]}, {"id": 32, "subject": "Task 15: Query, retry, discard, KPI handlers", "status": "pending", "blockedBy": [31]}, {"id": 33, "subject": "Task 16: Daily purge job", "status": "pending", "blockedBy": [32]}, {"id": 34, "subject": "Task 17: AddNotificationOutbox DI extension", "status": "pending", "blockedBy": [33]}, {"id": 35, "subject": "Task 18: Retarget site S&F notification handler to central", "status": "pending", "blockedBy": [34]}, {"id": 36, "subject": "Task 19: Async Notify.Send + Notify.Status", "status": "pending", "blockedBy": [35]}, {"id": 37, "subject": "Task 20: Central ingest routing", "status": "pending", "blockedBy": [36]}, {"id": 38, "subject": "Task 21: Host registration + appsettings", "status": "pending", "blockedBy": [37]}, {"id": 39, "subject": "Task 22: CommunicationService outbox methods", "status": "pending", "blockedBy": [38]}, {"id": 40, "subject": "Task 23: Notification Outbox Blazor page", "status": "pending", "blockedBy": [39]}, {"id": 41, "subject": "Task 24: Health dashboard outbox KPI tiles", "status": "pending", "blockedBy": [40]}, {"id": 42, "subject": "Task 25: End-to-end integration test", "status": "pending", "blockedBy": [41]}, {"id": 43, "subject": "Task 26: Full build + suite verification", "status": "pending", "blockedBy": [42]} ], "lastUpdated": "2026-05-19" }