Skip to main content

Statuses, actions, and errors

Use the highest-level stable field that answers the question. Application posture is a read-time customer summary; it is not persisted as an executor transition and must not be used as proof that one detailed event occurred.

Application posture​

categoryToneactionableMeaning
readyokfalsePositive current runtime-ready evidence satisfies desired state.
in_progresswarnfalseNormal progress, observation, recovery, or an evidence state without a customer action.
needs_actiondangertrueThe Application has a current organization Action Plan Hold that still needs a customer decision.
inactiveidlefalseDraft, paused, disabled, retiring/retired, or otherwise inactive.

needs_action and actionable: true are served only for a current funds or app_fault Hold whose release has not been requested. A Hold with pendingRelease: true, an intent stop, and platform recovery do not make an Application actionable. Retiring, retired, and deleted Applications are always inactive.

The object also includes:

FieldMeaning
reasonStable token; use it in automation.
labelHuman wording for reason.
stateCoarse health: active, waiting, degraded, paused, or complete.
evidenceWhich facts decided the posture: lifecycle, deployment, or execution.

state and category answer different questions. state: degraded means required capacity is short or placement is blocked; it does not say who acts. An in_progress Application can be degraded with actionable: false, and a needs_action Application can be active.

Common reasons:

ReasonInterpretation
runtime_readyRequired runtime capability evidence is ready.
active_without_deploymentActive intent exists; no deployment is yet visible.
deployment_launchingSubmission or assignment work is advancing.
deployment_claimedProcessor claim exists; runtime contact is still awaited.
runtime_configuringBootstrap/configuration is advancing.
runtime_awaiting_contactNo current signed runtime contact yet.
runtime_restartingSame job is within restart grace.
runtime_contact_degradedContact is delayed but not declared lost.
runtime_contact_lostExpected contact was not observed.
runtime_start_timed_outFirst contact exceeded its boundary.
runtime_fatal_reportedThe runtime signed a terminal application diagnostic.
runtime_evidence_disagreesIndependent evidence sources disagree; do not guess.
deployment_awaiting_replacementEarlier deployment ended; successor evidence is awaited.
deployment_platform_uncertaintyLabel Liskov checking deployment. A deployment stopped without a customer Hold; Liskov owns it. in_progress, not actionable.
execution_launching, execution_submittedThe current execution's launch is being prepared or awaits a processor.
execution_reconcile_requiredLabel Liskov checking launch. Liskov has not yet confirmed a provider launch and reconciles it on its own. in_progress, not actionable, and possibly degraded. Do not resubmit.
execution_runningThe current execution is running.
execution_settlingThe current execution is closing out or settling.
execution_completeThe run finished and settled; inactive.
customer_funds_holdLabel Add funds. A current funds Hold needs a decision.
customer_app_fault_holdLabel Review application failure. A current app_fault Hold needs a decision.
application_draft, application_pausedInactive authored/lifecycle state.
application_retiring, application_retiredRetirement lifecycle; never actionable.

Unknown active detail maps to in_progress/unknown_active_state, not ready.

Action Plan vocabulary​

The Console organization Action Plan stopped-job buckets list Holds: work Liskov has stopped on. Causes are intent (you stopped it), funds (authorised cap), and app_fault (signed runtime/application or delivery evidence). app_fault does not assert that the workload, artifact, or policy changed: inspect failureStage and failureCode. platform never appears as a customer decision. Work Liskov is still retrying is withheld from those buckets. An eligible new bootstrap hold can disappear after stronger signed Ready evidence arrives.

Each V5 hold carries holdId, stateRevision, stable slot/generation, failure stage/code, pendingRelease, and server-owned actions. release_hold posts the exact hold ID to the hold-release route. pause_application and resume_application post to the lifecycle status route and never imply a hold release. holdCount counts held slots; applicationCount counts distinct Applications.

pendingRelease: true means the release was received and Liskov applies it on its next pass. The Console counts it under Release requested, not Decisions owed, and it does not make the Application needs_action.

