Skip to content

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.)

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.

ConfigurationresourceParams.<type>.rosterStop.STBY.helix.callout.action:

{
"text": <spec> | null,
"actionee": <string> | null,
"class": <string> | null,
"rank": <integer> | null,
"outcome": [string] | null,
}
text spec
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.
actionee string default owner
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).
class string
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.
rank integer default 90
Queue urgency (rank doubles as urgency).
outcome string default ["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.

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.

  • Actions — the model: processes, steps and actions; the five themes; authoring
  • actionObject — the record and definition reference