# Read VibeCord action receipts

Updated: 2026-08-31

VibeCord operations return typed receipts. Route on fields such as `allowed`,
`status`, `denialCode`, and `nextSafeAction`. Do not scrape the English text or
retry until an operation happens to pass.

The source contract now also types `project.create`, `workload.create`,
`billing.checkout.request`, and `billing.entitlement.status`. Their server
handlers and public availability remain unproven. A valid dry-run request is
not a receipt and does not show that an action was admitted.

## Core fields

| Field | Meaning |
| --- | --- |
| `schemaVersion` | Receipt contract version. |
| `requestId` | Stable identifier for the submitted action. |
| `action` | Originating typed action. Optional only for compatibility with older receipts; required on `billing.checkout.request` receipts and the typed `project.create` success receipt. |
| `allowed` | Whether the control plane admitted the action. |
| `status` | Current action state such as `accepted`, `denied`, or a later job state. |
| `projectId` | Project scope when present. |
| `projectWorkloadId` | Exact connected workload scope when present. |
| `jobId` | Asynchronous work identifier when a job was admitted. |
| `denialCode` | Machine-readable reason an action was not admitted. |
| `denialFamily` | Broad class such as entitlement, posture, safety, or scope. |
| `nextSafeAction` | The next bounded step the caller may take. |
| `claimBoundary` | What the receipt can and cannot support as evidence. |
| `evidenceRefs` | Redacted references to relevant proof or audit material. |
| `proofCardId`, `proofCardRef` | Optional links to a separate Proof Card projection. |

## Admitted example

```json
{
  "schemaVersion": "2026-06-04",
  "requestId": "preview.create:example",
  "action": "preview.create",
  "allowed": true,
  "status": "accepted",
  "projectId": "proj_example",
  "projectWorkloadId": "pw_example_minecraft",
  "jobId": "job_example_preview",
  "previewUrl": "https://app.vibecord.dev/preview-window/prev_example",
  "claimBoundary": "preview-proof-only",
  "evidenceRefs": []
}
```

This example supports only the admitted preview action. It is not hosted
launch, payment, provider, isolation, or customer proof.

## Denied example

```json
{
  "schemaVersion": "2026-06-04",
  "requestId": "deploy.request:example",
  "action": "deploy.request",
  "allowed": false,
  "status": "denied",
  "denialCode": "payment_required",
  "denialFamily": "entitlement",
  "projectId": "proj_example",
  "projectWorkloadId": "pw_example_minecraft",
  "nextSafeAction": "Ask the account owner to complete the bounded payment handoff, then re-read readiness.",
  "claimBoundary": "export-and-preview-only",
  "evidenceRefs": []
}
```

The CLI normally exits with a non-zero status for a denied receipt. A denial is
valid workflow state. Preserve it and follow `nextSafeAction`; do not bypass it
through a provider console.

## Common denial routes

| Denial code | Agent response |
| --- | --- |
| `not_authenticated` | Start the browser-assisted auth handoff in [AUTH.md](./AUTH.md). |
| `ambiguous_workload` | Resolve one exact `projectWorkloadId`. |
| `payment_required` | Use the owner payment handoff in [PAYMENTS.md](./PAYMENTS.md). |
| `server_unit_budget_missing` | Attach an admitted prepaid runtime budget or remain in preview/export. |
| `hosted_runtime_capacity_gated` | Use export, waitlist, or an approved canary lane. |
| `runtime_proof_missing` | Run the named workload proof profile and retain its evidence refs. |
| `launch_proof_missing` | Keep public hosted claims off and gather the missing evidence classes. |
| `export_only_workload` | Build and download the supported export pack. |
| `secret_like_input_rejected` | Remove secrets and restage a redacted artifact. |
| `diagnostic_redaction_required` | Do not expose raw logs. Use an admitted redacted diagnostics lane. |
| `request_validation_failed` | Correct the typed metadata or use explicit `-id`/`-slug` selectors; the rejected request was not submitted. |

## Poll and retry rules

- Preserve `requestId` and `jobId` for status checks.
- Current source routes operation submit/status through a durable receipt
  service bound to the submitting principal, tenant, Project, workload, action,
  and idempotency key. Its migration has not been applied or release-proven, so
  do not treat source presence as durable production behavior.
- Retry an idempotent action only after checking whether the first request was
  accepted.
- Treat MCP safety annotations as client hints, not server enforcement.
- Never publish raw receipts that may contain private project identifiers or
  unreviewed diagnostics.

Receipts make operations inspectable. They do not replace the separate runtime,
billing, provider, security, customer, or launch evidence required for a public
claim.