Each Hold names one cause. Its server-owned controls distinguish releasing one held slot from pausing or resuming the whole Application. The Console groups Holds under their Application and adds one line of static guidance per cause; the full per-code next action stays on the execution detail.

The read also serves these optional fields:

FieldMeaning
stoppedAtMsOn each Hold: when the job stopped, in Unix milliseconds. Absent on V4 rows, which have no time. The Console shows it as Held since or Stopped since.
releaseRequestedAtMsOn each Hold: when its release was requested. Present exactly when pendingRelease is true.
truncatedOn the response: true when the read stopped at 100 stopped jobs and more may exist. The Console then shows 100+ decisions owed.

Processor pin advice​

When supplied, placementAdvice on the organization Action Plan read supplies the separate Processor pin section. It is optional advice about an authored exact pin under the active policy. It does not create a Hold, alter holdCount or applicationCount, add to Decisions owed or the rail badge, or make posture actionable. Automatic retries continue.

ReasonRecorded check
schedule_conflictThe exact pin failed the scheduling check for the recorded window.
heartbeat_expiredThe processor has not reported a heartbeat within the age the policy allows.
heartbeat_unavailableThe processor has no heartbeat recorded by Liskov.
heartbeat_in_futureThe processor reported its last heartbeat ahead of the chain clock.

These reasons do not prove the processor is offline, permanently unusable, or the application is at fault. reasons can name several checks on one row; reason is the first. reasonsCut: true means more reasons were recorded than are listed. A refused schedule window is supplied only for a scheduling conflict; otherwise it is null.

The section has its own count, truncated, available, and items, with at most 50 items after permission filtering. Its count and truncation are separate from the Hold totals and cursor. available: false means advice could not be read; it is not an empty successful result and leaves readable Holds intact. An older response without the section supplies no advice, not a count of zero. Neither an empty section nor a truncated list proves every pin is unavailable.

observedAtMs and expiresAtMs are Unix milliseconds. Advice expires one hour after observation, or clears sooner after a later proved admission for the same pin and policy. Expiry alone is not proof of a successful launch. stableJobId, stableSlotId, and executionHref may be null: the Console shows Job not identified without inventing a job or Execution link.

Review processor pin follows policyHref to the existing Policy placement setting. Opening it changes nothing and does not change the pin automatically. Leaving the pin unchanged and waiting is supported. Applying a changed policy uses the existing publish workflow and its admission and spend checks; advice is not a release, retry, or policy mutation. See Optional processor-pin advice.

Resume refusals​

A resume through the lifecycle status route can be refused with these error codes. None of them changes anything:

CodeMeaning / response
organization_over_plan_capsThe code carries feature, used, and limit. max_applications means too many Applications: retire enough Applications to bring used within limit; pausing one does not free an Application slot. organization_job_slots means too many job slots: lower deployment.jobs and publish, pause or retire Applications, or move to a plan with a larger pool.
organization_plan_caps_unavailableLiskov could not read the plan's caps and refused rather than guess. Try again.
application_retirement_activeThe Application is being retired and cannot be resumed.
application_resume_blocked_by_replacement_holdA held replacement would start. The response carries replacementHold, overrideRequired: true, and overrideAction.

overrideAction is a server-owned action like the others: kind: "resume_application_override", label: "Resume anyway", method, href, body, expectedPostcondition, and reasonRequired: true. Send its body exactly as served, plus a non-empty reason, to its href. Activity records the resume with its actor, the reason, and overrideReplacementHold.

The CLI proof liskov application action-plan still returns one Application's plan items. Use those tokens for a bounded retry; do not treat wait or recover as a Console Action Plan row.

FieldMeaning
decisionIdStable identity for the current decision cohort; required for a supported retry.
conditionClassTyped cause family, such as missingProcessorClaim, scheduleOverlap, processorAtMatchCap, insufficientReward, noAffordableProcessor, authoringFault, staleEnvironmentHandoff, ambiguousRecovery, runtimeFirstContactTimeout, runtimeCrashLoop, missedCheckin, or unknown.
dispositionMachine response: wait, recover, or park. A platform kill state is not a customer retry recipe.
nextActionSupported customer or support step. Absence normally means wait or escalate.
reasonStable explanatory token; use it before the human message in automation.
evidence time/IDsScope the decision to exact policy, deployment, and job facts.

