StellaOps Notify

Audience: operators wiring up alerting, on-call leads tuning rules, and engineers integrating the notifications engine into their own services.

Notify — the Notifications Studio — turns platform events into tenant-scoped alerts with deterministic delivery, offline parity, and a full audit trail. It is the alerting surface of the Stella Ops release control plane: every scan result, policy budget breach, attestation, or compliance threshold can be routed to the right responders through chat, email, webhooks, paging tools, and regulatory connectors, without storms or noise.

The codebase is one source tree, src/Notify/:

Both hosts depend on same-family libraries and never on each other. The predecessor src/Notifier/ tree retired at SPRINT_20260722_015 NTF-10 (2026-09-08) and is frozen at src/__Obsoleted/Notifier/.

Scope & responsibilities

Current capabilities

The API host is StellaOps.Notify.WebService (src/Notify/StellaOps.Notify.WebService) and the delivery host is StellaOps.Notify.Worker. Both reference the shared delivery library StellaOps.Notify.Delivery (src/Notify/__Libraries/StellaOps.Notify.Delivery) for correlation, dispatch, escalation, digesting, and retention services.

Implemented since the original Sprint 38/39 plan

The correlation/digest/simulation/quiet-hours work originally tracked as “Sprint 39 focus” (NOTIFY-SVC-39-001…004) has landed:

HTTP API surface

Protected routes require an Authority bearer token (audiences notify and stellaops) carrying a validated stellaops:tenant claim. A gateway-forwarded X-StellaOps-TenantId header may be present as signed envelope context, but Notify does not require or trust a raw tenant header as the data-isolation source. Endpoint groups are wired in Program.cs (MapNotifyApiV2, MapNotifyAdminCompatEndpoints, plus the per-feature Map*Endpoints calls):

GroupBase routeRead scopeMutate scope
Rules (v2 notify)/api/v2/notify/rulesnotify.viewernotify.operator
Templates (preview/validate)/api/v2/notify/templatesnotify.viewernotify.operator
Incidents (ack/resolve)/api/v2/notify/incidents, /api/v2/incidentsnotify.viewernotify.operator
In-app inbox/api/v2/notify/inboxnotify.viewernotify.viewer
Channels + deliveries (compat)/api/v2/notify/channels, /deliveriesnotify.viewernotify.operator
Rules / Templates (v2 standalone)/api/v2/rules, /api/v2/templatesnotify.viewernotify.operator
Simulation/api/v2/simulatenotify.operatornotify.operator
Quiet hours / calendars/api/v2/quiet-hoursnotify.viewernotify.operator
Throttles/api/v2/throttlesnotify.viewernotify.operator
Operator overrides/api/v2/overridesnotify.viewernotify.operator
Escalation policies / on-call / escalations/api/v2/escalation-policies, /api/v2/oncall-schedules, /api/v2/escalationsnotify.viewernotify.escalate
Ack + inbound webhooks/api/v2/ack, /api/v2/ack/webhook/{pagerduty,opsgenie}/{tenantId}notify.operatornotify.operator
Storm breaker/api/v2/storm-breakernotify.viewernotify.operator
Fallback chains/api/v2/fallbacknotify.viewernotify.operator
Localization bundles/api/v2/localizationnotify.viewernotify.operator
Security (tokens/keys/webhooks/tenants)/api/v2/securitynotify.adminnotify.admin
Observability (metrics/dead-letters/chaos/retention)/api/v1/observabilitynotify.viewernotify.operator / notify.admin
Anomaly subscriptions/api/v1/notify/anomaly-subscriptionsnotify.adminnotify.admin
Regulatory / assurance reporting timelines/api/v1/regulatory/reporting-timelines, /api/v1/assurance/reporting-timeline-profilesnotify.viewern/a

A legacy envelope/internal compatibility surface (/api/v1/notify/*, /internal/notify/*) is also mapped in Program.cs for schema normalisation and the gateway envelope-bridge path. Remaining work is tracked in docs/implplan/SPRINT_* rows.

Key docs

Integrations & dependencies

Operational notes

Epic alignment

Implementation Status

Delivery Phases

Acceptance Criteria

Key Risks & Mitigations

Current Phase Progress

The 2025-era phase notes below were stale; corrected against src/Notify as of the latest reconciliation: