focus-flow/Codex Documentation/Completed Plans/V1_ADR_008_Notification_Abstraction.md

1.4 KiB

V1 ADR 008: Notification Abstraction

Status: Accepted; updated to match current app state

Date: 2026-06-26

Last reviewed: 2026-07-07

Decision

NotificationAdapter in scheduler_notifications is the platform-neutral boundary for reminder delivery. It exposes:

  • schedule(NotificationRequest request)
  • cancel(String id)
  • Stream<NotificationFeedback> feedback

The pure scheduler core computes reminder policy and directive values only. It does not import desktop, OS, process, or notification APIs.

The test fake, FakeNotificationAdapter, stores scheduled requests, normalizes/captures cancellations, and can emit feedback events for workflow tests.

The desktop implementation lives in scheduler_notifications_desktop. It delegates to platform backends:

  • Linux: notify-send
  • macOS: osascript
  • Windows and unsupported platforms: stdout fallback

The current desktop adapter satisfies the feedback-stream contract with an empty stream. OS-level click/action feedback is not implemented in V1.

Consequences

  • Reminder delivery remains replaceable at the composition boundary.
  • Core tests can use the fake adapter without depending on platform APIs.
  • Future OS feedback support must extend the desktop package without changing the scheduler core boundary.