recover can consume a bounded retry budget. park stops automatic forward progress. wait must not be converted into repeated manual submissions.

processorAtMatchCap rotates away from the saturated processor within the bounded launch-recovery budget. authoringFault does not retry: correct the reported manifest pointer and publish again. The schedule-bound reason tokens are acurast_job_registration_duration_below_minimum, acurast_job_registration_start_too_far_in_future, and acurast_job_registration_max_start_delay_exceeded.

Application cap refusals​

organization_over_plan_caps with feature: max_applications means the organization holds more Application slots than its resolved plan permits. used is the current slot-holding Application count; limit is the resolved Application allowance. Exactly at the cap (used <= limit) passes this check, although other admission checks still apply. Creation has a separate application_quota_exceeded refusal: it needs room for one additional slot.

While used > limit, Liskov refuses all customer-initiated publish/deploy, Run, and resume starts in the organization, before publication, run authorization, or spend. New scheduled once occurrences, due interval occurrences, and a continuous Application's first job are also refused before spend. Run again and fixed-interval execution remain release-gated.

Already-running continuous work keeps renewing. Recovery and replacement of existing execution continue through their usual safety and funding checks. Trial lapse itself stops no running job. Liskov does not automatically choose excess Applications to pause or retire.

Publish/deploy and resume return HTTP 403 with error, feature, used, and limit at the top level, for example:

{
"ok": false,
"error": "organization_over_plan_caps",
"reason": "This organization holds 3 application slots and its plan allows 2, so it cannot start new work. Retire applications to release slots or restore a plan that allows them; paused applications keep their slot. Running work is not affected.",
"feature": "max_applications",
"used": 3,
"limit": 2
}

Run retains its HTTP 200 response envelope with ok: false, authorized: false, and the same fields inside refusal, where the code is refusal.code. A scheduled refusal appears in the execution result as reason: organization_over_plan_caps, alongside feature, used, and limit. Do not decide success from HTTP status alone.

CLI 0.17.0 renders the refusal and exits nonzero; --json preserves the received envelope and exact numeric fields. See the CLI version requirement. If the cap cannot be read, Liskov refuses with organization_plan_caps_unavailable; that is not evidence that usage exceeds the cap. Try again shortly.

Retire enough Applications to bring used within limit, or restore a plan/payment state with an adequate resolved allowance in an enabled billing environment. Pausing does not release an Application slot. Customer paid-plan activation remains release-gated. Follow the verification and safe next steps.

Organization business-eligibility errors​

New non-personal organizations must carry the approved liskov.business-eligibility.v1 statement and an assigned ISO 3166-1 alpha-2 business-country code. These are declaration facts; Liskov does not infer them from an IP address, billing address, or processor location.

CodeMeaning / response
business_eligibility_requiredThe required statement version is missing. Return to the new-organization form and review the separate Business use only statement.
business_eligibility_version_mismatchThe client submitted a statement version other than the server's requiredVersion. Refresh the Console before retrying.
business_country_requiredNo business-establishment country was supplied. Enter its two-letter code.
invalid_business_country_codeThe value is not an assigned uppercase ISO 3166-1 alpha-2 code. Correct the declared business country; do not substitute a billing or processor country.

A refusal creates no organization, membership, Terms acceptance, trial, or Service Credit grant. If you cannot make the statement because your use is personal, family, or household use, do not retry: that use is unsupported.

Execution coverage​

The Console Coverage strip decodes proof.liskov.execution-convergence.v1. Clients do not derive generation, phase, desired capacity, or finance from raw policy or truncated rows. Unknown fields and older servers refuse explicitly.

TokenMeaning
quietNo required work. Not stalled, even when last progress is old.
in_flightRequired work is inside its due window (pending launch).
unknownEvidence is missing or unreadable; do not infer a phase.
ended_unsettledOccupancy is vacant and a charge, reserve, or review hold remains.
overdueRequired work is past due with no successful progress. stalled is true only here.
complete / incomplete / stale / unknownCompleteness of the page. Truncation is partial history.
selectedAuthoritative writer. Follow this next action.
proposedShadow suggestion. Never authorization.
execution_convergence_unauthorizedPermission withheld.

