1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//! Notification / incident-routing layer (#280).
//!
//! A declarative top-level `notifications:` block fans pipeline lifecycle and
//! health events out to Slack / PagerDuty / a generic signed webhook. It works
//! from every runtime (`run` / `schedule` / `serve` / `replicate`) because the
//! emit sites live in the shared executor + SLA pass; the scheduler adds a
//! `scheduler_stuck` signal.
//!
//! **Notifications never fail or block a run.** A channel outage is retried a
//! little, then logged + counted (`faucet_notifications_dropped_total`) and
//! swallowed — the same log-and-continue contract as lineage and SLA.
//!
//! Module layout (mirrors `sla/` / `schedule/`):
//! - [`spec`] — serde config types + validation (`faucet schema notifications`).
//! - [`event`] — the channel-agnostic [`NotifyEvent`] + its constructors.
//! - [`render`] — pure per-channel payload rendering.
//! - [`channels`] — the one-request-each HTTP shims.
//! - [`dispatch`] — the [`Notifier`]: match → coalesce → deliver → resolve.
//! - [`metrics`] — the `faucet_notifications_*` surface.
//!
//! Channel secrets (Slack webhook URL, PD routing key, webhook HMAC secret)
//! should be supplied via `${env:...}` / `${file:...}` / `${secret:...}`, which
//! are resolved over the raw document at load time and registered for log
//! redaction.
pub use Notifier;
pub use ;
pub use ;