← All frames · Frame 08 · flow playground · route /playground

Playground — the fail-closed states

This is the part of the feature where a wrong state is a security incident, not a cosmetic bug. Every failure below has one non-negotiable property: it never falls back to production. A sandbox that is unavailable produces an error, never a live call.

(a) Sending · request in flight
Send is disabled for the duration — no double-submit, and no second quota unit consumed by an impatient click.
(b) Request invalid · schema-checked before it leaves the browser — no quota spent

2 problems. id is not allowed — the service mints entity ids (additionalProperties: false). slug is required and missing.

Blocked locally. The quota meter does not move.
(c) Quota exceeded · 429 from the sandbox proxy
Sandbox requests today 500 / 500

Limit reached.

🚦

Daily sandbox quota reached

You have used all 500 sandbox requests for today. The proxy returned 429 with Retry-After: 22320. Your quota resets at 00:00 UTC (in 6h 12m). Reading the catalog and specs is unaffected.

Send stays disabled until reset, with the reason on the button's accessible description — not a silent no-op.
(d) Sandbox target unavailable · 503 — and explicitly NOT retried against production
🔌

The sandbox target isn't responding

The mock server for app-registry-service v1.4.0 (mock://app-registry-service@v1.4.0) did not answer within 10s. This is an infrastructure problem on our side, not a problem with your request.

Your request was not sent anywhere else. There is no fallback to the service's production servers: entry — by design, an unavailable sandbox fails the call rather than escalating it to a live system.

target down The target selector shows the same health state, so the condition is visible before pressing Send as well as after.
(e) No sandbox for this spec · try-it disabled with the reason
🚧

This operation can't be tried yet

portal-service's current spec is not valid enough to generate a mock, and the repo has not declared an x-fuzefront-sandbox-url. Absence of an opt-in means "mock only", never "call production" — so there is nothing safe to target.

Disabled, visible, explained.
(f) Forbidden · 403 — Permit denied DevPortalPlayground:use
🔒

You don't have sandbox access

The Playground needs DevPortalPlayground:use on the platform root organization. Your account can read the catalog but not send sandbox requests — either provisioning hasn't finished, or fuzefront.devportal.enabled is off for your account. Catalog and spec viewing keep working.

(g) Proxy error · 5xx from devportal-service itself
⚠

The sandbox proxy failed

Request id req_01j9k5r8w2n4qd7cyv3h0tefam — quote this if you report it. The call was not forwarded anywhere; no quota was consumed.

(h) The target answered 4xx/5xx · that is a successful sandbox call, rendered as data
409 Conflict 61 ms from mock
response body · application/json
{
  "error": "slug_already_registered",
  "message": "An application with slug 'fuzepicker' already exists."
}

A 409 from the target is the API behaving correctly and is rendered as a response, not as a portal failure callout. Only the portal's own failures (c, d, f, g) use StatusCallout. Confusing the two is how a playground trains developers to ignore errors.

Test hooks: [data-frame='08-playground-states'] · [data-state='sending'] · [data-state='request-invalid'] · [data-error='request-invalid'] · [data-state='quota-exceeded'] · [data-http='429'] · [data-error='quota-exceeded'] · [data-quota-state='exceeded'] · [data-state='target-unavailable'] · [data-error='sandbox-target-unavailable'] · [data-safety-note='no-prod-fallback'] · [data-state='no-sandbox'] · [data-error='sandbox-not-available'] · [data-state='forbidden'] · [data-http='403'] · [data-state='error'] · [data-error='proxy-error'] · [data-state='target-error-response'] · [data-response-status='409'].

Review · devportal approve or reject each flow ↓
homependingApproveReject
catalogpendingApproveReject
spec-viewerpendingApproveReject
playgroundpendingApproveReject
my-accesspendingApproveReject