See Intended capacity versus remaining charges.

Manifest and publication diagnostics​

CodeMeaning / response
v4_publication_disabledNew Manifest V4 imports and publications are refused. Author a retained Manifest V5 and publish it with application policy publish. A confirmed application set-repository --yes that changes the repository of an Application whose draft is still a Manifest V4 returns this code and changes nothing.
invalid_policyRequired value, type, enum, bound, or cross-field invariant is invalid. Correct the manifest.
unknown_fieldA strict object contains an unrecognized property. Remove or correct it.
unsupported_policy_featureValid V4 syntax is not enabled. Choose a v1-supported value.
entitlement_exceededOrganization/account limit is below the requested authority. Reduce it or change entitlement.
application_identity_mismatchApplication ID/UID does not match the target. Stop and inspect identity.
application_already_existsImport target collides with an existing Application. Resolve organization/repository/UID rather than overwriting.
invalid_policy_importImport source or document is invalid. New Manifest V4 imports are closed; use the retained Manifest V5 source path.

Publication preflight can report several independent diagnostics. Resolve all, then run a fresh preflight; do not rely on a stale clean result.

Application lifecycle​

An Application is in exactly one of three lifecycle states. This is a different question from posture: posture says whether the Application is healthy, lifecycle says whether it still exists.

LifecycleMeaningHolds an Application slot
CurrentThe Application exists. It may be active, paused, or disabled.Yes
RetiringA retirement is in progress and has not finalized.Yes
RetiredRetirement finalized and an immutable receipt exists.No

The Console shows these three; proof liskov application list prints them beside the stored status. In the API and in persisted data, a retired Application's status is deleted — a compatibility detail retained for deployed clients, not the customer-facing word. retiring is derived from an active retirement intent and is never a stored status; a retiring Application reports its stored status as paused, which is why the lifecycle, not the status, is the field to read.

A retired Application carries a receiptKind:

receiptKindMeaning
safe_retirementRetirement finalized against a proven zero gate.
legacy_immediate_tombstoneA historical deletion recorded before safe retirement existed. It is not proof of a zero gate, and its remaining resources are cleaned up separately.

Retirement​

The canonical assessment uses:

PhaseMeaning
terminalizing_localNew work is stopped and local mutable work is being closed.
waiting_for_schedule_endOne or more execution blockers remain until verified chain end.
waiting_for_financial_tailReserve/charge/release/review evidence remains.
blockedAmbiguous or non-self-remediating evidence prevents completion.

Blockers have category execution, financial, or ambiguity, plus code, evidence authority, resource kind/ID, and remediation class. Completion requires all three blocker counts to be exactly zero and produces the immutable receipt; unknown vocabulary fails closed.

Several blockers can describe one obligation — a held reserve and its unreleased billing parent are emitted from the same reservation. The Console and the CLI group them into correlated obligations and report who must act:

Waiting onRemediation classesYour action
Liskovautomatic_local_terminalization, automatic_financial_closeoutNone. Liskov's own workers converge this.
The Acurast chainwait_for_chain_evidenceNone. The chain owns the terminal fact; waiting is correct.
Operator reviewevidence_backed_adjudication, operator_adjudication, normalize_or_adjudicate, classify_or_adjudicateContact support with the obligation, per Billing, settlement, and retirement.

A remediation class Liskov cannot classify is reported as needing review, never as automatic. "Automatic" means the named owner will act on the evidence stored now.

retirement_already_completed​

Cancelling a retirement that finalized first returns 409 retirement_already_completed with the immutable receipt. This is a successful outcome, not a failure: the Application is retired and there was nothing left to cancel. Read the receipt in the response body; proof liskov application retire cancel exits 0 and prints it.

Automation rules​

Parse tokens from --json, retain the full scoped object, and treat unknown values as non-ready. Human labels can improve without changing the machine contract. Never map an unknown error to retry or success.