
# Jobs

Every generation in Studio runs as a durable **job**: validated before spend, quoted before admission, tracked to an explicit outcome, and cancellable while running.

## Lifecycle

1. **Validate** — the prompt, endpoint, and parameters are checked. Unknown tasks and bad parameters fail here with `VALIDATION_ERROR`, before anything is reserved.
2. **Quote** — the job is priced from current price rows. No quote, no admission.
3. **Admit** — budget is reserved and the job enters the runtime. Admission failures surface the real downstream error.
4. **Run** — the runtime executes against the endpoint adapter. Statuses are explicit labels, never vibes.
5. **Settle** — completion, failure, or cancellation reconciles the reservation against actual delivery.

## Cancellation

Cancel a running job from the workbench or via the job's cancel endpoint. Cancellation is final for that attempt: re-running the same logical job creates a new attempt under the same identity, with a fresh quote.

## Failure honesty

- A fetch or execution failure is an error, never an empty result. Studio does not paper over provider outages with silent placeholders.
- Uncertain provider states reconcile: the job lands in an explicit uncertain outcome with recovery steps, not a fake success.
- Fixture lanes exist for development and tests; they are labeled as fixtures and never presented as live execution.

## Next steps

- [Studio overview](/docs/studio/overview)
- [Studio Media API](/docs/studio/media-api)
- [Troubleshooting](/docs/resources/troubleshooting)
