alertPolicy when you want a workflow to carry operational alert metadata such as ownership, severity, runbooks, labels, and deterministic reactions.
The API is declarative:
createSmithers(..., { alertPolicy })defines module-level defaults.smithers(..., { alertPolicy })overrides those defaults for one workflow.- Smithers stores the merged policy on the workflow and exposes durable alert rows through the DB adapter and CLI.
deliveruses logical destination names such asoncallorauthor; transport clients live in your runtime integration.
Module Defaults
Workflow Overrides
workflow.opts.alertPolicy. Rule names are policy keys for your integration; the core engine does not attach built-in behavior to those names in this release.
Merge Semantics
defaultsmerge shallowly.defaults.labelsmerge by key.rulesmerge by rule name, and workflow-level fields win when the same rule appears in both places.reactionsmerge by reaction name, and workflow-level definitions replace module-level definitions with the same name.
Reaction Kinds
You can reference a named reaction from
rules or inline a reaction object directly.
Runtime Surface
alertPolicy is currently workflow metadata plus a durable alert storage model. The core engine starts an AlertRuntime wrapper for configured policies, but it does not run built-in alert evaluators, poll approval age, execute delivery clients, or create pause/cancel/approval reactions automatically.
Runtime integrations can:
- Read the merged policy from
workflow.opts.alertPolicy. - Persist alert instances with
SmithersDb.insertAlert(). - Query active alerts with
SmithersDb.listAlerts(). - Acknowledge, resolve, or silence alert rows with the DB adapter or CLI.
Durable Alert Instances
Alert rows live in_smithers_alerts. The row shape includes:
CLI
list returns active firing, acknowledged, and silenced alerts. Use --format json when another process needs to consume the rows.
Reactions and Delivery
Reaction objects are stored as data:emit-onlypausecancelopen-approvaldeliver
deliver can route to Slack, PagerDuty, email, or an internal incident feed, but Smithers does not bundle those transports.
Recommended Usage
- Use alert policy for operational conditions such as failed runs, approval timeouts, or budget breaches.
- Keep destinations logical and stable, for example
oncall,author, orincident-feed. - Put transport details in your notifier boundary, not in workflow code.
- Avoid using alert policy for every ordinary business notification.