Error messages
Messages are shown as the platform prints them, with the parts that vary in <angle brackets>. Errors in a running batch, and refusals in the app, are on When something’s stuck.
motions check
Section titled “motions check”check prints every problem in a file at once, with its path in the YAML:
orbita: orbita/domain-check/motion.yaml: steps[0] (domain): Unrecognized key: "sourcez" queues.domain_owner.deadline: "friday_noon" is neither a calendar key nor a duration; the motion has no calendar1 tenant failed the check| Message | Fix |
|---|---|
Unrecognized key: "<key>" |
A typo, or a key in the wrong place. The motion.yaml reference lists every key. |
<key>: is only allowed on company steps |
when, retries and friends don’t apply to that step’s kind. |
a motion needs at least one approver |
Add a handle to approvers. |
duplicate step id "<id>" |
Step ids are unique in a motion. |
no step "<id>" |
after names a step that doesn’t exist. |
"<id>" must be an earlier step |
after names a step that comes later. Steps run after steps above them. |
"<fact>" must start with core, fields, or an upstream step id |
A when.fact reads a step that doesn’t run before this one. |
"<value>" is neither a calendar key nor a duration |
A deadline or until.at is a typo, or the calendar doesn’t have that key. Durations are like 4h or 2d. |
"in" must be a duration such as "4h" or "2d" |
A calendar entry’s in isn’t a duration. |
"at" must be a time such as "18:00" when a weekday is given |
A calendar entry with a weekday needs a time of day. |
"<zone>" is not an IANA time zone |
Use a name like America/Sao_Paulo. |
<file> does not exist |
A step’s run points at a file that isn’t there. Paths are from the motion’s folder. |
Could not resolve "<package>" |
A step imports a package that isn’t installed. Run npm install, and add the package to package.json. |
the source's id "<id>" must match its folder, sources/<folder> |
Rename one or the other. |
index.ts must export default defineSource({ … }) |
A custom source’s index.ts doesn’t export a source. |
op <name>: input must be a Standard Schema (zod 4, valibot, arktype…) |
Give the operation a schema. |
host "<host>" must be a bare hostname, without scheme, port or path |
hosts are like api.example.com. |
fixtures/sources/<file>: must be a JSON array of fixture entries |
A fixtures file is a list, [ … ]. |
<file>[<n>]: needs exactly one of data, error or sequence |
Each fixture answers one way. |
tenant.yaml: sources.fixtures must be true or false |
check doesn’t know the source catalog, so a misspelt operation in sources passes it and is refused by push.
motions push
Section titled “motions push”push prints the request that failed and the platform’s message:
/api/tenants/orbita/motions/domain-check/versions → 400 bad_request: invalid manifest| Message | Fix |
|---|---|
invalid manifest |
The platform found a problem check can’t see, and the command line doesn’t print which. Almost always it’s an operation in a step’s sources that isn’t in the catalog or the tenant’s custom sources: check the spelling. |
step <id> proposes <action>, which the tenant's <system> CRM can't do |
The connected CRM can’t make that change. |
hubspot connections are read_only for now: writing to hubspot is not supported yet |
Set mode: read_only in crm.yaml. |
seeding is only for the memory CRM; tenant <tenant> uses <system> |
Delete crm-seed.json from a tenant on HubSpot. |
bad seed: <problems> |
crm-seed.json names a field or a record that doesn’t exist. |
bad fixtures: <problems> |
As in check. |
<you> is not an approver of <tenant>/<motion> |
--live needs your token’s handle in the motion’s approvers. Push without --live and make it live in the app, or add the handle. |
tenant <tenant> is not registered |
The tenant doesn’t exist on this app, or MOTIONS_URL points at another one. |
unauthorized |
MOTIONS_TOKEN is missing, revoked, or for another tenant. |
Making a version live, and upgrading
Section titled “Making a version live, and upgrading”| Message | Fix |
|---|---|
can't go live: <problems> |
The version no longer passes the checks above, usually because a source it uses was removed. |
step <id> has already started and can't be removed |
An upgrade can’t take away a step a company has reached. Open a new batch instead. |
step <id> has already started and can't change from <kind> to <kind> |
Same, for changing its kind. |
step <id> has already started and can't change what it runs after |
Same, for changing its after. |
step <id> has already started and can't move before <step> |
Same, for moving it earlier. |
The team
Section titled “The team”| Message | |
|---|---|
only owners invite owners |
And only owners make owners, change an owner’s role, remove an owner or create owner tokens. |
<tenant> needs at least one owner; make someone else owner first |
|
the handle <handle> is taken in <tenant> |
Another member has that handle. A token can use your own handle, or one no member has. |
<email> is already a member of <tenant> |
Motions is built by Pruma. These docs describe what the platform does today; Limitations lists what it doesn't do yet. Open the app