StellaOps Notify

Verified against commit 942a18727c on 2026-09-26 (UTC). Re-verify: grep -nE "^ notify-(web|worker):" devops/release/bundle/docker-compose.yml devops/compose/docker-compose.stella-services.yml devops/compose/docker-compose.notify.yml and ls src/Notify/__Libraries/StellaOps.Notify.Persistence.Consolidated/Migrations.

Service rows (host project, image, database and role, compose file, bundle presence, Doctor registration) are generated in docs/architecture/service-inventory.md; where this page and the inventory differ, the inventory is authoritative.

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

Notify turns platform events into tenant-scoped alerts with deterministic delivery, offline parity and an audit trail. Scan results, policy budget breaches, attestations, deployment and backup events, and compliance thresholds are routed to responders through chat, email, webhooks, paging tools, an in-app inbox and regulatory connectors, with throttling, digests and storm suppression.

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

Deployables

RoleSourceImageComposeRelease bundle
notify-websrc/Notify/StellaOps.Notify.WebService/stellaops/notify-webdevops/compose/docker-compose.stella-services.yml (default stack)yes
notify-workersrc/Notify/StellaOps.Notify.Worker/stellaops/notify-workerdevops/compose/docker-compose.notify.yml plus docker-compose.notify-activation.yml; not in the default include setno

notify-worker is the only delivery consumer. Its delivery pipeline is default-off (Notify:DeliveryPipeline:Enabled, wired in src/Notify/StellaOps.Notify.Worker/NotifyDeliveryPipelineRegistration.cs); the activation overlay turns it on. The release bundle ships notify-web only, so a bundle install accepts, stores and serves notification configuration and the in-app inbox, and does not run the delivery worker.

Database

Doctor checks

notify-web serves the doctor-check/v1 endpoint behind the estate ops.health capability (MapServiceDoctorEndpoints in Program.cs). Notify-owned check ids: doctor.notify.rls-posture, doctor.notify.deliveries.partition-coverage, doctor.notify.retention.delivery-backlog, doctor.notify.retention.inbox-backlog, doctor.notify.retention.fallback-budget and doctor.notify.retention.mechanics-budget, alongside the SDK standard checks and the shared Valkey checks.

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 and tenant isolation of the caller’s tenant)/api/v2/securitynotify.adminnotify.admin
Observability (metrics, dead letters and retention of the caller’s tenant; chaos)/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

Retired predecessors

WasReplaced byRecord
notifier-web (src/Notifier/)merged into notify-web (NTF-5)frozen at src/__Obsoleted/Notifier/; archived dossier docs-archive/modules/notifier/
notifier-workernotify-worker (retired 2026-09-04, NTF-10)same

Subordinate documents

DocumentStatus
architecture.mdcurrent summary (section “Current state”) plus dated contract history
retention-classification.mdand its verification JSONcurrent (retention programme record, RFC-9)
api-reference.md, openapi/generated from the committed spec (OAPI-059 sentinel)
overview.md, api.md, rules.md, templates.md, digests.md, channels.md, channels/, escalations.mdtopic pages; design record, not re-verified 2026-09-26
pack-approvals-contract.md, pack-approvals-integration.md, slo-webhook-schema.md, bootstrap-pack.mdcontracts; design record, not re-verified 2026-09-26
consolidation-design.md, gaps-nr1-nr10.mdhistorical design records
security/, schemas/, resources/, fixtures/, simulations/contract assets; not re-verified 2026-09-26
operations/operator pages (observability, quotas, retries, dev SMTP, e2e coverage harness); not re-verified 2026-09-26
architecture-detail.md, implementation_plan.mdarchived at docs-archive/modules/notify/