Readyz fails with SERVICE_UNAVAILABLE
ChecklistSymptom: The bridge process responds, but /readyz does not return HTTP 200.
- Confirm Postgres and Redis values still match the active deployment env contract.
- Treat /readyz, not /healthz, as the deploy gate before routing traffic.
- After secret changes such as SUPABASE_DB_URL or REDIS_URL, restart or redeploy the bridge.
A session exists but the runtime is not actually live
ChecklistSymptom: GET /api/v1/sessions/:sessionId returns HTTP 200, but the target runtime cannot execute.
- Require session.runtimeHealth.status = online before treating the runtime as a valid smoke target.
- Keep the Figma plugin window open or reconnect the Satellite runtime after restart or redeploy.
- Do not treat persisted session detail alone as proof that the live socket is still connected.
Auth succeeds in one lane and fails in another
ChecklistSymptom: Human shell reads work, but API-key execution fails, or the inverse.
- Use a Supabase bearer token only for GET /api/v1/account/session and secure human routes.
- Use Authorization: Bearer <api-key> for GET /api/v1/tools, POST /api/v1/tools/execute, and POST /mcp.
- When calling workspace-scoped discovery routes as a human user, include x-uab-workspace-id.
Execution is denied before the runtime sees the request
ChecklistSymptom: The bridge returns CAPABILITY_DENIED, DATA_SCOPE_DENIED, or RATE_LIMITED.
- Inspect /app/workspace/policies, /app/workspace/capabilities, or /app/workspace/data-scopes for the current workspace rule state.
- Remember that high-risk Satellite execute paths stay fail-closed until an explicit allow rule exists.
- Treat rate limiting as workspace-scoped infrastructure protection rather than connector failure.
MCP requests are rejected before tool execution
ChecklistSymptom: POST /mcp returns a JSON-RPC error without reaching the shared controller.
- Send API-key bearer auth to the MCP endpoint just like the HTTP execution lane.
- Preserve valid JSON-RPC request structure and MCP-compatible content negotiation headers.
- If the authenticated workspace does not match the provided workspaceId, the transport rejects the request before execution.