Skip to main content

Machine Commands

Commands for managing state machine definitions.

PUT_MACHINE

Registers a new machine definition or version.

Request

{
"op": "PUT_MACHINE",
"params": {
"machine": "order",
"version": 1,
"definition": {
"states": ["pending", "paid", "shipped", "delivered"],
"initial": "pending",
"transitions": [
{"from": "pending", "event": "PAY", "to": "paid"},
{"from": "paid", "event": "SHIP", "to": "shipped"},
{"from": "shipped", "event": "DELIVER", "to": "delivered"}
],
"meta": {
"description": "Order lifecycle"
}
},
"checksum": "optional-sha256-hex"
}
}
ParameterTypeRequiredDescription
machinestringYesMachine name
versionintegerYesVersion number (>= 1)
definitionobjectYesMachine definition
checksumstringNoOptional SHA-256 hex for verification

Definition Object

FieldTypeRequiredDescription
statesstring[]YesList of valid states
initialstringYesInitial state for new instances
transitionsTransition[]YesAllowed transitions
metaobjectNoArbitrary metadata

Transition Object

FieldTypeRequiredDescription
fromstring | string[]YesSource state(s)
eventstringYesEvent name
tostringYesTarget state
guardstringNoGuard expression

Response

{
"status": "ok",
"result": {
"machine": "order",
"version": 1,
"stored_checksum": "a1b2c3d4...",
"created": true
}
}
FieldDescription
machineMachine name
versionVersion number
stored_checksumSHA-256 hex of stored definition
createdTrue if newly created, false if identical definition already existed (idempotent)

Errors

CodeDescription
MACHINE_VERSION_EXISTSVersion already exists with different definition
MACHINE_VERSION_LIMIT_EXCEEDEDMax versions reached
BAD_REQUESTDefinition validation failed

Validation Rules

The definition is validated:

  1. states must be non-empty
  2. initial must be in states
  3. All transition from states must be in states
  4. All transition to states must be in states
  5. Guard expressions must be syntactically valid

GET_MACHINE

Retrieves a machine definition.

Request

{
"op": "GET_MACHINE",
"params": {
"machine": "order",
"version": 1
}
}
ParameterTypeRequiredDescription
machinestringYesMachine name
versionintegerYesSpecific version

Response

{
"status": "ok",
"result": {
"definition": {
"states": ["pending", "paid", "shipped", "delivered"],
"initial": "pending",
"transitions": [...]
},
"checksum": "a1b2c3d4..."
}
}
FieldDescription
definitionMachine definition object
checksumSHA-256 hex of stored definition

Errors

CodeDescription
MACHINE_NOT_FOUNDMachine or version not found

LIST_MACHINES

Lists all registered machines.

Request

{
"op": "LIST_MACHINES"
}

Response

{
"status": "ok",
"result": {
"items": [
{
"machine": "order",
"versions": [1, 2]
},
{
"machine": "user",
"versions": [1]
}
]
}
}
FieldDescription
itemsList of machine summaries (sorted alphabetically by name)
items[].machineMachine name
items[].versionsAvailable version numbers

Examples

Create with Guards

{
"op": "PUT_MACHINE",
"params": {
"machine": "approval",
"version": 1,
"definition": {
"states": ["pending", "approved", "escalated", "rejected"],
"initial": "pending",
"transitions": [
{
"from": "pending",
"event": "APPROVE",
"to": "approved",
"guard": "ctx.amount <= 1000"
},
{
"from": "pending",
"event": "APPROVE",
"to": "escalated",
"guard": "ctx.amount > 1000"
},
{
"from": "pending",
"event": "REJECT",
"to": "rejected"
},
{
"from": "escalated",
"event": "APPROVE",
"to": "approved"
},
{
"from": "escalated",
"event": "REJECT",
"to": "rejected"
}
]
}
}
}

Multi-Source Transitions

{
"op": "PUT_MACHINE",
"params": {
"machine": "task",
"version": 1,
"definition": {
"states": ["todo", "in_progress", "done", "cancelled"],
"initial": "todo",
"transitions": [
{"from": "todo", "event": "START", "to": "in_progress"},
{"from": "in_progress", "event": "COMPLETE", "to": "done"},
{"from": ["todo", "in_progress"], "event": "CANCEL", "to": "cancelled"}
]
}
}
}