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 spans two source trees:

StellaOps.Notify.WebService references StellaOps.Notifier.Worker for its runtime services, so downstream systems can embed the rules engine without inheriting the Studio UI.

Scope & responsibilities

Current capabilities

The runtime host is StellaOps.Notify.WebService (src/Notify/StellaOps.Notify.WebService). It hosts the HTTP API and references the shared worker library StellaOps.Notifier.Worker (src/Notifier/StellaOps.Notifier/StellaOps.Notifier.Worker) for correlation, dispatch, escalation, digesting, and retention services. (Note: there is no StellaOps.Notify.Worker project — the worker logic lives under the StellaOps.Notifier.* tree and is consumed by the Notify host via project reference.)

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. Status for remaining work is tracked in src/Notifier/StellaOps.Notifier/TASKS.md and sprint plans.

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/src/Notifier as of the latest reconciliation: