focus-flow/Codex Documentation/Current Software Plan/V1_BLOCK_22_OS-Notification_Package.md

2.4 KiB

V1 Block 22 — OS-Notification Package

Purpose: Desktop notification implementation.

Note for Codex: Follow tasks exactly; avoid exploratory calls when tasks specify names/files/tests.

Chunk 22.1 — Desktop notification adapter

Recommended level: HIGH

Status: Complete on 2026-06-26.

Tasks

  1. Create package packages/scheduler_notifications_desktop.
  2. Implement adapters per platform with conditional import using dart:io Platform.
  3. For Linux use notify-send via Process.run; for macOS use osascript; for Windows use win32 Toast via windows_notification package.
  4. Implement fallback to write to stdout if unsupported.
  5. Add adapter factory DesktopNotificationAdapter.defaultInstance().
  6. Write integration test using FakeNotificationAdapter mocks to assert scheduling logic; skip on CI if platform not supported.

Acceptance criteria

  1. Desktop adapter compiles on all OS; tests skip rather than fail on unsupported.
  2. Adapter passes NotificationAdapter contract tests.

Completed implementation

  1. Added package packages/scheduler_notifications_desktop with public entry points desktop_notifications.dart and scheduler_notifications_desktop.dart.
  2. Added DesktopNotificationAdapter.defaultInstance() and injectable backend support.
  3. Added conditional export for IO vs non-IO environments.
  4. Added Linux notify-send backend via Process.run.
  5. Added macOS osascript backend via Process.run.
  6. Added stdout/log fallback backend for unsupported platforms and Windows.
  7. Added desktop adapter tests covering delegation, Linux/macOS command selection, fallback behavior, fake-adapter scheduling workflow, and default adapter construction.
  8. Wired desktop adapter tests into the root test wrapper.

Notes

  1. Windows currently uses the stdout fallback. Adding windows_notification would pull Flutter SDK dependencies into this pure Dart package; a true Windows toast adapter should be revisited if the desktop packaging layer already depends on Flutter.

Verification

  1. dart pub get: passed.
  2. dart format test/scheduler_core_test.dart packages/scheduler_notifications_desktop: passed.
  3. cd packages/scheduler_notifications_desktop && dart analyze: passed, no issues found.
  4. cd packages/scheduler_notifications_desktop && dart test: passed, 6 tests.
  5. dart analyze: passed, no issues found.
  6. dart test: passed, 324 tests.
  7. scripts/test.sh: not present or not executable.