Compute
State reference
Every public Compute state value — job, stage, artifact, delivery, configuration and commercial — with its terminal rule, the safe next action, and the four refusals you must keep apart.
Job states
Eight values. Four are terminal.
| State | Terminal | Safe next action |
|---|---|---|
ADMITTED | No | Wait. The job is accepted and priced. |
RUNNING | No | Poll status. |
AWAITING_REVIEW | No | A person must decide. Open the job in the portal. |
PARTIAL | Yes | Download the bundle. Read failures/, then resubmit only those items. |
CANCELLING | No | Wait for CANCELLED. Running stages are stopping. |
CANCELLED | Yes | Quote and resubmit if you still need the work. |
FAILED | Yes | Read the next action on the response, correct it, quote again. |
SUCCEEDED | Yes | Download the bundle and check result-manifest.json. |
AWAITING_REVIEW is the value most often mistaken for terminal. Nothing advances until a person acts.
Stage states
Eleven values: BLOCKED, READY, MATERIALIZING, RUNNING, VERIFYING, AGGREGATING, SUCCEEDED, PARTIAL, FAILED, SKIPPED, CANCELLED.
Stage states explain a job state. They never replace it. A job is not finished because one stage reads SUCCEEDED, and a SKIPPED stage is a normal outcome, not a fault.
Artifact and delivery states
An artifact moves in one direction: PLANNED, UPLOAD_AUTHORIZED, UPLOADING, UPLOADED_UNVERIFIED, VERIFIED, then one of ACCEPTED, REJECTED or ORPHAN_QUARANTINED, then DELIVERABLE, EXPIRED, DELETING, DELETED.
UPLOADED_UNVERIFIED means bytes arrived and nothing has checked them yet. Do not treat it as success. On REJECTED, fix the file and upload again. On ORPHAN_QUARANTINED, the upload has no owning request, so start the request again. On EXPIRED, re-authorize an upload rather than retrying the old one.
Delivery follows its own sequence. The normal path is PLANNED, AUTHORITY_READY, WRITING, WRITTEN_UNVERIFIED, VERIFIED, COMMITTED, CUSTOMER_ACKNOWLEDGED.
| Exception | Safe next action |
|---|---|
AUTHORITY_EXPIRED | Re-authorize the destination, then retry the write. |
WRITE_FAILED | Retry the write. The job does not rerun. |
VERIFY_FAILED | Retry the write. The bytes are not trusted yet. |
COMMIT_CONFLICT | Resolve the conflicting object at the destination, then retry. |
CUSTOMER_REGISTRATION_FAILED | Register the destination again and test it. |
QUARANTINED | Contact support with the request identifier. |
CANCELLED | Plan the delivery again if you still need it. |
A failed delivery never means a failed job. The result exists; only its write to your destination did not complete.
Configuration apply states
Per resource: PLANNED, WAITING_APPROVAL, READY, APPLYING, APPLIED_UNVERIFIED, VERIFIED, ALREADY_MATCHED, REFUSED, CONFLICT, RETRYABLE, REVOKED, ROLLED_BACK.
The aggregate result is COMPLETE, PARTIAL_WITH_NEXT_ACTION, REFUSED or EXPIRED.
ALREADY_MATCHED means the resource was correct before you asked, which is a success. PARTIAL_WITH_NEXT_ACTION means some resources applied and the response tells you what is left. Re-applying the same change returns its prior verified result.
ROLLED_BACK never implies an invitation, an external write or a payment was undone.
Commercial states
Five separate state machines run here, and they are not one pipeline: lithi_invoice_state, erp_sync_state, erp_approval_state, mercury_payment_state and reconciliation_state.
The milestones you can observe across them are INVOICE_FINALIZED, ERP_CREATED, ERP_APPROVED, PAYMENT_INITIATED and MERCURY_FUNDS_CONFIRMED.
A hosted payment action reports unavailable, ready, opened, expired or revoked. On expired or revoked, open a fresh action from the invoice rather than reusing the old link.
Only a current Mercury read-back advances the Lithi payment projection to paid. A Paid label in your ERP is an annotation, never settlement.
The no-void status law
No operation returns an empty verdict. Every response resolves to SUCCEEDED, SAFE_FAILED, BLOCKED, REPLAN_REQUIRED, CANCELLED, EXPIRED or SKIPPED.
Every non-success carries a safe reason and a non-empty next action. If your handler has a branch for "no status", that branch is unreachable and should raise instead.
Four refusal classes must never be collapsed into one rate-limit state.
EDGE_ABUSE_LIMITED— perimeter load shedding.CANONICAL_ADMISSION_LIMITED— your key or account's request authority.CANONICAL_BUDGET_EXHAUSTED— spend authority.CELL_CAPACITY_UNAVAILABLE— current capacity.
Only the budget class is lifted by an approval.
Quotes carry no state enum
A quote is not a state machine. It carries non_authorizing = true, an expiry and a signature.
So there is nothing to poll. If the expiry has passed, quote again. If admission answers REPLAN_REQUIRED, the priced request drifted from what you submitted, so quote again and resubmit. See what each work operation returns for where these values appear.