# Track D Status

**NotificationService LIVE** (2026-09-24): the real dispatcher (`App\Services\Engagement\NotificationDispatcher`,
bound to the frozen `NotificationService` interface) is on this branch
`track-d/T-D-01-notification-platform`. A/B/C: re-run your suites against the
real thing — inject `App\Services\Engagement\NotificationService` (it now
resolves to the real dispatcher, no fakes needed); event-side wiring is
auto-discovered (`NotificationRequested` → `HandleNotificationRequested`).
Criticals bypass mute/quiet/digest at the dispatcher level.

Pre-flight (2026-09-24): Track A Phase 0 verified on `origin/main` — T-A-01…T-A-06
+ T-A-24 all merged (merge commits c7a70f9, 91c1c62, f62aa76, 4f73694, 0d54b58,
4ad28ae, 5f33d23). track_a.md's "T-A-05 pending" line is stale — it is merged
(4ad28ae). GATE 1 pre-condition satisfied for Track D.

| Task | Status | Branch | Notes / blockers |
|---|---|---|---|
| T-D-01 | 🔨 in progress → tests green, branch pushed | track-d/T-D-01-notification-platform | NotificationService interface + real dispatcher + endpoints; ACs covered (critical-never-muted, quiet-hours, digest, unread counts, idempotency, event bus). |
| T-D-02 | ⏸ next | — | analytics conventions + 15-event idempotent ingestion. |
| T-D-03…T-D-19 | ⏸ not started | — | see developer_D.md. |

## Phase Gates (Track D)
- Gate 1 (end Phase 0): pending — needs T-D-01…T-D-03 merged.
- Gate 2 (end Phase 1): pending.
- Gate 3 (end Phase 2): pending.
- Gate 4 (end Phase 3): pending.

## Blockers
- (none yet)
- Watch: T-A-12 (TenantGate), T-A-21 (seats), T-A-24 (merged — real, not stub),
  T-B CatalogService, T-C ProgressService — DEPS⚡ built against now, verified in T-D-19.
