← All frames
Flow 2 · Build session · Frame (d) · routes /applications/build[/:sessionId]

Outcomes, failures and refusals

The three terminal states (deployed, failed, cancelled) and every refusal POST /build-sessions can return. Each says what happened, whether anything was created, and the one thing the user can do next. Refusals at submit keep the form's values.

(d1) Deployed — terminal; the app tile appears on Applications
  1. Launching
  2. Building
  3. Deploying
  4. Deployed
(d2) Failed — terminal; agent reported failure (errorCode / errorMessage)
  1. Launching
  2. Building
  3. Deploying — failed
  4. Deployed
(d3) Cancelled — terminal
  1. Launching
  2. Building — cancelled
  3. Deploying
  4. Deployed
(d4) 502 — FuzeAgent launch failed; session recorded as failed (launch_failed)
(d5) 503 builder_unavailable — builder not configured here; nothing persisted
(d6) 503 feature_disabled — flag turned OFF under an open page / stale link

This feature isn't available

Building apps with FuzeAgent isn't turned on for your account.

Back to Applications
(d7) 403 — not an active member of the org / no apps:register there (in place, never a sign-in redirect)
(d8) 409 no_personal_org — personal chosen, but the account has no personal workspace
(d9) 429 — rate limited
(d10) 404 — unknown session, or one you aren't entitled to see (never 403)

Build session not found

It doesn't exist, or it isn't one you can see.

Back to Applications
(d11) Polling error — last known state kept, retrying (not a failed build)

Deployed. The tile comes from the normal GET /apps list — no special-casing; the flow invalidates that query when the session turns deployed and links appSlug. Open app uses the app's normal route. Failed vs refused: failed is a session that exists (from the agent callback, or 502 launch_failed); a 503/403/409/429 at submit created nothing. Copy never blames the user for a platform fault.
Authz. 403 is shown in place; only 401 re-authenticates. A session the caller can't see is 404 by contract — the UI never distinguishes "forbidden" from "missing".
Test hooks: [data-frame='04-build-outcomes'] · [data-session-status='deployed'] · [data-app='expense-tracker'] · [data-action='open-app'] · [data-session-status='failed'] · [data-session-status='cancelled'] · [data-action='start-new-build'] · [data-error-code='launch_failed'] · [data-error-code='builder_unavailable'] · [data-error-code='feature_disabled'] · [data-error-code='FORBIDDEN'] · [data-error-code='no_personal_org'] · [data-http='429'] · [data-http='404'] · [data-state='stale'].

← Session progressCreator & ownership →
Review · app-builder approve or reject each flow ↓
build-entrypendingApproveReject
build-sessionpendingApproveReject
creator-ownershippendingApproveReject
marketplace-publishpendingApproveReject