From b3e396a7ee259051a3e618ebde08a343e3ef2792 Mon Sep 17 00:00:00 2001 From: kang-heewon Date: Thu, 6 Aug 2026 00:32:03 +0900 Subject: [PATCH] fix: reject duplicate tRPC procedure names --- .changeset/fuzzy-pandas-warn.md | 6 + docs/problem-code-registry.json | 43 +- .../en/reference/problem-recovery-cookbook.md | 1201 +++++++++-------- .../src/generated/problem-code-registry.ts | 48 +- .../src/libs/createTrpcRouter.ts | 92 +- .../src/tests/createTrpcRouter.spec.ts | 75 + .../src/tests/round-trip.spec.ts | 67 + scripts/problem-registry.mts | 10 + 8 files changed, 926 insertions(+), 616 deletions(-) create mode 100644 .changeset/fuzzy-pandas-warn.md diff --git a/.changeset/fuzzy-pandas-warn.md b/.changeset/fuzzy-pandas-warn.md new file mode 100644 index 000000000..78d181a70 --- /dev/null +++ b/.changeset/fuzzy-pandas-warn.md @@ -0,0 +1,6 @@ +--- +"@croco/protocols-trpc": patch +"@croco/problems-core": patch +--- + +Reject duplicate tRPC domain and procedure registrations with diagnostics for both source routes. diff --git a/docs/problem-code-registry.json b/docs/problem-code-registry.json index 515e4a87c..dcd9bdcaf 100644 --- a/docs/problem-code-registry.json +++ b/docs/problem-code-registry.json @@ -1,6 +1,6 @@ { "version": "croco.problem-code-registry.v1", - "problemCount": 582, + "problemCount": 583, "problems": [ { "code": "ACCESS_DENIED", @@ -11762,6 +11762,36 @@ } ] }, + { + "code": "protocols-trpc/duplicate-procedure-name", + "category": "InternalServerError", + "status": 500, + "title": "Internal Server Error", + "cookbookPath": "/reference/problem-recovery-cookbook/#protocols-trpc-duplicate-procedure-name", + "recovery": { + "cause": "Two controller routes resolve to the same tRPC domain and procedure name.", + "userAction": "Use an application build where every tRPC procedure has a unique domain and controller method name combination.", + "operatorAction": "Inspect the duplicate-procedure diagnostic for the existing and conflicting controller routes and their decorator source locations, then change one domain or controller method name.", + "retryability": "not-retryable", + "redactionPolicy": "operator-only", + "telemetry": { + "eventName": "croco.problem.error", + "severity": "error", + "attributes": ["problem.code", "problem.category", "problem.status"] + } + }, + "lifecycle": { + "status": "active" + }, + "sources": [ + { + "file": "packages/protocols-trpc/src/libs/createTrpcRouter.ts", + "line": 93, + "column": 3, + "kind": "problem-class" + } + ] + }, { "code": "protocols-trpc/provider-container-required", "category": "InternalServerError", @@ -11786,7 +11816,7 @@ "sources": [ { "file": "packages/protocols-trpc/src/libs/createTrpcRouter.ts", - "line": 70, + "line": 77, "column": 3, "kind": "problem-class" } @@ -11876,7 +11906,7 @@ "sources": [ { "file": "packages/protocols-trpc/src/libs/createTrpcRouter.ts", - "line": 57, + "line": 64, "column": 3, "kind": "problem-class" } @@ -14331,12 +14361,7 @@ } }, "lifecycle": { - "status": "deprecated", - "deprecation": { - "reason": "The telemetry SDK no longer exposes non-executable metrics or logs configuration.", - "migrationNote": "Stop branching on TELEMETRY_SIGNAL_UNSUPPORTED and remove metrics or logs options from TelemetryConfig consumers.", - "noReplacementReason": "The trace-only runtime has no unsupported signal configuration path to replace this code." - } + "status": "active" }, "sources": [ { diff --git a/packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md b/packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md index ec1baa190..01131815d 100644 --- a/packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md +++ b/packages/docs/src/content/docs/en/reference/problem-recovery-cookbook.md @@ -7,594 +7,595 @@ description: Generated Croco Problem code registry with recovery and telemetry m > Generated by `pnpm problem-registry:write`. Do not edit this file by hand. -This cookbook documents 582 public Croco Problem codes. The deterministic JSON registry is generated at `docs/problem-code-registry.json`, and generated client union types are emitted at `packages/problems-core/src/generated/problem-code-registry.ts`. +This cookbook documents 583 public Croco Problem codes. The deterministic JSON registry is generated at `docs/problem-code-registry.json`, and generated client union types are emitted at `packages/problems-core/src/generated/problem-code-registry.ts`. ## Index -| Code | Category | Status | Retryability | Redaction | Lifecycle | Sources | -| ------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | -----: | ------------- | ------------- | ---------- | ------: | -| [`ACCESS_DENIED`](#access-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`access-core/forbidden`](#access-core-forbidden) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`ADMIN_LIFECYCLE_DEMO_INVARIANT`](#admin-lifecycle-demo-invariant) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`admin-console/user-not-found`](#admin-console-user-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`admin-core/credit-operations-permission-denied`](#admin-core-credit-operations-permission-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`admin-core/credit-operations-validation-failed`](#admin-core-credit-operations-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`admin-core/resource-validation-failed`](#admin-core-resource-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`admin-core/webhook-action-validation-failed`](#admin-core-webhook-action-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`admin-generated/contract-diagnostics`](#admin-generated-contract-diagnostics) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`ai-saas/model-not-found`](#ai-saas-model-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`ai-saas/model-required`](#ai-saas-model-required) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`ai-saas/provider-unavailable`](#ai-saas-provider-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`ai-saas/quota-exceeded`](#ai-saas-quota-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`ai-saas/rate-limit-exceeded`](#ai-saas-rate-limit-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`ai-saas/smoke-failed`](#ai-saas-smoke-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`ai-saas/tenant-not-found`](#ai-saas-tenant-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`ai-saas/tenant-required`](#ai-saas-tenant-required) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`ALREADY_MEMBER`](#already-member) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`analytics-posthog/capture-failed`](#analytics-posthog-capture-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`analytics-posthog/flush-failed`](#analytics-posthog-flush-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`analytics-posthog/readiness-failed`](#analytics-posthog-readiness-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`API_KEY_EXPIRED`](#api-key-expired) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`API_KEY_NOT_FOUND`](#api-key-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`API_KEY_REVOKED`](#api-key-revoked) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`architecture-policy/manifest-json-parse`](#architecture-policy-manifest-json-parse) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`architecture-policy/manifest-schema-version`](#architecture-policy-manifest-schema-version) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`architecture-policy/manifest-shape`](#architecture-policy-manifest-shape) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`architecture-policy/package-json-parse`](#architecture-policy-package-json-parse) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`audit-core/auditable-decorator-misuse`](#audit-core-auditable-decorator-misuse) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`audit/insert-failed`](#audit-insert-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-better-auth/authentication-failed`](#auth-better-auth-authentication-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-better-auth/invalid-session-payload`](#auth-better-auth-invalid-session-payload) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-better-auth/invalid-webhook-payload`](#auth-better-auth-invalid-webhook-payload) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`auth-better-auth/invalid-webhook-signature`](#auth-better-auth-invalid-webhook-signature) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`auth-better-auth/not-initialized`](#auth-better-auth-not-initialized) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-better-auth/session-lookup-failed`](#auth-better-auth-session-lookup-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-better-auth/session-not-found`](#auth-better-auth-session-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`auth-better-auth/user-not-found`](#auth-better-auth-user-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`auth-clerk/duplicate-tenant-mapping`](#auth-clerk-duplicate-tenant-mapping) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`auth-clerk/external-service-error`](#auth-clerk-external-service-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-clerk/invalid-webhook-payload`](#auth-clerk-invalid-webhook-payload) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`auth-clerk/malformed-claim`](#auth-clerk-malformed-claim) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`auth-clerk/public-user-data-missing`](#auth-clerk-public-user-data-missing) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-clerk/token-verification-failed`](#auth-clerk-token-verification-failed) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`auth-clerk/token-verification-upstream-failed`](#auth-clerk-token-verification-upstream-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-clerk/webhook-verification-failed`](#auth-clerk-webhook-verification-failed) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`auth-core/api-key-creation-failed`](#auth-core-api-key-creation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-core/api-key-rotation-conflict`](#auth-core-api-key-rotation-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`auth-core/api-key-rotation-protection-failed`](#auth-core-api-key-rotation-protection-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-core/auth-provider-unavailable`](#auth-core-auth-provider-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`auth-core/invalid-api-key-rotation-idempotency-key`](#auth-core-invalid-api-key-rotation-idempotency-key) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`auth-core/invalid-permission-action`](#auth-core-invalid-permission-action) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`auth-core/invalid-permission-format`](#auth-core-invalid-permission-format) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`auth-core/invalid-route-metadata-target`](#auth-core-invalid-route-metadata-target) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`BAD_REQUEST`](#bad-request) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`batch-qstash/invalid-publish-request`](#batch-qstash-invalid-publish-request) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`batch-qstash/missing-config`](#batch-qstash-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`BILLING_STATUS_MAPPING_FAILED`](#billing-status-mapping-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`billing-polar/checkout-idempotency-conflict`](#billing-polar-checkout-idempotency-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing-polar/customer-not-found`](#billing-polar-customer-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`billing-polar/missing-config`](#billing-polar-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`billing-polar/retryable-upstream`](#billing-polar-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`billing-polar/subscription-not-found`](#billing-polar-subscription-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`billing-polar/terminal-upstream`](#billing-polar-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`billing-polar/usage-customer-not-found`](#billing-polar-usage-customer-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`billing-polar/usage-meter-mapping-not-found`](#billing-polar-usage-meter-mapping-not-found) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`billing-polar/validation-failed`](#billing-polar-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`billing/account-not-found`](#billing-account-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`billing/checkout-creation-failed`](#billing-checkout-creation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`billing/checkout-in-progress`](#billing-checkout-in-progress) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/invalid-lifecycle-idempotency-key`](#billing-invalid-lifecycle-idempotency-key) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`billing/invalid-money-amount`](#billing-invalid-money-amount) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`billing/invalid-money-currency`](#billing-invalid-money-currency) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`billing/invalid-plan-release-schedule`](#billing-invalid-plan-release-schedule) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`billing/invalid-plan-release-transition`](#billing-invalid-plan-release-transition) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`billing/invalid-plan-version-definition`](#billing-invalid-plan-version-definition) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`billing/invalid-plan-version-ref`](#billing-invalid-plan-version-ref) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`billing/invalid-subscription-quantity`](#billing-invalid-subscription-quantity) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`billing/lifecycle-command-conflict`](#billing-lifecycle-command-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/lifecycle-command-in-progress`](#billing-lifecycle-command-in-progress) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/lifecycle-command-not-found`](#billing-lifecycle-command-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`billing/money-currency-mismatch`](#billing-money-currency-mismatch) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`billing/money-division-by-zero`](#billing-money-division-by-zero) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`billing/overlapping-plan-effective-period`](#billing-overlapping-plan-effective-period) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/plan-release-provider-capability-failed`](#billing-plan-release-provider-capability-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`billing/plan-release-publish-conflict`](#billing-plan-release-publish-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/plan-release-validation-failed`](#billing-plan-release-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`billing/plan-version-already-published`](#billing-plan-version-already-published) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/plan-version-conflict`](#billing-plan-version-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/provider-capability-unavailable`](#billing-provider-capability-unavailable) | NotImplemented | 501 | not-retryable | public | active | 1 | -| [`billing/stale-plan-release-revision`](#billing-stale-plan-release-revision) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/subscription-not-found`](#billing-subscription-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`billing/subscription-plan-version-mismatch`](#billing-subscription-plan-version-mismatch) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`billing/subscription-quantity-provider-mismatch`](#billing-subscription-quantity-provider-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`billing/subscription-quantity-provider-source-ahead`](#billing-subscription-quantity-provider-source-ahead) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/subscription-quantity-reconciliation-conflict`](#billing-subscription-quantity-reconciliation-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/subscription-quantity-reconciliation-failed`](#billing-subscription-quantity-reconciliation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`billing/subscription-quantity-source-mismatch`](#billing-subscription-quantity-source-mismatch) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`billing/unknown-plan-version`](#billing-unknown-plan-version) | NotFound | 404 | not-retryable | public | active | 1 | -| [`billing/unknown-provider-plan-mapping`](#billing-unknown-provider-plan-mapping) | NotFound | 404 | not-retryable | public | active | 1 | -| [`billing/webhook-already-processed`](#billing-webhook-already-processed) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`BLOCKED_DURING_IMPERSONATION`](#blocked-during-impersonation) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`cache-core/invalid-decorator-config`](#cache-core-invalid-decorator-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`cache-core/invalid-ttl`](#cache-core-invalid-ttl) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`cache-core/invalidation-assertion-failed`](#cache-core-invalidation-assertion-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`cache-core/invalidation-capability-unsupported`](#cache-core-invalidation-capability-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`cache-core/invalidation-event-unknown`](#cache-core-invalidation-event-unknown) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`cache-core/invalidation-failed`](#cache-core-invalidation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`cache-core/invalidation-graph-invalid`](#cache-core-invalidation-graph-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`CIRCUIT_BREAKER_OPEN`](#circuit-breaker-open) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`cloudflare/images-invalid-ttl`](#cloudflare-images-invalid-ttl) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`cloudflare/images-null-result`](#cloudflare-images-null-result) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`cloudflare/images-upload-intent-null-result`](#cloudflare-images-upload-intent-null-result) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`CONFLICTING_PAGINATION`](#conflicting-pagination) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`create-croco-app/directory-not-empty`](#create-croco-app-directory-not-empty) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`create-croco-app/invalid-cli-option`](#create-croco-app-invalid-cli-option) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`create-croco-app/invalid-goal-option`](#create-croco-app-invalid-goal-option) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`create-croco-app/invalid-saas-preset-option`](#create-croco-app-invalid-saas-preset-option) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`create-croco-app/lambda-telemetry-boundary`](#create-croco-app-lambda-telemetry-boundary) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`create-croco-app/unexpected-failure`](#create-croco-app-unexpected-failure) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`create-croco-app/unsupported-node-version`](#create-croco-app-unsupported-node-version) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`create-croco-app/web-meta-vite-fullstack-missing-hydration-root`](#create-croco-app-web-meta-vite-fullstack-missing-hydration-root) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`create-croco-app/web-meta-vite-missing-hydration-root`](#create-croco-app-web-meta-vite-missing-hydration-root) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`credits-core/account-mismatch`](#credits-core-account-mismatch) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`credits-core/account-not-found`](#credits-core-account-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`credits-core/duplicate-conflict`](#credits-core-duplicate-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`credits-core/event-publication-failed`](#credits-core-event-publication-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`credits-core/expired-grant`](#credits-core-expired-grant) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`credits-core/insufficient-credits`](#credits-core-insufficient-credits) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`credits-core/invalid-amount`](#credits-core-invalid-amount) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`credits-core/invalid-command`](#credits-core-invalid-command) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`credits-core/refund-mismatch`](#credits-core-refund-mismatch) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`credits-core/reservation-mismatch`](#credits-core-reservation-mismatch) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`credits-core/stale-ledger-position`](#credits-core-stale-ledger-position) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`credits-core/transaction-not-found`](#credits-core-transaction-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`credits-drizzle/persistence-failure`](#credits-drizzle-persistence-failure) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`CROCO_CLI_JOBS_001`](#croco-cli-jobs-001) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`CROCO_CLI_JOBS_002`](#croco-cli-jobs-002) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`CROCO_CLI_JOBS_003`](#croco-cli-jobs-003) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`CROCO_CLI_JOBS_004`](#croco-cli-jobs-004) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`CROCO_CLI_JOBS_005`](#croco-cli-jobs-005) | NotFound | 404 | not-retryable | public | active | 1 | -| [`CROCO_CLI_OPS_001`](#croco-cli-ops-001) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`CROCO_CLI_OPS_002`](#croco-cli-ops-002) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`CROCO_CLI_USAGE_DASHBOARD_005`](#croco-cli-usage-dashboard-005) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`CROCO_HTTP_MIDDLEWARE_001`](#croco-http-middleware-001) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`CROCO_HTTP_MIDDLEWARE_002`](#croco-http-middleware-002) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`CROCO_HTTP_SECURITY_001`](#croco-http-security-001) | InternalServerError | 500 | not-retryable | public | active | 1 | -| [`CROCO_HTTP_SECURITY_002`](#croco-http-security-002) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`CROCO_TEST_EVIDENCE_CONTRACT_INVALID`](#croco-test-evidence-contract-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`CROCO_TEST_EVIDENCE_FIDELITY_UNSATISFIED`](#croco-test-evidence-fidelity-unsatisfied) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`dataloader-core/batch-result-length-mismatch`](#dataloader-core-batch-result-length-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`diagnostics-core/duplicate-provider`](#diagnostics-core-duplicate-provider) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`diagnostics-core/invalid-timeout`](#diagnostics-core-invalid-timeout) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`DUPLICATE_INVITATION`](#duplicate-invitation) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`DUPLICATE_RECOVER_HANDLER`](#duplicate-recover-handler) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`DURATION_PARSE_ERROR`](#duration-parse-error) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`EMBEDDING_ERROR`](#embedding-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`ENTITLEMENT_DENIED`](#entitlement-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`ENTITLEMENT_INACTIVE_SUBSCRIPTION`](#entitlement-inactive-subscription) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`ENTITLEMENT_MISSING_PLAN`](#entitlement-missing-plan) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`ENTITLEMENT_NOT_FOUND`](#entitlement-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`ENTITLEMENT_PROVIDER_UNAVAILABLE`](#entitlement-provider-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`ENTITLEMENT_QUOTA_EXCEEDED`](#entitlement-quota-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`ENTITLEMENT_REQUIREMENT_INVALID`](#entitlement-requirement-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`entitlements-core/definition-invalid`](#entitlements-core-definition-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`entitlements-core/plan-version-already-registered`](#entitlements-core-plan-version-already-registered) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`entitlements-core/plan-version-mismatch`](#entitlements-core-plan-version-mismatch) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`entitlements-core/plan-version-not-found`](#entitlements-core-plan-version-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`events-core/after-commit-outcome-required`](#events-core-after-commit-outcome-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-core/after-commit-requires-active-transaction`](#events-core-after-commit-requires-active-transaction) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-core/deserialization-error`](#events-core-deserialization-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-core/duplicate-event-field`](#events-core-duplicate-event-field) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-core/duplicate-event-name`](#events-core-duplicate-event-name) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-core/event-bus-not-set`](#events-core-event-bus-not-set) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-core/event-definition-error`](#events-core-event-definition-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-core/transaction-context-unavailable`](#events-core-transaction-context-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-core/unknown-event-type`](#events-core-unknown-event-type) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-inmemory/backpressure-exceeded`](#events-inmemory-backpressure-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`events-inmemory/backpressure-timeout`](#events-inmemory-backpressure-timeout) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`events-inmemory/invalid-configuration`](#events-inmemory-invalid-configuration) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-inmemory/publish-dropped`](#events-inmemory-publish-dropped) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-inmemory/publish-failed`](#events-inmemory-publish-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-tx/configuration-invalid`](#events-tx-configuration-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-tx/inbox-claim-conflict`](#events-tx-inbox-claim-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`events-tx/outbox-idempotency-conflict`](#events-tx-outbox-idempotency-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`events-tx/outbox-publish-exhausted`](#events-tx-outbox-publish-exhausted) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-tx/outbox-transaction-required`](#events-tx-outbox-transaction-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-tx/storage-error`](#events-tx-storage-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`events-tx/transaction-state-error`](#events-tx-transaction-state-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`execution/checkpoint-store-conformance`](#execution-checkpoint-store-conformance) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`execution/conflict`](#execution-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`execution/continuation-conflict`](#execution-continuation-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`execution/continuation-unsupported`](#execution-continuation-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`execution/idempotency-conflict`](#execution-idempotency-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`execution/invalid-continuation-lease-duration`](#execution-invalid-continuation-lease-duration) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`execution/invalid-state-transition`](#execution-invalid-state-transition) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`execution/max-retries-exceeded`](#execution-max-retries-exceeded) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`execution/not-found`](#execution-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`FORBIDDEN`](#forbidden) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`framework-config/config-schema-not-found`](#framework-config-config-schema-not-found) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-config/config-validation-failed`](#framework-config-config-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`framework-config/invalid-boolean-env`](#framework-config-invalid-boolean-env) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`framework-context/circular-dependency`](#framework-context-circular-dependency) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-context/container-scope-disposed`](#framework-context-container-scope-disposed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-context/context-middleware-execution-error`](#framework-context-context-middleware-execution-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-context/di-resolution-failed`](#framework-context-di-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-context/di-scope-mismatch`](#framework-context-di-scope-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-context/on-shutdown-decorator-invalid`](#framework-context-on-shutdown-decorator-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`framework-context/pipeline-graph-invalid`](#framework-context-pipeline-graph-invalid) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`framework-context/policy-capability-unavailable`](#framework-context-policy-capability-unavailable) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`framework-context/policy-conflict`](#framework-context-policy-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`framework-context/policy-definition-invalid`](#framework-context-policy-definition-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`framework-context/request-scope-outside-context`](#framework-context-request-scope-outside-context) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-context/shutdown-configuration-conflict`](#framework-context-shutdown-configuration-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`framework-context/shutdown-hook-execution-failed`](#framework-context-shutdown-hook-execution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-context/shutdown-timeout`](#framework-context-shutdown-timeout) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-module/circular-dependency`](#framework-module-circular-dependency) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-module/invalid-module-definition`](#framework-module-invalid-module-definition) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`framework-module/lifecycle-failed`](#framework-module-lifecycle-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-module/provider-not-visible`](#framework-module-provider-not-visible) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`framework-module/provider-ownership-conflict`](#framework-module-provider-ownership-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`framework-module/provider-write-not-owned`](#framework-module-provider-write-not-owned) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`frontend-problems/fetch-unavailable`](#frontend-problems-fetch-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`frontend-vite/missing-cloudflare-vite-plugin`](#frontend-vite-missing-cloudflare-vite-plugin) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`GENERATION_ERROR`](#generation-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`gid-core/id-type-only-property`](#gid-core-id-type-only-property) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`gid-core/invalid-id-prefix`](#gid-core-invalid-id-prefix) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`governance-core/delete-not-supported`](#governance-core-delete-not-supported) | NotImplemented | 501 | not-retryable | public | active | 1 | -| [`governance-core/export-not-supported`](#governance-core-export-not-supported) | NotImplemented | 501 | not-retryable | public | active | 1 | -| [`governance-core/resource-validation-failed`](#governance-core-resource-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`governance-core/retention-policy-violation`](#governance-core-retention-policy-violation) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`GRAPHQL_NOT_FOUND`](#graphql-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`HEALTH_SCORE_NOT_FOUND`](#health-score-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`health-core/invalid-timeout`](#health-core-invalid-timeout) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`idempotency-core/invalid-key`](#idempotency-core-invalid-key) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`idempotency-core/invalid-ttl`](#idempotency-core-invalid-ttl) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`idempotency-core/key-conflict`](#idempotency-core-key-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`idempotency-core/reservation-expired`](#idempotency-core-reservation-expired) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`idempotency-core/reservation-not-found`](#idempotency-core-reservation-not-found) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`idempotency-core/reservation-state`](#idempotency-core-reservation-state) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`IMPERSONATION_IDENTITY_CONFLICT`](#impersonation-identity-conflict) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`IMPERSONATION_REASON_REQUIRED`](#impersonation-reason-required) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`IMPERSONATION_SESSION_NOT_FOUND`](#impersonation-session-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`IMPERSONATION_TARGET_NOT_FOUND`](#impersonation-target-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`INDEX_NOT_FOUND`](#index-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`integrations-posthog/missing-config`](#integrations-posthog-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`INVALID_AUTO_JOIN_ROLE`](#invalid-auto-join-role) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`INVALID_CURSOR`](#invalid-cursor) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`INVALID_INVITATION_EXPIRY_DURATION`](#invalid-invitation-expiry-duration) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`INVALID_PAGINATION_DIRECTION`](#invalid-pagination-direction) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`INVALID_RETRY_CONFIGURATION`](#invalid-retry-configuration) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`INVALID_ROLE`](#invalid-role) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`INVITATION_ALREADY_ACCEPTED`](#invitation-already-accepted) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`INVITATION_CREATION_FAILED`](#invitation-creation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`INVITATION_EMAIL_MISMATCH`](#invitation-email-mismatch) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`INVITATION_EXPIRED`](#invitation-expired) | Gone | 410 | not-retryable | public | active | 1 | -| [`INVITATION_IDEMPOTENCY_CONFLICT`](#invitation-idempotency-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`INVITATION_INVALID_STATUS`](#invitation-invalid-status) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`INVITATION_NOT_FOUND`](#invitation-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`INVITATION_RATE_LIMIT_EXCEEDED`](#invitation-rate-limit-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`invitation-core/batch-size-exceeded`](#invitation-core-batch-size-exceeded) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`invitation-drizzle/token-cipher-failed`](#invitation-drizzle-token-cipher-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`LAMBDA_TIMEOUT_GUARD`](#lambda-timeout-guard) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`LAST_OWNER`](#last-owner) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`lifecycle-core/action-adapter-failed`](#lifecycle-core-action-adapter-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`lifecycle-core/duplicate-rule`](#lifecycle-core-duplicate-rule) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`lifecycle-core/monetization-recipe-capability-missing`](#lifecycle-core-monetization-recipe-capability-missing) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`lifecycle-core/monetization-signal-invalid`](#lifecycle-core-monetization-signal-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`lifecycle-core/monetization-threshold-claim-unavailable`](#lifecycle-core-monetization-threshold-claim-unavailable) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`lifecycle-core/rule-action-contract-mismatch`](#lifecycle-core-rule-action-contract-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`lifecycle-core/rule-command-conflict`](#lifecycle-core-rule-command-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`lifecycle-core/rule-definition-invalid`](#lifecycle-core-rule-definition-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`lifecycle-core/rule-transition-invalid`](#lifecycle-core-rule-transition-invalid) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`lifecycle-core/rule-version-conflict`](#lifecycle-core-rule-version-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`lifecycle-core/rule-version-definition-invalid`](#lifecycle-core-rule-version-definition-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`lifecycle-core/rule-version-unavailable`](#lifecycle-core-rule-version-unavailable) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`lifecycle-core/rule-version-unknown`](#lifecycle-core-rule-version-unknown) | NotFound | 404 | not-retryable | public | active | 1 | -| [`LLM_PROVIDER_NOT_FOUND`](#llm-provider-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`LLM_SERVICE_ERROR`](#llm-service-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`llm-core/invalid-llm-prompt`](#llm-core-invalid-llm-prompt) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`llm-core/invalid-llm-response`](#llm-core-invalid-llm-response) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`llm-core/llm-service-not-initialized`](#llm-core-llm-service-not-initialized) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`llm-core/rate-limit-exceeded`](#llm-core-rate-limit-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`llm-metering/cost-limit-exceeded`](#llm-metering-cost-limit-exceeded) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`llm-metering/pricing-not-found`](#llm-metering-pricing-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`llm-metering/pricing-registry-conflict`](#llm-metering-pricing-registry-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`llm-metering/quota-exceeded`](#llm-metering-quota-exceeded) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`llm-metering/record-failed`](#llm-metering-record-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`llm-openai/aborted`](#llm-openai-aborted) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`llm-openai/authentication-failed`](#llm-openai-authentication-failed) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`llm-openai/invalid-response`](#llm-openai-invalid-response) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`llm-openai/missing-config`](#llm-openai-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`llm-openai/rate-limited`](#llm-openai-rate-limited) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`llm-openai/retryable-upstream`](#llm-openai-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`llm-openai/terminal-upstream`](#llm-openai-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`llm-openai/validation-failed`](#llm-openai-validation-failed) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`MEMBERSHIP_CONSTRAINT`](#membership-constraint) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`MEMBERSHIP_NOT_FOUND`](#membership-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`meta-vite/server-action-invalid-path`](#meta-vite-server-action-invalid-path) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`meta-vite/server-action-not-found`](#meta-vite-server-action-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`meta-vite/server-action-validation-failed`](#meta-vite-server-action-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`meter/insert-failed`](#meter-insert-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`metering-drizzle/migration-query-result-unsupported`](#metering-drizzle-migration-query-result-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`metering-drizzle/usage-envelope-not-configured`](#metering-drizzle-usage-envelope-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`metering-upstash/missing-config`](#metering-upstash-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`metering/atomic-quota-not-supported`](#metering-atomic-quota-not-supported) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`metering/billable-usage-journal-required`](#metering-billable-usage-journal-required) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`metering/duplicate-record`](#metering-duplicate-record) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`metering/invalid-meter`](#metering-invalid-meter) | NotFound | 404 | not-retryable | public | active | 1 | -| [`metering/invalid-meter-dimension`](#metering-invalid-meter-dimension) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`metering/invalid-usage-envelope`](#metering-invalid-usage-envelope) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`metering/invalid-usage-query`](#metering-invalid-usage-query) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`metering/quota-exceeded`](#metering-quota-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`metering/redis-error`](#metering-redis-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`metering/transition-conflict`](#metering-transition-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`metrics-billing/metric-dropped`](#metrics-billing-metric-dropped) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`metrics-billing/recording-failed`](#metrics-billing-recording-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`metrics-core/carrying-capacity-simulation-error`](#metrics-core-carrying-capacity-simulation-error) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`metrics-core/carrying-capacity-tenant-required`](#metrics-core-carrying-capacity-tenant-required) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`metrics-core/gross-margin-required`](#metrics-core-gross-margin-required) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`metrics-core/invalid-retention-movement`](#metrics-core-invalid-retention-movement) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`metrics-core/mixed-currency-mrr`](#metrics-core-mixed-currency-mrr) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`metrics-core/retention-metrics-unavailable`](#metrics-core-retention-metrics-unavailable) | NotImplemented | 501 | not-retryable | public | active | 1 | -| [`metrics-core/snapshot-tenant-required`](#metrics-core-snapshot-tenant-required) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`MIDDLEWARE_EXECUTION_ERROR`](#middleware-execution-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`migration-runner/database-url-required`](#migration-runner-database-url-required) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`migration-runner/file-load-failed`](#migration-runner-file-load-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`migration-runner/history-drift`](#migration-runner-history-drift) | Conflict | 409 | not-retryable | public | active | 1 | -| [`migration-runner/invalid-count`](#migration-runner-invalid-count) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`migration-runner/missing-down-function`](#migration-runner-missing-down-function) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`migration-runner/missing-up-function`](#migration-runner-missing-up-function) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`migration-runner/transaction-required`](#migration-runner-transaction-required) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`migration-runner/unsupported-dialect`](#migration-runner-unsupported-dialect) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`migration-runner/unsupported-query-result`](#migration-runner-unsupported-query-result) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`MISSING_TENANT`](#missing-tenant) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`MODEL_NOT_FOUND`](#model-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`NESTED_IMPERSONATION_NOT_ALLOWED`](#nested-impersonation-not-allowed) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`notifications-core/default-provider-conflict`](#notifications-core-default-provider-conflict) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`notifications-core/delivery-failed`](#notifications-core-delivery-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`notifications-core/idempotency-key-required`](#notifications-core-idempotency-key-required) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`notifications-core/outbox-idempotency-mismatch`](#notifications-core-outbox-idempotency-mismatch) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`notifications-core/preference-channel-mismatch`](#notifications-core-preference-channel-mismatch) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`notifications-core/preference-context-required`](#notifications-core-preference-context-required) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`notifications-core/preference-denied`](#notifications-core-preference-denied) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`notifications-core/provider-already-registered`](#notifications-core-provider-already-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`notifications-core/provider-channel-mismatch`](#notifications-core-provider-channel-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`notifications-core/provider-idempotency-unsupported`](#notifications-core-provider-idempotency-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`notifications-core/provider-not-configured`](#notifications-core-provider-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`notifications-core/provider-not-found`](#notifications-core-provider-not-found) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`notifications-core/provider-not-registered`](#notifications-core-provider-not-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`notifications-core/send-max-attempts-invalid`](#notifications-core-send-max-attempts-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`notifications-core/template-already-registered`](#notifications-core-template-already-registered) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`notifications-core/template-not-found`](#notifications-core-template-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`notifications-core/template-variables-invalid`](#notifications-core-template-variables-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`notifications-resend/idempotency-conflict`](#notifications-resend-idempotency-conflict) | Conflict | 409 | not-retryable | safe-message | active | 1 | -| [`notifications-resend/missing-config`](#notifications-resend-missing-config) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`notifications-resend/retryable-upstream`](#notifications-resend-retryable-upstream) | InternalServerError | 500 | retryable | operator-only | active | 1 | -| [`notifications-resend/terminal-upstream`](#notifications-resend-terminal-upstream) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`notifications-resend/validation-failed`](#notifications-resend-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`onboarding/context-required`](#onboarding-context-required) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`onboarding/definition-not-found`](#onboarding-definition-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`onboarding/step-not-found`](#onboarding-step-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`openapi-spec/controller-typescript-diagnostics`](#openapi-spec-controller-typescript-diagnostics) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`openapi-spec/invalid-contract`](#openapi-spec-invalid-contract) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`openapi-spec/no-rest-controllers-found`](#openapi-spec-no-rest-controllers-found) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`OTLP_ENDPOINT_REQUIRED`](#otlp-endpoint-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`outbox-core/dispatch-failed`](#outbox-core-dispatch-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`outbox-core/failure-metadata-missing`](#outbox-core-failure-metadata-missing) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`outbox-core/record-id-conflict`](#outbox-core-record-id-conflict) | Conflict | 409 | not-retryable | safe-message | active | 1 | -| [`outbox-core/unit-of-work-context-invalid`](#outbox-core-unit-of-work-context-invalid) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`OWNERSHIP_TRANSFER_REQUIRED`](#ownership-transfer-required) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`problems-core/invalid-extensions`](#problems-core-invalid-extensions) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`problems-core/parse-error`](#problems-core-parse-error) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`problems-core/problem-registry-invalid`](#problems-core-problem-registry-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`problems-core/unhandled-category`](#problems-core-unhandled-category) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`protocols-core/contract-graph-diagnostics`](#protocols-core-contract-graph-diagnostics) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`protocols-graphql/auth-invalid-header-format`](#protocols-graphql-auth-invalid-header-format) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`protocols-graphql/auth-invalid-request`](#protocols-graphql-auth-invalid-request) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`protocols-graphql/auth-invalid-token`](#protocols-graphql-auth-invalid-token) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`protocols-graphql/auth-missing-header`](#protocols-graphql-auth-missing-header) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`protocols-graphql/auth-verifier-unavailable`](#protocols-graphql-auth-verifier-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`protocols-graphql/guard-denied`](#protocols-graphql-guard-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`protocols-rest/auth-invalid-header-format`](#protocols-rest-auth-invalid-header-format) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`protocols-rest/auth-invalid-request`](#protocols-rest-auth-invalid-request) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`protocols-rest/auth-invalid-token`](#protocols-rest-auth-invalid-token) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`protocols-rest/auth-missing-header`](#protocols-rest-auth-missing-header) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`protocols-rest/auth-verifier-unavailable`](#protocols-rest-auth-verifier-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`protocols-rest/duplicate-parameter-index`](#protocols-rest-duplicate-parameter-index) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`protocols-rest/request-validation-failed`](#protocols-rest-request-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`protocols-rest/response-validation-failed`](#protocols-rest-response-validation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`protocols-rest/validation-failed`](#protocols-rest-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`protocols-trpc/duplicate-parameter-index`](#protocols-trpc-duplicate-parameter-index) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`protocols-trpc/provider-container-required`](#protocols-trpc-provider-container-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`protocols-trpc/request-normalization-failed`](#protocols-trpc-request-normalization-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`protocols-trpc/request-unavailable`](#protocols-trpc-request-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`protocols-trpc/route-handler-not-callable`](#protocols-trpc-route-handler-not-callable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`PUBLIC_EMAIL_DOMAIN_NOT_ALLOWED`](#public-email-domain-not-allowed) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`RATE_LIMIT_EXCEEDED`](#rate-limit-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | -| [`RATE_LIMIT_KEY_BUILDER_ERROR`](#rate-limit-key-builder-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`RATE_LIMIT_REFUND_UNSUPPORTED`](#rate-limit-refund-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`RATE_LIMIT_WINDOW_ERROR`](#rate-limit-window-error) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`ratelimit-upstash/invalid-policy`](#ratelimit-upstash-invalid-policy) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`ratelimit-upstash/missing-config`](#ratelimit-upstash-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`ratelimit/prune-interval`](#ratelimit-prune-interval) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`repository-core/batch-load-result-identity-mismatch`](#repository-core-batch-load-result-identity-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`repository-core/batch-load-result-key-duplicate`](#repository-core-batch-load-result-key-duplicate) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`repository-core/batch-load-result-key-unexpected`](#repository-core-batch-load-result-key-unexpected) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`repository-core/batch-load-result-unkeyed`](#repository-core-batch-load-result-unkeyed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`repository-core/batch-loader-factory-not-registered`](#repository-core-batch-loader-factory-not-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`repository-core/batch-loader-factory-resolution-failed`](#repository-core-batch-loader-factory-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`repository-core/batch-loader-scope-collision`](#repository-core-batch-loader-scope-collision) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`RESEND_NOTIFICATION_FAILED`](#resend-notification-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`RETRY_ABORTED`](#retry-aborted) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`RETRY_CIRCUIT_BREAKER_INVALID_STATE`](#retry-circuit-breaker-invalid-state) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`RETRY_CIRCUIT_BREAKER_LOCK_FAILED`](#retry-circuit-breaker-lock-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`RETRY_EXHAUSTED`](#retry-exhausted) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`retry-core/backoff-cancellation-unsupported`](#retry-core-backoff-cancellation-unsupported) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`retry-core/circuit-breaker-unexpected-state`](#retry-core-circuit-breaker-unexpected-state) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`retry-core/success-hook-failed`](#retry-core-success-hook-failed) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`ROLE_HIERARCHY_VIOLATION`](#role-hierarchy-violation) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`rpc-codegen/controller-typescript-diagnostics`](#rpc-codegen-controller-typescript-diagnostics) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`rpc-codegen/invalid-contract`](#rpc-codegen-invalid-contract) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`rpc-codegen/no-rest-controllers-found`](#rpc-codegen-no-rest-controllers-found) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`rpc-codegen/unsupported-form-schema`](#rpc-codegen-unsupported-form-schema) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`saas-demo/demo-endpoint-disabled`](#saas-demo-demo-endpoint-disabled) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`saas-demo/invalid-jobs-query`](#saas-demo-invalid-jobs-query) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`saas-demo/invalid-port`](#saas-demo-invalid-port) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`saas-demo/job-not-found`](#saas-demo-job-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`saas-demo/smoke-failed`](#saas-demo-smoke-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`saas-demo/tenant-already-exists`](#saas-demo-tenant-already-exists) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`saas-demo/tenant-not-found`](#saas-demo-tenant-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`SEARCH_CAPABILITY_UNAVAILABLE`](#search-capability-unavailable) | NotImplemented | 501 | not-retryable | public | active | 1 | -| [`SEARCH_DRIZZLE_INVALID_ROW`](#search-drizzle-invalid-row) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`search-core/sync-identity-conflict`](#search-core-sync-identity-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`search-core/transform-not-found`](#search-core-transform-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`search-meilisearch/index-not-found`](#search-meilisearch-index-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`search-meilisearch/invalid-request`](#search-meilisearch-invalid-request) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`search-meilisearch/missing-config`](#search-meilisearch-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`search-meilisearch/retryable-upstream`](#search-meilisearch-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`search-meilisearch/tenant-token-not-configured`](#search-meilisearch-tenant-token-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`search-meilisearch/terminal-upstream`](#search-meilisearch-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`SEAT_LIMIT_EXCEEDED`](#seat-limit-exceeded) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`SELF_IMPERSONATION_NOT_ALLOWED`](#self-impersonation-not-allowed) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`starter/invalid-environment`](#starter-invalid-environment) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`starter/unhandled-api-request`](#starter-unhandled-api-request) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`starter/user-not-found`](#starter-user-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`STORAGE_DELETE_FAILED`](#storage-delete-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`STORAGE_FILE_NOT_FOUND`](#storage-file-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`STORAGE_INVALID_KEY`](#storage-invalid-key) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`STORAGE_INVALID_SIGNED_URL_EXPIRY`](#storage-invalid-signed-url-expiry) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`STORAGE_R2_EMPTY_BODY`](#storage-r2-empty-body) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`STORAGE_R2_MISSING_CONFIG`](#storage-r2-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`STORAGE_R2_OBJECT_TOO_LARGE`](#storage-r2-object-too-large) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`STORAGE_R2_READINESS_FAILED`](#storage-r2-readiness-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`STORAGE_UPLOAD_FAILED`](#storage-upload-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`storage-cloudflare/missing-config`](#storage-cloudflare-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`storage-cloudflare/retryable-upstream`](#storage-cloudflare-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`storage-cloudflare/terminal-upstream`](#storage-cloudflare-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`storage-cloudflare/validation-failed`](#storage-cloudflare-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`storage-cloudinary/invalid-upload-intent-ttl`](#storage-cloudinary-invalid-upload-intent-ttl) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`storage-cloudinary/missing-config`](#storage-cloudinary-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`storage-cloudinary/retryable-upstream`](#storage-cloudinary-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`storage-cloudinary/terminal-upstream`](#storage-cloudinary-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`storage-cloudinary/validation-failed`](#storage-cloudinary-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`storage/invalid-upload-intent-ttl`](#storage-invalid-upload-intent-ttl) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`STRATEGY_UNAVAILABLE`](#strategy-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`STRUCTURED_OUTPUT_ERROR`](#structured-output-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tasks-core/duplicate-task-registration`](#tasks-core-duplicate-task-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tasks-core/execution-timeout`](#tasks-core-execution-timeout) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tasks-core/task-not-found`](#tasks-core-task-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`tasks-core/task-runner-di-failure`](#tasks-core-task-runner-di-failure) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tasks-qstash/invalid-publish-request`](#tasks-qstash-invalid-publish-request) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`tasks-qstash/missing-config`](#tasks-qstash-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`TELEMETRY_AUTO_INSTRUMENTATION_INVALID_CONFIG`](#telemetry-auto-instrumentation-invalid-config) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`TELEMETRY_FORCE_FLUSH_UNSUPPORTED`](#telemetry-force-flush-unsupported) | NotImplemented | 501 | not-retryable | public | active | 1 | -| [`TELEMETRY_RUNTIME_ERROR`](#telemetry-runtime-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`TELEMETRY_SAMPLER_INVALID_CONFIG`](#telemetry-sampler-invalid-config) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`TELEMETRY_SIGNAL_UNSUPPORTED`](#telemetry-signal-unsupported) | BadRequest | 400 | not-retryable | public | deprecated | 1 | -| [`tenant-core/admin-bypass-reason-required`](#tenant-core-admin-bypass-reason-required) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`tenant-core/cross-tenant-leak`](#tenant-core-cross-tenant-leak) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tenant-core/default-tenant-fallback`](#tenant-core-default-tenant-fallback) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`tenant-core/duplicate-tenant-manager-registration`](#tenant-core-duplicate-tenant-manager-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tenant-core/isolation-context-missing`](#tenant-core-isolation-context-missing) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`tenant-core/tenant-manager-not-registered`](#tenant-core-tenant-manager-not-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tenant-core/unsafe-query`](#tenant-core-unsafe-query) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`tenant/not-found`](#tenant-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`tenant/required`](#tenant-required) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`testing-resources/cleanup-failed`](#testing-resources-cleanup-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing-resources/health-check-failed`](#testing-resources-health-check-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing-resources/invalid-configuration`](#testing-resources-invalid-configuration) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing-resources/migration-failed`](#testing-resources-migration-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing-resources/startup-failed`](#testing-resources-startup-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/after-commit-hooks-failed`](#testing-after-commit-hooks-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/telemetry-provider-already-installed`](#testing-telemetry-provider-already-installed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/test-kernel-disposal-failed`](#testing-test-kernel-disposal-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/test-kernel-disposed`](#testing-test-kernel-disposed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/test-kernel-leak`](#testing-test-kernel-leak) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/test-kernel-outbound-call`](#testing-test-kernel-outbound-call) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/test-kernel-resource-fidelity`](#testing-test-kernel-resource-fidelity) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/test-kernel-resource-not-found`](#testing-test-kernel-resource-not-found) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/test-kernel-resource-registration`](#testing-test-kernel-resource-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/test-kernel-validation-policy`](#testing-test-kernel-validation-policy) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/test-runtime-configuration`](#testing-test-runtime-configuration) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`testing/test-runtime-drain-limit`](#testing-test-runtime-drain-limit) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`testing/transaction-context-not-active`](#testing-transaction-context-not-active) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`TOKEN_LIMIT_EXCEEDED`](#token-limit-exceeded) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`TOOL_EXECUTION_ERROR`](#tool-execution-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-graphql/request-body-aborted`](#transports-graphql-request-body-aborted) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`transports-graphql/request-body-too-large`](#transports-graphql-request-body-too-large) | PayloadTooLarge | 413 | not-retryable | public | active | 1 | -| [`transports-graphql/resolvers-not-configured`](#transports-graphql-resolvers-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-graphql/schema-not-configured`](#transports-graphql-schema-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-graphql/server-not-initialized`](#transports-graphql-server-not-initialized) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-http/body-limit-invalid-configuration`](#transports-http-body-limit-invalid-configuration) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`transports-http/di-bootstrap-validation`](#transports-http-di-bootstrap-validation) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-http/duplicate-health-check`](#transports-http-duplicate-health-check) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-http/duplicate-route-definition`](#transports-http-duplicate-route-definition) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`transports-http/graceful-shutdown-configuration`](#transports-http-graceful-shutdown-configuration) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`transports-http/graceful-shutdown-timeout`](#transports-http-graceful-shutdown-timeout) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-http/middleware-next-called-multiple-times`](#transports-http-middleware-next-called-multiple-times) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`transports-http/pipe-resolution-failed`](#transports-http-pipe-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-http/provider-resolution-failed`](#transports-http-provider-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-http/request-body-read-failed`](#transports-http-request-body-read-failed) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`transports-http/request-body-too-large`](#transports-http-request-body-too-large) | PayloadTooLarge | 413\* | not-retryable | public | active | 1 | -| [`transports-http/request-body-unavailable`](#transports-http-request-body-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-http/route-method-not-function`](#transports-http-route-method-not-function) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`transports-http/runtime-capability-invalid`](#transports-http-runtime-capability-invalid) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`transports-http/security-middleware-validation`](#transports-http-security-middleware-validation) | InternalServerError | 500 | not-retryable | public | active | 1 | -| [`transports-http/unsupported-route-method`](#transports-http-unsupported-route-method) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`triggers-core/duplicate-trigger-metadata`](#triggers-core-duplicate-trigger-metadata) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`triggers-core/duplicate-trigger-metadata-entry`](#triggers-core-duplicate-trigger-metadata-entry) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`triggers-qstash/duplicate-schedule-id`](#triggers-qstash-duplicate-schedule-id) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`triggers-qstash/execution-failed`](#triggers-qstash-execution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`triggers-qstash/service-resolution-failed`](#triggers-qstash-service-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`TRPC_ACCESS_DENIED`](#trpc-access-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | -| [`tx-core/after-commit-hooks-failed`](#tx-core-after-commit-hooks-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/after-commit-outcome-required`](#tx-core-after-commit-outcome-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/after-commit-registration-closed`](#tx-core-after-commit-registration-closed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/decorator-misuse`](#tx-core-decorator-misuse) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/detached-transaction-operation`](#tx-core-detached-transaction-operation) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/duplicate-tx-manager-registration`](#tx-core-duplicate-tx-manager-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/invalid-transaction-timeout`](#tx-core-invalid-transaction-timeout) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`tx-core/manager-not-registered`](#tx-core-manager-not-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/missing-transaction-context`](#tx-core-missing-transaction-context) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/outcome-requires-root`](#tx-core-outcome-requires-root) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/propagation-error`](#tx-core-propagation-error) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`tx-core/transaction-outcome-unknown`](#tx-core-transaction-outcome-unknown) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/transaction-rollback-confirmed`](#tx-core-transaction-rollback-confirmed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-core/transaction-timeout`](#tx-core-transaction-timeout) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-drizzle/rls-configuration-invalid`](#tx-drizzle-rls-configuration-invalid) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`tx-drizzle/rls-debug-logging-failed`](#tx-drizzle-rls-debug-logging-failed) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | -| [`tx-drizzle/rls-execute-unsupported`](#tx-drizzle-rls-execute-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-drizzle/savepoint-unsupported`](#tx-drizzle-savepoint-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`tx-drizzle/tenant-context-required`](#tx-drizzle-tenant-context-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`UNAUTHORIZED`](#unauthorized) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | -| [`WEBHOOK_PROCESSING_FAILED`](#webhook-processing-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`WEBHOOK_VALIDATION_FAILED`](#webhook-validation-failed) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`webhooks-core/configuration`](#webhooks-core-configuration) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`webhooks-core/dispatch-failed`](#webhooks-core-dispatch-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`webhooks-core/duplicate-event`](#webhooks-core-duplicate-event) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`webhooks-core/invalid-envelope`](#webhooks-core-invalid-envelope) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`webhooks-core/invalid-fixture`](#webhooks-core-invalid-fixture) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`webhooks-core/invalid-signature`](#webhooks-core-invalid-signature) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`webhooks-core/outbound-acceptance-unknown`](#webhooks-core-outbound-acceptance-unknown) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`webhooks-core/outbound-configuration`](#webhooks-core-outbound-configuration) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`webhooks-core/outbound-endpoint-not-found`](#webhooks-core-outbound-endpoint-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`webhooks-core/outbound-invalid-event`](#webhooks-core-outbound-invalid-event) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`webhooks-core/outbound-invalid-secret-version`](#webhooks-core-outbound-invalid-secret-version) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`webhooks-core/outbound-invalid-url`](#webhooks-core-outbound-invalid-url) | ValidationError | 422 | not-retryable | public | active | 1 | -| [`webhooks-core/outbound-permanent-failure`](#webhooks-core-outbound-permanent-failure) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | -| [`webhooks-core/outbound-replay-not-allowed`](#webhooks-core-outbound-replay-not-allowed) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`webhooks-core/outbound-retryable-failure`](#webhooks-core-outbound-retryable-failure) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`webhooks-core/reporter-failed`](#webhooks-core-reporter-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`webhooks-core/unknown-event`](#webhooks-core-unknown-event) | BadRequest | 400 | not-retryable | public | active | 1 | -| [`workflow-core/duplicate-workflow-registration`](#workflow-core-duplicate-workflow-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`workflow-core/replay-unsupported`](#workflow-core-replay-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`workflow-core/saga-definition-invalid`](#workflow-core-saga-definition-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`workflow-core/saga-execution-failed`](#workflow-core-saga-execution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`workflow-core/saga-execution-not-found`](#workflow-core-saga-execution-not-found) | NotFound | 404 | not-retryable | public | active | 1 | -| [`workflow-core/saga-replay-invalid`](#workflow-core-saga-replay-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`workflow-core/saga-store-conflict`](#workflow-core-saga-store-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | -| [`workflow-core/workflow-definition-invalid`](#workflow-core-workflow-definition-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | -| [`workflow-core/workflow-not-found`](#workflow-core-workflow-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| Code | Category | Status | Retryability | Redaction | Lifecycle | Sources | +| ------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | -----: | ------------- | ------------- | --------- | ------: | +| [`ACCESS_DENIED`](#access-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`access-core/forbidden`](#access-core-forbidden) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`ADMIN_LIFECYCLE_DEMO_INVARIANT`](#admin-lifecycle-demo-invariant) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`admin-console/user-not-found`](#admin-console-user-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`admin-core/credit-operations-permission-denied`](#admin-core-credit-operations-permission-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`admin-core/credit-operations-validation-failed`](#admin-core-credit-operations-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`admin-core/resource-validation-failed`](#admin-core-resource-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`admin-core/webhook-action-validation-failed`](#admin-core-webhook-action-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`admin-generated/contract-diagnostics`](#admin-generated-contract-diagnostics) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`ai-saas/model-not-found`](#ai-saas-model-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`ai-saas/model-required`](#ai-saas-model-required) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`ai-saas/provider-unavailable`](#ai-saas-provider-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`ai-saas/quota-exceeded`](#ai-saas-quota-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`ai-saas/rate-limit-exceeded`](#ai-saas-rate-limit-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`ai-saas/smoke-failed`](#ai-saas-smoke-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`ai-saas/tenant-not-found`](#ai-saas-tenant-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`ai-saas/tenant-required`](#ai-saas-tenant-required) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`ALREADY_MEMBER`](#already-member) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`analytics-posthog/capture-failed`](#analytics-posthog-capture-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`analytics-posthog/flush-failed`](#analytics-posthog-flush-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`analytics-posthog/readiness-failed`](#analytics-posthog-readiness-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`API_KEY_EXPIRED`](#api-key-expired) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`API_KEY_NOT_FOUND`](#api-key-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`API_KEY_REVOKED`](#api-key-revoked) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`architecture-policy/manifest-json-parse`](#architecture-policy-manifest-json-parse) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`architecture-policy/manifest-schema-version`](#architecture-policy-manifest-schema-version) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`architecture-policy/manifest-shape`](#architecture-policy-manifest-shape) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`architecture-policy/package-json-parse`](#architecture-policy-package-json-parse) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`audit-core/auditable-decorator-misuse`](#audit-core-auditable-decorator-misuse) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`audit/insert-failed`](#audit-insert-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-better-auth/authentication-failed`](#auth-better-auth-authentication-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-better-auth/invalid-session-payload`](#auth-better-auth-invalid-session-payload) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-better-auth/invalid-webhook-payload`](#auth-better-auth-invalid-webhook-payload) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`auth-better-auth/invalid-webhook-signature`](#auth-better-auth-invalid-webhook-signature) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`auth-better-auth/not-initialized`](#auth-better-auth-not-initialized) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-better-auth/session-lookup-failed`](#auth-better-auth-session-lookup-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-better-auth/session-not-found`](#auth-better-auth-session-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`auth-better-auth/user-not-found`](#auth-better-auth-user-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`auth-clerk/duplicate-tenant-mapping`](#auth-clerk-duplicate-tenant-mapping) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`auth-clerk/external-service-error`](#auth-clerk-external-service-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-clerk/invalid-webhook-payload`](#auth-clerk-invalid-webhook-payload) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`auth-clerk/malformed-claim`](#auth-clerk-malformed-claim) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`auth-clerk/public-user-data-missing`](#auth-clerk-public-user-data-missing) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-clerk/token-verification-failed`](#auth-clerk-token-verification-failed) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`auth-clerk/token-verification-upstream-failed`](#auth-clerk-token-verification-upstream-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-clerk/webhook-verification-failed`](#auth-clerk-webhook-verification-failed) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`auth-core/api-key-creation-failed`](#auth-core-api-key-creation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-core/api-key-rotation-conflict`](#auth-core-api-key-rotation-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`auth-core/api-key-rotation-protection-failed`](#auth-core-api-key-rotation-protection-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-core/auth-provider-unavailable`](#auth-core-auth-provider-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`auth-core/invalid-api-key-rotation-idempotency-key`](#auth-core-invalid-api-key-rotation-idempotency-key) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`auth-core/invalid-permission-action`](#auth-core-invalid-permission-action) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`auth-core/invalid-permission-format`](#auth-core-invalid-permission-format) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`auth-core/invalid-route-metadata-target`](#auth-core-invalid-route-metadata-target) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`BAD_REQUEST`](#bad-request) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`batch-qstash/invalid-publish-request`](#batch-qstash-invalid-publish-request) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`batch-qstash/missing-config`](#batch-qstash-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`BILLING_STATUS_MAPPING_FAILED`](#billing-status-mapping-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`billing-polar/checkout-idempotency-conflict`](#billing-polar-checkout-idempotency-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing-polar/customer-not-found`](#billing-polar-customer-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`billing-polar/missing-config`](#billing-polar-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`billing-polar/retryable-upstream`](#billing-polar-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`billing-polar/subscription-not-found`](#billing-polar-subscription-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`billing-polar/terminal-upstream`](#billing-polar-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`billing-polar/usage-customer-not-found`](#billing-polar-usage-customer-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`billing-polar/usage-meter-mapping-not-found`](#billing-polar-usage-meter-mapping-not-found) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`billing-polar/validation-failed`](#billing-polar-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`billing/account-not-found`](#billing-account-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`billing/checkout-creation-failed`](#billing-checkout-creation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`billing/checkout-in-progress`](#billing-checkout-in-progress) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/invalid-lifecycle-idempotency-key`](#billing-invalid-lifecycle-idempotency-key) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`billing/invalid-money-amount`](#billing-invalid-money-amount) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`billing/invalid-money-currency`](#billing-invalid-money-currency) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`billing/invalid-plan-release-schedule`](#billing-invalid-plan-release-schedule) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`billing/invalid-plan-release-transition`](#billing-invalid-plan-release-transition) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`billing/invalid-plan-version-definition`](#billing-invalid-plan-version-definition) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`billing/invalid-plan-version-ref`](#billing-invalid-plan-version-ref) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`billing/invalid-subscription-quantity`](#billing-invalid-subscription-quantity) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`billing/lifecycle-command-conflict`](#billing-lifecycle-command-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/lifecycle-command-in-progress`](#billing-lifecycle-command-in-progress) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/lifecycle-command-not-found`](#billing-lifecycle-command-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`billing/money-currency-mismatch`](#billing-money-currency-mismatch) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`billing/money-division-by-zero`](#billing-money-division-by-zero) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`billing/overlapping-plan-effective-period`](#billing-overlapping-plan-effective-period) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/plan-release-provider-capability-failed`](#billing-plan-release-provider-capability-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`billing/plan-release-publish-conflict`](#billing-plan-release-publish-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/plan-release-validation-failed`](#billing-plan-release-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`billing/plan-version-already-published`](#billing-plan-version-already-published) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/plan-version-conflict`](#billing-plan-version-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/provider-capability-unavailable`](#billing-provider-capability-unavailable) | NotImplemented | 501 | not-retryable | public | active | 1 | +| [`billing/stale-plan-release-revision`](#billing-stale-plan-release-revision) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/subscription-not-found`](#billing-subscription-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`billing/subscription-plan-version-mismatch`](#billing-subscription-plan-version-mismatch) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`billing/subscription-quantity-provider-mismatch`](#billing-subscription-quantity-provider-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`billing/subscription-quantity-provider-source-ahead`](#billing-subscription-quantity-provider-source-ahead) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/subscription-quantity-reconciliation-conflict`](#billing-subscription-quantity-reconciliation-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/subscription-quantity-reconciliation-failed`](#billing-subscription-quantity-reconciliation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`billing/subscription-quantity-source-mismatch`](#billing-subscription-quantity-source-mismatch) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`billing/unknown-plan-version`](#billing-unknown-plan-version) | NotFound | 404 | not-retryable | public | active | 1 | +| [`billing/unknown-provider-plan-mapping`](#billing-unknown-provider-plan-mapping) | NotFound | 404 | not-retryable | public | active | 1 | +| [`billing/webhook-already-processed`](#billing-webhook-already-processed) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`BLOCKED_DURING_IMPERSONATION`](#blocked-during-impersonation) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`cache-core/invalid-decorator-config`](#cache-core-invalid-decorator-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`cache-core/invalid-ttl`](#cache-core-invalid-ttl) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`cache-core/invalidation-assertion-failed`](#cache-core-invalidation-assertion-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`cache-core/invalidation-capability-unsupported`](#cache-core-invalidation-capability-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`cache-core/invalidation-event-unknown`](#cache-core-invalidation-event-unknown) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`cache-core/invalidation-failed`](#cache-core-invalidation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`cache-core/invalidation-graph-invalid`](#cache-core-invalidation-graph-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`CIRCUIT_BREAKER_OPEN`](#circuit-breaker-open) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`cloudflare/images-invalid-ttl`](#cloudflare-images-invalid-ttl) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`cloudflare/images-null-result`](#cloudflare-images-null-result) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`cloudflare/images-upload-intent-null-result`](#cloudflare-images-upload-intent-null-result) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`CONFLICTING_PAGINATION`](#conflicting-pagination) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`create-croco-app/directory-not-empty`](#create-croco-app-directory-not-empty) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`create-croco-app/invalid-cli-option`](#create-croco-app-invalid-cli-option) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`create-croco-app/invalid-goal-option`](#create-croco-app-invalid-goal-option) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`create-croco-app/invalid-saas-preset-option`](#create-croco-app-invalid-saas-preset-option) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`create-croco-app/lambda-telemetry-boundary`](#create-croco-app-lambda-telemetry-boundary) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`create-croco-app/unexpected-failure`](#create-croco-app-unexpected-failure) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`create-croco-app/unsupported-node-version`](#create-croco-app-unsupported-node-version) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`create-croco-app/web-meta-vite-fullstack-missing-hydration-root`](#create-croco-app-web-meta-vite-fullstack-missing-hydration-root) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`create-croco-app/web-meta-vite-missing-hydration-root`](#create-croco-app-web-meta-vite-missing-hydration-root) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`credits-core/account-mismatch`](#credits-core-account-mismatch) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`credits-core/account-not-found`](#credits-core-account-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`credits-core/duplicate-conflict`](#credits-core-duplicate-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`credits-core/event-publication-failed`](#credits-core-event-publication-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`credits-core/expired-grant`](#credits-core-expired-grant) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`credits-core/insufficient-credits`](#credits-core-insufficient-credits) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`credits-core/invalid-amount`](#credits-core-invalid-amount) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`credits-core/invalid-command`](#credits-core-invalid-command) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`credits-core/refund-mismatch`](#credits-core-refund-mismatch) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`credits-core/reservation-mismatch`](#credits-core-reservation-mismatch) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`credits-core/stale-ledger-position`](#credits-core-stale-ledger-position) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`credits-core/transaction-not-found`](#credits-core-transaction-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`credits-drizzle/persistence-failure`](#credits-drizzle-persistence-failure) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`CROCO_CLI_JOBS_001`](#croco-cli-jobs-001) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`CROCO_CLI_JOBS_002`](#croco-cli-jobs-002) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`CROCO_CLI_JOBS_003`](#croco-cli-jobs-003) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`CROCO_CLI_JOBS_004`](#croco-cli-jobs-004) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`CROCO_CLI_JOBS_005`](#croco-cli-jobs-005) | NotFound | 404 | not-retryable | public | active | 1 | +| [`CROCO_CLI_OPS_001`](#croco-cli-ops-001) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`CROCO_CLI_OPS_002`](#croco-cli-ops-002) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`CROCO_CLI_USAGE_DASHBOARD_005`](#croco-cli-usage-dashboard-005) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`CROCO_HTTP_MIDDLEWARE_001`](#croco-http-middleware-001) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`CROCO_HTTP_MIDDLEWARE_002`](#croco-http-middleware-002) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`CROCO_HTTP_SECURITY_001`](#croco-http-security-001) | InternalServerError | 500 | not-retryable | public | active | 1 | +| [`CROCO_HTTP_SECURITY_002`](#croco-http-security-002) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`CROCO_TEST_EVIDENCE_CONTRACT_INVALID`](#croco-test-evidence-contract-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`CROCO_TEST_EVIDENCE_FIDELITY_UNSATISFIED`](#croco-test-evidence-fidelity-unsatisfied) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`dataloader-core/batch-result-length-mismatch`](#dataloader-core-batch-result-length-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`diagnostics-core/duplicate-provider`](#diagnostics-core-duplicate-provider) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`diagnostics-core/invalid-timeout`](#diagnostics-core-invalid-timeout) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`DUPLICATE_INVITATION`](#duplicate-invitation) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`DUPLICATE_RECOVER_HANDLER`](#duplicate-recover-handler) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`DURATION_PARSE_ERROR`](#duration-parse-error) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`EMBEDDING_ERROR`](#embedding-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`ENTITLEMENT_DENIED`](#entitlement-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`ENTITLEMENT_INACTIVE_SUBSCRIPTION`](#entitlement-inactive-subscription) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`ENTITLEMENT_MISSING_PLAN`](#entitlement-missing-plan) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`ENTITLEMENT_NOT_FOUND`](#entitlement-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`ENTITLEMENT_PROVIDER_UNAVAILABLE`](#entitlement-provider-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`ENTITLEMENT_QUOTA_EXCEEDED`](#entitlement-quota-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`ENTITLEMENT_REQUIREMENT_INVALID`](#entitlement-requirement-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`entitlements-core/definition-invalid`](#entitlements-core-definition-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`entitlements-core/plan-version-already-registered`](#entitlements-core-plan-version-already-registered) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`entitlements-core/plan-version-mismatch`](#entitlements-core-plan-version-mismatch) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`entitlements-core/plan-version-not-found`](#entitlements-core-plan-version-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`events-core/after-commit-outcome-required`](#events-core-after-commit-outcome-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-core/after-commit-requires-active-transaction`](#events-core-after-commit-requires-active-transaction) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-core/deserialization-error`](#events-core-deserialization-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-core/duplicate-event-field`](#events-core-duplicate-event-field) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-core/duplicate-event-name`](#events-core-duplicate-event-name) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-core/event-bus-not-set`](#events-core-event-bus-not-set) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-core/event-definition-error`](#events-core-event-definition-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-core/transaction-context-unavailable`](#events-core-transaction-context-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-core/unknown-event-type`](#events-core-unknown-event-type) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-inmemory/backpressure-exceeded`](#events-inmemory-backpressure-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`events-inmemory/backpressure-timeout`](#events-inmemory-backpressure-timeout) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`events-inmemory/invalid-configuration`](#events-inmemory-invalid-configuration) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-inmemory/publish-dropped`](#events-inmemory-publish-dropped) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-inmemory/publish-failed`](#events-inmemory-publish-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-tx/configuration-invalid`](#events-tx-configuration-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-tx/inbox-claim-conflict`](#events-tx-inbox-claim-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`events-tx/outbox-idempotency-conflict`](#events-tx-outbox-idempotency-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`events-tx/outbox-publish-exhausted`](#events-tx-outbox-publish-exhausted) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-tx/outbox-transaction-required`](#events-tx-outbox-transaction-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-tx/storage-error`](#events-tx-storage-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`events-tx/transaction-state-error`](#events-tx-transaction-state-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`execution/checkpoint-store-conformance`](#execution-checkpoint-store-conformance) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`execution/conflict`](#execution-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`execution/continuation-conflict`](#execution-continuation-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`execution/continuation-unsupported`](#execution-continuation-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`execution/idempotency-conflict`](#execution-idempotency-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`execution/invalid-continuation-lease-duration`](#execution-invalid-continuation-lease-duration) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`execution/invalid-state-transition`](#execution-invalid-state-transition) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`execution/max-retries-exceeded`](#execution-max-retries-exceeded) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`execution/not-found`](#execution-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`FORBIDDEN`](#forbidden) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`framework-config/config-schema-not-found`](#framework-config-config-schema-not-found) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-config/config-validation-failed`](#framework-config-config-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`framework-config/invalid-boolean-env`](#framework-config-invalid-boolean-env) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`framework-context/circular-dependency`](#framework-context-circular-dependency) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-context/container-scope-disposed`](#framework-context-container-scope-disposed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-context/context-middleware-execution-error`](#framework-context-context-middleware-execution-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-context/di-resolution-failed`](#framework-context-di-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-context/di-scope-mismatch`](#framework-context-di-scope-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-context/on-shutdown-decorator-invalid`](#framework-context-on-shutdown-decorator-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`framework-context/pipeline-graph-invalid`](#framework-context-pipeline-graph-invalid) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`framework-context/policy-capability-unavailable`](#framework-context-policy-capability-unavailable) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`framework-context/policy-conflict`](#framework-context-policy-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`framework-context/policy-definition-invalid`](#framework-context-policy-definition-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`framework-context/request-scope-outside-context`](#framework-context-request-scope-outside-context) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-context/shutdown-configuration-conflict`](#framework-context-shutdown-configuration-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`framework-context/shutdown-hook-execution-failed`](#framework-context-shutdown-hook-execution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-context/shutdown-timeout`](#framework-context-shutdown-timeout) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-module/circular-dependency`](#framework-module-circular-dependency) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-module/invalid-module-definition`](#framework-module-invalid-module-definition) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`framework-module/lifecycle-failed`](#framework-module-lifecycle-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-module/provider-not-visible`](#framework-module-provider-not-visible) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`framework-module/provider-ownership-conflict`](#framework-module-provider-ownership-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`framework-module/provider-write-not-owned`](#framework-module-provider-write-not-owned) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`frontend-problems/fetch-unavailable`](#frontend-problems-fetch-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`frontend-vite/missing-cloudflare-vite-plugin`](#frontend-vite-missing-cloudflare-vite-plugin) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`GENERATION_ERROR`](#generation-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`gid-core/id-type-only-property`](#gid-core-id-type-only-property) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`gid-core/invalid-id-prefix`](#gid-core-invalid-id-prefix) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`governance-core/delete-not-supported`](#governance-core-delete-not-supported) | NotImplemented | 501 | not-retryable | public | active | 1 | +| [`governance-core/export-not-supported`](#governance-core-export-not-supported) | NotImplemented | 501 | not-retryable | public | active | 1 | +| [`governance-core/resource-validation-failed`](#governance-core-resource-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`governance-core/retention-policy-violation`](#governance-core-retention-policy-violation) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`GRAPHQL_NOT_FOUND`](#graphql-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`HEALTH_SCORE_NOT_FOUND`](#health-score-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`health-core/invalid-timeout`](#health-core-invalid-timeout) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`idempotency-core/invalid-key`](#idempotency-core-invalid-key) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`idempotency-core/invalid-ttl`](#idempotency-core-invalid-ttl) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`idempotency-core/key-conflict`](#idempotency-core-key-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`idempotency-core/reservation-expired`](#idempotency-core-reservation-expired) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`idempotency-core/reservation-not-found`](#idempotency-core-reservation-not-found) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`idempotency-core/reservation-state`](#idempotency-core-reservation-state) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`IMPERSONATION_IDENTITY_CONFLICT`](#impersonation-identity-conflict) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`IMPERSONATION_REASON_REQUIRED`](#impersonation-reason-required) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`IMPERSONATION_SESSION_NOT_FOUND`](#impersonation-session-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`IMPERSONATION_TARGET_NOT_FOUND`](#impersonation-target-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`INDEX_NOT_FOUND`](#index-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`integrations-posthog/missing-config`](#integrations-posthog-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`INVALID_AUTO_JOIN_ROLE`](#invalid-auto-join-role) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`INVALID_CURSOR`](#invalid-cursor) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`INVALID_INVITATION_EXPIRY_DURATION`](#invalid-invitation-expiry-duration) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`INVALID_PAGINATION_DIRECTION`](#invalid-pagination-direction) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`INVALID_RETRY_CONFIGURATION`](#invalid-retry-configuration) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`INVALID_ROLE`](#invalid-role) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`INVITATION_ALREADY_ACCEPTED`](#invitation-already-accepted) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`INVITATION_CREATION_FAILED`](#invitation-creation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`INVITATION_EMAIL_MISMATCH`](#invitation-email-mismatch) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`INVITATION_EXPIRED`](#invitation-expired) | Gone | 410 | not-retryable | public | active | 1 | +| [`INVITATION_IDEMPOTENCY_CONFLICT`](#invitation-idempotency-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`INVITATION_INVALID_STATUS`](#invitation-invalid-status) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`INVITATION_NOT_FOUND`](#invitation-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`INVITATION_RATE_LIMIT_EXCEEDED`](#invitation-rate-limit-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`invitation-core/batch-size-exceeded`](#invitation-core-batch-size-exceeded) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`invitation-drizzle/token-cipher-failed`](#invitation-drizzle-token-cipher-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`LAMBDA_TIMEOUT_GUARD`](#lambda-timeout-guard) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`LAST_OWNER`](#last-owner) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`lifecycle-core/action-adapter-failed`](#lifecycle-core-action-adapter-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`lifecycle-core/duplicate-rule`](#lifecycle-core-duplicate-rule) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`lifecycle-core/monetization-recipe-capability-missing`](#lifecycle-core-monetization-recipe-capability-missing) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`lifecycle-core/monetization-signal-invalid`](#lifecycle-core-monetization-signal-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`lifecycle-core/monetization-threshold-claim-unavailable`](#lifecycle-core-monetization-threshold-claim-unavailable) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`lifecycle-core/rule-action-contract-mismatch`](#lifecycle-core-rule-action-contract-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`lifecycle-core/rule-command-conflict`](#lifecycle-core-rule-command-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`lifecycle-core/rule-definition-invalid`](#lifecycle-core-rule-definition-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`lifecycle-core/rule-transition-invalid`](#lifecycle-core-rule-transition-invalid) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`lifecycle-core/rule-version-conflict`](#lifecycle-core-rule-version-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`lifecycle-core/rule-version-definition-invalid`](#lifecycle-core-rule-version-definition-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`lifecycle-core/rule-version-unavailable`](#lifecycle-core-rule-version-unavailable) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`lifecycle-core/rule-version-unknown`](#lifecycle-core-rule-version-unknown) | NotFound | 404 | not-retryable | public | active | 1 | +| [`LLM_PROVIDER_NOT_FOUND`](#llm-provider-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`LLM_SERVICE_ERROR`](#llm-service-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`llm-core/invalid-llm-prompt`](#llm-core-invalid-llm-prompt) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`llm-core/invalid-llm-response`](#llm-core-invalid-llm-response) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`llm-core/llm-service-not-initialized`](#llm-core-llm-service-not-initialized) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`llm-core/rate-limit-exceeded`](#llm-core-rate-limit-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`llm-metering/cost-limit-exceeded`](#llm-metering-cost-limit-exceeded) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`llm-metering/pricing-not-found`](#llm-metering-pricing-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`llm-metering/pricing-registry-conflict`](#llm-metering-pricing-registry-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`llm-metering/quota-exceeded`](#llm-metering-quota-exceeded) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`llm-metering/record-failed`](#llm-metering-record-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`llm-openai/aborted`](#llm-openai-aborted) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`llm-openai/authentication-failed`](#llm-openai-authentication-failed) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`llm-openai/invalid-response`](#llm-openai-invalid-response) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`llm-openai/missing-config`](#llm-openai-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`llm-openai/rate-limited`](#llm-openai-rate-limited) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`llm-openai/retryable-upstream`](#llm-openai-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`llm-openai/terminal-upstream`](#llm-openai-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`llm-openai/validation-failed`](#llm-openai-validation-failed) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`MEMBERSHIP_CONSTRAINT`](#membership-constraint) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`MEMBERSHIP_NOT_FOUND`](#membership-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`meta-vite/server-action-invalid-path`](#meta-vite-server-action-invalid-path) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`meta-vite/server-action-not-found`](#meta-vite-server-action-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`meta-vite/server-action-validation-failed`](#meta-vite-server-action-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`meter/insert-failed`](#meter-insert-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`metering-drizzle/migration-query-result-unsupported`](#metering-drizzle-migration-query-result-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`metering-drizzle/usage-envelope-not-configured`](#metering-drizzle-usage-envelope-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`metering-upstash/missing-config`](#metering-upstash-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`metering/atomic-quota-not-supported`](#metering-atomic-quota-not-supported) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`metering/billable-usage-journal-required`](#metering-billable-usage-journal-required) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`metering/duplicate-record`](#metering-duplicate-record) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`metering/invalid-meter`](#metering-invalid-meter) | NotFound | 404 | not-retryable | public | active | 1 | +| [`metering/invalid-meter-dimension`](#metering-invalid-meter-dimension) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`metering/invalid-usage-envelope`](#metering-invalid-usage-envelope) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`metering/invalid-usage-query`](#metering-invalid-usage-query) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`metering/quota-exceeded`](#metering-quota-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`metering/redis-error`](#metering-redis-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`metering/transition-conflict`](#metering-transition-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`metrics-billing/metric-dropped`](#metrics-billing-metric-dropped) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`metrics-billing/recording-failed`](#metrics-billing-recording-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`metrics-core/carrying-capacity-simulation-error`](#metrics-core-carrying-capacity-simulation-error) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`metrics-core/carrying-capacity-tenant-required`](#metrics-core-carrying-capacity-tenant-required) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`metrics-core/gross-margin-required`](#metrics-core-gross-margin-required) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`metrics-core/invalid-retention-movement`](#metrics-core-invalid-retention-movement) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`metrics-core/mixed-currency-mrr`](#metrics-core-mixed-currency-mrr) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`metrics-core/retention-metrics-unavailable`](#metrics-core-retention-metrics-unavailable) | NotImplemented | 501 | not-retryable | public | active | 1 | +| [`metrics-core/snapshot-tenant-required`](#metrics-core-snapshot-tenant-required) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`MIDDLEWARE_EXECUTION_ERROR`](#middleware-execution-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`migration-runner/database-url-required`](#migration-runner-database-url-required) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`migration-runner/file-load-failed`](#migration-runner-file-load-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`migration-runner/history-drift`](#migration-runner-history-drift) | Conflict | 409 | not-retryable | public | active | 1 | +| [`migration-runner/invalid-count`](#migration-runner-invalid-count) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`migration-runner/missing-down-function`](#migration-runner-missing-down-function) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`migration-runner/missing-up-function`](#migration-runner-missing-up-function) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`migration-runner/transaction-required`](#migration-runner-transaction-required) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`migration-runner/unsupported-dialect`](#migration-runner-unsupported-dialect) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`migration-runner/unsupported-query-result`](#migration-runner-unsupported-query-result) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`MISSING_TENANT`](#missing-tenant) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`MODEL_NOT_FOUND`](#model-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`NESTED_IMPERSONATION_NOT_ALLOWED`](#nested-impersonation-not-allowed) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`notifications-core/default-provider-conflict`](#notifications-core-default-provider-conflict) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`notifications-core/delivery-failed`](#notifications-core-delivery-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`notifications-core/idempotency-key-required`](#notifications-core-idempotency-key-required) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`notifications-core/outbox-idempotency-mismatch`](#notifications-core-outbox-idempotency-mismatch) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`notifications-core/preference-channel-mismatch`](#notifications-core-preference-channel-mismatch) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`notifications-core/preference-context-required`](#notifications-core-preference-context-required) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`notifications-core/preference-denied`](#notifications-core-preference-denied) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`notifications-core/provider-already-registered`](#notifications-core-provider-already-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`notifications-core/provider-channel-mismatch`](#notifications-core-provider-channel-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`notifications-core/provider-idempotency-unsupported`](#notifications-core-provider-idempotency-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`notifications-core/provider-not-configured`](#notifications-core-provider-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`notifications-core/provider-not-found`](#notifications-core-provider-not-found) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`notifications-core/provider-not-registered`](#notifications-core-provider-not-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`notifications-core/send-max-attempts-invalid`](#notifications-core-send-max-attempts-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`notifications-core/template-already-registered`](#notifications-core-template-already-registered) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`notifications-core/template-not-found`](#notifications-core-template-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`notifications-core/template-variables-invalid`](#notifications-core-template-variables-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`notifications-resend/idempotency-conflict`](#notifications-resend-idempotency-conflict) | Conflict | 409 | not-retryable | safe-message | active | 1 | +| [`notifications-resend/missing-config`](#notifications-resend-missing-config) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`notifications-resend/retryable-upstream`](#notifications-resend-retryable-upstream) | InternalServerError | 500 | retryable | operator-only | active | 1 | +| [`notifications-resend/terminal-upstream`](#notifications-resend-terminal-upstream) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`notifications-resend/validation-failed`](#notifications-resend-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`onboarding/context-required`](#onboarding-context-required) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`onboarding/definition-not-found`](#onboarding-definition-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`onboarding/step-not-found`](#onboarding-step-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`openapi-spec/controller-typescript-diagnostics`](#openapi-spec-controller-typescript-diagnostics) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`openapi-spec/invalid-contract`](#openapi-spec-invalid-contract) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`openapi-spec/no-rest-controllers-found`](#openapi-spec-no-rest-controllers-found) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`OTLP_ENDPOINT_REQUIRED`](#otlp-endpoint-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`outbox-core/dispatch-failed`](#outbox-core-dispatch-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`outbox-core/failure-metadata-missing`](#outbox-core-failure-metadata-missing) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`outbox-core/record-id-conflict`](#outbox-core-record-id-conflict) | Conflict | 409 | not-retryable | safe-message | active | 1 | +| [`outbox-core/unit-of-work-context-invalid`](#outbox-core-unit-of-work-context-invalid) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`OWNERSHIP_TRANSFER_REQUIRED`](#ownership-transfer-required) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`problems-core/invalid-extensions`](#problems-core-invalid-extensions) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`problems-core/parse-error`](#problems-core-parse-error) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`problems-core/problem-registry-invalid`](#problems-core-problem-registry-invalid) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`problems-core/unhandled-category`](#problems-core-unhandled-category) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`protocols-core/contract-graph-diagnostics`](#protocols-core-contract-graph-diagnostics) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`protocols-graphql/auth-invalid-header-format`](#protocols-graphql-auth-invalid-header-format) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`protocols-graphql/auth-invalid-request`](#protocols-graphql-auth-invalid-request) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`protocols-graphql/auth-invalid-token`](#protocols-graphql-auth-invalid-token) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`protocols-graphql/auth-missing-header`](#protocols-graphql-auth-missing-header) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`protocols-graphql/auth-verifier-unavailable`](#protocols-graphql-auth-verifier-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`protocols-graphql/guard-denied`](#protocols-graphql-guard-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`protocols-rest/auth-invalid-header-format`](#protocols-rest-auth-invalid-header-format) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`protocols-rest/auth-invalid-request`](#protocols-rest-auth-invalid-request) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`protocols-rest/auth-invalid-token`](#protocols-rest-auth-invalid-token) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`protocols-rest/auth-missing-header`](#protocols-rest-auth-missing-header) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`protocols-rest/auth-verifier-unavailable`](#protocols-rest-auth-verifier-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`protocols-rest/duplicate-parameter-index`](#protocols-rest-duplicate-parameter-index) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`protocols-rest/request-validation-failed`](#protocols-rest-request-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`protocols-rest/response-validation-failed`](#protocols-rest-response-validation-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`protocols-rest/validation-failed`](#protocols-rest-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`protocols-trpc/duplicate-parameter-index`](#protocols-trpc-duplicate-parameter-index) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`protocols-trpc/duplicate-procedure-name`](#protocols-trpc-duplicate-procedure-name) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`protocols-trpc/provider-container-required`](#protocols-trpc-provider-container-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`protocols-trpc/request-normalization-failed`](#protocols-trpc-request-normalization-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`protocols-trpc/request-unavailable`](#protocols-trpc-request-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`protocols-trpc/route-handler-not-callable`](#protocols-trpc-route-handler-not-callable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`PUBLIC_EMAIL_DOMAIN_NOT_ALLOWED`](#public-email-domain-not-allowed) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`RATE_LIMIT_EXCEEDED`](#rate-limit-exceeded) | TooManyRequests | 429 | retryable | safe-message | active | 1 | +| [`RATE_LIMIT_KEY_BUILDER_ERROR`](#rate-limit-key-builder-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`RATE_LIMIT_REFUND_UNSUPPORTED`](#rate-limit-refund-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`RATE_LIMIT_WINDOW_ERROR`](#rate-limit-window-error) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`ratelimit-upstash/invalid-policy`](#ratelimit-upstash-invalid-policy) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`ratelimit-upstash/missing-config`](#ratelimit-upstash-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`ratelimit/prune-interval`](#ratelimit-prune-interval) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`repository-core/batch-load-result-identity-mismatch`](#repository-core-batch-load-result-identity-mismatch) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`repository-core/batch-load-result-key-duplicate`](#repository-core-batch-load-result-key-duplicate) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`repository-core/batch-load-result-key-unexpected`](#repository-core-batch-load-result-key-unexpected) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`repository-core/batch-load-result-unkeyed`](#repository-core-batch-load-result-unkeyed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`repository-core/batch-loader-factory-not-registered`](#repository-core-batch-loader-factory-not-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`repository-core/batch-loader-factory-resolution-failed`](#repository-core-batch-loader-factory-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`repository-core/batch-loader-scope-collision`](#repository-core-batch-loader-scope-collision) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`RESEND_NOTIFICATION_FAILED`](#resend-notification-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`RETRY_ABORTED`](#retry-aborted) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`RETRY_CIRCUIT_BREAKER_INVALID_STATE`](#retry-circuit-breaker-invalid-state) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`RETRY_CIRCUIT_BREAKER_LOCK_FAILED`](#retry-circuit-breaker-lock-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`RETRY_EXHAUSTED`](#retry-exhausted) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`retry-core/backoff-cancellation-unsupported`](#retry-core-backoff-cancellation-unsupported) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`retry-core/circuit-breaker-unexpected-state`](#retry-core-circuit-breaker-unexpected-state) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`retry-core/success-hook-failed`](#retry-core-success-hook-failed) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`ROLE_HIERARCHY_VIOLATION`](#role-hierarchy-violation) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`rpc-codegen/controller-typescript-diagnostics`](#rpc-codegen-controller-typescript-diagnostics) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`rpc-codegen/invalid-contract`](#rpc-codegen-invalid-contract) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`rpc-codegen/no-rest-controllers-found`](#rpc-codegen-no-rest-controllers-found) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`rpc-codegen/unsupported-form-schema`](#rpc-codegen-unsupported-form-schema) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`saas-demo/demo-endpoint-disabled`](#saas-demo-demo-endpoint-disabled) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`saas-demo/invalid-jobs-query`](#saas-demo-invalid-jobs-query) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`saas-demo/invalid-port`](#saas-demo-invalid-port) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`saas-demo/job-not-found`](#saas-demo-job-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`saas-demo/smoke-failed`](#saas-demo-smoke-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`saas-demo/tenant-already-exists`](#saas-demo-tenant-already-exists) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`saas-demo/tenant-not-found`](#saas-demo-tenant-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`SEARCH_CAPABILITY_UNAVAILABLE`](#search-capability-unavailable) | NotImplemented | 501 | not-retryable | public | active | 1 | +| [`SEARCH_DRIZZLE_INVALID_ROW`](#search-drizzle-invalid-row) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`search-core/sync-identity-conflict`](#search-core-sync-identity-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`search-core/transform-not-found`](#search-core-transform-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`search-meilisearch/index-not-found`](#search-meilisearch-index-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`search-meilisearch/invalid-request`](#search-meilisearch-invalid-request) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`search-meilisearch/missing-config`](#search-meilisearch-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`search-meilisearch/retryable-upstream`](#search-meilisearch-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`search-meilisearch/tenant-token-not-configured`](#search-meilisearch-tenant-token-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`search-meilisearch/terminal-upstream`](#search-meilisearch-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`SEAT_LIMIT_EXCEEDED`](#seat-limit-exceeded) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`SELF_IMPERSONATION_NOT_ALLOWED`](#self-impersonation-not-allowed) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`starter/invalid-environment`](#starter-invalid-environment) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`starter/unhandled-api-request`](#starter-unhandled-api-request) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`starter/user-not-found`](#starter-user-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`STORAGE_DELETE_FAILED`](#storage-delete-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`STORAGE_FILE_NOT_FOUND`](#storage-file-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`STORAGE_INVALID_KEY`](#storage-invalid-key) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`STORAGE_INVALID_SIGNED_URL_EXPIRY`](#storage-invalid-signed-url-expiry) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`STORAGE_R2_EMPTY_BODY`](#storage-r2-empty-body) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`STORAGE_R2_MISSING_CONFIG`](#storage-r2-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`STORAGE_R2_OBJECT_TOO_LARGE`](#storage-r2-object-too-large) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`STORAGE_R2_READINESS_FAILED`](#storage-r2-readiness-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`STORAGE_UPLOAD_FAILED`](#storage-upload-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`storage-cloudflare/missing-config`](#storage-cloudflare-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`storage-cloudflare/retryable-upstream`](#storage-cloudflare-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`storage-cloudflare/terminal-upstream`](#storage-cloudflare-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`storage-cloudflare/validation-failed`](#storage-cloudflare-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`storage-cloudinary/invalid-upload-intent-ttl`](#storage-cloudinary-invalid-upload-intent-ttl) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`storage-cloudinary/missing-config`](#storage-cloudinary-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`storage-cloudinary/retryable-upstream`](#storage-cloudinary-retryable-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`storage-cloudinary/terminal-upstream`](#storage-cloudinary-terminal-upstream) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`storage-cloudinary/validation-failed`](#storage-cloudinary-validation-failed) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`storage/invalid-upload-intent-ttl`](#storage-invalid-upload-intent-ttl) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`STRATEGY_UNAVAILABLE`](#strategy-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`STRUCTURED_OUTPUT_ERROR`](#structured-output-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tasks-core/duplicate-task-registration`](#tasks-core-duplicate-task-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tasks-core/execution-timeout`](#tasks-core-execution-timeout) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tasks-core/task-not-found`](#tasks-core-task-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`tasks-core/task-runner-di-failure`](#tasks-core-task-runner-di-failure) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tasks-qstash/invalid-publish-request`](#tasks-qstash-invalid-publish-request) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`tasks-qstash/missing-config`](#tasks-qstash-missing-config) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`TELEMETRY_AUTO_INSTRUMENTATION_INVALID_CONFIG`](#telemetry-auto-instrumentation-invalid-config) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`TELEMETRY_FORCE_FLUSH_UNSUPPORTED`](#telemetry-force-flush-unsupported) | NotImplemented | 501 | not-retryable | public | active | 1 | +| [`TELEMETRY_RUNTIME_ERROR`](#telemetry-runtime-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`TELEMETRY_SAMPLER_INVALID_CONFIG`](#telemetry-sampler-invalid-config) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`TELEMETRY_SIGNAL_UNSUPPORTED`](#telemetry-signal-unsupported) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`tenant-core/admin-bypass-reason-required`](#tenant-core-admin-bypass-reason-required) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`tenant-core/cross-tenant-leak`](#tenant-core-cross-tenant-leak) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tenant-core/default-tenant-fallback`](#tenant-core-default-tenant-fallback) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`tenant-core/duplicate-tenant-manager-registration`](#tenant-core-duplicate-tenant-manager-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tenant-core/isolation-context-missing`](#tenant-core-isolation-context-missing) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`tenant-core/tenant-manager-not-registered`](#tenant-core-tenant-manager-not-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tenant-core/unsafe-query`](#tenant-core-unsafe-query) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`tenant/not-found`](#tenant-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`tenant/required`](#tenant-required) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`testing-resources/cleanup-failed`](#testing-resources-cleanup-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing-resources/health-check-failed`](#testing-resources-health-check-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing-resources/invalid-configuration`](#testing-resources-invalid-configuration) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing-resources/migration-failed`](#testing-resources-migration-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing-resources/startup-failed`](#testing-resources-startup-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/after-commit-hooks-failed`](#testing-after-commit-hooks-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/telemetry-provider-already-installed`](#testing-telemetry-provider-already-installed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/test-kernel-disposal-failed`](#testing-test-kernel-disposal-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/test-kernel-disposed`](#testing-test-kernel-disposed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/test-kernel-leak`](#testing-test-kernel-leak) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/test-kernel-outbound-call`](#testing-test-kernel-outbound-call) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/test-kernel-resource-fidelity`](#testing-test-kernel-resource-fidelity) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/test-kernel-resource-not-found`](#testing-test-kernel-resource-not-found) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/test-kernel-resource-registration`](#testing-test-kernel-resource-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/test-kernel-validation-policy`](#testing-test-kernel-validation-policy) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/test-runtime-configuration`](#testing-test-runtime-configuration) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`testing/test-runtime-drain-limit`](#testing-test-runtime-drain-limit) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`testing/transaction-context-not-active`](#testing-transaction-context-not-active) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`TOKEN_LIMIT_EXCEEDED`](#token-limit-exceeded) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`TOOL_EXECUTION_ERROR`](#tool-execution-error) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-graphql/request-body-aborted`](#transports-graphql-request-body-aborted) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`transports-graphql/request-body-too-large`](#transports-graphql-request-body-too-large) | PayloadTooLarge | 413 | not-retryable | public | active | 1 | +| [`transports-graphql/resolvers-not-configured`](#transports-graphql-resolvers-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-graphql/schema-not-configured`](#transports-graphql-schema-not-configured) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-graphql/server-not-initialized`](#transports-graphql-server-not-initialized) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-http/body-limit-invalid-configuration`](#transports-http-body-limit-invalid-configuration) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`transports-http/di-bootstrap-validation`](#transports-http-di-bootstrap-validation) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-http/duplicate-health-check`](#transports-http-duplicate-health-check) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-http/duplicate-route-definition`](#transports-http-duplicate-route-definition) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`transports-http/graceful-shutdown-configuration`](#transports-http-graceful-shutdown-configuration) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`transports-http/graceful-shutdown-timeout`](#transports-http-graceful-shutdown-timeout) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-http/middleware-next-called-multiple-times`](#transports-http-middleware-next-called-multiple-times) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`transports-http/pipe-resolution-failed`](#transports-http-pipe-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-http/provider-resolution-failed`](#transports-http-provider-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-http/request-body-read-failed`](#transports-http-request-body-read-failed) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`transports-http/request-body-too-large`](#transports-http-request-body-too-large) | PayloadTooLarge | 413\* | not-retryable | public | active | 1 | +| [`transports-http/request-body-unavailable`](#transports-http-request-body-unavailable) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-http/route-method-not-function`](#transports-http-route-method-not-function) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`transports-http/runtime-capability-invalid`](#transports-http-runtime-capability-invalid) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`transports-http/security-middleware-validation`](#transports-http-security-middleware-validation) | InternalServerError | 500 | not-retryable | public | active | 1 | +| [`transports-http/unsupported-route-method`](#transports-http-unsupported-route-method) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`triggers-core/duplicate-trigger-metadata`](#triggers-core-duplicate-trigger-metadata) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`triggers-core/duplicate-trigger-metadata-entry`](#triggers-core-duplicate-trigger-metadata-entry) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`triggers-qstash/duplicate-schedule-id`](#triggers-qstash-duplicate-schedule-id) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`triggers-qstash/execution-failed`](#triggers-qstash-execution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`triggers-qstash/service-resolution-failed`](#triggers-qstash-service-resolution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`TRPC_ACCESS_DENIED`](#trpc-access-denied) | Forbidden | 403 | not-retryable | safe-message | active | 1 | +| [`tx-core/after-commit-hooks-failed`](#tx-core-after-commit-hooks-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/after-commit-outcome-required`](#tx-core-after-commit-outcome-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/after-commit-registration-closed`](#tx-core-after-commit-registration-closed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/decorator-misuse`](#tx-core-decorator-misuse) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/detached-transaction-operation`](#tx-core-detached-transaction-operation) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/duplicate-tx-manager-registration`](#tx-core-duplicate-tx-manager-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/invalid-transaction-timeout`](#tx-core-invalid-transaction-timeout) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`tx-core/manager-not-registered`](#tx-core-manager-not-registered) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/missing-transaction-context`](#tx-core-missing-transaction-context) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/outcome-requires-root`](#tx-core-outcome-requires-root) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/propagation-error`](#tx-core-propagation-error) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`tx-core/transaction-outcome-unknown`](#tx-core-transaction-outcome-unknown) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/transaction-rollback-confirmed`](#tx-core-transaction-rollback-confirmed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-core/transaction-timeout`](#tx-core-transaction-timeout) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-drizzle/rls-configuration-invalid`](#tx-drizzle-rls-configuration-invalid) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`tx-drizzle/rls-debug-logging-failed`](#tx-drizzle-rls-debug-logging-failed) | InternalServerError | 500 | not-retryable | operator-only | active | 1 | +| [`tx-drizzle/rls-execute-unsupported`](#tx-drizzle-rls-execute-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-drizzle/savepoint-unsupported`](#tx-drizzle-savepoint-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`tx-drizzle/tenant-context-required`](#tx-drizzle-tenant-context-required) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`UNAUTHORIZED`](#unauthorized) | Unauthorized | 401 | not-retryable | safe-message | active | 1 | +| [`WEBHOOK_PROCESSING_FAILED`](#webhook-processing-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`WEBHOOK_VALIDATION_FAILED`](#webhook-validation-failed) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`webhooks-core/configuration`](#webhooks-core-configuration) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`webhooks-core/dispatch-failed`](#webhooks-core-dispatch-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`webhooks-core/duplicate-event`](#webhooks-core-duplicate-event) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`webhooks-core/invalid-envelope`](#webhooks-core-invalid-envelope) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`webhooks-core/invalid-fixture`](#webhooks-core-invalid-fixture) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`webhooks-core/invalid-signature`](#webhooks-core-invalid-signature) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`webhooks-core/outbound-acceptance-unknown`](#webhooks-core-outbound-acceptance-unknown) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`webhooks-core/outbound-configuration`](#webhooks-core-outbound-configuration) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`webhooks-core/outbound-endpoint-not-found`](#webhooks-core-outbound-endpoint-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`webhooks-core/outbound-invalid-event`](#webhooks-core-outbound-invalid-event) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`webhooks-core/outbound-invalid-secret-version`](#webhooks-core-outbound-invalid-secret-version) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`webhooks-core/outbound-invalid-url`](#webhooks-core-outbound-invalid-url) | ValidationError | 422 | not-retryable | public | active | 1 | +| [`webhooks-core/outbound-permanent-failure`](#webhooks-core-outbound-permanent-failure) | BusinessRuleViolation | 422 | conditional | safe-message | active | 1 | +| [`webhooks-core/outbound-replay-not-allowed`](#webhooks-core-outbound-replay-not-allowed) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`webhooks-core/outbound-retryable-failure`](#webhooks-core-outbound-retryable-failure) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`webhooks-core/reporter-failed`](#webhooks-core-reporter-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`webhooks-core/unknown-event`](#webhooks-core-unknown-event) | BadRequest | 400 | not-retryable | public | active | 1 | +| [`workflow-core/duplicate-workflow-registration`](#workflow-core-duplicate-workflow-registration) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`workflow-core/replay-unsupported`](#workflow-core-replay-unsupported) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`workflow-core/saga-definition-invalid`](#workflow-core-saga-definition-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`workflow-core/saga-execution-failed`](#workflow-core-saga-execution-failed) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`workflow-core/saga-execution-not-found`](#workflow-core-saga-execution-not-found) | NotFound | 404 | not-retryable | public | active | 1 | +| [`workflow-core/saga-replay-invalid`](#workflow-core-saga-replay-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`workflow-core/saga-store-conflict`](#workflow-core-saga-store-conflict) | Conflict | 409 | conditional | safe-message | active | 1 | +| [`workflow-core/workflow-definition-invalid`](#workflow-core-workflow-definition-invalid) | InternalServerError | 500 | conditional | operator-only | active | 1 | +| [`workflow-core/workflow-not-found`](#workflow-core-workflow-not-found) | NotFound | 404 | not-retryable | public | active | 1 | \* Runtime-configurable statuses show their canonical default; see the entry details for the configuration surface. @@ -7654,6 +7655,24 @@ Sources: - `packages/protocols-trpc/src/libs/TrpcParamResolver.ts:71:13` (problem-factory) + + +## `protocols-trpc/duplicate-procedure-name` + +- Category: `InternalServerError` +- HTTP status: `500` Internal Server Error +- Retryability: `not-retryable` +- Redaction policy: `operator-only` +- Lifecycle: `active` +- Cause: Two controller routes resolve to the same tRPC domain and procedure name. +- User action: Use an application build where every tRPC procedure has a unique domain and controller method name combination. +- Operator action: Inspect the duplicate-procedure diagnostic for the existing and conflicting controller routes and their decorator source locations, then change one domain or controller method name. +- Telemetry: `croco.problem.error` (error) with `problem.code`, `problem.category`, `problem.status` + +Sources: + +- `packages/protocols-trpc/src/libs/createTrpcRouter.ts:93:3` (problem-class) + ## `protocols-trpc/provider-container-required` @@ -7670,7 +7689,7 @@ Sources: Sources: -- `packages/protocols-trpc/src/libs/createTrpcRouter.ts:70:3` (problem-class) +- `packages/protocols-trpc/src/libs/createTrpcRouter.ts:77:3` (problem-class) @@ -7724,7 +7743,7 @@ Sources: Sources: -- `packages/protocols-trpc/src/libs/createTrpcRouter.ts:57:3` (problem-class) +- `packages/protocols-trpc/src/libs/createTrpcRouter.ts:64:3` (problem-class) @@ -9192,18 +9211,12 @@ Sources: - HTTP status: `400` Bad Request - Retryability: `not-retryable` - Redaction policy: `public` -- Lifecycle: `deprecated` +- Lifecycle: `active` - Cause: The caller sent malformed input or unsupported request options. - User action: Correct the request input and retry after validation passes. - Operator action: Inspect validation details and request logs; do not retry unchanged input. - Telemetry: `croco.problem.info` (info) with `problem.code`, `problem.category`, `problem.status` -Deprecation: - -- Reason: The telemetry SDK no longer exposes non-executable metrics or logs configuration. -- Migration note: Stop branching on TELEMETRY_SIGNAL_UNSUPPORTED and remove metrics or logs options from TelemetryConfig consumers. -- No replacement reason: The trace-only runtime has no unsupported signal configuration path to replace this code. - Sources: - `packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts:38:3` (problem-class) diff --git a/packages/problems-core/src/generated/problem-code-registry.ts b/packages/problems-core/src/generated/problem-code-registry.ts index 2256fd6d2..f2da2ba6c 100644 --- a/packages/problems-core/src/generated/problem-code-registry.ts +++ b/packages/problems-core/src/generated/problem-code-registry.ts @@ -3,7 +3,7 @@ import type { ProblemCodeRegistry } from "../libs/ProblemRegistry"; export const CROCO_PROBLEM_CODE_REGISTRY = { version: "croco.problem-code-registry.v1", - problemCount: 582, + problemCount: 583, problems: [ { code: "ACCESS_DENIED", @@ -12231,6 +12231,38 @@ export const CROCO_PROBLEM_CODE_REGISTRY = { }, ], }, + { + code: "protocols-trpc/duplicate-procedure-name", + category: "InternalServerError", + status: 500, + title: "Internal Server Error", + cookbookPath: "/reference/problem-recovery-cookbook/#protocols-trpc-duplicate-procedure-name", + recovery: { + cause: "Two controller routes resolve to the same tRPC domain and procedure name.", + userAction: + "Use an application build where every tRPC procedure has a unique domain and controller method name combination.", + operatorAction: + "Inspect the duplicate-procedure diagnostic for the existing and conflicting controller routes and their decorator source locations, then change one domain or controller method name.", + retryability: "not-retryable", + redactionPolicy: "operator-only", + telemetry: { + eventName: "croco.problem.error", + severity: "error", + attributes: ["problem.code", "problem.category", "problem.status"], + }, + }, + lifecycle: { + status: "active", + }, + sources: [ + { + file: "packages/protocols-trpc/src/libs/createTrpcRouter.ts", + line: 93, + column: 3, + kind: "problem-class", + }, + ], + }, { code: "protocols-trpc/provider-container-required", category: "InternalServerError", @@ -12258,7 +12290,7 @@ export const CROCO_PROBLEM_CODE_REGISTRY = { sources: [ { file: "packages/protocols-trpc/src/libs/createTrpcRouter.ts", - line: 70, + line: 77, column: 3, kind: "problem-class", }, @@ -12356,7 +12388,7 @@ export const CROCO_PROBLEM_CODE_REGISTRY = { sources: [ { file: "packages/protocols-trpc/src/libs/createTrpcRouter.ts", - line: 57, + line: 64, column: 3, kind: "problem-class", }, @@ -14934,15 +14966,7 @@ export const CROCO_PROBLEM_CODE_REGISTRY = { }, }, lifecycle: { - status: "deprecated", - deprecation: { - reason: - "The telemetry SDK no longer exposes non-executable metrics or logs configuration.", - migrationNote: - "Stop branching on TELEMETRY_SIGNAL_UNSUPPORTED and remove metrics or logs options from TelemetryConfig consumers.", - noReplacementReason: - "The trace-only runtime has no unsupported signal configuration path to replace this code.", - }, + status: "active", }, sources: [ { diff --git a/packages/protocols-trpc/src/libs/createTrpcRouter.ts b/packages/protocols-trpc/src/libs/createTrpcRouter.ts index bc38ef939..edfaf3c3c 100644 --- a/packages/protocols-trpc/src/libs/createTrpcRouter.ts +++ b/packages/protocols-trpc/src/libs/createTrpcRouter.ts @@ -1,7 +1,7 @@ import { Container, Context } from "@croco/framework-context"; import type { RequestContext } from "@croco/framework-context"; import { Problem, ProblemCategory } from "@croco/problems-core"; -import type { RouteIR } from "@croco/protocols-core"; +import type { RouteContractSourceLocation, RouteIR } from "@croco/protocols-core"; import { extractRouteIR } from "@croco/protocols-core"; import { getFilters, getGuards, getInterceptors, type Constructor } from "@croco/protocols-rest"; import { @@ -17,6 +17,13 @@ import { TrpcExecutionPipeline, type TrpcPipelineConfig } from "./TrpcExecutionP type ControllerConstructor = (new () => object) & Function; type RouteHandler = (...args: unknown[]) => unknown; +type TrpcRouteDiagnostic = { + readonly controllerName: string; + readonly methodName: string; + readonly httpMethod: string; + readonly path: string; + readonly sourceLocation?: RouteContractSourceLocation; +}; export type TrpcRouterOptions = { readonly container?: { @@ -82,6 +89,27 @@ class TrpcProviderContainerProblem extends Problem { } } +class TrpcDuplicateProcedureProblem extends Problem { + readonly code = "protocols-trpc/duplicate-procedure-name"; + readonly category = ProblemCategory.InternalServerError; + + constructor( + domain: string, + procedureName: string, + existingRoute: TrpcRouteDiagnostic, + conflictingRoute: TrpcRouteDiagnostic, + ) { + super( + undefined, + undefined, + formatDuplicateProcedureDetail(domain, procedureName, existingRoute, conflictingRoute), + { + extensions: { domain, procedureName, existingRoute, conflictingRoute }, + }, + ); + } +} + /** * Creates a tRPC router whose procedures run Croco guards before input parsing, then interceptors around handlers. * @@ -94,12 +122,28 @@ export function createTrpcRouter( options: TrpcRouterOptions = {}, ): AnyRouter { const domains: Record = {}; + const procedureSources = new Map>(); for (const controller of controllers) { const controllerCtor = controller as ControllerConstructor; for (const route of extractRouteIR(controllerCtor)) { const domain = getDomainName(route); + const routeDiagnostic = toRouteDiagnostic(route); + const domainSources = procedureSources.get(domain) ?? new Map(); + const existingRoute = domainSources.get(route.methodName); + + if (existingRoute) { + throw new TrpcDuplicateProcedureProblem( + domain, + route.methodName, + existingRoute, + routeDiagnostic, + ); + } + + domainSources.set(route.methodName, routeDiagnostic); + procedureSources.set(domain, domainSources); domains[domain] ??= {}; domains[domain][route.methodName] = createProcedure(controllerCtor, route, options); } @@ -200,6 +244,52 @@ function getDomainName(route: RouteIR): string { return domain.charAt(0).toLowerCase() + domain.slice(1); } +function toRouteDiagnostic(route: RouteIR): TrpcRouteDiagnostic { + return { + controllerName: route.controllerName, + methodName: route.methodName, + httpMethod: route.httpMethod, + path: route.path, + ...(route.sourceLocation ? { sourceLocation: route.sourceLocation } : {}), + }; +} + +function formatDuplicateProcedureDetail( + domain: string, + procedureName: string, + existingRoute: TrpcRouteDiagnostic, + conflictingRoute: TrpcRouteDiagnostic, +): string { + return [ + `Duplicate tRPC procedure detected for ${domain}.${procedureName}.`, + `Existing route: ${formatRouteDiagnostic(existingRoute)}.`, + `Conflicting route: ${formatRouteDiagnostic(conflictingRoute)}.`, + "Recovery: give one route a unique tRPC domain or controller method name before constructing the router.", + ].join(" "); +} + +function formatRouteDiagnostic(route: TrpcRouteDiagnostic): string { + const routeLabel = `${route.controllerName}.${route.methodName} (${route.httpMethod} ${route.path})`; + const sourceLocation = formatSourceLocation(route.sourceLocation); + + return sourceLocation + ? `${routeLabel} at ${sourceLocation}` + : `${routeLabel} (route decorator source unavailable)`; +} + +function formatSourceLocation( + sourceLocation: RouteContractSourceLocation | undefined, +): string | null { + if (!sourceLocation) { + return null; + } + + const line = sourceLocation.line === undefined ? "" : `:${sourceLocation.line}`; + const column = sourceLocation.column === undefined ? "" : `:${sourceLocation.column}`; + + return `${sourceLocation.path}${line}${column}`; +} + function isRouteHandler(value: unknown): value is RouteHandler { return typeof value === "function"; } diff --git a/packages/protocols-trpc/src/tests/createTrpcRouter.spec.ts b/packages/protocols-trpc/src/tests/createTrpcRouter.spec.ts index c4a8bbeea..daaa72aa2 100644 --- a/packages/protocols-trpc/src/tests/createTrpcRouter.spec.ts +++ b/packages/protocols-trpc/src/tests/createTrpcRouter.spec.ts @@ -316,6 +316,71 @@ describe("createTrpcRouter", () => { expect(router._def.record).toHaveProperty("order"); }); + it("should reject duplicate domain and procedure names with both source routes", () => { + class PublicUserController { + listUsers(): string[] { + return ["public-user"]; + } + } + + class AdminUserController { + listUsers(): string[] { + return ["admin-user"]; + } + } + + mocked.extractRouteIR = (controller) => [ + { + controllerName: controller.name, + methodName: "listUsers", + httpMethod: controller === PublicUserController ? "GET" : "POST", + path: controller === PublicUserController ? "/public/users" : "/admin/users", + sourceLocation: + controller === PublicUserController + ? { path: "src/PublicUserController.ts", line: 12, column: 3 } + : { path: "src/AdminUserController.ts", line: 24, column: 5 }, + routeContract: null, + params: [], + inputSchema: null, + inputSchemas: { body: null, path: null, query: null, headers: null }, + outputSchema: null, + domain: "user", + }, + ]; + + const error = captureThrownValue(() => + createTrpcRouter([PublicUserController, AdminUserController]), + ) as { readonly toJSON: () => Record }; + const problem = error.toJSON(); + + expect(problem).toMatchObject({ + code: "protocols-trpc/duplicate-procedure-name", + status: 500, + domain: "user", + procedureName: "listUsers", + existingRoute: { + controllerName: "PublicUserController", + methodName: "listUsers", + httpMethod: "GET", + path: "/public/users", + sourceLocation: { path: "src/PublicUserController.ts", line: 12, column: 3 }, + }, + conflictingRoute: { + controllerName: "AdminUserController", + methodName: "listUsers", + httpMethod: "POST", + path: "/admin/users", + sourceLocation: { path: "src/AdminUserController.ts", line: 24, column: 5 }, + }, + }); + expect(problem.detail).toContain( + "Existing route: PublicUserController.listUsers (GET /public/users) at src/PublicUserController.ts:12:3.", + ); + expect(problem.detail).toContain( + "Conflicting route: AdminUserController.listUsers (POST /admin/users) at src/AdminUserController.ts:24:5.", + ); + }); + it("should expose a coded error when route metadata points at a non-callable handler", async () => { class UserController { readonly listUsers = "not callable"; @@ -697,6 +762,16 @@ async function closeServer(server: ReturnType): Promise }); } +function captureThrownValue(callback: () => unknown): unknown { + try { + callback(); + } catch (error) { + return error; + } + + expect.fail("Expected callback to throw."); +} + function extractTestRouteIR(controllerCtor: Function): RouteIR[] { const controllerMeta = Reflect.getMetadata(REST_CONTROLLER_KEY, controllerCtor) as | ControllerMetadata diff --git a/packages/protocols-trpc/src/tests/round-trip.spec.ts b/packages/protocols-trpc/src/tests/round-trip.spec.ts index 35efbb23c..9b0949023 100644 --- a/packages/protocols-trpc/src/tests/round-trip.spec.ts +++ b/packages/protocols-trpc/src/tests/round-trip.spec.ts @@ -106,8 +106,75 @@ describe("tRPC round trip", () => { data: expect.objectContaining({ code: "BAD_REQUEST" }), } satisfies Partial>); }); + + it("should report both decorator locations for duplicate procedures", () => { + const ExistingUserController = createExistingUserController(); + const ConflictingUserController = createConflictingUserController(); + Object.defineProperty(ExistingUserController, "name", { value: "UserController" }); + Object.defineProperty(ConflictingUserController, "name", { value: "UserController" }); + let thrown: unknown; + + try { + createTrpcRouter([ExistingUserController, ConflictingUserController]); + } catch (error) { + thrown = error; + } + + expect(thrown).toBeDefined(); + const problem = (thrown as { readonly toJSON: () => Record }).toJSON(); + + expect(problem).toMatchObject({ + code: "protocols-trpc/duplicate-procedure-name", + domain: "user", + procedureName: "listUsers", + existingRoute: { + controllerName: "UserController", + methodName: "listUsers", + path: "/existing-users", + sourceLocation: { + path: expect.stringContaining("round-trip.spec.ts"), + line: expect.any(Number), + column: expect.any(Number), + }, + }, + conflictingRoute: { + controllerName: "UserController", + methodName: "listUsers", + path: "/conflicting-users", + sourceLocation: { + path: expect.stringContaining("round-trip.spec.ts"), + line: expect.any(Number), + column: expect.any(Number), + }, + }, + }); + }); }); +function createExistingUserController(): Function { + @Controller("/existing-users") + class UserController { + @Get() + listUsers(): string[] { + return []; + } + } + + return UserController; +} + +function createConflictingUserController(): Function { + @Controller("/conflicting-users") + class UserController { + @Get() + listUsers(): string[] { + return []; + } + } + + return UserController; +} + function getPort(server: ReturnType): number { const address = server.address(); diff --git a/scripts/problem-registry.mts b/scripts/problem-registry.mts index 1a68bb1d4..6e56cfee6 100644 --- a/scripts/problem-registry.mts +++ b/scripts/problem-registry.mts @@ -2059,6 +2059,16 @@ const recoveryMetadataByCode = { redactionPolicy: "operator-only", severity: "error", }), + "protocols-trpc/duplicate-procedure-name": recovery({ + cause: "Two controller routes resolve to the same tRPC domain and procedure name.", + userAction: + "Use an application build where every tRPC procedure has a unique domain and controller method name combination.", + operatorAction: + "Inspect the duplicate-procedure diagnostic for the existing and conflicting controller routes and their decorator source locations, then change one domain or controller method name.", + retryability: "not-retryable", + redactionPolicy: "operator-only", + severity: "error", + }), "metrics-billing/metric-dropped": recovery({ cause: "Billing metrics could not be recorded because the referenced account, subscription, or plan evidence was missing.",