builtInActions
Helix’s core raises a small set of actions of its own — the built-in members of its
processes. This page is the maintained list: what raises
each one, its default route, and how a domain reconfigures or disables it. Every built-in action
belongs to a built-in process. (Domain-authored actions —
the helix.actions blocks on stop types — are the client’s own; the demo packs’ etaCallback,
confirmDestination and outsource are worked examples of those, not built-ins.)
callout — the chase action
Section titled “callout — the chase action”Process: the standby callout.
Raised: while the head standby roster stop is in CALL (Spiral calling the resource out); cancelled
the moment the state leaves (an acceptance or stand-down).
This is the indoor chase seat: ring the engineer, record their answer on their behalf. The engineer themself needs no action at all — their accept/refuse is a standard function driven by the CALL state directly (the app presents it like a job offer; the response travels as a resource update, the same door an external host uses). The chase concludes when anyone answers — the engineer in-app, the operator on their behalf, an external reply through a notification channel, or the answer-window step timing it out as a refusal.
Default route: the stop’s owning desk, class-less — serviceable by anyone there, no skill gate.
Configuration — resourceParams.<type>.rosterStop.STBY.helix.callout.action:
-
textspec - The enable gate and the message (default helixCalloutText()). null DISABLES the Helix chase entirely — an external callout system is undisturbed; the CALL state still surfaces in lists and metrics.
-
actioneestringdefaultowner - The audience. owner = the owning desk (the default chase seat); any adds the engineer inbox copy (the pre-0.0.9 behaviour, not needed now the engineer is state-driven).
-
classstring - ROUTES the chase to skill-matched operators: author a class (added to the operator picker via helix.actionClasses ∪ built-ins) and only operators enabled for it see the chase. Absent = class-less = everyone on the desk.
-
rankintegerdefault90 - Queue urgency (rank doubles as urgency).
-
outcomestringdefault["accept","refuse"] - refuse is reserved and offered only on a VOLUNTARY call.
Related knobs on the same process: callout.answer on the contract (the answer window — its expiry is
the step that concludes this action as a timeout refusal), callout.notify (the channels rung), and
callout.duty/response (what acceptance does). See
resource-params.
notifyFailed — the dead-channel alarm
Section titled “notifyFailed — the dead-channel alarm”Process: any process sending notifications. Raised: when a notification exhausts its delivery retries — the step gives up and becomes an action, so a dead channel is never silent. The text names the channel, target and undelivered message; the operator contacts manually and acknowledges.
Route: actionee: any, class-less, urgency 70. Configuration: none — this is the manual-workaround
guarantee and deliberately cannot be routed away or disabled; if the retries and channels are right for
your operation, tune those (the notification queue’s policy), not the alarm.
messageIn / messageOut — two-way messaging
Section titled “messageIn / messageOut — two-way messaging”Process: ad-hoc — the manual link between field and desk.
Raised: by a person: messageIn by the engineer (field → dispatch), messageOut by an operator from
a stop editor (dispatch → resource). Class-less manual actions; acknowledged rather than outcome-chosen.
Configuration — the messageIn / messageOut blocks on stop types (and the NOW/STBY roster
defaults): text is the enable gate (true / expression / absent hides the facility), actionee and
urgency route and colour it. See stop-params.
Related
Section titled “Related”- Actions — the model: processes, steps and actions; the five themes; authoring
- actionObject — the record and definition reference