UseDocumentation Index
Fetch the complete documentation index at: https://smithers.sh/llms.txt
Use this file to discover all available pages before exploring further.
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
| Kind | Use for |
|---|---|
emit-only | Record the alert without pausing, cancelling, or external delivery. |
pause | Pause the run for operator intervention. |
cancel | Stop the run when continuing would be unsafe. |
open-approval | Escalate into a human approval step. |
deliver | Send the alert to a logical destination handled by your runtime integration. |
rules or inline a reaction object directly.
Runtime Surface
In 0.16,alertPolicy is workflow metadata plus a durable alert storage model. The core engine 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:
| Field | Purpose |
|---|---|
alertId | Stable alert identifier. |
runId, nodeId, iteration | Optional workflow location. |
policyName | Rule or policy key that produced the alert. |
severity | info, warning, or critical. |
status | firing, acknowledged, silenced, or resolved. |
fingerprint | Optional dedupe key supplied by your integration. |
owner, runbook, labelsJson, reactionJson | Materialized policy metadata. |
sourceEventType | Optional source event name. |
firstFiredAtMs, lastFiredAtMs, occurrenceCount | Recurrence tracking. |
silencedUntilMs, acknowledgedBy, resolvedBy | Operator state. |
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.