diff --git a/.changeset/calm-geckos-recover.md b/.changeset/calm-geckos-recover.md new file mode 100644 index 000000000..42d8e01a9 --- /dev/null +++ b/.changeset/calm-geckos-recover.md @@ -0,0 +1,13 @@ +--- +"@croco/events-core": patch +"@croco/metering-core": minor +"@croco/metering-upstash": patch +"@croco/problems-core": patch +"create-croco-app": patch +--- + +Metering retries now resume an explicit pending-event stage, preserve logical event identities, and recover publication +failures without recording usage twice. + +Custom `UsageStorage` implementations must declare `replayContract: "idempotent"` and replay the original quota result +for a repeated idempotency key. Redis clients must explicitly declare multi-key script support. diff --git a/docs/problem-code-registry.json b/docs/problem-code-registry.json index 187b2192a..551652bf5 100644 --- a/docs/problem-code-registry.json +++ b/docs/problem-code-registry.json @@ -1,6 +1,6 @@ { "version": "croco.problem-code-registry.v1", - "problemCount": 540, + "problemCount": 541, "problems": [ { "code": "ACCESS_DENIED", @@ -8672,6 +8672,36 @@ } ] }, + { + "code": "metering/transition-conflict", + "category": "Conflict", + "status": 409, + "title": "Conflict", + "cookbookPath": "/reference/problem-recovery-cookbook/#metering-transition-conflict", + "recovery": { + "cause": "The request conflicts with current state or an idempotency constraint.", + "userAction": "Refresh state, resolve the conflict, and retry with the updated intent.", + "operatorAction": "Inspect concurrent writes, idempotency keys, and uniqueness constraints.", + "retryability": "conditional", + "redactionPolicy": "safe-message", + "telemetry": { + "eventName": "croco.problem.warning", + "severity": "warning", + "attributes": ["problem.code", "problem.category", "problem.status"] + } + }, + "lifecycle": { + "status": "active" + }, + "sources": [ + { + "file": "packages/metering-core/src/libs/problems/MeteringTransitionProblem.ts", + "line": 5, + "column": 5, + "kind": "problem-constructor" + } + ] + }, { "code": "metrics-billing/metric-dropped", "category": "InternalServerError", diff --git a/examples/quick-start-lambda/src/integrations/inMemoryMetering.ts b/examples/quick-start-lambda/src/integrations/inMemoryMetering.ts index 2c2f033df..804f13a56 100644 --- a/examples/quick-start-lambda/src/integrations/inMemoryMetering.ts +++ b/examples/quick-start-lambda/src/integrations/inMemoryMetering.ts @@ -1,20 +1,34 @@ import { + type AtomicQuotaCheckOptions, + type AtomicQuotaCheckResult, IdempotencyManager, type MeterDefinition, MeteringService, type MeterRegistrationOptions, MeterRegistry, MeterRepository, + type RedisClient, + RedisProblem, type UsageQueryOptions, type UsageRecord, type UsageStorage, } from "@croco/metering-core"; class InMemoryUsageStorage implements UsageStorage { + readonly replayContract = "idempotent" as const; + private records: UsageRecord[] = []; private readonly idempotencyKeys = new Set(); + private readonly recordedKeys = new Set(); + private readonly quotaResults = new Map(); async record(usage: UsageRecord): Promise { + const key = this.buildIdempotencyKey(usage.tenantId, usage.meterId, usage.idempotencyKey); + if (this.recordedKeys.has(key)) { + return; + } + + this.recordedKeys.add(key); this.records = [...this.records, usage]; console.log("usage recorded", usage); } @@ -29,7 +43,7 @@ class InMemoryUsageStorage implements UsageStorage { idempotencyKey: string, _ttlSeconds: number, ): Promise { - const key = `${tenantId}:${meterId}:${idempotencyKey}`; + const key = this.buildIdempotencyKey(tenantId, meterId, idempotencyKey); if (this.idempotencyKeys.has(key)) { return false; } @@ -42,6 +56,35 @@ class InMemoryUsageStorage implements UsageStorage { return this.filterRecords(options); } + async checkAndRecordWithinQuota( + options: AtomicQuotaCheckOptions, + ): Promise { + const key = this.buildIdempotencyKey( + options.tenantId, + options.meterId, + options.usageRecord.idempotencyKey, + ); + const recordedResult = this.quotaResults.get(key); + if (recordedResult) { + return recordedResult; + } + + const currentUsage = await this.getUsage({ + tenantId: options.tenantId, + meterId: options.meterId, + period: "billing_cycle", + }); + const newUsage = currentUsage + options.value; + const exceeded = newUsage > options.quota; + if (!exceeded || options.allowOverQuota) { + await this.record(options.usageRecord); + } + + const result = { exceeded, newUsage }; + this.quotaResults.set(key, result); + return result; + } + private filterRecords(options: UsageQueryOptions): UsageRecord[] { return this.records.filter((record) => { const startsAfter = !options.startDate || record.timestamp >= options.startDate; @@ -54,6 +97,235 @@ class InMemoryUsageStorage implements UsageStorage { ); }); } + + private buildIdempotencyKey(tenantId: string, meterId: string, idempotencyKey: string): string { + return `${tenantId}:${meterId}:${idempotencyKey}`; + } +} + +type InMemoryMeteringDeliveryState = { + status: "PROCESSING" | "PUBLISHING" | "EVENTS_PENDING" | "COMPLETED"; + token?: string; + leaseExpiresAt?: number; + operationId?: string; + delivery?: string; +}; + +export class InMemoryRedisClient implements RedisClient { + readonly scriptKeyAccess = "multi-key" as const; + + private readonly values = new Map(); + + async zadd(): Promise { + return 1; + } + + async zrangebyscore(): Promise { + return []; + } + + async set( + key: string, + value: string, + _mode: "NX", + _expireMode: "EX", + _expire: number, + ): Promise { + if (this.values.has(key)) { + return null; + } + + this.values.set(key, value); + return "OK"; + } + + async eval( + script: string, + keys: string[], + args: Array, + ): Promise { + const key = keys[0]; + + if (script.includes("state.status == 'EVENTS_PENDING'")) { + return this.claimMeteringDelivery(keys, args) as unknown as TResult; + } + + if (script.includes("state.delivery = ARGV[2]")) { + return this.markMeteringDeliveryPublishing(key, args) as unknown as TResult; + } + + if (script.includes("state.leaseExpiresAt = 0")) { + return this.releaseMeteringProcessing(key, args) as unknown as TResult; + } + + if (script.includes("state.status = 'EVENTS_PENDING'")) { + return this.releaseMeteringDelivery(key, args) as unknown as TResult; + } + + if (script.includes('{"status":"COMPLETED"}')) { + return this.completeMeteringDelivery(keys, args) as unknown as TResult; + } + + if (script.includes("redis.call('DEL', KEYS[2])")) { + return this.abortMeteringDelivery(keys, args) as unknown as TResult; + } + + if (script.includes("EXISTS")) { + if (this.values.has(key)) { + return [0] as TResult; + } + + this.values.set(key, String(args[0])); + return [1] as TResult; + } + + if (script.includes("GET") && script.includes("SET")) { + if (this.values.get(key) === String(args[0])) { + this.values.set(key, String(args[1])); + } + return [1] as TResult; + } + + if (script.includes("GET") && script.includes("DEL")) { + if (this.values.get(key) === String(args[0])) { + this.values.delete(key); + } + return [1] as TResult; + } + + throw new RedisProblem("EVAL", "Unsupported in-memory Redis script"); + } + + private claimMeteringDelivery( + keys: string[], + args: Array, + ): [number, string, string] { + const [deliveryKey, legacyKey] = keys; + const [ + token, + leaseMilliseconds, + , + operationId, + inProgressStatusPrefix, + completedStatus, + leaseValue, + ] = args; + const existingState = this.readDeliveryState(deliveryKey); + const now = Date.now(); + + if (!existingState) { + const legacyStatus = this.values.get(legacyKey); + if ( + legacyStatus?.startsWith(String(inProgressStatusPrefix)) || + legacyStatus === String(completedStatus) + ) { + return [0, "", ""]; + } + + const newOperationId = String(operationId); + const state: InMemoryMeteringDeliveryState = { + status: "PROCESSING", + token: String(token), + leaseExpiresAt: now + Number(leaseMilliseconds), + operationId: newOperationId, + }; + this.values.set(deliveryKey, JSON.stringify(state)); + if (!legacyStatus) { + this.values.set(legacyKey, String(leaseValue)); + } + return [1, "", newOperationId]; + } + + const leaseExpired = + (existingState.status === "PROCESSING" || existingState.status === "PUBLISHING") && + (existingState.leaseExpiresAt ?? 0) <= now; + if (existingState.status !== "EVENTS_PENDING" && !leaseExpired) { + return [0, "", ""]; + } + + existingState.status = existingState.delivery ? "PUBLISHING" : "PROCESSING"; + existingState.token = String(token); + const claimedOperationId = existingState.operationId ?? String(operationId); + existingState.operationId = claimedOperationId; + existingState.leaseExpiresAt = now + Number(leaseMilliseconds); + this.values.set(deliveryKey, JSON.stringify(existingState)); + this.values.set(legacyKey, String(leaseValue)); + return [1, existingState.delivery ?? "", claimedOperationId]; + } + + private markMeteringDeliveryPublishing(key: string, args: Array): [number] { + const [token, deliveryJson, leaseMilliseconds] = args; + const state = this.readDeliveryState(key); + if (!state || state.status !== "PROCESSING" || state.token !== String(token)) { + return [0]; + } + + state.status = "PUBLISHING"; + state.delivery = String(deliveryJson); + state.leaseExpiresAt = Date.now() + Number(leaseMilliseconds); + this.values.set(key, JSON.stringify(state)); + return [1]; + } + + private releaseMeteringDelivery(key: string, args: Array): [number] { + const state = this.readDeliveryState(key); + if (state?.status !== "PUBLISHING" || state.token !== String(args[0])) { + return [0]; + } + + state.status = "EVENTS_PENDING"; + delete state.token; + delete state.leaseExpiresAt; + this.values.set(key, JSON.stringify(state)); + return [1]; + } + + private releaseMeteringProcessing(key: string, args: Array): [number] { + const state = this.readDeliveryState(key); + if (state?.status !== "PROCESSING" || state.token !== String(args[0])) { + return [0]; + } + + delete state.token; + state.leaseExpiresAt = 0; + this.values.set(key, JSON.stringify(state)); + return [1]; + } + + private completeMeteringDelivery(keys: string[], args: Array): [number] { + const [deliveryKey, legacyKey] = keys; + const [token, , completedStatus] = args; + const state = this.readDeliveryState(deliveryKey); + if (!state || state.status !== "PUBLISHING" || state.token !== String(token)) { + return [0]; + } + + this.values.set(deliveryKey, JSON.stringify({ status: "COMPLETED" })); + this.values.set(legacyKey, String(completedStatus)); + return [1]; + } + + private abortMeteringDelivery(keys: string[], args: Array): [number] { + const [deliveryKey, legacyKey] = keys; + const [token, inProgressStatus] = args; + const state = this.readDeliveryState(deliveryKey); + if ( + state?.status !== "PROCESSING" || + state.token !== String(token) || + this.values.get(legacyKey) !== String(inProgressStatus) + ) { + return [0]; + } + + this.values.delete(deliveryKey); + this.values.delete(legacyKey); + return [1]; + } + + private readDeliveryState(key: string): InMemoryMeteringDeliveryState | undefined { + const value = this.values.get(key); + return value ? (JSON.parse(value) as InMemoryMeteringDeliveryState) : undefined; + } } class InMemoryMeterRepository extends MeterRepository { @@ -101,20 +373,7 @@ class InMemoryMeterRepository extends MeterRepository { export function createMeteringService(): MeteringService { const usageStorage = new InMemoryUsageStorage(); const meterRegistry = new MeterRegistry(new InMemoryMeterRepository()); - const idempotencyManager = new IdempotencyManager({ - async zadd() { - return 1; - }, - async zrangebyscore() { - return []; - }, - async set() { - return "OK"; - }, - async eval() { - return [1] as TResult; - }, - }); + const idempotencyManager = new IdempotencyManager(new InMemoryRedisClient()); return new MeteringService({ meterRegistry, diff --git a/packages/create-croco-app/templates/saas/apps/api-server/src/inMemoryAdapters.ts b/packages/create-croco-app/templates/saas/apps/api-server/src/inMemoryAdapters.ts index 07285128c..36f31958e 100644 --- a/packages/create-croco-app/templates/saas/apps/api-server/src/inMemoryAdapters.ts +++ b/packages/create-croco-app/templates/saas/apps/api-server/src/inMemoryAdapters.ts @@ -24,6 +24,7 @@ import { type MeterRegistrationOptions, MeterRepository, type RedisClient, + RedisProblem, type UsageQueryOptions, type UsageRecord, type UsageStorage, @@ -200,10 +201,19 @@ export class InMemoryMeterRepository extends MeterRepository { } export class InMemoryUsageStorage implements UsageStorage { + readonly replayContract = "idempotent" as const; + private readonly records: UsageRecord[] = []; private readonly idempotencyKeys = new Set(); + private readonly recordedKeys = new Set(); + private readonly quotaResults = new Map(); async record(usage: UsageRecord): Promise { + const key = this.buildIdempotencyKey(usage.tenantId, usage.meterId, usage.idempotencyKey); + if (this.recordedKeys.has(key)) { + return; + } + this.recordedKeys.add(key); this.records.push(usage); } @@ -219,7 +229,7 @@ export class InMemoryUsageStorage implements UsageStorage { idempotencyKey: string, _ttlSeconds: number, ): Promise { - const key = `${tenantId}:${meterId}:${idempotencyKey}`; + const key = this.buildIdempotencyKey(tenantId, meterId, idempotencyKey); if (this.idempotencyKeys.has(key)) { return false; } @@ -245,6 +255,16 @@ export class InMemoryUsageStorage implements UsageStorage { async checkAndRecordWithinQuota( options: AtomicQuotaCheckOptions, ): Promise { + const key = this.buildIdempotencyKey( + options.tenantId, + options.meterId, + options.usageRecord.idempotencyKey, + ); + const recordedResult = this.quotaResults.get(key); + if (recordedResult) { + return recordedResult; + } + const currentUsage = await this.getUsage({ tenantId: options.tenantId, meterId: options.meterId, @@ -257,7 +277,9 @@ export class InMemoryUsageStorage implements UsageStorage { await this.record(options.usageRecord); } - return { exceeded, newUsage }; + const result = { exceeded, newUsage }; + this.quotaResults.set(key, result); + return result; } async resetBillingCycle(tenantId: string, meterId?: string): Promise { @@ -269,9 +291,15 @@ export class InMemoryUsageStorage implements UsageStorage { this.records.length = 0; this.records.push(...keep); } + + private buildIdempotencyKey(tenantId: string, meterId: string, idempotencyKey: string): string { + return `${tenantId}:${meterId}:${idempotencyKey}`; + } } export class InMemoryRedisClient implements RedisClient { + readonly scriptKeyAccess = "multi-key" as const; + private readonly values = new Map(); private readonly sortedSets = new Map>(); @@ -321,6 +349,30 @@ export class InMemoryRedisClient implements RedisClient { ): Promise { const key = keys[0]; + if (script.includes("state.status == 'EVENTS_PENDING'")) { + return this.claimMeteringDelivery(keys, args) as unknown as TResult; + } + + if (script.includes("state.delivery = ARGV[2]")) { + return this.markMeteringDeliveryPublishing(key, args) as unknown as TResult; + } + + if (script.includes("state.leaseExpiresAt = 0")) { + return this.releaseMeteringProcessing(key, args) as unknown as TResult; + } + + if (script.includes("state.status = 'EVENTS_PENDING'")) { + return this.releaseMeteringDelivery(key, args) as unknown as TResult; + } + + if (script.includes('{"status":"COMPLETED"}')) { + return this.completeMeteringDelivery(keys, args) as unknown as TResult; + } + + if (script.includes("redis.call('DEL', KEYS[2])")) { + return this.abortMeteringDelivery(keys, args) as unknown as TResult; + } + if (script.includes("EXISTS")) { if (this.values.has(key)) { return [0] as TResult; @@ -344,10 +396,149 @@ export class InMemoryRedisClient implements RedisClient { return [1] as TResult; } - return [1] as TResult; + throw new RedisProblem("EVAL", "Unsupported in-memory Redis script"); + } + + private claimMeteringDelivery( + keys: string[], + args: Array, + ): [number, string, string] { + const [deliveryKey, legacyKey] = keys; + const [ + token, + leaseMilliseconds, + , + operationId, + inProgressStatusPrefix, + completedStatus, + leaseValue, + ] = args; + const existingState = this.readDeliveryState(deliveryKey); + const now = Date.now(); + + if (!existingState) { + const legacyStatus = this.values.get(legacyKey); + if ( + legacyStatus?.startsWith(String(inProgressStatusPrefix)) || + legacyStatus === String(completedStatus) + ) { + return [0, "", ""]; + } + + const newOperationId = String(operationId); + const state: InMemoryMeteringDeliveryState = { + status: "PROCESSING", + token: String(token), + leaseExpiresAt: now + Number(leaseMilliseconds), + operationId: newOperationId, + }; + this.values.set(deliveryKey, JSON.stringify(state)); + if (!legacyStatus) { + this.values.set(legacyKey, String(leaseValue)); + } + return [1, "", newOperationId]; + } + + const leaseExpired = + (existingState.status === "PROCESSING" || existingState.status === "PUBLISHING") && + (existingState.leaseExpiresAt ?? 0) <= now; + if (existingState.status !== "EVENTS_PENDING" && !leaseExpired) { + return [0, "", ""]; + } + + existingState.status = existingState.delivery ? "PUBLISHING" : "PROCESSING"; + existingState.token = String(token); + const claimedOperationId = existingState.operationId ?? String(operationId); + existingState.operationId = claimedOperationId; + existingState.leaseExpiresAt = now + Number(leaseMilliseconds); + this.values.set(deliveryKey, JSON.stringify(existingState)); + this.values.set(legacyKey, String(leaseValue)); + return [1, existingState.delivery ?? "", claimedOperationId]; + } + + private markMeteringDeliveryPublishing(key: string, args: Array): [number] { + const [token, deliveryJson, leaseMilliseconds] = args; + const state = this.readDeliveryState(key); + if (!state || state.status !== "PROCESSING" || state.token !== String(token)) { + return [0]; + } + + state.status = "PUBLISHING"; + state.delivery = String(deliveryJson); + state.leaseExpiresAt = Date.now() + Number(leaseMilliseconds); + this.values.set(key, JSON.stringify(state)); + return [1]; + } + + private releaseMeteringDelivery(key: string, args: Array): [number] { + const state = this.readDeliveryState(key); + if (state?.status !== "PUBLISHING" || state.token !== String(args[0])) { + return [0]; + } + + state.status = "EVENTS_PENDING"; + delete state.token; + delete state.leaseExpiresAt; + this.values.set(key, JSON.stringify(state)); + return [1]; + } + + private releaseMeteringProcessing(key: string, args: Array): [number] { + const state = this.readDeliveryState(key); + if (state?.status !== "PROCESSING" || state.token !== String(args[0])) { + return [0]; + } + + delete state.token; + state.leaseExpiresAt = 0; + this.values.set(key, JSON.stringify(state)); + return [1]; + } + + private completeMeteringDelivery(keys: string[], args: Array): [number] { + const [deliveryKey, legacyKey] = keys; + const [token, , completedStatus] = args; + const state = this.readDeliveryState(deliveryKey); + if (!state || state.status !== "PUBLISHING" || state.token !== String(token)) { + return [0]; + } + + this.values.set(deliveryKey, JSON.stringify({ status: "COMPLETED" })); + this.values.set(legacyKey, String(completedStatus)); + return [1]; + } + + private abortMeteringDelivery(keys: string[], args: Array): [number] { + const [deliveryKey, legacyKey] = keys; + const [token, inProgressStatus] = args; + const state = this.readDeliveryState(deliveryKey); + if ( + state?.status !== "PROCESSING" || + state.token !== String(token) || + this.values.get(legacyKey) !== String(inProgressStatus) + ) { + return [0]; + } + + this.values.delete(deliveryKey); + this.values.delete(legacyKey); + return [1]; + } + + private readDeliveryState(key: string): InMemoryMeteringDeliveryState | undefined { + const value = this.values.get(key); + return value ? (JSON.parse(value) as InMemoryMeteringDeliveryState) : undefined; } } +type InMemoryMeteringDeliveryState = { + status: "PROCESSING" | "PUBLISHING" | "EVENTS_PENDING" | "COMPLETED"; + token?: string; + leaseExpiresAt?: number; + operationId?: string; + delivery?: string; +}; + export class InMemoryExecutionStore implements ExecutionStore, ExecutionLogStore { private readonly executions = new Map(); private idCounter = 0; diff --git a/packages/create-croco-app/templates/saas/apps/api-server/src/tests/SaasDemo.spec.ts b/packages/create-croco-app/templates/saas/apps/api-server/src/tests/SaasDemo.spec.ts index 77b26b418..1998229b2 100644 --- a/packages/create-croco-app/templates/saas/apps/api-server/src/tests/SaasDemo.spec.ts +++ b/packages/create-croco-app/templates/saas/apps/api-server/src/tests/SaasDemo.spec.ts @@ -1,5 +1,10 @@ import type { CheckoutResult } from "@croco/billing-core"; import { InMemoryIdempotencyStore } from "@croco/idempotency-core"; +import { + DuplicateRecordProblem, + IdempotencyManager, + type PendingMeteringDelivery, +} from "@croco/metering-core"; import { createTestKernel } from "@croco/testing"; import { Container } from "typedi"; import { beforeEach, describe, expect, it } from "vitest"; @@ -7,6 +12,7 @@ import { createCrocoApp } from "../app"; import { JobsController } from "../controllers/JobsController"; import { assertDemoEndpointsEnabled, SaasController } from "../controllers/SaasController"; import { saasDemoSnapshotSchema } from "../controllers/schemas"; +import { InMemoryRedisClient } from "../inMemoryAdapters"; import { DemoEndpointDisabledProblem } from "../problems"; import { getSaasProviderProfile, @@ -27,6 +33,56 @@ describe("SaaS golden path demo", () => { Container.reset(); }); + it("replays pending metering delivery state without changing its operation identity", async () => { + const manager = new IdempotencyManager(new InMemoryRedisClient()); + const firstClaim = await manager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_requests", + "request-1", + ); + const delivery: PendingMeteringDelivery = { + usageRecord: { + id: firstClaim.operationId, + tenantId: "tenant-1", + meterId: "api_requests", + value: 1, + timestamp: new Date().toISOString(), + idempotencyKey: "request-1", + }, + }; + + await manager.markMeteringEventsPublishing( + "tenant-1", + "api_requests", + "request-1", + firstClaim.token, + delivery, + ); + await manager.releaseMeteringEvents("tenant-1", "api_requests", "request-1", firstClaim.token); + + const replayClaim = await manager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_requests", + "request-1", + ); + expect(replayClaim.operationId).toBe(firstClaim.operationId); + expect(replayClaim.delivery).toEqual(delivery); + + await manager.completeMeteringProcessing( + "tenant-1", + "api_requests", + "request-1", + replayClaim.token, + ); + const duplicateClaim = manager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_requests", + "request-1", + ); + await expect(duplicateClaim).rejects.toThrow(DuplicateRecordProblem); + await expect(duplicateClaim).rejects.toMatchObject({ code: "metering/duplicate-record" }); + }); + it("keeps demo checkout sessions distinct and shareable across runtimes", async () => { const billingGateway = new DemoBillingGateway(); const checkoutIdempotencyStore = new InMemoryIdempotencyStore(); diff --git a/packages/docs/src/content/docs/api/events-core/src/classes/DomainEvent.md b/packages/docs/src/content/docs/api/events-core/src/classes/DomainEvent.md index 5fe4b42a3..f3873c457 100644 --- a/packages/docs/src/content/docs/api/events-core/src/classes/DomainEvent.md +++ b/packages/docs/src/content/docs/api/events-core/src/classes/DomainEvent.md @@ -49,7 +49,13 @@ title: "DomainEvent" ### Constructor -> **new DomainEvent**(): `DomainEvent` +> **new DomainEvent**(`eventId?`): `DomainEvent` + +#### Parameters + +##### eventId? + +`string` #### Returns @@ -61,25 +67,25 @@ title: "DomainEvent" > `readonly` **eventId**: `string` -*** +--- ### eventName > `readonly` **eventName**: `string` -*** +--- ### metadata > **metadata**: [`DomainEventMetadata`](/api/events-core/src/type-aliases/domaineventmetadata/) -*** +--- ### timestamp > `readonly` **timestamp**: `Date` -*** +--- ### eventName? diff --git a/packages/docs/src/content/docs/api/metering-core/src/classes/IdempotencyManager.md b/packages/docs/src/content/docs/api/metering-core/src/classes/IdempotencyManager.md index c2bbc6a46..6ab48ac1a 100644 --- a/packages/docs/src/content/docs/api/metering-core/src/classes/IdempotencyManager.md +++ b/packages/docs/src/content/docs/api/metering-core/src/classes/IdempotencyManager.md @@ -10,6 +10,7 @@ Idempotency 관리자 ## Description Redis SET NX 기반으로 중복 요청을 방지합니다. + - 사용자 제공 idempotencyKey가 있으면 사용 - 없으면 ULID 자동 생성 @@ -17,7 +18,7 @@ Redis SET NX 기반으로 중복 요청을 방지합니다. ### Constructor -> **new IdempotencyManager**(`redis`, `ttlSeconds?`): `IdempotencyManager` +> **new IdempotencyManager**(`redis`, `ttlSeconds?`, `processingLeaseMilliseconds?`): `IdempotencyManager` #### Parameters @@ -29,12 +30,44 @@ Redis SET NX 기반으로 중복 요청을 방지합니다. `number` = `IdempotencyManager.DEFAULT_TTL_SECONDS` +##### processingLeaseMilliseconds? + +`number` = `IdempotencyManager.DEFAULT_PROCESSING_LEASE_MILLISECONDS` + #### Returns `IdempotencyManager` ## Methods +### abortMeteringProcessing() + +> **abortMeteringProcessing**(`tenantId`, `meterId`, `idempotencyKey`, `token`): `Promise`\<`void`\> + +#### Parameters + +##### tenantId + +`string` + +##### meterId + +`string` + +##### idempotencyKey + +`string` + +##### token + +[`IdempotencyClaim`](/api/metering-core/src/type-aliases/idempotencyclaim/) + +#### Returns + +`Promise`\<`void`\> + +--- + ### abortProcessing() > **abortProcessing**(`tenantId`, `meterId`, `idempotencyKey`, `claim`): `Promise`\<`void`\> @@ -63,7 +96,7 @@ Redis SET NX 기반으로 중복 요청을 방지합니다. `Promise`\<`void`\> -*** +--- ### beginProcessing() @@ -91,7 +124,7 @@ Redis SET NX 기반으로 중복 요청을 방지합니다. 새 lease의 ownership claim, 중복 key이면 null -*** +--- ### beginProcessingOrThrow() @@ -123,7 +156,7 @@ Redis SET NX 기반으로 중복 요청을 방지합니다. DuplicateRecordProblem 동일한 idempotency key가 이미 처리 중이거나 완료된 경우 -*** +--- ### checkAndMark() @@ -151,7 +184,7 @@ DuplicateRecordProblem 동일한 idempotency key가 이미 처리 중이거나 true: 새 요청 (처리 가능), false: 중복 (이미 처리됨) -*** +--- ### checkAndMarkOrThrow() @@ -181,7 +214,59 @@ true: 새 요청 (처리 가능), false: 중복 (이미 처리됨) DuplicateRecordProblem 중복 시 -*** +--- + +### claimMeteringProcessingOrThrow() + +> **claimMeteringProcessingOrThrow**(`tenantId`, `meterId`, `idempotencyKey`): `Promise`\<[`MeteringProcessingClaim`](/api/metering-core/src/type-aliases/meteringprocessingclaim/)\> + +#### Parameters + +##### tenantId + +`string` + +##### meterId + +`string` + +##### idempotencyKey + +`string` + +#### Returns + +`Promise`\<[`MeteringProcessingClaim`](/api/metering-core/src/type-aliases/meteringprocessingclaim/)\> + +--- + +### completeMeteringProcessing() + +> **completeMeteringProcessing**(`tenantId`, `meterId`, `idempotencyKey`, `token`): `Promise`\<`void`\> + +#### Parameters + +##### tenantId + +`string` + +##### meterId + +`string` + +##### idempotencyKey + +`string` + +##### token + +[`IdempotencyClaim`](/api/metering-core/src/type-aliases/idempotencyclaim/) + +#### Returns + +`Promise`\<`void`\> + +--- ### completeProcessing() @@ -211,7 +296,7 @@ DuplicateRecordProblem 중복 시 `Promise`\<`void`\> -*** +--- ### ensureIdempotencyKey() @@ -228,3 +313,91 @@ Idempotency key 확보 (없으면 생성) #### Returns `string` + +--- + +### markMeteringEventsPublishing() + +> **markMeteringEventsPublishing**(`tenantId`, `meterId`, `idempotencyKey`, `token`, `delivery`): `Promise`\<`void`\> + +#### Parameters + +##### tenantId + +`string` + +##### meterId + +`string` + +##### idempotencyKey + +`string` + +##### token + +[`IdempotencyClaim`](/api/metering-core/src/type-aliases/idempotencyclaim/) + +##### delivery + +[`PendingMeteringDelivery`](/api/metering-core/src/type-aliases/pendingmeteringdelivery/) + +#### Returns + +`Promise`\<`void`\> + +--- + +### releaseMeteringEvents() + +> **releaseMeteringEvents**(`tenantId`, `meterId`, `idempotencyKey`, `token`): `Promise`\<`void`\> + +#### Parameters + +##### tenantId + +`string` + +##### meterId + +`string` + +##### idempotencyKey + +`string` + +##### token + +[`IdempotencyClaim`](/api/metering-core/src/type-aliases/idempotencyclaim/) + +#### Returns + +`Promise`\<`void`\> + +--- + +### releaseMeteringProcessing() + +> **releaseMeteringProcessing**(`tenantId`, `meterId`, `idempotencyKey`, `token`): `Promise`\<`void`\> + +#### Parameters + +##### tenantId + +`string` + +##### meterId + +`string` + +##### idempotencyKey + +`string` + +##### token + +[`IdempotencyClaim`](/api/metering-core/src/type-aliases/idempotencyclaim/) + +#### Returns + +`Promise`\<`void`\> diff --git a/packages/docs/src/content/docs/api/metering-core/src/classes/MeteringTransitionProblem.md b/packages/docs/src/content/docs/api/metering-core/src/classes/MeteringTransitionProblem.md new file mode 100644 index 000000000..b76f560c8 --- /dev/null +++ b/packages/docs/src/content/docs/api/metering-core/src/classes/MeteringTransitionProblem.md @@ -0,0 +1,302 @@ +--- +editUrl: false +next: false +prev: false +title: "MeteringTransitionProblem" +--- + +RFC 7807 Problem Details를 표현하는 기본 추상 에러 클래스입니다. + +## Extends + +- [`Problem`](/api/problems-core/src/classes/problem/) + +## Constructors + +### Constructor + +> **new MeteringTransitionProblem**(`transition`, `reason`, `idempotencyKey`): `MeteringTransitionProblem` + +#### Parameters + +##### transition + +`string` + +##### reason + +`string` + +##### idempotencyKey + +`string` + +#### Returns + +`MeteringTransitionProblem` + +#### Overrides + +`Problem.constructor` + +## Properties + +### category + +> `readonly` **category**: [`ProblemCategory`](/api/problems-core/src/enumerations/problemcategory/) + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`category`](/api/problems-core/src/classes/problem/#category) + +*** + +### cause? + +> `readonly` `optional` **cause?**: `Error` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`cause`](/api/problems-core/src/classes/problem/#cause) + +*** + +### code + +> `readonly` **code**: `string` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`code`](/api/problems-core/src/classes/problem/#code) + +*** + +### detail? + +> `readonly` `optional` **detail?**: `string` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`detail`](/api/problems-core/src/classes/problem/#detail) + +*** + +### extensions? + +> `readonly` `optional` **extensions?**: [`ProblemExtensions`](/api/problems-core/src/type-aliases/problemextensions/) + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`extensions`](/api/problems-core/src/classes/problem/#extensions) + +*** + +### instance? + +> `readonly` `optional` **instance?**: `string` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`instance`](/api/problems-core/src/classes/problem/#instance) + +*** + +### message + +> **message**: `string` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`message`](/api/problems-core/src/classes/problem/#message) + +*** + +### name + +> **name**: `string` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`name`](/api/problems-core/src/classes/problem/#name) + +*** + +### stack? + +> `optional` **stack?**: `string` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`stack`](/api/problems-core/src/classes/problem/#stack) + +*** + +### type + +> `readonly` **type**: `string` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`type`](/api/problems-core/src/classes/problem/#type) + +*** + +### stackTraceLimit + +> `static` **stackTraceLimit**: `number` + +The `Error.stackTraceLimit` property specifies the number of stack frames +collected by a stack trace (whether generated by `new Error().stack` or +`Error.captureStackTrace(obj)`). + +The default value is `10` but may be set to any valid JavaScript number. Changes +will affect any stack trace captured _after_ the value has been changed. + +If set to a non-number value, or set to a negative number, stack traces will +not capture any frames. + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`stackTraceLimit`](/api/problems-core/src/classes/problem/#stacktracelimit) + +## Accessors + +### status + +#### Get Signature + +> **get** **status**(): `number` + +##### Returns + +`number` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`status`](/api/problems-core/src/classes/problem/#status) + +*** + +### title + +#### Get Signature + +> **get** **title**(): `string` + +##### Returns + +`string` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`title`](/api/problems-core/src/classes/problem/#title) + +## Methods + +### toJSON() + +> **toJSON**(): [`ProblemDetails`](/api/problems-core/src/type-aliases/problemdetails/) + +#### Returns + +[`ProblemDetails`](/api/problems-core/src/type-aliases/problemdetails/) + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`toJSON`](/api/problems-core/src/classes/problem/#tojson) + +*** + +### captureStackTrace() + +> `static` **captureStackTrace**(`targetObject`, `constructorOpt?`): `void` + +Creates a `.stack` property on `targetObject`, which when accessed returns +a string representing the location in the code at which +`Error.captureStackTrace()` was called. + +```js +const myObject = {}; +Error.captureStackTrace(myObject); +myObject.stack; // Similar to `new Error().stack` +``` + +The first line of the trace will be prefixed with +`${myObject.name}: ${myObject.message}`. + +The optional `constructorOpt` argument accepts a function. If given, all frames +above `constructorOpt`, including `constructorOpt`, will be omitted from the +generated stack trace. + +The `constructorOpt` argument is useful for hiding implementation +details of error generation from the user. For instance: + +```js +function a() { + b(); +} + +function b() { + c(); +} + +function c() { + // Create an error without stack trace to avoid calculating the stack trace twice. + const { stackTraceLimit } = Error; + Error.stackTraceLimit = 0; + const error = new Error(); + Error.stackTraceLimit = stackTraceLimit; + + // Capture the stack trace above function b + Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace + throw error; +} + +a(); +``` + +#### Parameters + +##### targetObject + +`object` + +##### constructorOpt? + +`Function` + +#### Returns + +`void` + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`captureStackTrace`](/api/problems-core/src/classes/problem/#capturestacktrace) + +*** + +### prepareStackTrace() + +> `static` **prepareStackTrace**(`err`, `stackTraces`): `any` + +#### Parameters + +##### err + +`Error` + +##### stackTraces + +`CallSite`[] + +#### Returns + +`any` + +#### See + +https://v8.dev/docs/stack-trace-api#customizing-stack-traces + +#### Inherited from + +[`Problem`](/api/problems-core/src/classes/problem/).[`prepareStackTrace`](/api/problems-core/src/classes/problem/#preparestacktrace) diff --git a/packages/docs/src/content/docs/api/metering-core/src/classes/QuotaExceededEvent.md b/packages/docs/src/content/docs/api/metering-core/src/classes/QuotaExceededEvent.md index 315320a0e..6b668019d 100644 --- a/packages/docs/src/content/docs/api/metering-core/src/classes/QuotaExceededEvent.md +++ b/packages/docs/src/content/docs/api/metering-core/src/classes/QuotaExceededEvent.md @@ -14,13 +14,9 @@ quota 초과 시 발행되는 도메인 이벤트입니다. ## Example ```typescript -eventBus.publish(new QuotaExceededEvent({ - tenantId: 'tenant-123', - meterId: 'api_calls', - currentUsage: 10000, - quota: 10000, - timestamp: new Date(), -})); +eventBus.publish( + new QuotaExceededEvent("tenant-123", "api_calls", 10000, 10000, "request-123", "operation-123"), +); ``` ## Extends @@ -31,7 +27,7 @@ eventBus.publish(new QuotaExceededEvent({ ### Constructor -> **new QuotaExceededEvent**(`tenantId`, `meterId`, `currentUsage`, `quota`): `QuotaExceededEvent` +> **new QuotaExceededEvent**(`tenantId`, `meterId`, `currentUsage`, `quota`, `idempotencyKey?`, `operationId?`): `QuotaExceededEvent` #### Parameters @@ -51,6 +47,14 @@ eventBus.publish(new QuotaExceededEvent({ `number` +##### idempotencyKey? + +`string` + +##### operationId? + +`string` + #### Returns `QuotaExceededEvent` @@ -65,7 +69,7 @@ eventBus.publish(new QuotaExceededEvent({ > `readonly` **currentUsage**: `number` -*** +--- ### eventId @@ -75,7 +79,7 @@ eventBus.publish(new QuotaExceededEvent({ [`DomainEvent`](/api/events-core/src/classes/domainevent/).[`eventId`](/api/events-core/src/classes/domainevent/#eventid) -*** +--- ### eventName @@ -85,7 +89,7 @@ eventBus.publish(new QuotaExceededEvent({ [`DomainEvent`](/api/events-core/src/classes/domainevent/).[`eventName`](/api/events-core/src/classes/domainevent/#eventname) -*** +--- ### metadata @@ -95,25 +99,25 @@ eventBus.publish(new QuotaExceededEvent({ [`DomainEvent`](/api/events-core/src/classes/domainevent/).[`metadata`](/api/events-core/src/classes/domainevent/#metadata) -*** +--- ### meterId > `readonly` **meterId**: `string` -*** +--- ### quota > `readonly` **quota**: `number` -*** +--- ### tenantId > `readonly` **tenantId**: `string` -*** +--- ### timestamp @@ -123,7 +127,7 @@ eventBus.publish(new QuotaExceededEvent({ [`DomainEvent`](/api/events-core/src/classes/domainevent/).[`timestamp`](/api/events-core/src/classes/domainevent/#timestamp) -*** +--- ### eventName diff --git a/packages/docs/src/content/docs/api/metering-core/src/classes/RedisUsageStorage.md b/packages/docs/src/content/docs/api/metering-core/src/classes/RedisUsageStorage.md index 735596be2..9deb36825 100644 --- a/packages/docs/src/content/docs/api/metering-core/src/classes/RedisUsageStorage.md +++ b/packages/docs/src/content/docs/api/metering-core/src/classes/RedisUsageStorage.md @@ -32,12 +32,27 @@ Redis 기반 UsageStorage 구현체 `RedisUsageStorage` +## Properties + +### replayContract + +> `readonly` **replayContract**: `"idempotent"` + +MeteringService가 lease 만료 후 persistence를 안전하게 재개할 수 있음을 선언합니다. + +#### Implementation of + +[`UsageStorage`](/api/metering-core/src/interfaces/usagestorage/).[`replayContract`](/api/metering-core/src/interfaces/usagestorage/#replaycontract) + ## Methods ### checkAndRecordWithinQuota() > **checkAndRecordWithinQuota**(`options`): `Promise`\<[`AtomicQuotaCheckResult`](/api/metering-core/src/type-aliases/atomicquotacheckresult/)\> +동일한 tenantId, meterId, usageRecord.idempotencyKey 조합의 재시도는 사용량을 중복 기록하지 않고 +최초 호출과 동일한 quota 결과를 반환해야 합니다. + #### Parameters ##### options @@ -169,6 +184,8 @@ true: 새 키 (기록 가능), false: 중복 (기록 불가) Usage 기록 (즉시 flush) Redis Sorted Set에 저장 +동일한 tenantId, meterId, idempotencyKey 조합의 재시도는 사용량을 중복 기록하지 않아야 합니다. + #### Parameters ##### usage diff --git a/packages/docs/src/content/docs/api/metering-core/src/classes/UsageRecordedEvent.md b/packages/docs/src/content/docs/api/metering-core/src/classes/UsageRecordedEvent.md index 4c4897bac..7b5618a71 100644 --- a/packages/docs/src/content/docs/api/metering-core/src/classes/UsageRecordedEvent.md +++ b/packages/docs/src/content/docs/api/metering-core/src/classes/UsageRecordedEvent.md @@ -14,13 +14,16 @@ title: "UsageRecordedEvent" ## Example ```typescript -eventBus.publish(new UsageRecordedEvent({ - tenantId: 'tenant-123', - meterId: 'api_calls', - value: 1, - recordedAt: new Date(), - metadata: { endpoint: '/api/users' }, -})); +eventBus.publish( + new UsageRecordedEvent( + "tenant-123", + "api_calls", + 1, + "request-123", + { endpoint: "/api/users" }, + "operation-123", + ), +); ``` ## Extends @@ -31,7 +34,7 @@ eventBus.publish(new UsageRecordedEvent({ ### Constructor -> **new UsageRecordedEvent**(`tenantId`, `meterId`, `value`, `idempotencyKey`, `metadata?`): `UsageRecordedEvent` +> **new UsageRecordedEvent**(`tenantId`, `meterId`, `value`, `idempotencyKey`, `metadata?`, `operationId?`): `UsageRecordedEvent` #### Parameters @@ -55,6 +58,10 @@ eventBus.publish(new UsageRecordedEvent({ `Record`\<`string`, `unknown`\> +##### operationId? + +`string` + #### Returns `UsageRecordedEvent` @@ -73,7 +80,7 @@ eventBus.publish(new UsageRecordedEvent({ [`DomainEvent`](/api/events-core/src/classes/domainevent/).[`eventId`](/api/events-core/src/classes/domainevent/#eventid) -*** +--- ### eventName @@ -83,13 +90,13 @@ eventBus.publish(new UsageRecordedEvent({ [`DomainEvent`](/api/events-core/src/classes/domainevent/).[`eventName`](/api/events-core/src/classes/domainevent/#eventname) -*** +--- ### idempotencyKey > `readonly` **idempotencyKey**: `string` -*** +--- ### metadata @@ -99,19 +106,19 @@ eventBus.publish(new UsageRecordedEvent({ [`DomainEvent`](/api/events-core/src/classes/domainevent/).[`metadata`](/api/events-core/src/classes/domainevent/#metadata) -*** +--- ### meterId > `readonly` **meterId**: `string` -*** +--- ### tenantId > `readonly` **tenantId**: `string` -*** +--- ### timestamp @@ -121,13 +128,13 @@ eventBus.publish(new UsageRecordedEvent({ [`DomainEvent`](/api/events-core/src/classes/domainevent/).[`timestamp`](/api/events-core/src/classes/domainevent/#timestamp) -*** +--- ### value > `readonly` **value**: `number` -*** +--- ### eventName diff --git a/packages/docs/src/content/docs/api/metering-core/src/interfaces/RedisClient.md b/packages/docs/src/content/docs/api/metering-core/src/interfaces/RedisClient.md index f78a2c609..28cebf513 100644 --- a/packages/docs/src/content/docs/api/metering-core/src/interfaces/RedisClient.md +++ b/packages/docs/src/content/docs/api/metering-core/src/interfaces/RedisClient.md @@ -7,6 +7,15 @@ title: "RedisClient" Redis 클라이언트 인터페이스 (ioredis, upstash 등 구현체와 분리) +## Properties + +### scriptKeyAccess + +> `readonly` **scriptKeyAccess**: `"multi-key"` + +Metering의 원자적 스크립트는 여러 키에 접근하므로 단일 노드/단일 슬롯 실행 모델이 필요합니다. +Redis Cluster처럼 서로 다른 슬롯의 키 접근을 거부하는 클라이언트는 지원하지 않습니다. + ## Methods ### eval() @@ -19,7 +28,7 @@ Lua 스크립트 실행 ##### TResult -`TResult` *extends* `unknown`[] +`TResult` _extends_ `unknown`[] #### Parameters @@ -39,7 +48,7 @@ Lua 스크립트 실행 `Promise`\<`TResult`\> -*** +--- ### set() @@ -73,7 +82,7 @@ Lua 스크립트 실행 `Promise`\<`string` \| `null`\> -*** +--- ### zadd() @@ -99,7 +108,7 @@ Sorted Set에 멤버 추가 `Promise`\<`number`\> -*** +--- ### zrangebyscore() diff --git a/packages/docs/src/content/docs/api/metering-core/src/interfaces/UsageStorage.md b/packages/docs/src/content/docs/api/metering-core/src/interfaces/UsageStorage.md index 1e660bb7a..f50eecbec 100644 --- a/packages/docs/src/content/docs/api/metering-core/src/interfaces/UsageStorage.md +++ b/packages/docs/src/content/docs/api/metering-core/src/interfaces/UsageStorage.md @@ -12,11 +12,22 @@ Redis 기반 실시간 Usage 저장소 인터페이스 구현체: RedisUsageStorage (이 패키지 내) 또는 사용자 커스텀 모든 메서드는 tenant 격리를 보장해야 함 +## Properties + +### replayContract + +> `readonly` **replayContract**: `"idempotent"` + +MeteringService가 lease 만료 후 persistence를 안전하게 재개할 수 있음을 선언합니다. + ## Methods -### checkAndRecordWithinQuota()? +### checkAndRecordWithinQuota() + +> **checkAndRecordWithinQuota**(`options`): `Promise`\<[`AtomicQuotaCheckResult`](/api/metering-core/src/type-aliases/atomicquotacheckresult/)\> -> `optional` **checkAndRecordWithinQuota**(`options`): `Promise`\<[`AtomicQuotaCheckResult`](/api/metering-core/src/type-aliases/atomicquotacheckresult/)\> +동일한 tenantId, meterId, usageRecord.idempotencyKey 조합의 재시도는 사용량을 중복 기록하지 않고 +최초 호출과 동일한 quota 결과를 반환해야 합니다. #### Parameters @@ -28,7 +39,7 @@ Redis 기반 실시간 Usage 저장소 인터페이스 `Promise`\<[`AtomicQuotaCheckResult`](/api/metering-core/src/type-aliases/atomicquotacheckresult/)\> -*** +--- ### deleteUsageRecords()? @@ -51,7 +62,7 @@ Usage 데이터 삭제 (배치 저장 후) `Promise`\<`void`\> -*** +--- ### fetchUsageRecords() @@ -70,7 +81,7 @@ Redis에서 특정 기간의 usage records 조회 `Promise`\<[`UsageRecord`](/api/metering-core/src/type-aliases/usagerecord/)[]\> -*** +--- ### getUsage() @@ -88,7 +99,7 @@ Usage 조회 (특정 기간 합산) `Promise`\<`number`\> -*** +--- ### isIdempotent() @@ -120,7 +131,7 @@ Idempotency 체크 (SET NX 기반) true: 새 키 (기록 가능), false: 중복 (기록 불가) -*** +--- ### record() @@ -129,6 +140,8 @@ true: 새 키 (기록 가능), false: 중복 (기록 불가) Usage 기록 (즉시 flush) Redis Sorted Set에 저장 +동일한 tenantId, meterId, idempotencyKey 조합의 재시도는 사용량을 중복 기록하지 않아야 합니다. + #### Parameters ##### usage @@ -139,7 +152,7 @@ Redis Sorted Set에 저장 `Promise`\<`void`\> -*** +--- ### resetBillingCycle()? diff --git a/packages/docs/src/content/docs/api/metering-core/src/type-aliases/MeteringProcessingClaim.md b/packages/docs/src/content/docs/api/metering-core/src/type-aliases/MeteringProcessingClaim.md new file mode 100644 index 000000000..b3b189f7f --- /dev/null +++ b/packages/docs/src/content/docs/api/metering-core/src/type-aliases/MeteringProcessingClaim.md @@ -0,0 +1,26 @@ +--- +editUrl: false +next: false +prev: false +title: "MeteringProcessingClaim" +--- + +> **MeteringProcessingClaim** = `object` + +## Properties + +### delivery? + +> `optional` **delivery?**: [`PendingMeteringDelivery`](/api/metering-core/src/type-aliases/pendingmeteringdelivery/) + +--- + +### operationId + +> **operationId**: `string` + +--- + +### token + +> **token**: [`IdempotencyClaim`](/api/metering-core/src/type-aliases/idempotencyclaim/) diff --git a/packages/docs/src/content/docs/api/metering-core/src/type-aliases/PendingMeteringDelivery.md b/packages/docs/src/content/docs/api/metering-core/src/type-aliases/PendingMeteringDelivery.md new file mode 100644 index 000000000..845c6cafc --- /dev/null +++ b/packages/docs/src/content/docs/api/metering-core/src/type-aliases/PendingMeteringDelivery.md @@ -0,0 +1,42 @@ +--- +editUrl: false +next: false +prev: false +title: "PendingMeteringDelivery" +--- + +> **PendingMeteringDelivery** = `object` + +## Properties + +### quota? + +> `optional` **quota?**: `object` + +#### allowOverQuota + +> **allowOverQuota**: `boolean` + +#### exceeded + +> **exceeded**: `boolean` + +#### newUsage + +> **newUsage**: `number` + +#### quota + +> **quota**: `number` + +--- + +### usageRecord + +> **usageRecord**: `Omit`\<[`UsageRecord`](/api/metering-core/src/type-aliases/usagerecord/), `"timestamp"`\> & `object` + +#### Type Declaration + +##### timestamp + +> **timestamp**: `string` diff --git a/packages/docs/src/content/docs/api/metering-upstash/src/classes/UpstashRedisClient.md b/packages/docs/src/content/docs/api/metering-upstash/src/classes/UpstashRedisClient.md index fd68cb609..7a9e215ee 100644 --- a/packages/docs/src/content/docs/api/metering-upstash/src/classes/UpstashRedisClient.md +++ b/packages/docs/src/content/docs/api/metering-upstash/src/classes/UpstashRedisClient.md @@ -27,6 +27,19 @@ title: "UpstashRedisClient" `UpstashRedisClient` +## Properties + +### scriptKeyAccess + +> `readonly` **scriptKeyAccess**: `"multi-key"` + +Metering의 원자적 스크립트는 여러 키에 접근하므로 단일 노드/단일 슬롯 실행 모델이 필요합니다. +Redis Cluster처럼 서로 다른 슬롯의 키 접근을 거부하는 클라이언트는 지원하지 않습니다. + +#### Implementation of + +[`RedisClient`](/api/metering-core/src/interfaces/redisclient/).[`scriptKeyAccess`](/api/metering-core/src/interfaces/redisclient/#scriptkeyaccess) + ## Methods ### eval() @@ -39,7 +52,7 @@ Lua 스크립트 실행 ##### TResult -`TResult` *extends* `unknown`[] +`TResult` _extends_ `unknown`[] #### Parameters @@ -63,7 +76,7 @@ Lua 스크립트 실행 [`RedisClient`](/api/metering-core/src/interfaces/redisclient/).[`eval`](/api/metering-core/src/interfaces/redisclient/#eval) -*** +--- ### set() @@ -101,7 +114,7 @@ Lua 스크립트 실행 [`RedisClient`](/api/metering-core/src/interfaces/redisclient/).[`set`](/api/metering-core/src/interfaces/redisclient/#set) -*** +--- ### zadd() @@ -131,7 +144,7 @@ Sorted Set에 멤버 추가 [`RedisClient`](/api/metering-core/src/interfaces/redisclient/).[`zadd`](/api/metering-core/src/interfaces/redisclient/#zadd) -*** +--- ### zrangebyscore() diff --git a/packages/docs/src/content/docs/api/problems-core/src/classes/Problem.md b/packages/docs/src/content/docs/api/problems-core/src/classes/Problem.md index 1f813f812..354b0d194 100644 --- a/packages/docs/src/content/docs/api/problems-core/src/classes/Problem.md +++ b/packages/docs/src/content/docs/api/problems-core/src/classes/Problem.md @@ -263,6 +263,7 @@ RFC 7807 Problem Details를 표현하는 기본 추상 에러 클래스입니다 - [`AtomicQuotaNotSupportedProblem`](/api/metering-core/src/classes/atomicquotanotsupportedproblem/) - [`DuplicateRecordProblem`](/api/metering-core/src/classes/duplicaterecordproblem/) - [`InvalidMeterDimensionProblem`](/api/metering-core/src/classes/invalidmeterdimensionproblem/) +- [`MeteringTransitionProblem`](/api/metering-core/src/classes/meteringtransitionproblem/) - [`InvalidMeterProblem`](/api/metering-core/src/classes/invalidmeterproblem/) - [`InvalidUsageEnvelopeProblem`](/api/metering-core/src/classes/invalidusageenvelopeproblem/) - [`InvalidUsageQueryProblem`](/api/metering-core/src/classes/invalidusagequeryproblem/) diff --git a/packages/docs/src/content/docs/api/problems-core/src/variables/CROCO_PROBLEM_CODE_REGISTRY.md b/packages/docs/src/content/docs/api/problems-core/src/variables/CROCO_PROBLEM_CODE_REGISTRY.md index 3e8b240de..ea419498b 100644 --- a/packages/docs/src/content/docs/api/problems-core/src/variables/CROCO_PROBLEM_CODE_REGISTRY.md +++ b/packages/docs/src/content/docs/api/problems-core/src/variables/CROCO_PROBLEM_CODE_REGISTRY.md @@ -5,17 +5,17 @@ prev: false title: "CROCO_PROBLEM_CODE_REGISTRY" --- -> `const` **CROCO_PROBLEM_CODE_REGISTRY**: `object` +> `const` **CROCO\_PROBLEM\_CODE\_REGISTRY**: `object` ## Type Declaration ### problemCount -> `readonly` **problemCount**: `540` = `540` +> `readonly` **problemCount**: `541` = `541` ### problems -> `readonly` **problems**: readonly \[\{ `category`: `"Forbidden"`; `code`: `"ACCESS_DENIED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#access-denied"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/transports-http/src/libs/PipelineRunner.ts"`; `kind`: `"problem-factory"`; `line`: `196`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Forbidden"`; `code`: `"access-core/forbidden"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#access-core-forbidden"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/access-core/src/libs/guards/AccessGuard.ts"`; `kind`: `"problem-constructor"`; `line`: `17`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ADMIN_LIFECYCLE_DEMO_INVARIANT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-lifecycle-demo-invariant"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/create-croco-app/templates/admin-console/apps/console-web/src/LifecycleAutomationDemo.tsx"`; `kind`: `"problem-constructor"`; `line`: `66`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"admin-console/user-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-console-user-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `79`; `file`: `"packages/create-croco-app/templates/admin-console/apps/api-server/src/controllers/adminSchemas.ts"`; `kind`: `"problem-metadata"`; `line`: `6`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"admin-core/resource-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-core-resource-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/admin-core/src/libs/AdminResource.ts"`; `kind`: `"problem-constructor"`; `line`: `79`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"admin-core/webhook-action-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-core-webhook-action-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/admin-core/src/libs/WebhookOperations.ts"`; `kind`: `"problem-constructor"`; `line`: `187`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"admin-generated/contract-diagnostics"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-generated-contract-diagnostics"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/admin-generated/src/libs/generate.ts"`; `kind`: `"problem-constructor"`; `line`: `55`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"ai-saas/model-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-model-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `31`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"ai-saas/model-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-model-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `22`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ai-saas/provider-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-provider-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `62`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"ai-saas/quota-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-quota-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"ai-saas/rate-limit-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-rate-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `53`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ai-saas/smoke-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-smoke-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"ai-saas/tenant-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-tenant-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"ai-saas/tenant-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-tenant-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"ALREADY_MEMBER"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#already-member"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `18`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"analytics-posthog/capture-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#analytics-posthog-capture-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/analytics-posthog/src/libs/problems/PostHogAnalyticsProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"analytics-posthog/flush-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#analytics-posthog-flush-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/analytics-posthog/src/libs/problems/PostHogAnalyticsProblems.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"analytics-posthog/readiness-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#analytics-posthog-readiness-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/analytics-posthog/src/libs/problems/PostHogAnalyticsProblems.ts"`; `kind`: `"problem-class"`; `line`: `33`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"API_KEY_EXPIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#api-key-expired"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `48`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"NotFound"`; `code`: `"API_KEY_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#api-key-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/apikey/problems/ApiKeyNotFoundProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"API_KEY_REVOKED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#api-key-revoked"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `56`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"ValidationError"`; `code`: `"architecture-policy/manifest-json-parse"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#architecture-policy-manifest-json-parse"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/architecture-policy/src/index.ts"`; `kind`: `"problem-constructor"`; `line`: `19`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"architecture-policy/manifest-schema-version"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#architecture-policy-manifest-schema-version"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/architecture-policy/src/index.ts"`; `kind`: `"problem-constructor"`; `line`: `30`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"architecture-policy/manifest-shape"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#architecture-policy-manifest-shape"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/architecture-policy/src/index.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"architecture-policy/package-json-parse"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#architecture-policy-package-json-parse"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/architecture-policy/src/index.ts"`; `kind`: `"problem-constructor"`; `line`: `46`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"audit-core/auditable-decorator-misuse"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#audit-core-auditable-decorator-misuse"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/audit-core/src/libs/problems/AuditableDecoratorProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"audit/insert-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#audit-insert-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/audit-drizzle/src/libs/DrizzleAuditLogRepository.ts"`; `kind`: `"problem-factory"`; `line`: `137`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-better-auth/authentication-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-authentication-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/BetterAuthAuthenticationProblem.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-better-auth/invalid-session-payload"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-invalid-session-payload"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/BetterAuthInvalidSessionProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"auth-better-auth/invalid-webhook-payload"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-invalid-webhook-payload"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-class"`; `line`: `23`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"auth-better-auth/invalid-webhook-signature"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-invalid-webhook-signature"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-better-auth/not-initialized"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-not-initialized"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-better-auth/session-lookup-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-session-lookup-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/BetterAuthSessionLookupProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"auth-better-auth/session-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-session-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `23`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"auth-better-auth/user-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-user-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `39`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Conflict"`; `code`: `"auth-clerk/duplicate-tenant-mapping"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-duplicate-tenant-mapping"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `94`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-clerk/external-service-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-external-service-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `121`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"auth-clerk/invalid-webhook-payload"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-invalid-webhook-payload"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"auth-clerk/malformed-claim"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-malformed-claim"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `83`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-clerk/public-user-data-missing"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-public-user-data-missing"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `109`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"auth-clerk/token-verification-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-token-verification-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `36`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-clerk/token-verification-upstream-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-token-verification-upstream-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `60`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"auth-clerk/webhook-verification-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-webhook-verification-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-core/api-key-creation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-api-key-creation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `80`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"auth-core/api-key-rotation-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-api-key-rotation-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `88`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-core/api-key-rotation-protection-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-api-key-rotation-protection-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/auth-core/src/libs/apikey/ApiKeyRotationProtector.ts"`; `kind`: `"problem-constructor"`; `line`: `28`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-core/auth-provider-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-auth-provider-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `21`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"auth-core/invalid-api-key-rotation-idempotency-key"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-invalid-api-key-rotation-idempotency-key"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `96`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"auth-core/invalid-permission-action"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-invalid-permission-action"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `72`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"auth-core/invalid-permission-format"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-invalid-permission-format"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `64`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-core/invalid-route-metadata-target"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-invalid-route-metadata-target"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"An authentication guard received a route metadata target that was neither an object nor a function."`; `operatorAction`: `"Inspect the route adapter metadata target and ensure it returns the controller object or constructor before handling requests."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Do not retry the unchanged request; ask the service operator to correct the route metadata configuration."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `35`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"BAD_REQUEST"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#bad-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/access-core/src/libs/guards/AccessGuard.ts"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"batch-qstash/invalid-publish-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#batch-qstash-invalid-publish-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/batch-qstash/src/libs/problems/QStashBatchProblems.ts"`; `kind`: `"problem-class"`; `line`: `18`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"batch-qstash/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#batch-qstash-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/batch-qstash/src/libs/problems/QStashBatchProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"BILLING_STATUS_MAPPING_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-status-mapping-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-polar/src/libs/problems/BillingStatusMappingProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing-polar/checkout-idempotency-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-checkout-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `54`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing-polar/customer-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-customer-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `72`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"billing-polar/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `18`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"billing-polar/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `98`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing-polar/subscription-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-subscription-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `85`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"billing-polar/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `114`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"billing-polar/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `38`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/account-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-account-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `32`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"billing/checkout-creation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-checkout-creation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `92`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/checkout-in-progress"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-checkout-in-progress"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `100`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-lifecycle-idempotency-key"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-lifecycle-idempotency-key"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `80`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-money-amount"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-money-amount"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `113`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-money-currency"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-money-currency"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `121`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-plan-version-definition"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-plan-version-definition"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `157`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-plan-version-ref"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-plan-version-ref"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `149`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/lifecycle-command-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-lifecycle-command-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `48`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/lifecycle-command-in-progress"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-lifecycle-command-in-progress"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `60`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/lifecycle-command-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-lifecycle-command-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `72`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"billing/money-currency-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-money-currency-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `129`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/money-division-by-zero"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-money-division-by-zero"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `141`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/plan-version-already-published"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-plan-version-already-published"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `165`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/plan-version-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-plan-version-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `173`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"billing/provider-capability-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-provider-capability-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `6`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/subscription-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-subscription-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `24`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"billing/subscription-plan-version-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-subscription-plan-version-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `203`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/unknown-plan-version"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-unknown-plan-version"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `181`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/unknown-provider-plan-mapping"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-unknown-provider-plan-mapping"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `189`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/webhook-already-processed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-webhook-already-processed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Forbidden"`; `code`: `"BLOCKED_DURING_IMPERSONATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#blocked-during-impersonation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `49`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cache-core/invalid-decorator-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalid-decorator-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `12`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"cache-core/invalid-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalid-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheStoreProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cache-core/invalidation-assertion-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-assertion-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `102`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cache-core/invalidation-capability-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-capability-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `55`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"cache-core/invalidation-event-unknown"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-event-unknown"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `41`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cache-core/invalidation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `72`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"cache-core/invalidation-graph-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-graph-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `27`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"CIRCUIT_BREAKER_OPEN"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#circuit-breaker-open"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/CircuitBreakerOpenProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cloudflare/images-invalid-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cloudflare-images-invalid-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesProvider.ts"`; `kind`: `"problem-factory"`; `line`: `55`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cloudflare/images-null-result"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cloudflare-images-null-result"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesProvider.ts"`; `kind`: `"problem-factory"`; `line`: `277`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cloudflare/images-upload-intent-null-result"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cloudflare-images-upload-intent-null-result"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesProvider.ts"`; `kind`: `"problem-factory"`; `line`: `353`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CONFLICTING_PAGINATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#conflicting-pagination"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/pagination-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/directory-not-empty"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-directory-not-empty"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/DirectoryNotEmptyProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/invalid-cli-option"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-invalid-cli-option"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/InvalidCliOptionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/invalid-goal-option"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-invalid-goal-option"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/InvalidGoalOptionProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/invalid-saas-preset-option"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-invalid-saas-preset-option"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/InvalidSaasPresetOptionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"create-croco-app/lambda-telemetry-boundary"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-lambda-telemetry-boundary"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/addons/lambda/apps/graphql-api/src/telemetryFlush.ts"`; `kind`: `"problem-class"`; `line`: `10`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"create-croco-app/unexpected-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-unexpected-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/cli-result.ts"`; `kind`: `"problem-class"`; `line`: `28`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/unsupported-node-version"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-unsupported-node-version"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The detected Node.js version is outside the supported generated-app toolchain train."`; `operatorAction`: `"Compare the reported actual Node.js version with the supported Node.js 22 train and verify the active version-manager configuration."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: ``"Install and activate Node.js 22 with `nvm install 22 && nvm use 22`, then rerun the command."``; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/UnsupportedNodeVersionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/web-meta-vite-fullstack-missing-hydration-root"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-web-meta-vite-fullstack-missing-hydration-root"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/create-croco-app/templates/addons/web-meta-vite-fullstack/ssr-worker/src/client.tsx"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/web-meta-vite-missing-hydration-root"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-web-meta-vite-missing-hydration-root"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/create-croco-app/templates/addons/web-meta-vite/src/client.tsx"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"credits-core/account-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-account-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `81`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"credits-core/account-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-account-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `15`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Conflict"`; `code`: `"credits-core/duplicate-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-duplicate-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `67`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"credits-core/event-publication-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-event-publication-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `143`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"credits-core/expired-grant"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-expired-grant"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `39`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"credits-core/insufficient-credits"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-insufficient-credits"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `25`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"ValidationError"`; `code`: `"credits-core/invalid-amount"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-invalid-amount"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"credits-core/invalid-command"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-invalid-command"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `109`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"credits-core/refund-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-refund-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `129`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"credits-core/reservation-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-reservation-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `53`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"Conflict"`; `code`: `"credits-core/stale-ledger-position"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-stale-ledger-position"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `95`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"credits-core/transaction-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-transaction-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `119`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"credits-drizzle/persistence-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-drizzle-persistence-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-drizzle/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_JOBS_001"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-001"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-constructor"`; `line`: `88`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_JOBS_002"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-002"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-constructor"`; `line`: `99`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_JOBS_003"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-003"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-constructor"`; `line`: `110`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"CROCO_CLI_JOBS_004"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-004"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `49`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-metadata"`; `line`: `137`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"CROCO_CLI_JOBS_005"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-005"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `63`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-metadata"`; `line`: `132`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_OPS_001"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-ops-001"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/libs/ops.ts"`; `kind`: `"problem-constructor"`; `line`: `66`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_OPS_002"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-ops-002"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/libs/ops.ts"`; `kind`: `"problem-constructor"`; `line`: `55`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_USAGE_DASHBOARD_005"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-usage-dashboard-005"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/commands/generateUsageDashboard.ts"`; `kind`: `"problem-constructor"`; `line`: `24`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"CROCO_HTTP_MIDDLEWARE_001"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-http-middleware-001"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"HTTP middleware returned without a Response, without shortCircuit(reason), and without calling next() exactly once."`; `operatorAction`: `"Update the named @croco/transports-http middleware to return next(), await next() once, return a Response, or return shortCircuit(reason) for intentional termination."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry only after the service owner ships a middleware contract fix."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/transports-http/src/libs/CrocoRouteRegistrar.ts"`; `kind`: `"problem-factory"`; `line`: `367`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"CROCO_HTTP_MIDDLEWARE_002"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-http-middleware-002"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"HTTP middleware attempted to resume the downstream pipeline more than once."`; `operatorAction`: `"Store the Response from a single next() call and reuse or transform it instead of calling next() again."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry only after the service owner ships a middleware contract fix."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/transports-http/src/libs/CrocoRouteRegistrar.ts"`; `kind`: `"problem-factory"`; `line`: `272`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"CROCO_HTTP_SECURITY_001"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-http-security-001"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"HTTP bootstrap validation found a generated or application app without the required security middleware set."`; `operatorAction`: `"Add the missing @croco/transports-http middleware or keep securityValidation disabled only in an explicit local migration/testing fixture."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Use an app build that registers security headers, CORS, body limit, and rate-limit middleware before first run."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/transports-http/src/libs/CrocoApp.ts"`; `kind`: `"problem-factory"`; `line`: `253`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_HTTP_SECURITY_002"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-http-security-002"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/transports-http/src/libs/middleware/SecurityMiddlewareMarker.ts"`; `kind`: `"problem-factory"`; `line`: `154`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"dataloader-core/batch-result-length-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#dataloader-core-batch-result-length-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/dataloader-core/src/libs/problems/BatchLoaderProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"diagnostics-core/duplicate-provider"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#diagnostics-core-duplicate-provider"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/diagnostics-core/src/libs/problems/DiagnosticsProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"DUPLICATE_INVITATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#duplicate-invitation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/RateLimitProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"DUPLICATE_RECOVER_HANDLER"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#duplicate-recover-handler"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/DuplicateRecoverHandlerProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"DURATION_PARSE_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#duration-parse-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ContextProblems.ts"`; `kind`: `"problem-class"`; `line`: `15`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"EMBEDDING_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#embedding-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `43`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"ENTITLEMENT_DENIED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-denied"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `20`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Forbidden"`; `code`: `"ENTITLEMENT_INACTIVE_SUBSCRIPTION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-inactive-subscription"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `46`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Forbidden"`; `code`: `"ENTITLEMENT_MISSING_PLAN"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-missing-plan"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `32`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"NotFound"`; `code`: `"ENTITLEMENT_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `86`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ENTITLEMENT_PROVIDER_UNAVAILABLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-provider-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `74`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"ENTITLEMENT_QUOTA_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-quota-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `60`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"ValidationError"`; `code`: `"ENTITLEMENT_REQUIREMENT_INVALID"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-requirement-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `11`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"entitlements-core/definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlements-core-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `95`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"entitlements-core/plan-version-already-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlements-core-plan-version-already-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `113`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"entitlements-core/plan-version-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlements-core-plan-version-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `122`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"entitlements-core/plan-version-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlements-core-plan-version-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `104`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/after-commit-outcome-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-after-commit-outcome-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `107`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/after-commit-requires-active-transaction"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-after-commit-requires-active-transaction"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `96`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/deserialization-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-deserialization-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/duplicate-event-field"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-duplicate-event-field"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `51`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/duplicate-event-name"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-duplicate-event-name"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `66`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/event-bus-not-set"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-event-bus-not-set"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/event-definition-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-event-definition-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `18`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/transaction-context-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-transaction-context-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `81`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/unknown-event-type"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-unknown-event-type"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"events-inmemory/backpressure-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-backpressure-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/problems/EventsInmemoryProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"events-inmemory/backpressure-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-backpressure-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/problems/EventsInmemoryProblems.ts"`; `kind`: `"problem-class"`; `line`: `23`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-inmemory/invalid-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-invalid-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/InmemoryEventBus.ts"`; `kind`: `"problem-class"`; `line`: `72`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-inmemory/publish-dropped"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-publish-dropped"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/InmemoryEventBus.ts"`; `kind`: `"problem-class"`; `line`: `51`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-inmemory/publish-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-publish-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/InmemoryEventBus.ts"`; `kind`: `"problem-class"`; `line`: `34`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/configuration-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-configuration-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `36`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"events-tx/inbox-claim-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-inbox-claim-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"An inbox completion request no longer owns the processing attempt it started."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints, then verify workers complete only the attempt they claimed."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Acquire a new inbox claim before retrying processing; discard the stale completion when a new claim cannot be acquired."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `120`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"events-tx/outbox-idempotency-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-outbox-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `83`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/outbox-publish-exhausted"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-outbox-publish-exhausted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `105`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/outbox-transaction-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-outbox-transaction-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `64`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/storage-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-storage-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `73`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/transaction-state-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-transaction-state-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `56`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"execution/checkpoint-store-conformance"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-checkpoint-store-conformance"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `138`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `90`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/continuation-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-continuation-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `129`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"execution/continuation-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-continuation-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `118`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/idempotency-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `94`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"ValidationError"`; `code`: `"execution/invalid-continuation-lease-duration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-invalid-continuation-lease-duration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/invalid-state-transition"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-invalid-state-transition"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `110`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/max-retries-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-max-retries-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"execution/not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `86`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Forbidden"`; `code`: `"FORBIDDEN"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#forbidden"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-config/config-schema-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-config-config-schema-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-config/src/libs/problems/ConfigProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-config/config-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-config-config-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-config/src/libs/problems/ConfigProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-config/invalid-boolean-env"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-config-invalid-boolean-env"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-config/src/libs/problems/ConfigProblems.ts"`; `kind`: `"problem-class"`; `line`: `24`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/circular-dependency"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-circular-dependency"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/CircularDependencyProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/container-scope-disposed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-container-scope-disposed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `10`; `file`: `"packages/framework-context/src/libs/Container.ts"`; `kind`: `"problem-factory"`; `line`: `65`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/context-middleware-execution-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-context-middleware-execution-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ContextProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/di-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-di-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ContainerResolutionProblem.ts"`; `kind`: `"problem-class"`; `line`: `10`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/di-scope-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-di-scope-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ContainerResolutionProblem.ts"`; `kind`: `"problem-class"`; `line`: `31`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-context/on-shutdown-decorator-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-on-shutdown-decorator-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ShutdownProblems.ts"`; `kind`: `"problem-class"`; `line`: `9`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-context/pipeline-graph-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-pipeline-graph-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/PipelineGraphProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-context/policy-capability-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-policy-capability-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/RuntimePolicyProblems.ts"`; `kind`: `"problem-class"`; `line`: `33`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-context/policy-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-policy-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/RuntimePolicyProblems.ts"`; `kind`: `"problem-class"`; `line`: `9`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-context/policy-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-policy-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/RuntimePolicyProblems.ts"`; `kind`: `"problem-class"`; `line`: `21`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/request-scope-outside-context"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-request-scope-outside-context"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/framework-context/src/libs/Container.ts"`; `kind`: `"problem-factory"`; `line`: `1704`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-context/shutdown-configuration-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-shutdown-configuration-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ShutdownProblems.ts"`; `kind`: `"problem-class"`; `line`: `97`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/shutdown-hook-execution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-shutdown-hook-execution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ShutdownProblems.ts"`; `kind`: `"problem-class"`; `line`: `112`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/shutdown-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-shutdown-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ShutdownProblems.ts"`; `kind`: `"problem-class"`; `line`: `73`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-module/circular-dependency"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-circular-dependency"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `26`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-module/invalid-module-definition"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-invalid-module-definition"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `16`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-module/lifecycle-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-lifecycle-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `42`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-module/provider-not-visible"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-provider-not-visible"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `70`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-module/provider-ownership-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-provider-ownership-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `92`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-module/provider-write-not-owned"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-provider-write-not-owned"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `108`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"frontend-problems/fetch-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#frontend-problems-fetch-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/frontend-problems/src/index.ts"`; `kind`: `"problem-class"`; `line`: `204`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"frontend-vite/missing-cloudflare-vite-plugin"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#frontend-vite-missing-cloudflare-vite-plugin"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/frontend-vite/src/libs/problems/MissingCloudflareVitePluginProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `14`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"GENERATION_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#generation-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `34`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"gid-core/id-type-only-property"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#gid-core-id-type-only-property"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/gid-core/src/libs/problems/GidProblems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"gid-core/invalid-id-prefix"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#gid-core-invalid-id-prefix"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/gid-core/src/libs/problems/GidProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"governance-core/delete-not-supported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#governance-core-delete-not-supported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/governance-core/src/libs/problems/DataGovernanceProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `34`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"governance-core/export-not-supported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#governance-core-export-not-supported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/governance-core/src/libs/problems/DataGovernanceProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"ValidationError"`; `code`: `"governance-core/resource-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#governance-core-resource-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/governance-core/src/libs/DataGovernanceResource.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"governance-core/retention-policy-violation"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#governance-core-retention-policy-violation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/governance-core/src/libs/problems/DataGovernanceProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `59`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"NotFound"`; `code`: `"GRAPHQL_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#graphql-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/protocols-graphql/src/libs/errors/GraphQLProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `23`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"HEALTH_SCORE_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#health-score-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/customer-health-core/src/libs/problems/HealthProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BadRequest"`; `code`: `"idempotency-core/invalid-key"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-invalid-key"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `53`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"idempotency-core/invalid-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-invalid-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `72`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"idempotency-core/key-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-key-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `37`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"idempotency-core/reservation-expired"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-reservation-expired"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `101`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"idempotency-core/reservation-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-reservation-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `87`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"idempotency-core/reservation-state"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-reservation-state"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `120`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Forbidden"`; `code`: `"IMPERSONATION_IDENTITY_CONFLICT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#impersonation-identity-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"BadRequest"`; `code`: `"IMPERSONATION_REASON_REQUIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#impersonation-reason-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"NotFound"`; `code`: `"IMPERSONATION_SESSION_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#impersonation-session-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `58`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"IMPERSONATION_TARGET_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#impersonation-target-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `22`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"INDEX_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#index-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `57`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"integrations-posthog/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#integrations-posthog-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/integrations-posthog/src/libs/problems/PostHogProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"INVALID_AUTO_JOIN_ROLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-auto-join-role"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/invitation-core/src/libs/problems/DomainPolicyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `18`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"INVALID_CURSOR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-cursor"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/pagination-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"INVALID_INVITATION_EXPIRY_DURATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-invitation-expiry-duration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `32`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"INVALID_PAGINATION_DIRECTION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-pagination-direction"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/pagination-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"INVALID_RETRY_CONFIGURATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-retry-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `52`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"INVALID_ROLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-role"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `44`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"INVITATION_ALREADY_ACCEPTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-already-accepted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `73`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"INVITATION_CREATION_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-creation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"INVITATION_EMAIL_MISMATCH"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-email-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `84`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Gone"`; `code`: `"INVITATION_EXPIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-expired"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource is no longer available through this API surface."`; `operatorAction`: `"Verify lifecycle, migration, deprecation, and retention state."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Stop using the stale reference and follow the replacement flow when available."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `62`; \}\]; `status`: `410`; `title`: `"Gone"`; \}, \{ `category`: `"Conflict"`; `code`: `"INVITATION_IDEMPOTENCY_CONFLICT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"INVITATION_INVALID_STATUS"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-invalid-status"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `95`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"INVITATION_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `51`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"INVITATION_RATE_LIMIT_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-rate-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/RateLimitProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"BadRequest"`; `code`: `"invitation-core/batch-size-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-core-batch-size-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/BatchInviteProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"invitation-drizzle/token-cipher-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-drizzle-token-cipher-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/invitation-drizzle/src/libs/InvitationTokenCipher.ts"`; `kind`: `"problem-constructor"`; `line`: `25`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"LAMBDA_TIMEOUT_GUARD"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lambda-timeout-guard"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `39`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"LAST_OWNER"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#last-owner"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/action-adapter-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-action-adapter-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `37`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/duplicate-rule"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-duplicate-rule"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/rule-action-contract-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-action-contract-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `155`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"lifecycle-core/rule-command-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-command-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/rule-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `21`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"lifecycle-core/rule-transition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-transition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `118`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"lifecycle-core/rule-version-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-version-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `84`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/rule-version-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-version-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `138`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"lifecycle-core/rule-version-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-version-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `66`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"lifecycle-core/rule-version-unknown"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-version-unknown"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `48`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"LLM_PROVIDER_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-provider-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"LLM_SERVICE_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-service-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"llm-core/invalid-llm-prompt"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-core-invalid-llm-prompt"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `85`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-core/invalid-llm-response"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-core-invalid-llm-response"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `65`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-core/llm-service-not-initialized"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-core-llm-service-not-initialized"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"llm-core/rate-limit-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-core-rate-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `43`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"Forbidden"`; `code`: `"llm-metering/cost-limit-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-cost-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `41`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"NotFound"`; `code`: `"llm-metering/pricing-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-pricing-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-class"`; `line`: `58`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Conflict"`; `code`: `"llm-metering/pricing-registry-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-pricing-registry-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `71`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Forbidden"`; `code`: `"llm-metering/quota-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-quota-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `24`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-metering/record-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-record-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"llm-openai/aborted"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-aborted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `117`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"llm-openai/authentication-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-authentication-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `42`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-openai/invalid-response"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-invalid-response"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `135`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-openai/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `24`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"llm-openai/rate-limited"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-rate-limited"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `57`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-openai/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `72`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-openai/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `87`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"llm-openai/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Forbidden"`; `code`: `"MEMBERSHIP_CONSTRAINT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#membership-constraint"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipConstraintProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"NotFound"`; `code`: `"MEMBERSHIP_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#membership-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BadRequest"`; `code`: `"meta-vite/server-action-invalid-path"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#meta-vite-server-action-invalid-path"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/meta-vite/src/libs/actions/serverActions.ts"`; `kind`: `"problem-class"`; `line`: `80`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"NotFound"`; `code`: `"meta-vite/server-action-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#meta-vite-server-action-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/meta-vite/src/libs/actions/serverActions.ts"`; `kind`: `"problem-class"`; `line`: `66`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"meta-vite/server-action-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#meta-vite-server-action-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/meta-vite/src/libs/actions/serverActions.ts"`; `kind`: `"problem-class"`; `line`: `94`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"meter/insert-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#meter-insert-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/metering-drizzle/src/libs/DrizzleMeterRepository.ts"`; `kind`: `"problem-factory"`; `line`: `146`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering-drizzle/migration-query-result-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-drizzle-migration-query-result-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `9`; `file`: `"packages/metering-drizzle/src/migrations/addUsageEnvelopeFields.ts"`; `kind`: `"problem-factory"`; `line`: `125`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering-drizzle/usage-envelope-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-drizzle-usage-envelope-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-drizzle/src/libs/problems/UsageEnvelopeConfigurationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `6`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering-upstash/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-upstash-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metering-upstash/src/libs/problems/UpstashMeteringProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering/atomic-quota-not-supported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-atomic-quota-not-supported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metering-core/src/libs/problems/AtomicQuotaNotSupportedProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"metering/duplicate-record"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-duplicate-record"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/DuplicateRecordProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"metering/invalid-meter"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-invalid-meter"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/InvalidMeterProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metering/invalid-meter-dimension"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-invalid-meter-dimension"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/InvalidMeterDimensionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `6`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metering/invalid-usage-envelope"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-invalid-usage-envelope"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/InvalidUsageEnvelopeProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `6`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metering/invalid-usage-query"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-invalid-usage-query"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/InvalidUsageQueryProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `6`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"metering/quota-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-quota-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/QuotaExceededProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering/redis-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-redis-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/RedisProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metrics-billing/metric-dropped"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-billing-metric-dropped"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Billing metrics could not be recorded because the referenced account, subscription, or plan evidence was missing."`; `operatorAction`: `"Use extensions.reason, tenantId, resourceId, and eventKey to rebuild the missing account, subscription, or plan before replay."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Restore the missing billing state identified by reason/resourceId, then replay the same billing event with the same event key."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-billing/src/libs/problems/BillingMetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metrics-billing/recording-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-billing-recording-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-billing/src/libs/problems/BillingMetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `46`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"metrics-core/carrying-capacity-simulation-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-carrying-capacity-simulation-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/carrying-capacity-tenant-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-carrying-capacity-tenant-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `12`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/gross-margin-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-gross-margin-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `42`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/invalid-retention-movement"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-invalid-retention-movement"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `30`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/mixed-currency-mrr"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-mixed-currency-mrr"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `50`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"metrics-core/retention-metrics-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-retention-metrics-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `20`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/snapshot-tenant-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-snapshot-tenant-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/SnapshotScheduler.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"MIDDLEWARE_EXECUTION_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#middleware-execution-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/MiddlewareProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"migration-runner/database-url-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-database-url-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/DatabaseUrlRequiredProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"migration-runner/file-load-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-file-load-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MigrationFileLoadProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"migration-runner/history-drift"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-history-drift"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Recorded migration history no longer matches the available migration files by stable id and name."`; `operatorAction`: `"Compare the checkpoint rows with version-controlled migration files, restore missing or renamed files when possible, and repair history only after verifying the deployed schema."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Restore the original migration file identity or ask an operator to perform an explicitly verified history repair."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MigrationHistoryDriftProblem.ts"`; `kind`: `"problem-class"`; `line`: `16`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"BadRequest"`; `code`: `"migration-runner/invalid-count"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-invalid-count"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/InvalidMigrationCountProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"migration-runner/missing-down-function"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-missing-down-function"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MissingDownFunctionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"migration-runner/missing-up-function"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-missing-up-function"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MissingUpFunctionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"migration-runner/transaction-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-transaction-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MigrationTransactionRequiredProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"migration-runner/unsupported-dialect"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-unsupported-dialect"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/UnsupportedDialectProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"migration-runner/unsupported-query-result"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-unsupported-query-result"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/UnsupportedMigrationQueryResultProblem.ts"`; `kind`: `"problem-class"`; `line`: `11`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"MISSING_TENANT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#missing-tenant"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"NotFound"`; `code`: `"MODEL_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#model-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `25`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Forbidden"`; `code`: `"NESTED_IMPERSONATION_NOT_ALLOWED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#nested-impersonation-not-allowed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `31`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/default-provider-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-default-provider-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `80`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/delivery-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-delivery-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `169`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/idempotency-key-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-idempotency-key-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `241`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/outbox-idempotency-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-outbox-idempotency-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `257`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/preference-channel-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-preference-channel-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `224`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/preference-context-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-preference-context-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `208`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"notifications-core/preference-denied"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-preference-denied"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `186`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-already-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-already-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `64`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-channel-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-channel-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-idempotency-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-idempotency-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `136`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `32`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `120`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-not-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-not-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `48`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/send-max-attempts-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-send-max-attempts-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `153`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"notifications-core/template-already-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-template-already-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `273`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"notifications-core/template-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-template-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `291`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/template-variables-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-template-variables-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `310`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"notifications-resend/idempotency-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Resend rejected reuse of an idempotency key for a different send request."`; `operatorAction`: `"Audit callers so each business send intent has one stable idempotency key."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Replay the original payload with the same key or use a new key for a changed send intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `54`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-resend/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Required Resend configuration is absent or blank before provider readiness can be proven."`; `operatorAction`: `"Check deployment env/config injection and verify diagnostics do not expose the raw key."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Configure RESEND_API_KEY and a verified default sender, then rerun diagnostics."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `19`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-resend/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Resend returned a transient status, rate limit, or network timeout."`; `operatorAction`: `"Check Resend status, rate limits, and retry-after/upstream status in telemetry."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry with the same idempotency key when the send intent is unchanged."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `65`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-resend/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Resend rejected the request with a non-retryable upstream failure."`; `operatorAction`: `"Inspect redacted upstream code/status and fix provider configuration before retrying."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Do not retry unchanged input; correct the API key, domain, sender verification, or request content."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `76`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-resend/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `40`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"onboarding/context-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#onboarding-context-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/onboarding-core/src/libs/problems/OnboardingProblems.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"NotFound"`; `code`: `"onboarding/definition-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#onboarding-definition-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/onboarding-core/src/libs/problems/OnboardingProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"onboarding/step-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#onboarding-step-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/onboarding-core/src/libs/problems/OnboardingProblems.ts"`; `kind`: `"problem-class"`; `line`: `18`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"openapi-spec/controller-typescript-diagnostics"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#openapi-spec-controller-typescript-diagnostics"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/openapi-spec/src/libs/loadControllers.ts"`; `kind`: `"problem-constructor"`; `line`: `70`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"openapi-spec/invalid-contract"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#openapi-spec-invalid-contract"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/openapi-spec/src/libs/emitOpenAPI.ts"`; `kind`: `"problem-constructor"`; `line`: `106`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"openapi-spec/no-rest-controllers-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#openapi-spec-no-rest-controllers-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/openapi-spec/src/libs/loadControllers.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"OTLP_ENDPOINT_REQUIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#otlp-endpoint-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `20`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"outbox-core/dispatch-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#outbox-core-dispatch-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/outbox-core/src/libs/problems/OutboxProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `86`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"outbox-core/failure-metadata-missing"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#outbox-core-failure-metadata-missing"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"A dispatcher attempted to mark an outbox record failed without the required retry metadata extensions."`; `operatorAction`: `"Audit dispatcher error mapping so every failure path preserves attempt, retryability, terminal state, and failedAt metadata."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Abort the dispatch attempt and pass an OutboxDispatchProblem or equivalent Problem with outbox retry metadata."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/outbox-core/src/libs/problems/OutboxProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `116`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"outbox-core/record-id-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#outbox-core-record-id-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"A caller tried to create an outbox record with an explicit id that already belongs to another idempotency scope."`; `operatorAction`: `"Inspect the producer id/idempotency assignment path and remove any shared id generator or manual id reuse."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Reuse the original idempotency key for the same intent or choose a new record id for a different intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/outbox-core/src/libs/problems/OutboxProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `103`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"outbox-core/unit-of-work-context-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#outbox-core-unit-of-work-context-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"An outbox write received a Unit of Work context that was missing, malformed, or created by another store instance."`; `operatorAction`: `"Check transaction boundary wiring so repository and outbox writes share the same store-owned Unit of Work client."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Abort the write and use the context supplied by the active TransactionalOutboxStore.runInUnitOfWork callback."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/outbox-core/src/libs/problems/OutboxProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `129`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"OWNERSHIP_TRANSFER_REQUIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ownership-transfer-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `65`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"BadRequest"`; `code`: `"problems-core/invalid-extensions"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#problems-core-invalid-extensions"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/problems-core/src/libs/problems/InvalidExtensionsProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"problems-core/parse-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#problems-core-parse-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/problems-core/src/libs/problems/ProblemDetailsParseProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"problems-core/problem-registry-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#problems-core-problem-registry-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/problems-core/src/libs/ProblemRegistry.ts"`; `kind`: `"problem-constructor"`; `line`: `210`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"problems-core/unhandled-category"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#problems-core-unhandled-category"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/problems-core/src/libs/ProblemCategoryMapper.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"protocols-core/contract-graph-diagnostics"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-core-contract-graph-diagnostics"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/protocols-core/src/libs/ContractGraph.ts"`; `kind`: `"problem-constructor"`; `line`: `142`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"protocols-graphql/auth-invalid-header-format"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-invalid-header-format"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `71`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"protocols-graphql/auth-invalid-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-invalid-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `54`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"protocols-graphql/auth-invalid-token"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-invalid-token"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `10`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `14`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"protocols-graphql/auth-missing-header"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-missing-header"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `63`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-graphql/auth-verifier-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-verifier-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `97`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"protocols-graphql/guard-denied"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-guard-denied"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-graphql/src/libs/problems/GuardProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"BadRequest"`; `code`: `"protocols-rest/auth-invalid-header-format"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-invalid-header-format"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `77`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"protocols-rest/auth-invalid-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-invalid-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `59`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"protocols-rest/auth-invalid-token"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-invalid-token"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `10`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `15`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"protocols-rest/auth-missing-header"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-missing-header"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `69`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-rest/auth-verifier-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-verifier-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `102`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-rest/duplicate-parameter-index"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-duplicate-parameter-index"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/metadata/MetadataReader.ts"`; `kind`: `"problem-factory"`; `line`: `48`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"protocols-rest/request-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-request-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-rest/src/libs/validators/ValidationProblem.ts"`; `kind`: `"problem-class"`; `line`: `31`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-rest/response-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-response-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-rest/src/libs/validators/ValidationProblem.ts"`; `kind`: `"problem-class"`; `line`: `54`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"protocols-rest/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-rest/src/libs/validators/ValidationProblem.ts"`; `kind`: `"problem-class"`; `line`: `12`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-trpc/route-handler-not-callable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-trpc-route-handler-not-callable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-trpc/src/libs/createTrpcRouter.ts"`; `kind`: `"problem-class"`; `line`: `20`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"PUBLIC_EMAIL_DOMAIN_NOT_ALLOWED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#public-email-domain-not-allowed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/invitation-core/src/libs/problems/DomainPolicyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"RATE_LIMIT_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rate-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/ratelimit-core/src/libs/problems/RateLimitExceededProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RATE_LIMIT_KEY_BUILDER_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rate-limit-key-builder-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/ratelimit-core/src/libs/problems/RateLimitConfigProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RATE_LIMIT_REFUND_UNSUPPORTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rate-limit-refund-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/ratelimit-core/src/libs/problems/RateLimitConfigProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `25`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"RATE_LIMIT_WINDOW_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rate-limit-window-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/ratelimit-core/src/libs/problems/RateLimitConfigProblems.ts"`; `kind`: `"problem-class"`; `line`: `14`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ratelimit-upstash/invalid-policy"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ratelimit-upstash-invalid-policy"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/ratelimit-upstash/src/libs/problems/RateLimitUpstashProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ratelimit-upstash/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ratelimit-upstash-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/ratelimit-upstash/src/libs/problems/RateLimitUpstashProblems.ts"`; `kind`: `"problem-class"`; `line`: `21`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"repository-core/batch-loader-factory-not-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#repository-core-batch-loader-factory-not-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/repository-core/src/libs/problems/BatchLoadProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"repository-core/batch-loader-factory-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#repository-core-batch-loader-factory-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/repository-core/src/libs/problems/BatchLoadProblems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"repository-core/batch-loader-scope-collision"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#repository-core-batch-loader-scope-collision"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/repository-core/src/libs/problems/BatchLoadProblems.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RESEND_NOTIFICATION_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#resend-notification-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `87`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RETRY_ABORTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-aborted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryAbortedProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RETRY_CIRCUIT_BREAKER_INVALID_STATE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-circuit-breaker-invalid-state"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RETRY_CIRCUIT_BREAKER_LOCK_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-circuit-breaker-lock-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `26`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RETRY_EXHAUSTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-exhausted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryExhaustedProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"retry-core/circuit-breaker-unexpected-state"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-core-circuit-breaker-unexpected-state"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/problems/CircuitBreakerProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"retry-core/success-hook-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-core-success-hook-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The business callback completed successfully, but its onSuccess observation hook failed afterward."`; `operatorAction`: `"Inspect the original cause and repair the named onSuccess listener or telemetry path without replaying the completed callback."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Do not repeat the business operation from this failure; report the hook failure while preserving the successful callback outcome."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"ROLE_HIERARCHY_VIOLATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#role-hierarchy-violation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `52`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"ValidationError"`; `code`: `"rpc-codegen/controller-typescript-diagnostics"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rpc-codegen-controller-typescript-diagnostics"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/rpc-codegen/src/libs/loadRoutes.ts"`; `kind`: `"problem-constructor"`; `line`: `72`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"rpc-codegen/invalid-contract"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rpc-codegen-invalid-contract"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/rpc-codegen/src/libs/generate.ts"`; `kind`: `"problem-constructor"`; `line`: `110`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"rpc-codegen/no-rest-controllers-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rpc-codegen-no-rest-controllers-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/rpc-codegen/src/libs/loadRoutes.ts"`; `kind`: `"problem-constructor"`; `line`: `33`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"rpc-codegen/unsupported-form-schema"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rpc-codegen-unsupported-form-schema"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/rpc-codegen/src/libs/generate.ts"`; `kind`: `"problem-constructor"`; `line`: `116`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"saas-demo/demo-endpoint-disabled"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-demo-endpoint-disabled"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"ValidationError"`; `code`: `"saas-demo/invalid-jobs-query"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-invalid-jobs-query"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `30`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"saas-demo/invalid-port"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-invalid-port"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"saas-demo/job-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-job-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `39`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"saas-demo/smoke-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-smoke-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `66`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"saas-demo/tenant-already-exists"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-tenant-already-exists"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `48`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"saas-demo/tenant-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-tenant-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `57`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"SEARCH_CAPABILITY_UNAVAILABLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-capability-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `65`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"SEARCH_DRIZZLE_INVALID_ROW"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-drizzle-invalid-row"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/search-drizzle/src/libs/problems/InvalidSearchRowProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"search-core/sync-identity-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-core-sync-identity-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The event envelope tenant or document identity conflicts with context.tenantId, payload.id, or payload.tenantId."`; `operatorAction`: `"Use extensions.source to identify the conflicting field and verify envelope-authoritative tenant and document identity propagation."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Correct the conflicting event or execution context, then replay the event."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `23`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"search-core/transform-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-core-transform-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-class"`; `line`: `35`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"search-meilisearch/index-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-index-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `80`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"search-meilisearch/invalid-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-invalid-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `60`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"search-meilisearch/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `39`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"search-meilisearch/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `100`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"search-meilisearch/tenant-token-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-tenant-token-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `140`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"search-meilisearch/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `120`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"SEAT_LIMIT_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#seat-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `78`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Forbidden"`; `code`: `"SELF_IMPERSONATION_NOT_ALLOWED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#self-impersonation-not-allowed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"ValidationError"`; `code`: `"starter/invalid-environment"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#starter-invalid-environment"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/spa-be-split/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"starter/unhandled-api-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#starter-unhandled-api-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/spa-be-split/apps/console-web/src/test/browser.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"starter/user-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#starter-user-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/spa-be-split/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_DELETE_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-delete-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-core/src/libs/problems/DeleteFailedProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"STORAGE_FILE_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-file-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-core/src/libs/problems/FileNotFoundProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BadRequest"`; `code`: `"STORAGE_INVALID_KEY"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-invalid-key"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/storage-core/src/libs/problems/InvalidKeyProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_R2_EMPTY_BODY"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-r2-empty-body"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-r2/src/libs/problems/EmptyR2BodyProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_R2_MISSING_CONFIG"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-r2-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/storage-r2/src/libs/problems/MissingR2ConfigProblem.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_R2_OBJECT_TOO_LARGE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-r2-object-too-large"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/storage-r2/src/libs/problems/R2ObjectTooLargeProblem.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_R2_READINESS_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-r2-readiness-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/storage-r2/src/libs/problems/R2ReadinessProblem.ts"`; `kind`: `"problem-class"`; `line`: `14`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_UPLOAD_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-upload-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-core/src/libs/problems/UploadFailedProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudflare/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudflare-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `37`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudflare/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudflare-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `70`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudflare/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudflare-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `86`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"storage-cloudflare/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudflare-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `57`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"storage-cloudinary/invalid-upload-intent-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-invalid-upload-intent-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryProvider.ts"`; `kind`: `"problem-factory"`; `line`: `331`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudinary/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `51`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudinary/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `84`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudinary/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `100`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"storage-cloudinary/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `71`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"storage/invalid-upload-intent-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-invalid-upload-intent-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesProvider.ts"`; `kind`: `"problem-factory"`; `line`: `305`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STRATEGY_UNAVAILABLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#strategy-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `44`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STRUCTURED_OUTPUT_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#structured-output-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `52`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tasks-core/duplicate-task-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-core-duplicate-task-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tasks-core/src/libs/problems/TasksProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `13`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tasks-core/execution-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-core-execution-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tasks-core/src/libs/problems/TasksProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `46`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"tasks-core/task-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-core-task-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tasks-core/src/libs/problems/TasksProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tasks-core/task-runner-di-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-core-task-runner-di-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tasks-core/src/libs/problems/TasksProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `29`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"tasks-qstash/invalid-publish-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-qstash-invalid-publish-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tasks-qstash/src/libs/problems/QStashTaskProblems.ts"`; `kind`: `"problem-class"`; `line`: `18`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tasks-qstash/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-qstash-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tasks-qstash/src/libs/problems/QStashTaskProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"TELEMETRY_AUTO_INSTRUMENTATION_INVALID_CONFIG"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-auto-instrumentation-invalid-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryAutoInstrumentationProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"TELEMETRY_FORCE_FLUSH_UNSUPPORTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-force-flush-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `62`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"TELEMETRY_RUNTIME_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-runtime-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"TELEMETRY_SAMPLER_INVALID_CONFIG"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-sampler-invalid-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"TELEMETRY_SIGNAL_UNSUPPORTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-signal-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `36`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Forbidden"`; `code`: `"tenant-core/admin-bypass-reason-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-admin-bypass-reason-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `60`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tenant-core/cross-tenant-leak"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-cross-tenant-leak"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `79`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"tenant-core/default-tenant-fallback"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-default-tenant-fallback"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `48`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tenant-core/duplicate-tenant-manager-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-duplicate-tenant-manager-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tenant-core/src/libs/problems/DuplicateTenantManagerRegistrationProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"tenant-core/isolation-context-missing"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-isolation-context-missing"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `39`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tenant-core/tenant-manager-not-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-tenant-manager-not-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tenant-core/src/libs/problems/TenantManagerNotRegisteredProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"tenant-core/unsafe-query"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-unsafe-query"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `69`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"NotFound"`; `code`: `"tenant/not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tenant-core/src/libs/problems/TenantNotFoundProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"tenant/required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tenant-core/src/libs/problems/TenantRequiredProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/cleanup-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-cleanup-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-metadata"`; `line`: `17`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/health-check-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-health-check-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `19`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-metadata"`; `line`: `13`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/invalid-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-invalid-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `25`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/migration-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-migration-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `14`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-metadata"`; `line`: `9`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/startup-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-startup-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-metadata"`; `line`: `5`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/after-commit-hooks-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-after-commit-hooks-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/testing.ts"`; `kind`: `"problem-constructor"`; `line`: `184`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/telemetry-provider-already-installed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-telemetry-provider-already-installed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/telemetry-testing.ts"`; `kind`: `"problem-constructor"`; `line`: `54`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-disposal-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-disposal-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `144`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-disposed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-disposed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `172`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-resource-fidelity"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-resource-fidelity"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `182`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-resource-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-resource-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `198`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-resource-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-resource-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `211`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-validation-policy"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-validation-policy"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `131`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/transaction-context-not-active"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-transaction-context-not-active"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/testing.ts"`; `kind`: `"problem-constructor"`; `line`: `171`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"TOKEN_LIMIT_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#token-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `21`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"TOOL_EXECUTION_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tool-execution-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `61`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"transports-graphql/request-body-aborted"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-request-body-aborted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-class"`; `line`: `47`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"PayloadTooLarge"`; `code`: `"transports-graphql/request-body-too-large"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-request-body-too-large"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request body exceeded the configured byte limit."`; `operatorAction`: `"Confirm route body limits and upstream proxy limits match the intended upload policy."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Reduce the request body and retry."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `33`; \}\]; `status`: `413`; `title`: `"Payload Too Large"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-graphql/resolvers-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-resolvers-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-graphql/schema-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-schema-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-class"`; `line`: `16`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-graphql/server-not-initialized"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-server-not-initialized"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-class"`; `line`: `24`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/body-limit-invalid-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-body-limit-invalid-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The HTTP body-limit middleware was configured with an invalid byte boundary."`; `operatorAction`: `"Set the body-limit value to a finite, nonnegative safe integer and restart the service."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Ask the operator to correct the service configuration before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/HttpRequestBodyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/di-bootstrap-validation"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-di-bootstrap-validation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/transports-http/src/libs/CrocoApp.ts"`; `kind`: `"problem-factory"`; `line`: `290`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/duplicate-health-check"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-duplicate-health-check"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `10`; `file`: `"packages/transports-http/src/libs/HealthCheckRegistry.ts"`; `kind`: `"problem-factory"`; `line`: `71`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/duplicate-route-definition"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-duplicate-route-definition"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Two REST controller methods compile to the same HTTP method and runtime path."`; `operatorAction`: `"Inspect the duplicate-route diagnostic for the existing and conflicting controller methods and their route decorator source locations, then rename one route path or change one HTTP method."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Use an application build where every route decorator has a unique HTTP method and path combination."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/transports-http/src/libs/RouteCompiler.ts"`; `kind`: `"problem-factory"`; `line`: `115`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/graceful-shutdown-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-graceful-shutdown-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Graceful shutdown was configured with a non-finite total or event-bus drain timeout."`; `operatorAction`: `"Set timeoutMs and eventBusDrainTimeoutMs to finite numbers, then reconstruct the middleware or controller before retrying shutdown."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Ask the operator to correct the graceful shutdown timeout configuration before reconstructing the HTTP application."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/GracefulShutdownProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `20`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/graceful-shutdown-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-graceful-shutdown-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Graceful shutdown did not finish a phase before that phase's configured deadline elapsed."`; `operatorAction`: `"Inspect the reported phase, timeoutMs, and elapsedMs extensions, then investigate slow request handlers, event-bus draining, or shutdown hooks."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Wait for the stalled shutdown phase to be investigated before retrying; active requests or cleanup work may still be settling."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/GracefulShutdownProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `47`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/middleware-next-called-multiple-times"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-middleware-next-called-multiple-times"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Compatibility metadata for the previous HTTP middleware multiple-next code. New runtime failures use CROCO_HTTP_MIDDLEWARE_002 and preserve this value as extensions.legacyCode."`; `operatorAction`: `"Update dashboards, alerts, and runbooks from transports-http/middleware-next-called-multiple-times to CROCO_HTTP_MIDDLEWARE_002 before removing legacy-code matching."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Migrate Problem.code matchers to CROCO_HTTP_MIDDLEWARE_002; use extensions.legacyCode only while rolling out compatibility changes."`; \}; `sources`: readonly \[\{ `column`: `49`; `file`: `"packages/transports-http/src/libs/CrocoRouteRegistrar.ts"`; `kind`: `"problem-metadata"`; `line`: `39`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/pipe-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-pipe-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/transports-http/src/libs/ParamResolver.ts"`; `kind`: `"problem-factory"`; `line`: `159`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/provider-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-provider-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/transports-http/src/libs/RouteCompiler.ts"`; `kind`: `"problem-factory"`; `line`: `67`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"transports-http/request-body-read-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-request-body-read-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/HttpRequestBodyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `67`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"PayloadTooLarge"`; `code`: `"transports-http/request-body-too-large"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-request-body-too-large"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request body exceeded the configured byte limit."`; `operatorAction`: `"Confirm route body limits and upstream proxy limits match the intended upload policy."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Reduce the request body and retry."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/HttpRequestBodyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `413`; `statusPolicy`: \{ `configuration`: `"bodyLimitMiddleware.statusCode"`; `defaultStatus`: `413`; `kind`: `"runtime-configurable"`; \}; `title`: `"Payload Too Large"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/request-body-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-request-body-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/HttpRequestBodyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `52`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/route-method-not-function"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-route-method-not-function"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `17`; `file`: `"packages/transports-http/src/libs/RouteCompiler.ts"`; `kind`: `"problem-factory"`; `line`: `175`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"transports-http/runtime-capability-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-runtime-capability-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-http/src/libs/runtimeContext.ts"`; `kind`: `"problem-class"`; `line`: `88`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/security-middleware-validation"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-security-middleware-validation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Compatibility metadata for the previous HTTP security middleware validation code. New runtime failures use CROCO_HTTP_SECURITY_001 and preserve this value as extensions.legacyCode."`; `operatorAction`: `"Update dashboards, alerts, and runbooks from transports-http/security-middleware-validation to CROCO_HTTP_SECURITY_001 before removing legacy-code matching."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Migrate Problem.code matchers to CROCO_HTTP_SECURITY_001; use extensions.legacyCode only while rolling out compatibility changes."`; \}; `sources`: readonly \[\{ `column`: `55`; `file`: `"packages/transports-http/src/libs/CrocoApp.ts"`; `kind`: `"problem-metadata"`; `line`: `86`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/unsupported-route-method"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-unsupported-route-method"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/transports-http/src/libs/CrocoRouteRegistrar.ts"`; `kind`: `"problem-factory"`; `line`: `245`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-core/duplicate-trigger-metadata"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-core-duplicate-trigger-metadata"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `17`; `file`: `"packages/triggers-core/src/libs/TriggerRegistry.ts"`; `kind`: `"problem-factory"`; `line`: `69`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-core/duplicate-trigger-metadata-entry"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-core-duplicate-trigger-metadata-entry"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `17`; `file`: `"packages/triggers-core/src/libs/TriggerRegistry.ts"`; `kind`: `"problem-factory"`; `line`: `121`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-qstash/duplicate-schedule-id"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-qstash-duplicate-schedule-id"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/triggers-qstash/src/libs/QStashScheduler.ts"`; `kind`: `"problem-factory"`; `line`: `253`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-qstash/execution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-qstash-execution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/triggers-qstash/src/libs/QStashTriggerHandler.ts"`; `kind`: `"problem-metadata"`; `line`: `264`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-qstash/service-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-qstash-service-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/triggers-qstash/src/libs/QStashTriggerHandler.ts"`; `kind`: `"problem-metadata"`; `line`: `254`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/after-commit-hooks-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-after-commit-hooks-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `103`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/after-commit-outcome-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-after-commit-outcome-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `35`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/after-commit-registration-closed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-after-commit-registration-closed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `50`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/decorator-misuse"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-decorator-misuse"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/detached-transaction-operation"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-detached-transaction-operation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `61`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/duplicate-tx-manager-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-duplicate-tx-manager-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/errors.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"tx-core/invalid-transaction-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-invalid-transaction-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `87`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/manager-not-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-manager-not-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/errors.ts"`; `kind`: `"problem-class"`; `line`: `23`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/missing-transaction-context"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-missing-transaction-context"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `24`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/outcome-requires-root"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-outcome-requires-root"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `76`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"tx-core/propagation-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-propagation-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/errors.ts"`; `kind`: `"problem-class"`; `line`: `34`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/transaction-outcome-unknown"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-transaction-outcome-unknown"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `165`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/transaction-rollback-confirmed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-transaction-rollback-confirmed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `147`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/transaction-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-transaction-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `130`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/rls-configuration-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-rls-configuration-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"A PostgreSQL RLS helper received malformed static identifier or setting-key configuration."`; `operatorAction`: `"Use the reported field name and the @croco/tx-drizzle RLS contract to correct the configuration, then restart the service."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Ask the operator to correct the RLS configuration before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/rls-debug-logging-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-rls-debug-logging-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Requested RLS debug logging could not initialize or write its diagnostic event."`; `operatorAction`: `"Provide an RlsLogger or register the framework Logger, then verify its info() output path before retrying the transaction."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Ask the operator to restore the configured logger before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `57`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/rls-execute-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-rls-execute-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/savepoint-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-savepoint-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `76`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/tenant-context-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-tenant-context-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `21`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"UNAUTHORIZED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#unauthorized"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"WEBHOOK_PROCESSING_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhook-processing-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-polar/src/libs/problems/WebhookProcessingProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"WEBHOOK_VALIDATION_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhook-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-polar/src/libs/problems/WebhookValidationProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `38`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/dispatch-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-dispatch-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `117`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"webhooks-core/duplicate-event"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-duplicate-event"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `139`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"BadRequest"`; `code`: `"webhooks-core/invalid-envelope"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-invalid-envelope"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `74`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"webhooks-core/invalid-fixture"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-invalid-fixture"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `178`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"webhooks-core/invalid-signature"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-invalid-signature"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `54`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"webhooks-core/outbound-acceptance-unknown"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-acceptance-unknown"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `97`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/outbound-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `119`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"webhooks-core/outbound-endpoint-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-endpoint-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `53`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"webhooks-core/outbound-invalid-event"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-invalid-event"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"webhooks-core/outbound-invalid-secret-version"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-invalid-secret-version"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `64`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"webhooks-core/outbound-invalid-url"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-invalid-url"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `42`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"webhooks-core/outbound-permanent-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-permanent-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `86`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"Conflict"`; `code`: `"webhooks-core/outbound-replay-not-allowed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-replay-not-allowed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `108`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/outbound-retryable-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-retryable-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/reporter-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-reporter-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `162`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"webhooks-core/unknown-event"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-unknown-event"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `94`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/duplicate-workflow-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-duplicate-workflow-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/replay-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-replay-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `47`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/saga-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `62`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/saga-execution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-execution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `127`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"workflow-core/saga-execution-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-execution-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-class"`; `line`: `77`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/saga-replay-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-replay-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `103`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"workflow-core/saga-store-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-store-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `92`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/workflow-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-workflow-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"workflow-core/workflow-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-workflow-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}\] +> `readonly` **problems**: readonly \[\{ `category`: `"Forbidden"`; `code`: `"ACCESS_DENIED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#access-denied"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/transports-http/src/libs/PipelineRunner.ts"`; `kind`: `"problem-factory"`; `line`: `196`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Forbidden"`; `code`: `"access-core/forbidden"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#access-core-forbidden"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/access-core/src/libs/guards/AccessGuard.ts"`; `kind`: `"problem-constructor"`; `line`: `17`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ADMIN_LIFECYCLE_DEMO_INVARIANT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-lifecycle-demo-invariant"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/create-croco-app/templates/admin-console/apps/console-web/src/LifecycleAutomationDemo.tsx"`; `kind`: `"problem-constructor"`; `line`: `66`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"admin-console/user-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-console-user-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `79`; `file`: `"packages/create-croco-app/templates/admin-console/apps/api-server/src/controllers/adminSchemas.ts"`; `kind`: `"problem-metadata"`; `line`: `6`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"admin-core/resource-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-core-resource-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/admin-core/src/libs/AdminResource.ts"`; `kind`: `"problem-constructor"`; `line`: `79`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"admin-core/webhook-action-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-core-webhook-action-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/admin-core/src/libs/WebhookOperations.ts"`; `kind`: `"problem-constructor"`; `line`: `187`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"admin-generated/contract-diagnostics"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#admin-generated-contract-diagnostics"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/admin-generated/src/libs/generate.ts"`; `kind`: `"problem-constructor"`; `line`: `55`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"ai-saas/model-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-model-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `31`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"ai-saas/model-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-model-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `22`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ai-saas/provider-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-provider-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `62`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"ai-saas/quota-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-quota-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"ai-saas/rate-limit-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-rate-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `53`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ai-saas/smoke-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-smoke-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"ai-saas/tenant-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-tenant-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"ai-saas/tenant-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ai-saas-tenant-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/ai-saas/apps/api-server/src/aiProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"ALREADY_MEMBER"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#already-member"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `18`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"analytics-posthog/capture-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#analytics-posthog-capture-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/analytics-posthog/src/libs/problems/PostHogAnalyticsProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"analytics-posthog/flush-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#analytics-posthog-flush-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/analytics-posthog/src/libs/problems/PostHogAnalyticsProblems.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"analytics-posthog/readiness-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#analytics-posthog-readiness-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/analytics-posthog/src/libs/problems/PostHogAnalyticsProblems.ts"`; `kind`: `"problem-class"`; `line`: `33`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"API_KEY_EXPIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#api-key-expired"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `48`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"NotFound"`; `code`: `"API_KEY_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#api-key-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/apikey/problems/ApiKeyNotFoundProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"API_KEY_REVOKED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#api-key-revoked"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `56`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"ValidationError"`; `code`: `"architecture-policy/manifest-json-parse"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#architecture-policy-manifest-json-parse"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/architecture-policy/src/index.ts"`; `kind`: `"problem-constructor"`; `line`: `19`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"architecture-policy/manifest-schema-version"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#architecture-policy-manifest-schema-version"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/architecture-policy/src/index.ts"`; `kind`: `"problem-constructor"`; `line`: `30`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"architecture-policy/manifest-shape"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#architecture-policy-manifest-shape"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/architecture-policy/src/index.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"architecture-policy/package-json-parse"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#architecture-policy-package-json-parse"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/architecture-policy/src/index.ts"`; `kind`: `"problem-constructor"`; `line`: `46`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"audit-core/auditable-decorator-misuse"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#audit-core-auditable-decorator-misuse"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/audit-core/src/libs/problems/AuditableDecoratorProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"audit/insert-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#audit-insert-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/audit-drizzle/src/libs/DrizzleAuditLogRepository.ts"`; `kind`: `"problem-factory"`; `line`: `137`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-better-auth/authentication-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-authentication-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/BetterAuthAuthenticationProblem.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-better-auth/invalid-session-payload"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-invalid-session-payload"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/BetterAuthInvalidSessionProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"auth-better-auth/invalid-webhook-payload"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-invalid-webhook-payload"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-class"`; `line`: `23`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"auth-better-auth/invalid-webhook-signature"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-invalid-webhook-signature"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-better-auth/not-initialized"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-not-initialized"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-better-auth/session-lookup-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-session-lookup-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/BetterAuthSessionLookupProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"auth-better-auth/session-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-session-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `23`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"auth-better-auth/user-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-better-auth-user-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-better-auth/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `39`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Conflict"`; `code`: `"auth-clerk/duplicate-tenant-mapping"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-duplicate-tenant-mapping"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `94`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-clerk/external-service-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-external-service-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `121`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"auth-clerk/invalid-webhook-payload"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-invalid-webhook-payload"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"auth-clerk/malformed-claim"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-malformed-claim"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `83`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-clerk/public-user-data-missing"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-public-user-data-missing"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `109`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"auth-clerk/token-verification-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-token-verification-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `36`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-clerk/token-verification-upstream-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-token-verification-upstream-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `60`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"auth-clerk/webhook-verification-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-clerk-webhook-verification-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-clerk/src/libs/problems/ClerkProblems.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-core/api-key-creation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-api-key-creation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `80`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"auth-core/api-key-rotation-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-api-key-rotation-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `88`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-core/api-key-rotation-protection-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-api-key-rotation-protection-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/auth-core/src/libs/apikey/ApiKeyRotationProtector.ts"`; `kind`: `"problem-constructor"`; `line`: `28`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-core/auth-provider-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-auth-provider-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `21`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"auth-core/invalid-api-key-rotation-idempotency-key"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-invalid-api-key-rotation-idempotency-key"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `96`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"auth-core/invalid-permission-action"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-invalid-permission-action"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `72`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"auth-core/invalid-permission-format"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-invalid-permission-format"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `64`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"auth-core/invalid-route-metadata-target"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#auth-core-invalid-route-metadata-target"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"An authentication guard received a route metadata target that was neither an object nor a function."`; `operatorAction`: `"Inspect the route adapter metadata target and ensure it returns the controller object or constructor before handling requests."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Do not retry the unchanged request; ask the service operator to correct the route metadata configuration."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `35`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"BAD_REQUEST"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#bad-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/access-core/src/libs/guards/AccessGuard.ts"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"batch-qstash/invalid-publish-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#batch-qstash-invalid-publish-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/batch-qstash/src/libs/problems/QStashBatchProblems.ts"`; `kind`: `"problem-class"`; `line`: `18`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"batch-qstash/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#batch-qstash-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/batch-qstash/src/libs/problems/QStashBatchProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"BILLING_STATUS_MAPPING_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-status-mapping-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-polar/src/libs/problems/BillingStatusMappingProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing-polar/checkout-idempotency-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-checkout-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `54`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing-polar/customer-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-customer-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `72`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"billing-polar/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `18`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"billing-polar/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `98`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing-polar/subscription-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-subscription-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `85`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"billing-polar/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `114`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"billing-polar/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-polar-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/billing-polar/src/libs/problems/PolarBillingProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `38`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/account-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-account-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `32`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"billing/checkout-creation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-checkout-creation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `92`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/checkout-in-progress"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-checkout-in-progress"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `100`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-lifecycle-idempotency-key"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-lifecycle-idempotency-key"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `80`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-money-amount"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-money-amount"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `113`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-money-currency"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-money-currency"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `121`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-plan-version-definition"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-plan-version-definition"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `157`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/invalid-plan-version-ref"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-invalid-plan-version-ref"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `149`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/lifecycle-command-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-lifecycle-command-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `48`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/lifecycle-command-in-progress"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-lifecycle-command-in-progress"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `60`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/lifecycle-command-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-lifecycle-command-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `72`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"billing/money-currency-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-money-currency-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `129`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"BadRequest"`; `code`: `"billing/money-division-by-zero"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-money-division-by-zero"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `141`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/plan-version-already-published"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-plan-version-already-published"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `165`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/plan-version-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-plan-version-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `173`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"billing/provider-capability-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-provider-capability-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `6`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/subscription-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-subscription-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `24`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"billing/subscription-plan-version-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-subscription-plan-version-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `203`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/unknown-plan-version"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-unknown-plan-version"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `181`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"billing/unknown-provider-plan-mapping"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-unknown-provider-plan-mapping"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `189`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Conflict"`; `code`: `"billing/webhook-already-processed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#billing-webhook-already-processed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-core/src/libs/problems/BillingProblems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Forbidden"`; `code`: `"BLOCKED_DURING_IMPERSONATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#blocked-during-impersonation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `49`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cache-core/invalid-decorator-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalid-decorator-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `12`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"cache-core/invalid-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalid-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheStoreProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cache-core/invalidation-assertion-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-assertion-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `102`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cache-core/invalidation-capability-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-capability-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `55`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"cache-core/invalidation-event-unknown"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-event-unknown"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `41`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cache-core/invalidation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `72`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"cache-core/invalidation-graph-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cache-core-invalidation-graph-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/cache-core/src/libs/problems/CacheDecoratorProblems.ts"`; `kind`: `"problem-class"`; `line`: `27`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"CIRCUIT_BREAKER_OPEN"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#circuit-breaker-open"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/CircuitBreakerOpenProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cloudflare/images-invalid-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cloudflare-images-invalid-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesProvider.ts"`; `kind`: `"problem-factory"`; `line`: `55`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cloudflare/images-null-result"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cloudflare-images-null-result"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesProvider.ts"`; `kind`: `"problem-factory"`; `line`: `277`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"cloudflare/images-upload-intent-null-result"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#cloudflare-images-upload-intent-null-result"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesProvider.ts"`; `kind`: `"problem-factory"`; `line`: `353`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CONFLICTING_PAGINATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#conflicting-pagination"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/pagination-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/directory-not-empty"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-directory-not-empty"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/DirectoryNotEmptyProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/invalid-cli-option"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-invalid-cli-option"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/InvalidCliOptionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/invalid-goal-option"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-invalid-goal-option"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/InvalidGoalOptionProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/invalid-saas-preset-option"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-invalid-saas-preset-option"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/InvalidSaasPresetOptionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"create-croco-app/lambda-telemetry-boundary"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-lambda-telemetry-boundary"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/addons/lambda/apps/graphql-api/src/telemetryFlush.ts"`; `kind`: `"problem-class"`; `line`: `10`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"create-croco-app/unexpected-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-unexpected-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/cli-result.ts"`; `kind`: `"problem-class"`; `line`: `28`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/unsupported-node-version"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-unsupported-node-version"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The detected Node.js version is outside the supported generated-app toolchain train."`; `operatorAction`: `"Compare the reported actual Node.js version with the supported Node.js 22 train and verify the active version-manager configuration."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `` "Install and activate Node.js 22 with `nvm install 22 && nvm use 22`, then rerun the command." ``; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/src/libs/problems/UnsupportedNodeVersionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/web-meta-vite-fullstack-missing-hydration-root"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-web-meta-vite-fullstack-missing-hydration-root"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/create-croco-app/templates/addons/web-meta-vite-fullstack/ssr-worker/src/client.tsx"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"create-croco-app/web-meta-vite-missing-hydration-root"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#create-croco-app-web-meta-vite-missing-hydration-root"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/create-croco-app/templates/addons/web-meta-vite/src/client.tsx"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"credits-core/account-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-account-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `81`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"credits-core/account-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-account-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `15`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Conflict"`; `code`: `"credits-core/duplicate-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-duplicate-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `67`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"credits-core/event-publication-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-event-publication-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `143`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"credits-core/expired-grant"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-expired-grant"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `39`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"credits-core/insufficient-credits"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-insufficient-credits"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `25`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"ValidationError"`; `code`: `"credits-core/invalid-amount"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-invalid-amount"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"credits-core/invalid-command"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-invalid-command"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `109`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"credits-core/refund-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-refund-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `129`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"credits-core/reservation-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-reservation-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `53`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"Conflict"`; `code`: `"credits-core/stale-ledger-position"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-stale-ledger-position"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `95`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"credits-core/transaction-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-core-transaction-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `119`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"credits-drizzle/persistence-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#credits-drizzle-persistence-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/credits-drizzle/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_JOBS_001"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-001"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-constructor"`; `line`: `88`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_JOBS_002"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-002"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-constructor"`; `line`: `99`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_JOBS_003"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-003"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-constructor"`; `line`: `110`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"CROCO_CLI_JOBS_004"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-004"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `49`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-metadata"`; `line`: `137`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"CROCO_CLI_JOBS_005"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-jobs-005"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `63`; `file`: `"packages/cli/src/commands/jobs.ts"`; `kind`: `"problem-metadata"`; `line`: `132`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_OPS_001"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-ops-001"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/libs/ops.ts"`; `kind`: `"problem-constructor"`; `line`: `66`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_OPS_002"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-ops-002"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/libs/ops.ts"`; `kind`: `"problem-constructor"`; `line`: `55`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_CLI_USAGE_DASHBOARD_005"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-cli-usage-dashboard-005"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/cli/src/commands/generateUsageDashboard.ts"`; `kind`: `"problem-constructor"`; `line`: `24`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"CROCO_HTTP_MIDDLEWARE_001"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-http-middleware-001"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"HTTP middleware returned without a Response, without shortCircuit(reason), and without calling next() exactly once."`; `operatorAction`: `"Update the named @croco/transports-http middleware to return next(), await next() once, return a Response, or return shortCircuit(reason) for intentional termination."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry only after the service owner ships a middleware contract fix."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/transports-http/src/libs/CrocoRouteRegistrar.ts"`; `kind`: `"problem-factory"`; `line`: `367`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"CROCO_HTTP_MIDDLEWARE_002"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-http-middleware-002"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"HTTP middleware attempted to resume the downstream pipeline more than once."`; `operatorAction`: `"Store the Response from a single next() call and reuse or transform it instead of calling next() again."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry only after the service owner ships a middleware contract fix."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/transports-http/src/libs/CrocoRouteRegistrar.ts"`; `kind`: `"problem-factory"`; `line`: `272`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"CROCO_HTTP_SECURITY_001"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-http-security-001"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"HTTP bootstrap validation found a generated or application app without the required security middleware set."`; `operatorAction`: `"Add the missing @croco/transports-http middleware or keep securityValidation disabled only in an explicit local migration/testing fixture."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Use an app build that registers security headers, CORS, body limit, and rate-limit middleware before first run."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/transports-http/src/libs/CrocoApp.ts"`; `kind`: `"problem-factory"`; `line`: `253`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"CROCO_HTTP_SECURITY_002"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#croco-http-security-002"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/transports-http/src/libs/middleware/SecurityMiddlewareMarker.ts"`; `kind`: `"problem-factory"`; `line`: `154`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"dataloader-core/batch-result-length-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#dataloader-core-batch-result-length-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/dataloader-core/src/libs/problems/BatchLoaderProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"diagnostics-core/duplicate-provider"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#diagnostics-core-duplicate-provider"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/diagnostics-core/src/libs/problems/DiagnosticsProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"DUPLICATE_INVITATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#duplicate-invitation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/RateLimitProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"DUPLICATE_RECOVER_HANDLER"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#duplicate-recover-handler"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/DuplicateRecoverHandlerProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"DURATION_PARSE_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#duration-parse-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ContextProblems.ts"`; `kind`: `"problem-class"`; `line`: `15`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"EMBEDDING_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#embedding-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `43`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"ENTITLEMENT_DENIED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-denied"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `20`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Forbidden"`; `code`: `"ENTITLEMENT_INACTIVE_SUBSCRIPTION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-inactive-subscription"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `46`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Forbidden"`; `code`: `"ENTITLEMENT_MISSING_PLAN"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-missing-plan"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `32`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"NotFound"`; `code`: `"ENTITLEMENT_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `86`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ENTITLEMENT_PROVIDER_UNAVAILABLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-provider-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `74`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"ENTITLEMENT_QUOTA_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-quota-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `60`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"ValidationError"`; `code`: `"ENTITLEMENT_REQUIREMENT_INVALID"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlement-requirement-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `11`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"entitlements-core/definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlements-core-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `95`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"entitlements-core/plan-version-already-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlements-core-plan-version-already-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `113`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"entitlements-core/plan-version-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlements-core-plan-version-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `122`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"entitlements-core/plan-version-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#entitlements-core-plan-version-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/entitlements-core/src/libs/problems/EntitlementProblems.ts"`; `kind`: `"problem-class"`; `line`: `104`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/after-commit-outcome-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-after-commit-outcome-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `107`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/after-commit-requires-active-transaction"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-after-commit-requires-active-transaction"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `96`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/deserialization-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-deserialization-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/duplicate-event-field"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-duplicate-event-field"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `51`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/duplicate-event-name"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-duplicate-event-name"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `66`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/event-bus-not-set"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-event-bus-not-set"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/event-definition-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-event-definition-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `18`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/transaction-context-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-transaction-context-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `81`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-core/unknown-event-type"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-core-unknown-event-type"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-core/src/libs/problems/EventsProblems.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"events-inmemory/backpressure-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-backpressure-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/problems/EventsInmemoryProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"events-inmemory/backpressure-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-backpressure-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/problems/EventsInmemoryProblems.ts"`; `kind`: `"problem-class"`; `line`: `23`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-inmemory/invalid-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-invalid-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/InmemoryEventBus.ts"`; `kind`: `"problem-class"`; `line`: `72`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-inmemory/publish-dropped"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-publish-dropped"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/InmemoryEventBus.ts"`; `kind`: `"problem-class"`; `line`: `51`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-inmemory/publish-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-inmemory-publish-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-inmemory/src/libs/InmemoryEventBus.ts"`; `kind`: `"problem-class"`; `line`: `34`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/configuration-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-configuration-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `36`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"events-tx/inbox-claim-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-inbox-claim-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"An inbox completion request no longer owns the processing attempt it started."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints, then verify workers complete only the attempt they claimed."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Acquire a new inbox claim before retrying processing; discard the stale completion when a new claim cannot be acquired."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `120`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"events-tx/outbox-idempotency-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-outbox-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `83`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/outbox-publish-exhausted"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-outbox-publish-exhausted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `105`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/outbox-transaction-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-outbox-transaction-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `64`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/storage-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-storage-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `73`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"events-tx/transaction-state-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#events-tx-transaction-state-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/events-tx/src/libs/problems/EventsTxProblems.ts"`; `kind`: `"problem-class"`; `line`: `56`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"execution/checkpoint-store-conformance"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-checkpoint-store-conformance"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `138`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `90`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/continuation-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-continuation-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `129`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"execution/continuation-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-continuation-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `118`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/idempotency-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `94`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"ValidationError"`; `code`: `"execution/invalid-continuation-lease-duration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-invalid-continuation-lease-duration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/invalid-state-transition"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-invalid-state-transition"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `110`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"execution/max-retries-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-max-retries-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"execution/not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#execution-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/execution-core/src/libs/ExecutionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `86`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Forbidden"`; `code`: `"FORBIDDEN"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#forbidden"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-config/config-schema-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-config-config-schema-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-config/src/libs/problems/ConfigProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-config/config-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-config-config-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-config/src/libs/problems/ConfigProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-config/invalid-boolean-env"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-config-invalid-boolean-env"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-config/src/libs/problems/ConfigProblems.ts"`; `kind`: `"problem-class"`; `line`: `24`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/circular-dependency"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-circular-dependency"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/CircularDependencyProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/container-scope-disposed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-container-scope-disposed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `10`; `file`: `"packages/framework-context/src/libs/Container.ts"`; `kind`: `"problem-factory"`; `line`: `65`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/context-middleware-execution-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-context-middleware-execution-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ContextProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/di-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-di-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ContainerResolutionProblem.ts"`; `kind`: `"problem-class"`; `line`: `10`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/di-scope-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-di-scope-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ContainerResolutionProblem.ts"`; `kind`: `"problem-class"`; `line`: `31`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-context/on-shutdown-decorator-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-on-shutdown-decorator-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ShutdownProblems.ts"`; `kind`: `"problem-class"`; `line`: `9`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-context/pipeline-graph-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-pipeline-graph-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/PipelineGraphProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-context/policy-capability-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-policy-capability-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/RuntimePolicyProblems.ts"`; `kind`: `"problem-class"`; `line`: `33`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-context/policy-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-policy-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/RuntimePolicyProblems.ts"`; `kind`: `"problem-class"`; `line`: `9`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-context/policy-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-policy-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/RuntimePolicyProblems.ts"`; `kind`: `"problem-class"`; `line`: `21`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/request-scope-outside-context"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-request-scope-outside-context"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/framework-context/src/libs/Container.ts"`; `kind`: `"problem-factory"`; `line`: `1704`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-context/shutdown-configuration-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-shutdown-configuration-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ShutdownProblems.ts"`; `kind`: `"problem-class"`; `line`: `97`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/shutdown-hook-execution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-shutdown-hook-execution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ShutdownProblems.ts"`; `kind`: `"problem-class"`; `line`: `112`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-context/shutdown-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-context-shutdown-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/ShutdownProblems.ts"`; `kind`: `"problem-class"`; `line`: `73`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-module/circular-dependency"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-circular-dependency"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `26`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"framework-module/invalid-module-definition"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-invalid-module-definition"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `16`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-module/lifecycle-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-lifecycle-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `42`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"framework-module/provider-not-visible"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-provider-not-visible"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `70`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-module/provider-ownership-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-provider-ownership-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `92`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"framework-module/provider-write-not-owned"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#framework-module-provider-write-not-owned"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/framework-module/src/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `108`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"frontend-problems/fetch-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#frontend-problems-fetch-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/frontend-problems/src/index.ts"`; `kind`: `"problem-class"`; `line`: `204`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"frontend-vite/missing-cloudflare-vite-plugin"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#frontend-vite-missing-cloudflare-vite-plugin"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/frontend-vite/src/libs/problems/MissingCloudflareVitePluginProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `14`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"GENERATION_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#generation-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `34`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"gid-core/id-type-only-property"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#gid-core-id-type-only-property"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/gid-core/src/libs/problems/GidProblems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"gid-core/invalid-id-prefix"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#gid-core-invalid-id-prefix"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/gid-core/src/libs/problems/GidProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"governance-core/delete-not-supported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#governance-core-delete-not-supported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/governance-core/src/libs/problems/DataGovernanceProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `34`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"governance-core/export-not-supported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#governance-core-export-not-supported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/governance-core/src/libs/problems/DataGovernanceProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"ValidationError"`; `code`: `"governance-core/resource-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#governance-core-resource-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/governance-core/src/libs/DataGovernanceResource.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"governance-core/retention-policy-violation"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#governance-core-retention-policy-violation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/governance-core/src/libs/problems/DataGovernanceProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `59`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"NotFound"`; `code`: `"GRAPHQL_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#graphql-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/protocols-graphql/src/libs/errors/GraphQLProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `23`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"HEALTH_SCORE_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#health-score-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/customer-health-core/src/libs/problems/HealthProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BadRequest"`; `code`: `"idempotency-core/invalid-key"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-invalid-key"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `53`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"idempotency-core/invalid-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-invalid-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `72`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"idempotency-core/key-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-key-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `37`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"idempotency-core/reservation-expired"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-reservation-expired"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `101`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"idempotency-core/reservation-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-reservation-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `87`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"idempotency-core/reservation-state"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#idempotency-core-reservation-state"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/idempotency-core/src/libs/problems/IdempotencyProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `120`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Forbidden"`; `code`: `"IMPERSONATION_IDENTITY_CONFLICT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#impersonation-identity-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"BadRequest"`; `code`: `"IMPERSONATION_REASON_REQUIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#impersonation-reason-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"NotFound"`; `code`: `"IMPERSONATION_SESSION_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#impersonation-session-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `58`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"IMPERSONATION_TARGET_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#impersonation-target-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `22`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"INDEX_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#index-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `57`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"integrations-posthog/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#integrations-posthog-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/integrations-posthog/src/libs/problems/PostHogProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"INVALID_AUTO_JOIN_ROLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-auto-join-role"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/invitation-core/src/libs/problems/DomainPolicyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `18`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"INVALID_CURSOR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-cursor"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/pagination-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"INVALID_INVITATION_EXPIRY_DURATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-invitation-expiry-duration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `32`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"INVALID_PAGINATION_DIRECTION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-pagination-direction"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/pagination-core/src/libs/problems.ts"`; `kind`: `"problem-class"`; `line`: `40`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"INVALID_RETRY_CONFIGURATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-retry-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `52`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"INVALID_ROLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invalid-role"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `44`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"INVITATION_ALREADY_ACCEPTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-already-accepted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `73`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"INVITATION_CREATION_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-creation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"INVITATION_EMAIL_MISMATCH"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-email-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `84`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Gone"`; `code`: `"INVITATION_EXPIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-expired"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource is no longer available through this API surface."`; `operatorAction`: `"Verify lifecycle, migration, deprecation, and retention state."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Stop using the stale reference and follow the replacement flow when available."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `62`; \}\]; `status`: `410`; `title`: `"Gone"`; \}, \{ `category`: `"Conflict"`; `code`: `"INVITATION_IDEMPOTENCY_CONFLICT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"INVITATION_INVALID_STATUS"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-invalid-status"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `95`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"INVITATION_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/InvitationProblems.ts"`; `kind`: `"problem-class"`; `line`: `51`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"INVITATION_RATE_LIMIT_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-rate-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/RateLimitProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"BadRequest"`; `code`: `"invitation-core/batch-size-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-core-batch-size-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/invitation-core/src/libs/problems/BatchInviteProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"invitation-drizzle/token-cipher-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#invitation-drizzle-token-cipher-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/invitation-drizzle/src/libs/InvitationTokenCipher.ts"`; `kind`: `"problem-constructor"`; `line`: `25`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"LAMBDA_TIMEOUT_GUARD"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lambda-timeout-guard"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `39`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"LAST_OWNER"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#last-owner"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/action-adapter-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-action-adapter-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `37`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/duplicate-rule"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-duplicate-rule"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/rule-action-contract-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-action-contract-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `155`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"lifecycle-core/rule-command-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-command-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/rule-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `21`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"lifecycle-core/rule-transition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-transition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `118`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Conflict"`; `code`: `"lifecycle-core/rule-version-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-version-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `84`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"lifecycle-core/rule-version-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-version-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `138`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"lifecycle-core/rule-version-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-version-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `66`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"lifecycle-core/rule-version-unknown"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#lifecycle-core-rule-version-unknown"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/lifecycle-core/src/libs/problems/LifecycleProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `48`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"LLM_PROVIDER_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-provider-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"LLM_SERVICE_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-service-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"llm-core/invalid-llm-prompt"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-core-invalid-llm-prompt"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `85`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-core/invalid-llm-response"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-core-invalid-llm-response"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `65`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-core/llm-service-not-initialized"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-core-llm-service-not-initialized"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"llm-core/rate-limit-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-core-rate-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `43`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"Forbidden"`; `code`: `"llm-metering/cost-limit-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-cost-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `41`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"NotFound"`; `code`: `"llm-metering/pricing-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-pricing-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-class"`; `line`: `58`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Conflict"`; `code`: `"llm-metering/pricing-registry-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-pricing-registry-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `71`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"Forbidden"`; `code`: `"llm-metering/quota-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-quota-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `24`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-metering/record-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-metering-record-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-metering/src/libs/problems/LlmMeteringProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"llm-openai/aborted"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-aborted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `117`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"llm-openai/authentication-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-authentication-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `42`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-openai/invalid-response"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-invalid-response"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `135`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-openai/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `24`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"llm-openai/rate-limited"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-rate-limited"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `57`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-openai/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `72`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"llm-openai/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `87`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"llm-openai/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#llm-openai-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-openai/src/libs/problems/OpenAiProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Forbidden"`; `code`: `"MEMBERSHIP_CONSTRAINT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#membership-constraint"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipConstraintProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"NotFound"`; `code`: `"MEMBERSHIP_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#membership-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BadRequest"`; `code`: `"meta-vite/server-action-invalid-path"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#meta-vite-server-action-invalid-path"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/meta-vite/src/libs/actions/serverActions.ts"`; `kind`: `"problem-class"`; `line`: `80`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"NotFound"`; `code`: `"meta-vite/server-action-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#meta-vite-server-action-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/meta-vite/src/libs/actions/serverActions.ts"`; `kind`: `"problem-class"`; `line`: `66`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"meta-vite/server-action-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#meta-vite-server-action-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/meta-vite/src/libs/actions/serverActions.ts"`; `kind`: `"problem-class"`; `line`: `94`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"meter/insert-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#meter-insert-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/metering-drizzle/src/libs/DrizzleMeterRepository.ts"`; `kind`: `"problem-factory"`; `line`: `146`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering-drizzle/migration-query-result-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-drizzle-migration-query-result-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `9`; `file`: `"packages/metering-drizzle/src/migrations/addUsageEnvelopeFields.ts"`; `kind`: `"problem-factory"`; `line`: `125`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering-drizzle/usage-envelope-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-drizzle-usage-envelope-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-drizzle/src/libs/problems/UsageEnvelopeConfigurationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `6`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering-upstash/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-upstash-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metering-upstash/src/libs/problems/UpstashMeteringProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering/atomic-quota-not-supported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-atomic-quota-not-supported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metering-core/src/libs/problems/AtomicQuotaNotSupportedProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"metering/duplicate-record"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-duplicate-record"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/DuplicateRecordProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"metering/invalid-meter"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-invalid-meter"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/InvalidMeterProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metering/invalid-meter-dimension"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-invalid-meter-dimension"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/InvalidMeterDimensionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `6`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metering/invalid-usage-envelope"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-invalid-usage-envelope"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/InvalidUsageEnvelopeProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `6`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metering/invalid-usage-query"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-invalid-usage-query"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/InvalidUsageQueryProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `6`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"metering/quota-exceeded"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-quota-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/QuotaExceededProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metering/redis-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-redis-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/RedisProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"metering/transition-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metering-transition-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/metering-core/src/libs/problems/MeteringTransitionProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metrics-billing/metric-dropped"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-billing-metric-dropped"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Billing metrics could not be recorded because the referenced account, subscription, or plan evidence was missing."`; `operatorAction`: `"Use extensions.reason, tenantId, resourceId, and eventKey to rebuild the missing account, subscription, or plan before replay."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Restore the missing billing state identified by reason/resourceId, then replay the same billing event with the same event key."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-billing/src/libs/problems/BillingMetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"metrics-billing/recording-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-billing-recording-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-billing/src/libs/problems/BillingMetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `46`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"metrics-core/carrying-capacity-simulation-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-carrying-capacity-simulation-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/carrying-capacity-tenant-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-carrying-capacity-tenant-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `12`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/gross-margin-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-gross-margin-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `42`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/invalid-retention-movement"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-invalid-retention-movement"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `30`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/mixed-currency-mrr"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-mixed-currency-mrr"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `50`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"metrics-core/retention-metrics-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-retention-metrics-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/problems/MetricsProblems.ts"`; `kind`: `"problem-class"`; `line`: `20`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"ValidationError"`; `code`: `"metrics-core/snapshot-tenant-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#metrics-core-snapshot-tenant-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/metrics-core/src/libs/SnapshotScheduler.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"MIDDLEWARE_EXECUTION_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#middleware-execution-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/framework-context/src/libs/problems/MiddlewareProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"migration-runner/database-url-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-database-url-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/DatabaseUrlRequiredProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"migration-runner/file-load-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-file-load-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MigrationFileLoadProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"migration-runner/history-drift"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-history-drift"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Recorded migration history no longer matches the available migration files by stable id and name."`; `operatorAction`: `"Compare the checkpoint rows with version-controlled migration files, restore missing or renamed files when possible, and repair history only after verifying the deployed schema."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Restore the original migration file identity or ask an operator to perform an explicitly verified history repair."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MigrationHistoryDriftProblem.ts"`; `kind`: `"problem-class"`; `line`: `16`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"BadRequest"`; `code`: `"migration-runner/invalid-count"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-invalid-count"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/InvalidMigrationCountProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"migration-runner/missing-down-function"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-missing-down-function"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MissingDownFunctionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"migration-runner/missing-up-function"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-missing-up-function"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MissingUpFunctionProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"migration-runner/transaction-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-transaction-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/MigrationTransactionRequiredProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"migration-runner/unsupported-dialect"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-unsupported-dialect"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/UnsupportedDialectProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"migration-runner/unsupported-query-result"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#migration-runner-unsupported-query-result"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/migration-runner/src/libs/problems/UnsupportedMigrationQueryResultProblem.ts"`; `kind`: `"problem-class"`; `line`: `11`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"MISSING_TENANT"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#missing-tenant"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"NotFound"`; `code`: `"MODEL_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#model-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `25`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Forbidden"`; `code`: `"NESTED_IMPERSONATION_NOT_ALLOWED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#nested-impersonation-not-allowed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `31`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/default-provider-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-default-provider-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `80`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/delivery-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-delivery-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `169`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/idempotency-key-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-idempotency-key-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `241`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/outbox-idempotency-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-outbox-idempotency-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `257`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/preference-channel-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-preference-channel-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `224`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/preference-context-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-preference-context-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `208`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"notifications-core/preference-denied"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-preference-denied"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `186`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-already-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-already-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `64`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-channel-mismatch"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-channel-mismatch"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `102`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-idempotency-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-idempotency-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `136`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `32`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `120`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/provider-not-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-provider-not-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `48`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-core/send-max-attempts-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-send-max-attempts-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `153`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"notifications-core/template-already-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-template-already-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `273`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"notifications-core/template-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-template-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `291`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-core/template-variables-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-core-template-variables-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-core/src/libs/problems/NotificationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `310`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"notifications-resend/idempotency-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-idempotency-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Resend rejected reuse of an idempotency key for a different send request."`; `operatorAction`: `"Audit callers so each business send intent has one stable idempotency key."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Replay the original payload with the same key or use a new key for a changed send intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `54`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-resend/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Required Resend configuration is absent or blank before provider readiness can be proven."`; `operatorAction`: `"Check deployment env/config injection and verify diagnostics do not expose the raw key."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Configure RESEND_API_KEY and a verified default sender, then rerun diagnostics."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `19`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-resend/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Resend returned a transient status, rate limit, or network timeout."`; `operatorAction`: `"Check Resend status, rate limits, and retry-after/upstream status in telemetry."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry with the same idempotency key when the send intent is unchanged."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `65`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"notifications-resend/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Resend rejected the request with a non-retryable upstream failure."`; `operatorAction`: `"Inspect redacted upstream code/status and fix provider configuration before retrying."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Do not retry unchanged input; correct the API key, domain, sender verification, or request content."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `76`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"notifications-resend/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#notifications-resend-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `40`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"onboarding/context-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#onboarding-context-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/onboarding-core/src/libs/problems/OnboardingProblems.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"NotFound"`; `code`: `"onboarding/definition-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#onboarding-definition-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/onboarding-core/src/libs/problems/OnboardingProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"onboarding/step-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#onboarding-step-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/onboarding-core/src/libs/problems/OnboardingProblems.ts"`; `kind`: `"problem-class"`; `line`: `18`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"openapi-spec/controller-typescript-diagnostics"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#openapi-spec-controller-typescript-diagnostics"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/openapi-spec/src/libs/loadControllers.ts"`; `kind`: `"problem-constructor"`; `line`: `70`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"openapi-spec/invalid-contract"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#openapi-spec-invalid-contract"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/openapi-spec/src/libs/emitOpenAPI.ts"`; `kind`: `"problem-constructor"`; `line`: `106`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"openapi-spec/no-rest-controllers-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#openapi-spec-no-rest-controllers-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/openapi-spec/src/libs/loadControllers.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"OTLP_ENDPOINT_REQUIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#otlp-endpoint-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `20`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"outbox-core/dispatch-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#outbox-core-dispatch-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/outbox-core/src/libs/problems/OutboxProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `86`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"outbox-core/failure-metadata-missing"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#outbox-core-failure-metadata-missing"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"A dispatcher attempted to mark an outbox record failed without the required retry metadata extensions."`; `operatorAction`: `"Audit dispatcher error mapping so every failure path preserves attempt, retryability, terminal state, and failedAt metadata."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Abort the dispatch attempt and pass an OutboxDispatchProblem or equivalent Problem with outbox retry metadata."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/outbox-core/src/libs/problems/OutboxProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `116`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"outbox-core/record-id-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#outbox-core-record-id-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"A caller tried to create an outbox record with an explicit id that already belongs to another idempotency scope."`; `operatorAction`: `"Inspect the producer id/idempotency assignment path and remove any shared id generator or manual id reuse."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Reuse the original idempotency key for the same intent or choose a new record id for a different intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/outbox-core/src/libs/problems/OutboxProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `103`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"outbox-core/unit-of-work-context-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#outbox-core-unit-of-work-context-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"An outbox write received a Unit of Work context that was missing, malformed, or created by another store instance."`; `operatorAction`: `"Check transaction boundary wiring so repository and outbox writes share the same store-owned Unit of Work client."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Abort the write and use the context supplied by the active TransactionalOutboxStore.runInUnitOfWork callback."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/outbox-core/src/libs/problems/OutboxProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `129`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"OWNERSHIP_TRANSFER_REQUIRED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ownership-transfer-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `65`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"BadRequest"`; `code`: `"problems-core/invalid-extensions"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#problems-core-invalid-extensions"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/problems-core/src/libs/problems/InvalidExtensionsProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"problems-core/parse-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#problems-core-parse-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/problems-core/src/libs/problems/ProblemDetailsParseProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"problems-core/problem-registry-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#problems-core-problem-registry-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/problems-core/src/libs/ProblemRegistry.ts"`; `kind`: `"problem-constructor"`; `line`: `210`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"problems-core/unhandled-category"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#problems-core-unhandled-category"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/problems-core/src/libs/ProblemCategoryMapper.ts"`; `kind`: `"problem-class"`; `line`: `19`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"protocols-core/contract-graph-diagnostics"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-core-contract-graph-diagnostics"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/protocols-core/src/libs/ContractGraph.ts"`; `kind`: `"problem-constructor"`; `line`: `142`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"protocols-graphql/auth-invalid-header-format"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-invalid-header-format"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `71`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"protocols-graphql/auth-invalid-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-invalid-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `54`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"protocols-graphql/auth-invalid-token"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-invalid-token"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `10`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `14`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"protocols-graphql/auth-missing-header"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-missing-header"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `63`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-graphql/auth-verifier-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-auth-verifier-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-graphql/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `97`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"protocols-graphql/guard-denied"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-graphql-guard-denied"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-graphql/src/libs/problems/GuardProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"BadRequest"`; `code`: `"protocols-rest/auth-invalid-header-format"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-invalid-header-format"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `77`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"protocols-rest/auth-invalid-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-invalid-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `59`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"protocols-rest/auth-invalid-token"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-invalid-token"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `10`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `15`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"protocols-rest/auth-missing-header"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-missing-header"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `69`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-rest/auth-verifier-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-auth-verifier-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/guards/AuthGuard.ts"`; `kind`: `"problem-factory"`; `line`: `102`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-rest/duplicate-parameter-index"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-duplicate-parameter-index"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/protocols-rest/src/libs/metadata/MetadataReader.ts"`; `kind`: `"problem-factory"`; `line`: `48`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"protocols-rest/request-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-request-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-rest/src/libs/validators/ValidationProblem.ts"`; `kind`: `"problem-class"`; `line`: `31`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-rest/response-validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-response-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-rest/src/libs/validators/ValidationProblem.ts"`; `kind`: `"problem-class"`; `line`: `54`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"protocols-rest/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-rest-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-rest/src/libs/validators/ValidationProblem.ts"`; `kind`: `"problem-class"`; `line`: `12`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"protocols-trpc/route-handler-not-callable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#protocols-trpc-route-handler-not-callable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/protocols-trpc/src/libs/createTrpcRouter.ts"`; `kind`: `"problem-class"`; `line`: `20`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"PUBLIC_EMAIL_DOMAIN_NOT_ALLOWED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#public-email-domain-not-allowed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/invitation-core/src/libs/problems/DomainPolicyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"TooManyRequests"`; `code`: `"RATE_LIMIT_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rate-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller exceeded a rate, quota, or concurrency limit."`; `operatorAction`: `"Check limiter state, quota configuration, and abuse signals."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Wait for the retry window or reduce request volume."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/ratelimit-core/src/libs/problems/RateLimitExceededProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `429`; `title`: `"Too Many Requests"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RATE_LIMIT_KEY_BUILDER_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rate-limit-key-builder-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/ratelimit-core/src/libs/problems/RateLimitConfigProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RATE_LIMIT_REFUND_UNSUPPORTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rate-limit-refund-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/ratelimit-core/src/libs/problems/RateLimitConfigProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `25`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"RATE_LIMIT_WINDOW_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rate-limit-window-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/ratelimit-core/src/libs/problems/RateLimitConfigProblems.ts"`; `kind`: `"problem-class"`; `line`: `14`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ratelimit-upstash/invalid-policy"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ratelimit-upstash-invalid-policy"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/ratelimit-upstash/src/libs/problems/RateLimitUpstashProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"ratelimit-upstash/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#ratelimit-upstash-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/ratelimit-upstash/src/libs/problems/RateLimitUpstashProblems.ts"`; `kind`: `"problem-class"`; `line`: `21`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"repository-core/batch-loader-factory-not-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#repository-core-batch-loader-factory-not-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/repository-core/src/libs/problems/BatchLoadProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"repository-core/batch-loader-factory-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#repository-core-batch-loader-factory-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/repository-core/src/libs/problems/BatchLoadProblems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"repository-core/batch-loader-scope-collision"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#repository-core-batch-loader-scope-collision"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/repository-core/src/libs/problems/BatchLoadProblems.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RESEND_NOTIFICATION_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#resend-notification-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/notifications-resend/src/libs/problems/ResendNotificationProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `87`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RETRY_ABORTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-aborted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryAbortedProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RETRY_CIRCUIT_BREAKER_INVALID_STATE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-circuit-breaker-invalid-state"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RETRY_CIRCUIT_BREAKER_LOCK_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-circuit-breaker-lock-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `26`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"RETRY_EXHAUSTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-exhausted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryExhaustedProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"retry-core/circuit-breaker-unexpected-state"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-core-circuit-breaker-unexpected-state"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/problems/CircuitBreakerProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"retry-core/success-hook-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#retry-core-success-hook-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The business callback completed successfully, but its onSuccess observation hook failed afterward."`; `operatorAction`: `"Inspect the original cause and repair the named onSuccess listener or telemetry path without replaying the completed callback."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Do not repeat the business operation from this failure; report the hook failure while preserving the successful callback outcome."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/retry-core/src/libs/errors/RetryInfrastructureProblem.ts"`; `kind`: `"problem-class"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"ROLE_HIERARCHY_VIOLATION"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#role-hierarchy-violation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `52`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"ValidationError"`; `code`: `"rpc-codegen/controller-typescript-diagnostics"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rpc-codegen-controller-typescript-diagnostics"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/rpc-codegen/src/libs/loadRoutes.ts"`; `kind`: `"problem-constructor"`; `line`: `72`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"rpc-codegen/invalid-contract"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rpc-codegen-invalid-contract"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/rpc-codegen/src/libs/generate.ts"`; `kind`: `"problem-constructor"`; `line`: `110`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"rpc-codegen/no-rest-controllers-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rpc-codegen-no-rest-controllers-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/rpc-codegen/src/libs/loadRoutes.ts"`; `kind`: `"problem-constructor"`; `line`: `33`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"ValidationError"`; `code`: `"rpc-codegen/unsupported-form-schema"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#rpc-codegen-unsupported-form-schema"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/rpc-codegen/src/libs/generate.ts"`; `kind`: `"problem-constructor"`; `line`: `116`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"saas-demo/demo-endpoint-disabled"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-demo-endpoint-disabled"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"ValidationError"`; `code`: `"saas-demo/invalid-jobs-query"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-invalid-jobs-query"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `30`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"saas-demo/invalid-port"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-invalid-port"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `17`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"saas-demo/job-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-job-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `39`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"saas-demo/smoke-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-smoke-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `66`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"saas-demo/tenant-already-exists"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-tenant-already-exists"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `48`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"saas-demo/tenant-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#saas-demo-tenant-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/saas/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `57`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"SEARCH_CAPABILITY_UNAVAILABLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-capability-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `65`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"SEARCH_DRIZZLE_INVALID_ROW"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-drizzle-invalid-row"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/search-drizzle/src/libs/problems/InvalidSearchRowProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"search-core/sync-identity-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-core-sync-identity-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The event envelope tenant or document identity conflicts with context.tenantId, payload.id, or payload.tenantId."`; `operatorAction`: `"Use extensions.source to identify the conflicting field and verify envelope-authoritative tenant and document identity propagation."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Correct the conflicting event or execution context, then replay the event."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `23`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"NotFound"`; `code`: `"search-core/transform-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-core-transform-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-class"`; `line`: `35`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"NotFound"`; `code`: `"search-meilisearch/index-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-index-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `80`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"search-meilisearch/invalid-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-invalid-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `60`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"search-meilisearch/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `39`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"search-meilisearch/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `100`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"search-meilisearch/tenant-token-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-tenant-token-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `140`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"search-meilisearch/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#search-meilisearch-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-meilisearch/src/libs/problems/MeilisearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `120`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"SEAT_LIMIT_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#seat-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/membership-core/src/libs/problems/MembershipProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `78`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"Forbidden"`; `code`: `"SELF_IMPERSONATION_NOT_ALLOWED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#self-impersonation-not-allowed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/impersonation-core/src/libs/problems/ImpersonationProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"ValidationError"`; `code`: `"starter/invalid-environment"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#starter-invalid-environment"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/spa-be-split/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"starter/unhandled-api-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#starter-unhandled-api-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/spa-be-split/apps/console-web/src/test/browser.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"starter/user-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#starter-user-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/create-croco-app/templates/spa-be-split/apps/api-server/src/problems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_DELETE_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-delete-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-core/src/libs/problems/DeleteFailedProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"STORAGE_FILE_NOT_FOUND"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-file-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-core/src/libs/problems/FileNotFoundProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"BadRequest"`; `code`: `"STORAGE_INVALID_KEY"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-invalid-key"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/storage-core/src/libs/problems/InvalidKeyProblem.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_R2_EMPTY_BODY"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-r2-empty-body"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-r2/src/libs/problems/EmptyR2BodyProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `9`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_R2_MISSING_CONFIG"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-r2-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/storage-r2/src/libs/problems/MissingR2ConfigProblem.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_R2_OBJECT_TOO_LARGE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-r2-object-too-large"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/storage-r2/src/libs/problems/R2ObjectTooLargeProblem.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_R2_READINESS_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-r2-readiness-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/storage-r2/src/libs/problems/R2ReadinessProblem.ts"`; `kind`: `"problem-class"`; `line`: `14`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STORAGE_UPLOAD_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-upload-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-core/src/libs/problems/UploadFailedProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `11`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudflare/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudflare-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `37`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudflare/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudflare-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `70`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudflare/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudflare-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `86`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"storage-cloudflare/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudflare-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `57`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"storage-cloudinary/invalid-upload-intent-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-invalid-upload-intent-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryProvider.ts"`; `kind`: `"problem-factory"`; `line`: `331`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudinary/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `51`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudinary/retryable-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-retryable-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `84`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"storage-cloudinary/terminal-upstream"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-terminal-upstream"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `100`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"storage-cloudinary/validation-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-cloudinary-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/storage-cloudinary/src/libs/CloudinaryDiagnosticsProvider.ts"`; `kind`: `"problem-constructor"`; `line`: `71`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"storage/invalid-upload-intent-ttl"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#storage-invalid-upload-intent-ttl"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/storage-cloudflare/src/libs/CloudflareImagesProvider.ts"`; `kind`: `"problem-factory"`; `line`: `305`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STRATEGY_UNAVAILABLE"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#strategy-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/search-core/src/libs/problems/SearchProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `44`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"STRUCTURED_OUTPUT_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#structured-output-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `52`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tasks-core/duplicate-task-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-core-duplicate-task-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tasks-core/src/libs/problems/TasksProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `13`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tasks-core/execution-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-core-execution-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tasks-core/src/libs/problems/TasksProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `46`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"tasks-core/task-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-core-task-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tasks-core/src/libs/problems/TasksProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tasks-core/task-runner-di-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-core-task-runner-di-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tasks-core/src/libs/problems/TasksProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `29`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"tasks-qstash/invalid-publish-request"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-qstash-invalid-publish-request"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tasks-qstash/src/libs/problems/QStashTaskProblems.ts"`; `kind`: `"problem-class"`; `line`: `18`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tasks-qstash/missing-config"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tasks-qstash-missing-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tasks-qstash/src/libs/problems/QStashTaskProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"TELEMETRY_AUTO_INSTRUMENTATION_INVALID_CONFIG"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-auto-instrumentation-invalid-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryAutoInstrumentationProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"NotImplemented"`; `code`: `"TELEMETRY_FORCE_FLUSH_UNSUPPORTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-force-flush-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested capability is not supported by this runtime or adapter."`; `operatorAction`: `"Check runtime capability declarations and provider maturity documentation."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Use a supported capability or choose an adapter/runtime that provides it."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `62`; \}\]; `status`: `501`; `title`: `"Not Implemented"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"TELEMETRY_RUNTIME_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-runtime-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"TELEMETRY_SAMPLER_INVALID_CONFIG"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-sampler-invalid-config"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `8`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"TELEMETRY_SIGNAL_UNSUPPORTED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#telemetry-signal-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/telemetry-sdk-node/src/libs/problems/TelemetryProblems.ts"`; `kind`: `"problem-class"`; `line`: `36`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Forbidden"`; `code`: `"tenant-core/admin-bypass-reason-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-admin-bypass-reason-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `60`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tenant-core/cross-tenant-leak"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-cross-tenant-leak"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `79`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"tenant-core/default-tenant-fallback"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-default-tenant-fallback"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `48`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tenant-core/duplicate-tenant-manager-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-duplicate-tenant-manager-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tenant-core/src/libs/problems/DuplicateTenantManagerRegistrationProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"tenant-core/isolation-context-missing"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-isolation-context-missing"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `39`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tenant-core/tenant-manager-not-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-tenant-manager-not-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tenant-core/src/libs/problems/TenantManagerNotRegisteredProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Forbidden"`; `code`: `"tenant-core/unsafe-query"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-core-unsafe-query"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The authenticated caller is not allowed to perform the requested action."`; `operatorAction`: `"Review policy, role, tenant, entitlement, and impersonation context."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Request the required permission or choose an allowed action."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/tenant-core/src/libs/problems/TenantIsolationProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `69`; \}\]; `status`: `403`; `title`: `"Forbidden"`; \}, \{ `category`: `"NotFound"`; `code`: `"tenant/not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tenant-core/src/libs/problems/TenantNotFoundProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"tenant/required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tenant-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tenant-core/src/libs/problems/TenantRequiredProblem.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/cleanup-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-cleanup-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-metadata"`; `line`: `17`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/health-check-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-health-check-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `19`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-metadata"`; `line`: `13`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/invalid-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-invalid-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-constructor"`; `line`: `25`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/migration-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-migration-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `14`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-metadata"`; `line`: `9`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing-resources/startup-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-resources-startup-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `12`; `file`: `"packages/testing-resources/src/libs/problems.ts"`; `kind`: `"problem-metadata"`; `line`: `5`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/after-commit-hooks-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-after-commit-hooks-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/testing.ts"`; `kind`: `"problem-constructor"`; `line`: `184`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/telemetry-provider-already-installed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-telemetry-provider-already-installed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/telemetry-testing.ts"`; `kind`: `"problem-constructor"`; `line`: `54`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-disposal-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-disposal-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `144`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-disposed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-disposed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `172`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-resource-fidelity"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-resource-fidelity"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `182`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-resource-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-resource-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `198`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-resource-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-resource-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `211`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/test-kernel-validation-policy"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-test-kernel-validation-policy"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/TestKernel.ts"`; `kind`: `"problem-constructor"`; `line`: `131`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"testing/transaction-context-not-active"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#testing-transaction-context-not-active"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/testing/src/libs/testing.ts"`; `kind`: `"problem-constructor"`; `line`: `171`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"TOKEN_LIMIT_EXCEEDED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#token-limit-exceeded"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `21`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"TOOL_EXECUTION_ERROR"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tool-execution-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/llm-core/src/libs/problems/LlmServiceProblem.ts"`; `kind`: `"problem-constructor"`; `line`: `61`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"transports-graphql/request-body-aborted"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-request-body-aborted"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-class"`; `line`: `47`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"PayloadTooLarge"`; `code`: `"transports-graphql/request-body-too-large"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-request-body-too-large"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request body exceeded the configured byte limit."`; `operatorAction`: `"Confirm route body limits and upstream proxy limits match the intended upload policy."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Reduce the request body and retry."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `33`; \}\]; `status`: `413`; `title`: `"Payload Too Large"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-graphql/resolvers-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-resolvers-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-graphql/schema-not-configured"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-schema-not-configured"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-class"`; `line`: `16`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-graphql/server-not-initialized"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-graphql-server-not-initialized"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-graphql/src/libs/problems/GraphQLTransportProblems.ts"`; `kind`: `"problem-class"`; `line`: `24`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/body-limit-invalid-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-body-limit-invalid-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The HTTP body-limit middleware was configured with an invalid byte boundary."`; `operatorAction`: `"Set the body-limit value to a finite, nonnegative safe integer and restart the service."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Ask the operator to correct the service configuration before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/HttpRequestBodyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/di-bootstrap-validation"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-di-bootstrap-validation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/transports-http/src/libs/CrocoApp.ts"`; `kind`: `"problem-factory"`; `line`: `290`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/duplicate-health-check"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-duplicate-health-check"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `10`; `file`: `"packages/transports-http/src/libs/HealthCheckRegistry.ts"`; `kind`: `"problem-factory"`; `line`: `71`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/duplicate-route-definition"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-duplicate-route-definition"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Two REST controller methods compile to the same HTTP method and runtime path."`; `operatorAction`: `"Inspect the duplicate-route diagnostic for the existing and conflicting controller methods and their route decorator source locations, then rename one route path or change one HTTP method."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Use an application build where every route decorator has a unique HTTP method and path combination."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/transports-http/src/libs/RouteCompiler.ts"`; `kind`: `"problem-factory"`; `line`: `115`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/graceful-shutdown-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-graceful-shutdown-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Graceful shutdown was configured with a non-finite total or event-bus drain timeout."`; `operatorAction`: `"Set timeoutMs and eventBusDrainTimeoutMs to finite numbers, then reconstruct the middleware or controller before retrying shutdown."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Ask the operator to correct the graceful shutdown timeout configuration before reconstructing the HTTP application."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/GracefulShutdownProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `20`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/graceful-shutdown-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-graceful-shutdown-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Graceful shutdown did not finish a phase before that phase's configured deadline elapsed."`; `operatorAction`: `"Inspect the reported phase, timeoutMs, and elapsedMs extensions, then investigate slow request handlers, event-bus draining, or shutdown hooks."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Wait for the stalled shutdown phase to be investigated before retrying; active requests or cleanup work may still be settling."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/GracefulShutdownProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `47`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/middleware-next-called-multiple-times"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-middleware-next-called-multiple-times"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Compatibility metadata for the previous HTTP middleware multiple-next code. New runtime failures use CROCO_HTTP_MIDDLEWARE_002 and preserve this value as extensions.legacyCode."`; `operatorAction`: `"Update dashboards, alerts, and runbooks from transports-http/middleware-next-called-multiple-times to CROCO_HTTP_MIDDLEWARE_002 before removing legacy-code matching."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Migrate Problem.code matchers to CROCO_HTTP_MIDDLEWARE_002; use extensions.legacyCode only while rolling out compatibility changes."`; \}; `sources`: readonly \[\{ `column`: `49`; `file`: `"packages/transports-http/src/libs/CrocoRouteRegistrar.ts"`; `kind`: `"problem-metadata"`; `line`: `39`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/pipe-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-pipe-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/transports-http/src/libs/ParamResolver.ts"`; `kind`: `"problem-factory"`; `line`: `159`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/provider-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-provider-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/transports-http/src/libs/RouteCompiler.ts"`; `kind`: `"problem-factory"`; `line`: `67`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"transports-http/request-body-read-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-request-body-read-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/HttpRequestBodyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `67`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"PayloadTooLarge"`; `code`: `"transports-http/request-body-too-large"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-request-body-too-large"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request body exceeded the configured byte limit."`; `operatorAction`: `"Confirm route body limits and upstream proxy limits match the intended upload policy."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Reduce the request body and retry."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/HttpRequestBodyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `413`; `statusPolicy`: \{ `configuration`: `"bodyLimitMiddleware.statusCode"`; `defaultStatus`: `413`; `kind`: `"runtime-configurable"`; \}; `title`: `"Payload Too Large"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/request-body-unavailable"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-request-body-unavailable"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/transports-http/src/libs/problems/HttpRequestBodyProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `52`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/route-method-not-function"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-route-method-not-function"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `17`; `file`: `"packages/transports-http/src/libs/RouteCompiler.ts"`; `kind`: `"problem-factory"`; `line`: `175`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"transports-http/runtime-capability-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-runtime-capability-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/transports-http/src/libs/runtimeContext.ts"`; `kind`: `"problem-class"`; `line`: `88`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/security-middleware-validation"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-security-middleware-validation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Compatibility metadata for the previous HTTP security middleware validation code. New runtime failures use CROCO_HTTP_SECURITY_001 and preserve this value as extensions.legacyCode."`; `operatorAction`: `"Update dashboards, alerts, and runbooks from transports-http/security-middleware-validation to CROCO_HTTP_SECURITY_001 before removing legacy-code matching."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Migrate Problem.code matchers to CROCO_HTTP_SECURITY_001; use extensions.legacyCode only while rolling out compatibility changes."`; \}; `sources`: readonly \[\{ `column`: `55`; `file`: `"packages/transports-http/src/libs/CrocoApp.ts"`; `kind`: `"problem-metadata"`; `line`: `86`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"transports-http/unsupported-route-method"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#transports-http-unsupported-route-method"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/transports-http/src/libs/CrocoRouteRegistrar.ts"`; `kind`: `"problem-factory"`; `line`: `245`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-core/duplicate-trigger-metadata"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-core-duplicate-trigger-metadata"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `17`; `file`: `"packages/triggers-core/src/libs/TriggerRegistry.ts"`; `kind`: `"problem-factory"`; `line`: `69`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-core/duplicate-trigger-metadata-entry"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-core-duplicate-trigger-metadata-entry"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `17`; `file`: `"packages/triggers-core/src/libs/TriggerRegistry.ts"`; `kind`: `"problem-factory"`; `line`: `121`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-qstash/duplicate-schedule-id"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-qstash-duplicate-schedule-id"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/triggers-qstash/src/libs/QStashScheduler.ts"`; `kind`: `"problem-factory"`; `line`: `253`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-qstash/execution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-qstash-execution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `13`; `file`: `"packages/triggers-qstash/src/libs/QStashTriggerHandler.ts"`; `kind`: `"problem-metadata"`; `line`: `264`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"triggers-qstash/service-resolution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#triggers-qstash-service-resolution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `15`; `file`: `"packages/triggers-qstash/src/libs/QStashTriggerHandler.ts"`; `kind`: `"problem-metadata"`; `line`: `254`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/after-commit-hooks-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-after-commit-hooks-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `103`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/after-commit-outcome-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-after-commit-outcome-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `35`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/after-commit-registration-closed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-after-commit-registration-closed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `50`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/decorator-misuse"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-decorator-misuse"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `13`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/detached-transaction-operation"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-detached-transaction-operation"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `61`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/duplicate-tx-manager-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-duplicate-tx-manager-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/errors.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"tx-core/invalid-transaction-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-invalid-transaction-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `87`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/manager-not-registered"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-manager-not-registered"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/errors.ts"`; `kind`: `"problem-class"`; `line`: `23`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/missing-transaction-context"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-missing-transaction-context"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `24`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/outcome-requires-root"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-outcome-requires-root"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `76`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"tx-core/propagation-error"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-propagation-error"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/errors.ts"`; `kind`: `"problem-class"`; `line`: `34`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/transaction-outcome-unknown"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-transaction-outcome-unknown"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `165`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/transaction-rollback-confirmed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-transaction-rollback-confirmed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `147`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-core/transaction-timeout"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-core-transaction-timeout"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-core/src/libs/problems/TransactionProblems.ts"`; `kind`: `"problem-class"`; `line`: `130`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/rls-configuration-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-rls-configuration-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"A PostgreSQL RLS helper received malformed static identifier or setting-key configuration."`; `operatorAction`: `"Use the reported field name and the @croco/tx-drizzle RLS contract to correct the configuration, then restart the service."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Ask the operator to correct the RLS configuration before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `7`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/rls-debug-logging-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-rls-debug-logging-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Requested RLS debug logging could not initialize or write its diagnostic event."`; `operatorAction`: `"Provide an RlsLogger or register the framework Logger, then verify its info() output path before retrying the transaction."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Ask the operator to restore the configured logger before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `57`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/rls-execute-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-rls-execute-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `29`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/savepoint-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-savepoint-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `76`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"tx-drizzle/tenant-context-required"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#tx-drizzle-tenant-context-required"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/tx-drizzle/src/libs/problems/TxDrizzleProblems.ts"`; `kind`: `"problem-class"`; `line`: `21`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Unauthorized"`; `code`: `"UNAUTHORIZED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#unauthorized"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request did not include valid authentication credentials."`; `operatorAction`: `"Check authentication configuration, token issuer, and clock skew."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Sign in again or provide a valid credential."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/auth-core/src/libs/problems/AuthProblems.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `401`; `title`: `"Unauthorized"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"WEBHOOK_PROCESSING_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhook-processing-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-polar/src/libs/problems/WebhookProcessingProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"WEBHOOK_VALIDATION_FAILED"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhook-validation-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/billing-polar/src/libs/problems/WebhookValidationProblem.ts"`; `kind`: `"problem-class"`; `line`: `4`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `38`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/dispatch-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-dispatch-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `117`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"webhooks-core/duplicate-event"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-duplicate-event"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `139`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"BadRequest"`; `code`: `"webhooks-core/invalid-envelope"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-invalid-envelope"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `74`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"webhooks-core/invalid-fixture"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-invalid-fixture"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `178`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"BadRequest"`; `code`: `"webhooks-core/invalid-signature"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-invalid-signature"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `54`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"Conflict"`; `code`: `"webhooks-core/outbound-acceptance-unknown"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-acceptance-unknown"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `97`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/outbound-configuration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-configuration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `119`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"webhooks-core/outbound-endpoint-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-endpoint-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `53`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"ValidationError"`; `code`: `"webhooks-core/outbound-invalid-event"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-invalid-event"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"webhooks-core/outbound-invalid-secret-version"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-invalid-secret-version"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `64`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"ValidationError"`; `code`: `"webhooks-core/outbound-invalid-url"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-invalid-url"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request or generated contract failed schema or semantic validation."`; `operatorAction`: `"Inspect schema diagnostics, generated contracts, and validation metadata."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Fix the invalid fields and retry with schema-conformant input."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `42`; \}\]; `status`: `422`; `title`: `"Validation Error"`; \}, \{ `category`: `"BusinessRuleViolation"`; `code`: `"webhooks-core/outbound-permanent-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-permanent-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request is syntactically valid but violates a domain rule."`; `operatorAction`: `"Review domain policy, entitlement, quota, and lifecycle rule evidence."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Change the workflow state or request values so the business rule is satisfied."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `86`; \}\]; `status`: `422`; `title`: `"Business Rule Violation"`; \}, \{ `category`: `"Conflict"`; `code`: `"webhooks-core/outbound-replay-not-allowed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-replay-not-allowed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `108`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/outbound-retryable-failure"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-outbound-retryable-failure"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/webhooks-core/src/libs/outbound/OutboundWebhookProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `75`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"webhooks-core/reporter-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-reporter-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `162`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"BadRequest"`; `code`: `"webhooks-core/unknown-event"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#webhooks-core-unknown-event"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The caller sent malformed input or unsupported request options."`; `operatorAction`: `"Inspect validation details and request logs; do not retry unchanged input."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Correct the request input and retry after validation passes."`; \}; `sources`: readonly \[\{ `column`: `11`; `file`: `"packages/webhooks-core/src/libs/problems/WebhookProblems.ts"`; `kind`: `"problem-metadata"`; `line`: `94`; \}\]; `status`: `400`; `title`: `"Bad Request"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/duplicate-workflow-registration"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-duplicate-workflow-registration"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `15`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/replay-unsupported"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-replay-unsupported"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `47`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/saga-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `62`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/saga-execution-failed"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-execution-failed"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `127`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"workflow-core/saga-execution-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-execution-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-class"`; `line`: `77`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/saga-replay-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-replay-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `103`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"Conflict"`; `code`: `"workflow-core/saga-store-conflict"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-saga-store-conflict"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The request conflicts with current state or an idempotency constraint."`; `operatorAction`: `"Inspect concurrent writes, idempotency keys, and uniqueness constraints."`; `redactionPolicy`: `"safe-message"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.warning"`; `severity`: `"warning"`; \}; `userAction`: `"Refresh state, resolve the conflict, and retry with the updated intent."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `92`; \}\]; `status`: `409`; `title`: `"Conflict"`; \}, \{ `category`: `"InternalServerError"`; `code`: `"workflow-core/workflow-definition-invalid"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-workflow-definition-invalid"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"Croco or an upstream dependency failed after accepting the request."`; `operatorAction`: `"Use traces, logs, and upstream diagnostics to isolate the failing boundary."`; `redactionPolicy`: `"operator-only"`; `retryability`: `"conditional"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.error"`; `severity`: `"error"`; \}; `userAction`: `"Retry later only when the operation is idempotent or the caller owns retry safety."`; \}; `sources`: readonly \[\{ `column`: `5`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-constructor"`; `line`: `31`; \}\]; `status`: `500`; `title`: `"Internal Server Error"`; \}, \{ `category`: `"NotFound"`; `code`: `"workflow-core/workflow-not-found"`; `cookbookPath`: `"/reference/problem-recovery-cookbook/#workflow-core-workflow-not-found"`; `lifecycle`: \{ `status`: `"active"`; \}; `recovery`: \{ `cause`: `"The requested resource or route-visible record does not exist."`; `operatorAction`: `"Confirm tenant scoping, data retention, and backing-store lookup behavior."`; `redactionPolicy`: `"public"`; `retryability`: `"not-retryable"`; `telemetry`: \{ `attributes`: readonly \[`"problem.code"`, `"problem.category"`, `"problem.status"`\]; `eventName`: `"croco.problem.info"`; `severity`: `"info"`; \}; `userAction`: `"Verify the identifier and refresh the resource list before retrying."`; \}; `sources`: readonly \[\{ `column`: `3`; `file`: `"packages/workflow-core/src/libs/problems/WorkflowProblems.ts"`; `kind`: `"problem-class"`; `line`: `5`; \}\]; `status`: `404`; `title`: `"Not Found"`; \}\] ### version 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 7b070d8a2..a888778ae 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,7 +7,7 @@ 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 540 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 541 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 @@ -302,6 +302,7 @@ This cookbook documents 540 public Croco Problem codes. The deterministic JSON r | [`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 | @@ -5758,6 +5759,24 @@ Sources: - `packages/metering-core/src/libs/problems/RedisProblem.ts:8:5` (problem-constructor) + + +## `metering/transition-conflict` + +- Category: `Conflict` +- HTTP status: `409` Conflict +- Retryability: `conditional` +- Redaction policy: `safe-message` +- Lifecycle: `active` +- Cause: The request conflicts with current state or an idempotency constraint. +- User action: Refresh state, resolve the conflict, and retry with the updated intent. +- Operator action: Inspect concurrent writes, idempotency keys, and uniqueness constraints. +- Telemetry: `croco.problem.warning` (warning) with `problem.code`, `problem.category`, `problem.status` + +Sources: + +- `packages/metering-core/src/libs/problems/MeteringTransitionProblem.ts:5:5` (problem-constructor) + ## `metrics-billing/metric-dropped` diff --git a/packages/events-core/src/libs/DomainEvent.ts b/packages/events-core/src/libs/DomainEvent.ts index 8c89fac80..865408bc8 100644 --- a/packages/events-core/src/libs/DomainEvent.ts +++ b/packages/events-core/src/libs/DomainEvent.ts @@ -20,14 +20,14 @@ export abstract class DomainEvent { public readonly timestamp: Date; public metadata: DomainEventMetadata; - constructor() { + constructor(eventId?: string) { const ctor = this.constructor as typeof DomainEvent & { eventName?: string }; if (!ctor.eventName) { throw new EventDefinitionProblem(); } - this.eventId = Math.random().toString(36).substring(2, 15); + this.eventId = eventId ?? Math.random().toString(36).substring(2, 15); this.eventName = ctor.eventName; this.timestamp = new Date(); this.metadata = {}; diff --git a/packages/events-core/src/tests/DomainEvents.spec.ts b/packages/events-core/src/tests/DomainEvents.spec.ts index a8d4f50d0..263b27723 100644 --- a/packages/events-core/src/tests/DomainEvents.spec.ts +++ b/packages/events-core/src/tests/DomainEvents.spec.ts @@ -13,8 +13,11 @@ import { class TestEvent extends DomainEvent { static eventName = "TestEvent"; - constructor(public readonly data: string) { - super(); + constructor( + public readonly data: string, + eventId?: string, + ) { + super(eventId); } } @@ -59,6 +62,12 @@ describe("DomainEvent", () => { expect(event.eventId).toBe(event.eventId); }); + it("should preserve an explicitly supplied logical event identity", () => { + const event = new TestEvent("test", "logical-event-1"); + + expect(event.eventId).toBe("logical-event-1"); + }); + it("should store provided data", () => { const event = new TestEvent("hello"); expect(event.data).toBe("hello"); diff --git a/packages/metering-core/README.md b/packages/metering-core/README.md index 448530646..56e10af8e 100644 --- a/packages/metering-core/README.md +++ b/packages/metering-core/README.md @@ -134,6 +134,16 @@ class ApiController { - 이 원자적 기록은 usage key와 dedupe key를 함께 실행하는 single-shard Redis를 요구합니다. 현재 key schema는 Redis Cluster hash-slot colocation을 제공하지 않습니다. - quota 초과 시 `allowOverQuota` 설정에 따라 이벤트 발행 또는 Problem 예외가 발생합니다. - billing, entitlements 같은 상위 패키지와 이벤트 기반으로 연결할 수 있습니다. +- 이벤트 발행 payload는 exclusive processing lease와 함께 저장됩니다. 발행 실패 후 동일한 idempotency + key를 재시도하면 저장된 payload만 재개하므로 사용량을 다시 기록하지 않고, 이벤트는 동일한 event ID로 + 다시 발행됩니다. +- `UsageStorage` 구현은 `replayContract: "idempotent"`를 선언하고 동일 idempotency key의 persistence + 재실행을 안전하게 처리해야 합니다. 이는 usage 저장 직후 프로세스가 중단되어 processing lease가 만료된 + 경우의 복구 계약입니다. +- `RedisUsageStorage`와 `IdempotencyManager`는 `scriptKeyAccess: "multi-key"` capability를 선언한 + `RedisClient`가 필요합니다. 원자적 Lua 스크립트가 여러 logical key에 접근하므로 cross-slot script를 + 거부하는 Redis Cluster deployment는 지원하지 않습니다. Standalone Redis와 제공되는 Upstash adapter는 + 이 계약을 충족합니다. - `RedisUsageStorage.resetBillingCycle(tenantId)`는 현재 billing cycle의 tenant usage key를 `KEYS` 대신 bounded `SCAN` batch로 삭제합니다. - tenant-wide reset은 이미 삭제된 key를 다시 삭제하지 않는 idempotent 작업이며, batch 사이에 새로 기록된 현재 cycle usage는 다음 reset에서 정리될 수 있습니다. diff --git a/packages/metering-core/src/index.ts b/packages/metering-core/src/index.ts index a577bced8..fe5822a30 100644 --- a/packages/metering-core/src/index.ts +++ b/packages/metering-core/src/index.ts @@ -185,7 +185,11 @@ export { UsageRecordedEvent } from "./libs/events/UsageRecordedEvent"; * ``` */ export { IdempotencyManager } from "./libs/IdempotencyManager"; -export type { IdempotencyClaim } from "./libs/IdempotencyManager"; +export type { + IdempotencyClaim, + MeteringProcessingClaim, + PendingMeteringDelivery, +} from "./libs/IdempotencyManager"; /** * MeteringService 생성 옵션 타입입니다. @@ -336,6 +340,7 @@ export { AtomicQuotaNotSupportedProblem } from "./libs/problems/AtomicQuotaNotSu */ export { DuplicateRecordProblem } from "./libs/problems/DuplicateRecordProblem"; export { InvalidMeterDimensionProblem } from "./libs/problems/InvalidMeterDimensionProblem"; +export { MeteringTransitionProblem } from "./libs/problems/MeteringTransitionProblem"; /** * 등록되지 않은 Meter를 사용할 때 발생하는 문제 타입입니다. @@ -424,11 +429,12 @@ export { QuotaManager } from "./libs/QuotaManager"; * * @example * ```typescript - * import Redis from 'ioredis'; + * import type { RedisClient } from '@croco/metering-core'; + * import { createUpstashRedisClientFromEnv } from '@croco/metering-upstash'; * - * const client: RedisClient = new Redis({ - * host: 'localhost', - * port: 6379, + * const client: RedisClient = createUpstashRedisClientFromEnv({ + * UPSTASH_REDIS_REST_URL: process.env.UPSTASH_REDIS_REST_URL, + * UPSTASH_REDIS_REST_TOKEN: process.env.UPSTASH_REDIS_REST_TOKEN, * }); * ``` */ diff --git a/packages/metering-core/src/libs/IdempotencyManager.ts b/packages/metering-core/src/libs/IdempotencyManager.ts index bccbdcf9d..9d70600b3 100644 --- a/packages/metering-core/src/libs/IdempotencyManager.ts +++ b/packages/metering-core/src/libs/IdempotencyManager.ts @@ -1,7 +1,27 @@ import { ulid } from "ulid"; import { DuplicateRecordProblem } from "./problems/DuplicateRecordProblem"; +import { MeteringTransitionProblem } from "./problems/MeteringTransitionProblem"; import { buildMeteringRedisKey } from "./redisKey"; import type { RedisClient } from "./RedisClient"; +import type { UsageRecord } from "./types"; + +export type PendingMeteringDelivery = { + usageRecord: Omit & { + timestamp: string; + }; + quota?: { + allowOverQuota: boolean; + exceeded: boolean; + newUsage: number; + quota: number; + }; +}; + +export type MeteringProcessingClaim = { + delivery?: PendingMeteringDelivery; + operationId: string; + token: IdempotencyClaim; +}; declare const IDEMPOTENCY_CLAIM: unique symbol; @@ -22,6 +42,7 @@ export type IdempotencyClaim = string & { */ export class IdempotencyManager { private static readonly DEFAULT_TTL_SECONDS = 86400; // 24시간 + private static readonly DEFAULT_PROCESSING_LEASE_MILLISECONDS = 30_000; private static readonly KEY_NAMESPACE = "idem2"; private static readonly STATUS_IN_PROGRESS_PREFIX = "IN_PROGRESS:"; private static readonly STATUS_COMPLETED = "COMPLETED"; @@ -29,6 +50,7 @@ export class IdempotencyManager { constructor( private readonly redis: RedisClient, private readonly ttlSeconds: number = IdempotencyManager.DEFAULT_TTL_SECONDS, + private readonly processingLeaseMilliseconds: number = IdempotencyManager.DEFAULT_PROCESSING_LEASE_MILLISECONDS, ) {} /** @@ -139,6 +161,269 @@ export class IdempotencyManager { ); } + async claimMeteringProcessingOrThrow( + tenantId: string, + meterId: string, + idempotencyKey: string, + ): Promise { + const key = this.buildDeliveryKey(tenantId, meterId, idempotencyKey); + const legacyKey = this.buildKey(tenantId, meterId, idempotencyKey); + const token = ulid() as IdempotencyClaim; + const operationId = ulid(); + const [claimed, deliveryJson, claimedOperationId] = await this.redis.eval< + [number, string, string] + >( + ` + local time = redis.call('TIME') + local now = tonumber(time[1]) * 1000 + math.floor(tonumber(time[2]) / 1000) + local stateJson = redis.call('GET', KEYS[1]) + + if not stateJson then + local legacyStatus = redis.call('GET', KEYS[2]) + if legacyStatus == ARGV[6] or + (legacyStatus and string.sub(legacyStatus, 1, string.len(ARGV[5])) == ARGV[5]) then + return { 0, '', '' } + end + + local state = { + status = 'PROCESSING', + token = ARGV[1], + leaseExpiresAt = now + tonumber(ARGV[2]), + operationId = ARGV[4] + } + redis.call('SET', KEYS[1], cjson.encode(state), 'EX', ARGV[3]) + if not legacyStatus then + redis.call('SET', KEYS[2], ARGV[7], 'EX', ARGV[3]) + end + return { 1, '', state.operationId } + end + + local state = cjson.decode(stateJson) + if state.status == 'EVENTS_PENDING' or + ((state.status == 'PROCESSING' or state.status == 'PUBLISHING') and + tonumber(state.leaseExpiresAt) <= now) then + local hasDelivery = state.delivery ~= nil + state.status = hasDelivery and 'PUBLISHING' or 'PROCESSING' + state.token = ARGV[1] + state.operationId = state.operationId or ARGV[4] + state.leaseExpiresAt = now + tonumber(ARGV[2]) + redis.call('SET', KEYS[1], cjson.encode(state), 'EX', ARGV[3]) + redis.call('SET', KEYS[2], ARGV[7], 'EX', ARGV[3]) + return { 1, hasDelivery and state.delivery or '', state.operationId } + end + + return { 0, '', '' } + `, + [key, legacyKey], + [ + token, + this.processingLeaseMilliseconds, + this.activeStateTtlSeconds, + operationId, + IdempotencyManager.STATUS_IN_PROGRESS_PREFIX, + IdempotencyManager.STATUS_COMPLETED, + this.buildLeaseValue(token), + ], + ); + + if (claimed !== 1) { + throw new DuplicateRecordProblem(idempotencyKey); + } + + return { + operationId: claimedOperationId, + token, + delivery: + deliveryJson.length === 0 + ? undefined + : (JSON.parse(deliveryJson) as PendingMeteringDelivery), + }; + } + + async markMeteringEventsPublishing( + tenantId: string, + meterId: string, + idempotencyKey: string, + token: IdempotencyClaim, + delivery: PendingMeteringDelivery, + ): Promise { + const key = this.buildDeliveryKey(tenantId, meterId, idempotencyKey); + const [transitioned, reason] = await this.redis.eval<[number, string]>( + ` + local stateJson = redis.call('GET', KEYS[1]) + if not stateJson then + return { 0, 'MISSING' } + end + + local state = cjson.decode(stateJson) + if state.status ~= 'PROCESSING' then + return { 0, 'STATUS:' .. tostring(state.status) } + end + if state.token ~= ARGV[1] then + return { 0, 'TOKEN' } + end + + local time = redis.call('TIME') + local now = tonumber(time[1]) * 1000 + math.floor(tonumber(time[2]) / 1000) + state.status = 'PUBLISHING' + state.delivery = ARGV[2] + state.leaseExpiresAt = now + tonumber(ARGV[3]) + redis.call('SET', KEYS[1], cjson.encode(state), 'EX', ARGV[4]) + return { 1, 'OK' } + `, + [key], + [ + token, + JSON.stringify(delivery), + this.processingLeaseMilliseconds, + this.activeStateTtlSeconds, + ], + ); + this.requireStagedTransition(transitioned, reason, idempotencyKey, "mark-events-publishing"); + } + + async releaseMeteringProcessing( + tenantId: string, + meterId: string, + idempotencyKey: string, + token: IdempotencyClaim, + ): Promise { + const key = this.buildDeliveryKey(tenantId, meterId, idempotencyKey); + const [transitioned, reason] = await this.redis.eval<[number, string]>( + ` + local stateJson = redis.call('GET', KEYS[1]) + if not stateJson then + return { 0, 'MISSING' } + end + + local state = cjson.decode(stateJson) + if state.status ~= 'PROCESSING' then + return { 0, 'STATUS:' .. tostring(state.status) } + end + if state.token ~= ARGV[1] then + return { 0, 'TOKEN' } + end + + state.token = nil + state.leaseExpiresAt = 0 + redis.call('SET', KEYS[1], cjson.encode(state), 'EX', ARGV[2]) + return { 1, 'OK' } + `, + [key], + [token, this.activeStateTtlSeconds], + ); + this.requireStagedTransition(transitioned, reason, idempotencyKey, "release-processing"); + } + + async releaseMeteringEvents( + tenantId: string, + meterId: string, + idempotencyKey: string, + token: IdempotencyClaim, + ): Promise { + const key = this.buildDeliveryKey(tenantId, meterId, idempotencyKey); + const [transitioned, reason] = await this.redis.eval<[number, string]>( + ` + local stateJson = redis.call('GET', KEYS[1]) + if not stateJson then + return { 0, 'MISSING' } + end + + local state = cjson.decode(stateJson) + if state.status == 'COMPLETED' then + return { 1, 'ALREADY_COMPLETED' } + end + if state.status ~= 'PUBLISHING' then + return { 0, 'STATUS:' .. tostring(state.status) } + end + if state.token ~= ARGV[1] then + return { 0, 'TOKEN' } + end + + state.status = 'EVENTS_PENDING' + state.token = nil + state.leaseExpiresAt = nil + redis.call('SET', KEYS[1], cjson.encode(state), 'EX', ARGV[2]) + return { 1, 'OK' } + `, + [key], + [token, this.ttlSeconds], + ); + this.requireStagedTransition(transitioned, reason, idempotencyKey, "release-events"); + } + + async completeMeteringProcessing( + tenantId: string, + meterId: string, + idempotencyKey: string, + token: IdempotencyClaim, + ): Promise { + const key = this.buildDeliveryKey(tenantId, meterId, idempotencyKey); + const legacyKey = this.buildKey(tenantId, meterId, idempotencyKey); + const [transitioned, reason] = await this.redis.eval<[number, string]>( + ` + local stateJson = redis.call('GET', KEYS[1]) + if not stateJson then + return { 0, 'MISSING' } + end + + local state = cjson.decode(stateJson) + if state.status == 'COMPLETED' then + return { 1, 'ALREADY_COMPLETED' } + end + if state.status ~= 'PUBLISHING' then + return { 0, 'STATUS:' .. tostring(state.status) } + end + if state.token ~= ARGV[1] then + return { 0, 'TOKEN' } + end + + redis.call('SET', KEYS[1], '{"status":"COMPLETED"}', 'EX', ARGV[2]) + redis.call('SET', KEYS[2], ARGV[3], 'EX', ARGV[2]) + return { 1, 'OK' } + `, + [key, legacyKey], + [token, this.ttlSeconds, IdempotencyManager.STATUS_COMPLETED], + ); + this.requireStagedTransition(transitioned, reason, idempotencyKey, "complete-processing"); + } + + async abortMeteringProcessing( + tenantId: string, + meterId: string, + idempotencyKey: string, + token: IdempotencyClaim, + ): Promise { + const key = this.buildDeliveryKey(tenantId, meterId, idempotencyKey); + const legacyKey = this.buildKey(tenantId, meterId, idempotencyKey); + const [deleted, reason] = await this.redis.eval<[number, string]>( + ` + local stateJson = redis.call('GET', KEYS[1]) + if not stateJson then + return { 0, 'MISSING' } + end + + local state = cjson.decode(stateJson) + if state.status ~= 'PROCESSING' then + return { 0, 'STATUS:' .. tostring(state.status) } + end + if state.token ~= ARGV[1] then + return { 0, 'TOKEN' } + end + if redis.call('GET', KEYS[2]) ~= ARGV[2] then + return { 0, 'LIFECYCLE' } + end + + redis.call('DEL', KEYS[1]) + redis.call('DEL', KEYS[2]) + return { 1, 'OK' } + `, + [key, legacyKey], + [token, this.buildLeaseValue(token)], + ); + this.requireStagedTransition(deleted, reason, idempotencyKey, "abort-processing"); + } + /** * 중복 체크 - Problem throw 버전 * @throws DuplicateRecordProblem 중복 시 @@ -170,4 +455,28 @@ export class IdempotencyManager { private buildLeaseValue(claim: IdempotencyClaim): string { return `${IdempotencyManager.STATUS_IN_PROGRESS_PREFIX}${claim}`; } + + private buildDeliveryKey(tenantId: string, meterId: string, idempotencyKey: string): string { + return buildMeteringRedisKey(IdempotencyManager.KEY_NAMESPACE, [ + "delivery", + tenantId, + meterId, + idempotencyKey, + ]); + } + + private get activeStateTtlSeconds(): number { + return Math.max(this.ttlSeconds, Math.ceil(this.processingLeaseMilliseconds / 1000) + 1); + } + + private requireStagedTransition( + transitioned: number, + reason: string, + idempotencyKey: string, + transition: string, + ): void { + if (transitioned !== 1) { + throw new MeteringTransitionProblem(transition, reason, idempotencyKey); + } + } } diff --git a/packages/metering-core/src/libs/MeteringService.ts b/packages/metering-core/src/libs/MeteringService.ts index 517184dfa..eb23646d4 100644 --- a/packages/metering-core/src/libs/MeteringService.ts +++ b/packages/metering-core/src/libs/MeteringService.ts @@ -1,9 +1,12 @@ import type { EventBus } from "@croco/events-core"; import { Component } from "@croco/framework-context"; -import { ulid } from "ulid"; import { QuotaExceededEvent } from "./events/QuotaExceededEvent"; import { UsageRecordedEvent } from "./events/UsageRecordedEvent"; -import type { IdempotencyManager } from "./IdempotencyManager"; +import type { + IdempotencyManager, + MeteringProcessingClaim, + PendingMeteringDelivery, +} from "./IdempotencyManager"; import type { MeterDimensionSchema, MeterDimensionValue, @@ -99,19 +102,77 @@ export class MeteringService { dimensions?: Record; }, ): Promise { - const { tenantId, meterId, value = 1, metadata } = options; - - const meter = await this.meterRegistry.getOrThrow(tenantId, meterId); - + const { tenantId, meterId } = options; const idempotencyKey = this.idempotencyManager.ensureIdempotencyKey(options.idempotencyKey); - const idempotencyClaim = await this.idempotencyManager.beginProcessingOrThrow( + const claim = await this.idempotencyManager.claimMeteringProcessingOrThrow( tenantId, meterId, idempotencyKey, ); + let publishingClaimed = claim.delivery !== undefined; + let persistenceCompleted = claim.delivery !== undefined; + let processingCompleted = false; + + try { + let delivery = claim.delivery; + if (!delivery) { + delivery = await this.persistUsage(options, idempotencyKey, claim.operationId); + persistenceCompleted = true; + await this.idempotencyManager.markMeteringEventsPublishing( + tenantId, + meterId, + idempotencyKey, + claim.token, + delivery, + ); + publishingClaimed = true; + } + + return await this.publishDelivery(claim, delivery, () => { + processingCompleted = true; + }); + } catch (error) { + if (processingCompleted) { + throw error; + } + if (publishingClaimed) { + await this.idempotencyManager.releaseMeteringEvents( + tenantId, + meterId, + idempotencyKey, + claim.token, + ); + } else if (!persistenceCompleted) { + await this.idempotencyManager.abortMeteringProcessing( + tenantId, + meterId, + idempotencyKey, + claim.token, + ); + } else { + await this.idempotencyManager.releaseMeteringProcessing( + tenantId, + meterId, + idempotencyKey, + claim.token, + ); + } + throw error; + } + } + private async persistUsage( + options: RecordOptions & { + eventId?: string; + dimensions?: Record; + }, + idempotencyKey: string, + operationId: string, + ): Promise { + const { tenantId, meterId, value = 1, metadata } = options; + const meter = await this.meterRegistry.getOrThrow(tenantId, meterId); const usageRecord: UsageRecord = { - id: ulid(), + id: operationId, tenantId, meterId, value, @@ -121,97 +182,99 @@ export class MeteringService { dimensions: options.dimensions, metadata, }; + const serializedUsageRecord = { + ...usageRecord, + timestamp: usageRecord.timestamp.toISOString(), + }; - let idempotencyCompleted = false; - - try { - if (meter.quota !== undefined) { - const allowOverQuota = meter.allowOverQuota ?? false; - const quotaResult = await this.quotaManager.checkAndRecord({ - tenantId, - meterId, - value, - quota: meter.quota, - allowOverQuota, - usageRecord, - }); - - const shouldPublishQuotaExceeded = quotaResult.exceeded && this.eventBus !== undefined; - - if (quotaResult.exceeded && !allowOverQuota) { - // Quota exceeded is not retryable - complete idempotency so the same key is never replayed - await this.idempotencyManager.completeProcessing( - tenantId, - meterId, - idempotencyKey, - idempotencyClaim, - ); - idempotencyCompleted = true; - this.quotaManager.validateOrThrow({ - meterId, - quota: meter.quota, - allowOverQuota, - exceeded: quotaResult.exceeded, - newUsage: quotaResult.newUsage, - }); - } else { - this.quotaManager.validateOrThrow({ - meterId, - quota: meter.quota, - allowOverQuota, - exceeded: quotaResult.exceeded, - newUsage: quotaResult.newUsage, - }); + if (meter.quota === undefined) { + await this.usageStorage.record(usageRecord); + return { usageRecord: serializedUsageRecord }; + } - await this.idempotencyManager.completeProcessing( - tenantId, - meterId, - idempotencyKey, - idempotencyClaim, - ); - idempotencyCompleted = true; - } + const allowOverQuota = meter.allowOverQuota ?? false; + const quotaResult = await this.quotaManager.checkAndRecord({ + tenantId, + meterId, + value, + quota: meter.quota, + allowOverQuota, + usageRecord, + }); + return { + usageRecord: serializedUsageRecord, + quota: { + allowOverQuota, + exceeded: quotaResult.exceeded, + newUsage: quotaResult.newUsage, + quota: meter.quota, + }, + }; + } - if (shouldPublishQuotaExceeded) { - await this.eventBus.publish( - new QuotaExceededEvent(tenantId, meterId, quotaResult.newUsage, meter.quota), - ); - } + private async publishDelivery( + claim: MeteringProcessingClaim, + delivery: PendingMeteringDelivery, + onCompleted: () => void, + ): Promise { + const usageRecord: UsageRecord = { + ...delivery.usageRecord, + timestamp: new Date(delivery.usageRecord.timestamp), + }; + const { tenantId, meterId, value, idempotencyKey, metadata } = usageRecord; + const quota = delivery.quota; - if (this.eventBus) { - await this.eventBus.publish( - new UsageRecordedEvent(tenantId, meterId, value, idempotencyKey, metadata), - ); - } - } else { - await this.usageStorage.record(usageRecord); - await this.idempotencyManager.completeProcessing( + if (quota?.exceeded && this.eventBus) { + await this.eventBus.publish( + new QuotaExceededEvent( tenantId, meterId, + quota.newUsage, + quota.quota, idempotencyKey, - idempotencyClaim, - ); - idempotencyCompleted = true; + claim.operationId, + ), + ); + } - if (this.eventBus) { - await this.eventBus.publish( - new UsageRecordedEvent(tenantId, meterId, value, idempotencyKey, metadata), - ); - } - } + if (quota?.exceeded && !quota.allowOverQuota) { + await this.idempotencyManager.completeMeteringProcessing( + tenantId, + meterId, + idempotencyKey, + claim.token, + ); + onCompleted(); + this.quotaManager.validateOrThrow({ + meterId, + quota: quota.quota, + allowOverQuota: quota.allowOverQuota, + exceeded: quota.exceeded, + newUsage: quota.newUsage, + }); + } - return usageRecord; - } catch (error) { - if (!idempotencyCompleted) { - await this.idempotencyManager.abortProcessing( + if (this.eventBus) { + await this.eventBus.publish( + new UsageRecordedEvent( tenantId, meterId, + value, idempotencyKey, - idempotencyClaim, - ); - } - throw error; + metadata, + claim.operationId, + ), + ); } + + await this.idempotencyManager.completeMeteringProcessing( + tenantId, + meterId, + idempotencyKey, + claim.token, + ); + onCompleted(); + return usageRecord; } private validateTypedRecord( diff --git a/packages/metering-core/src/libs/QuotaManager.ts b/packages/metering-core/src/libs/QuotaManager.ts index 4a8b1b562..9c1be9073 100644 --- a/packages/metering-core/src/libs/QuotaManager.ts +++ b/packages/metering-core/src/libs/QuotaManager.ts @@ -1,4 +1,3 @@ -import { AtomicQuotaNotSupportedProblem } from "./problems/AtomicQuotaNotSupportedProblem"; import { QuotaExceededProblem } from "./problems/QuotaExceededProblem"; import type { UsageRecord } from "./types"; import type { AtomicQuotaCheckResult, UsageStorage } from "./UsageStorage"; @@ -29,10 +28,6 @@ export class QuotaManager { } async checkAndRecord(options: QuotaCheckAndRecordOptions): Promise { - if (!this.usageStorage.checkAndRecordWithinQuota) { - throw new AtomicQuotaNotSupportedProblem(); - } - const atomicResult = await this.usageStorage.checkAndRecordWithinQuota(options); return this.toQuotaCheckResult(atomicResult); } diff --git a/packages/metering-core/src/libs/RedisClient.ts b/packages/metering-core/src/libs/RedisClient.ts index 7a38eef23..b711d2673 100644 --- a/packages/metering-core/src/libs/RedisClient.ts +++ b/packages/metering-core/src/libs/RedisClient.ts @@ -2,6 +2,12 @@ * Redis 클라이언트 인터페이스 (ioredis, upstash 등 구현체와 분리) */ export interface RedisClient { + /** + * Metering의 원자적 스크립트는 여러 키에 접근하므로 단일 노드/단일 슬롯 실행 모델이 필요합니다. + * Redis Cluster처럼 서로 다른 슬롯의 키 접근을 거부하는 클라이언트는 지원하지 않습니다. + */ + readonly scriptKeyAccess: "multi-key"; + /** * Sorted Set에 멤버 추가 */ diff --git a/packages/metering-core/src/libs/RedisUsageStorage.ts b/packages/metering-core/src/libs/RedisUsageStorage.ts index 5d5059dfd..c7b69afa5 100644 --- a/packages/metering-core/src/libs/RedisUsageStorage.ts +++ b/packages/metering-core/src/libs/RedisUsageStorage.ts @@ -9,6 +9,9 @@ type ScanDeleteResult = [string | number, number]; type UsageMemberEnvelope = Partial< Pick >; +type RecordedQuotaResult = AtomicQuotaCheckResult & { + expiresAt: number; +}; function stableStringify(value: unknown): string { return JSON.stringify(value, (_key, nestedValue: unknown) => { @@ -37,6 +40,8 @@ function stableStringify(value: unknown): string { * - Usage 기록과 idempotency marker를 단일 Redis Lua script로 처리 */ export class RedisUsageStorage implements UsageStorage { + readonly replayContract = "idempotent" as const; + private static readonly USAGE_KEY_NAMESPACE = "usage2"; private static readonly IDEM_KEY_NAMESPACE = "idem2"; private static readonly RECORD_IDEMPOTENCY_TTL_SECONDS = 86400; @@ -77,7 +82,7 @@ end return { nextCursor, #keys } `; // Redis remains the idempotency source of truth; this cache only short-circuits duplicate quota writes. - private readonly recordedRecordKeys = new Map(); + private readonly recordedRecordKeys = new Map(); private nextRecordIdempotencyCachePruneAt = 0; private static readonly CHECK_AND_RECORD_WITHIN_QUOTA_SCRIPT = ` @@ -89,6 +94,16 @@ local score = tonumber(ARGV[3]) local member = ARGV[4] local allowOverQuota = ARGV[5] == '1' local ttlSeconds = ${RedisUsageStorage.RECORD_IDEMPOTENCY_TTL_SECONDS} +local recordedResult = redis.call('GET', dedupeKey) + +if recordedResult then + local recordedExceeded, recordedUsage = string.match(recordedResult, '^quota:([01]):(.+)$') + local recordedUsageNumber = recordedUsage and tonumber(recordedUsage) or nil + if recordedExceeded and recordedUsageNumber then + return { tonumber(recordedExceeded), recordedUsageNumber } + end +end + local records = redis.call('ZRANGEBYSCORE', usageKey, '-inf', '+inf') local currentUsage = 0 @@ -99,8 +114,9 @@ for _, existingMember in ipairs(records) do end end -if redis.call('EXISTS', dedupeKey) == 1 then - return { 0, currentUsage } +if recordedResult then + local legacyExceeded = currentUsage > quota + return { legacyExceeded and 1 or 0, currentUsage } end local newUsage = currentUsage + value @@ -108,9 +124,16 @@ local exceeded = newUsage > quota if (not exceeded) or allowOverQuota then redis.call('ZADD', usageKey, score, member) - redis.call('SET', dedupeKey, '1', 'EX', ttlSeconds) end +redis.call( + 'SET', + dedupeKey, + 'quota:' .. (exceeded and '1' or '0') .. ':' .. tostring(newUsage), + 'EX', + ttlSeconds +) + return { exceeded and 1 or 0, newUsage } `; @@ -198,16 +221,9 @@ return { exceeded and 1 or 0, newUsage } ); const score = options.usageRecord.timestamp.getTime(); const member = this.serializeUsageMember(options.usageRecord); - if (this.hasRecordedRecordKey(dedupeKey)) { - const records = await this.runRedisOperation("ZRANGEBYSCORE", () => - this.redis.zrangebyscore(key, Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY), - ); - const currentUsage = this.sumUsageMembers(records); - - return { - exceeded: false, - newUsage: currentUsage, - }; + const recordedResult = this.getRecordedQuotaResult(dedupeKey); + if (recordedResult) { + return recordedResult; } const [exceeded, newUsage] = await this.runRedisOperation("EVAL", () => @@ -218,9 +234,10 @@ return { exceeded and 1 or 0, newUsage } ), ); - if (exceeded !== 1 || options.allowOverQuota) { - this.rememberRecordIdempotencyKey(dedupeKey); - } + this.rememberRecordIdempotencyKey(dedupeKey, { + exceeded: exceeded === 1, + newUsage, + }); return { exceeded: exceeded === 1, @@ -374,26 +391,29 @@ return { exceeded and 1 or 0, newUsage } ]); } - private hasRecordedRecordKey(dedupeKey: string): boolean { + private getRecordedQuotaResult(dedupeKey: string): AtomicQuotaCheckResult | undefined { const now = Date.now(); this.pruneRecordedRecordKeysIfNeeded(now); - const expiresAt = this.recordedRecordKeys.get(dedupeKey); + const recordedResult = this.recordedRecordKeys.get(dedupeKey); - if (expiresAt === undefined) { - return false; + if (recordedResult === undefined) { + return undefined; } - if (expiresAt > now) { - return true; + if (recordedResult.expiresAt > now) { + return { + exceeded: recordedResult.exceeded, + newUsage: recordedResult.newUsage, + }; } this.recordedRecordKeys.delete(dedupeKey); - return false; + return undefined; } - private rememberRecordIdempotencyKey(dedupeKey: string): void { + private rememberRecordIdempotencyKey(dedupeKey: string, result: AtomicQuotaCheckResult): void { const now = Date.now(); this.pruneRecordedRecordKeysIfNeeded(now); @@ -407,10 +427,10 @@ return { exceeded and 1 or 0, newUsage } ); } - this.recordedRecordKeys.set( - dedupeKey, - now + RedisUsageStorage.RECORD_IDEMPOTENCY_TTL_MILLISECONDS, - ); + this.recordedRecordKeys.set(dedupeKey, { + ...result, + expiresAt: now + RedisUsageStorage.RECORD_IDEMPOTENCY_TTL_MILLISECONDS, + }); } private pruneRecordedRecordKeysIfNeeded(now: number): void { @@ -427,8 +447,8 @@ return { exceeded and 1 or 0, newUsage } } private pruneExpiredRecordedRecordKeys(now: number): void { - for (const [dedupeKey, expiresAt] of this.recordedRecordKeys) { - if (expiresAt <= now) { + for (const [dedupeKey, result] of this.recordedRecordKeys) { + if (result.expiresAt <= now) { this.recordedRecordKeys.delete(dedupeKey); } } diff --git a/packages/metering-core/src/libs/UsageStorage.ts b/packages/metering-core/src/libs/UsageStorage.ts index bdc28b6a6..11f2a93e3 100644 --- a/packages/metering-core/src/libs/UsageStorage.ts +++ b/packages/metering-core/src/libs/UsageStorage.ts @@ -22,9 +22,16 @@ export type AtomicQuotaCheckResult = { * 모든 메서드는 tenant 격리를 보장해야 함 */ export interface UsageStorage { + /** + * MeteringService가 lease 만료 후 persistence를 안전하게 재개할 수 있음을 선언합니다. + */ + readonly replayContract: "idempotent"; + /** * Usage 기록 (즉시 flush) * Redis Sorted Set에 저장 + * + * 동일한 tenantId, meterId, idempotencyKey 조합의 재시도는 사용량을 중복 기록하지 않아야 합니다. */ record(usage: UsageRecord): Promise; @@ -56,7 +63,11 @@ export interface UsageStorage { */ deleteUsageRecords?(options: UsageQueryOptions, records: UsageRecord[]): Promise; - checkAndRecordWithinQuota?(options: AtomicQuotaCheckOptions): Promise; + /** + * 동일한 tenantId, meterId, usageRecord.idempotencyKey 조합의 재시도는 사용량을 중복 기록하지 않고 + * 최초 호출과 동일한 quota 결과를 반환해야 합니다. + */ + checkAndRecordWithinQuota(options: AtomicQuotaCheckOptions): Promise; /** * 빌링 주기 리셋 diff --git a/packages/metering-core/src/libs/events/QuotaExceededEvent.ts b/packages/metering-core/src/libs/events/QuotaExceededEvent.ts index 22ee1d5f9..c074e495d 100644 --- a/packages/metering-core/src/libs/events/QuotaExceededEvent.ts +++ b/packages/metering-core/src/libs/events/QuotaExceededEvent.ts @@ -1,5 +1,26 @@ import { DomainEvent } from "@croco/events-core"; +import { createMeteringEventId } from "./eventIdentity"; +/** + * quota 초과 시 발행되는 도메인 이벤트입니다. + * + * @description + * 테넌트의 사용량이 설정된 quota를 초과했을 때 발행되는 이벤트입니다. + * + * @example + * ```typescript + * eventBus.publish( + * new QuotaExceededEvent( + * "tenant-123", + * "api_calls", + * 10000, + * 10000, + * "request-123", + * "operation-123", + * ), + * ); + * ``` + */ export class QuotaExceededEvent extends DomainEvent { static eventName = "metering.quota_exceeded"; @@ -8,7 +29,14 @@ export class QuotaExceededEvent extends DomainEvent { public readonly meterId: string, public readonly currentUsage: number, public readonly quota: number, + idempotencyKey?: string, + operationId?: string, ) { - super(); + void operationId; + super( + idempotencyKey === undefined + ? undefined + : createMeteringEventId(QuotaExceededEvent.eventName, tenantId, meterId, idempotencyKey), + ); } } diff --git a/packages/metering-core/src/libs/events/UsageRecordedEvent.ts b/packages/metering-core/src/libs/events/UsageRecordedEvent.ts index d619f5630..d04af2f4e 100644 --- a/packages/metering-core/src/libs/events/UsageRecordedEvent.ts +++ b/packages/metering-core/src/libs/events/UsageRecordedEvent.ts @@ -1,5 +1,26 @@ import { DomainEvent } from "@croco/events-core"; +import { createMeteringEventId } from "./eventIdentity"; +/** + * 사용량 기록 시 발행되는 도메인 이벤트입니다. + * + * @description + * 사용량이 성공적으로 기록되었을 때 발행되는 이벤트입니다. + * + * @example + * ```typescript + * eventBus.publish( + * new UsageRecordedEvent( + * "tenant-123", + * "api_calls", + * 1, + * "request-123", + * { endpoint: "/api/users" }, + * "operation-123", + * ), + * ); + * ``` + */ export class UsageRecordedEvent extends DomainEvent { static eventName = "metering.usage_recorded"; @@ -9,8 +30,10 @@ export class UsageRecordedEvent extends DomainEvent { public readonly value: number, public readonly idempotencyKey: string, metadata?: Record, + operationId?: string, ) { - super(); + void operationId; + super(createMeteringEventId(UsageRecordedEvent.eventName, tenantId, meterId, idempotencyKey)); if (metadata !== undefined) { this.metadata = { ...this.metadata, ...metadata }; } else { diff --git a/packages/metering-core/src/libs/events/eventIdentity.ts b/packages/metering-core/src/libs/events/eventIdentity.ts new file mode 100644 index 000000000..978387ceb --- /dev/null +++ b/packages/metering-core/src/libs/events/eventIdentity.ts @@ -0,0 +1,12 @@ +import { createHash } from "node:crypto"; + +export function createMeteringEventId( + eventName: string, + tenantId: string, + meterId: string, + idempotencyKey: string, +): string { + return createHash("sha256") + .update(JSON.stringify([eventName, tenantId, meterId, idempotencyKey])) + .digest("hex"); +} diff --git a/packages/metering-core/src/libs/problems/MeteringTransitionProblem.ts b/packages/metering-core/src/libs/problems/MeteringTransitionProblem.ts new file mode 100644 index 000000000..d05fa9da6 --- /dev/null +++ b/packages/metering-core/src/libs/problems/MeteringTransitionProblem.ts @@ -0,0 +1,18 @@ +import { Problem, ProblemCategory } from "@croco/problems-core"; + +export class MeteringTransitionProblem extends Problem { + constructor(transition: string, reason: string, idempotencyKey: string) { + super( + "metering/transition-conflict", + ProblemCategory.Conflict, + `Metering transition '${transition}' failed: ${reason}`, + { + extensions: { + idempotencyKey, + reason, + transition, + }, + }, + ); + } +} diff --git a/packages/metering-core/src/tests/IdempotencyManager.spec.ts b/packages/metering-core/src/tests/IdempotencyManager.spec.ts index 1a76792f5..32f7e6e94 100644 --- a/packages/metering-core/src/tests/IdempotencyManager.spec.ts +++ b/packages/metering-core/src/tests/IdempotencyManager.spec.ts @@ -1,6 +1,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { IdempotencyManager } from "../libs/IdempotencyManager"; import { DuplicateRecordProblem } from "../libs/problems/DuplicateRecordProblem"; +import { MeteringTransitionProblem } from "../libs/problems/MeteringTransitionProblem"; import type { IdempotencyClaim } from "../libs/IdempotencyManager"; import type { RedisClient } from "../libs/RedisClient"; @@ -25,6 +26,7 @@ function createLeaseRedis(): { }; const redis: RedisClient = { + scriptKeyAccess: "multi-key", zadd: vi.fn(), zrangebyscore: vi.fn(), set: async (key, value, _mode, _expireMode, expire) => { @@ -63,12 +65,162 @@ function createLeaseRedis(): { }; } +function createStagedRedis(): { + redis: RedisClient; + expireLease(): void; + readState(): { status: string; token?: string } | undefined; +} { + let leaseExpired = false; + let lifecycleValue: string | undefined; + let state: + | { + status: "PROCESSING" | "PUBLISHING" | "EVENTS_PENDING" | "COMPLETED"; + token?: string; + operationId?: string; + delivery?: string; + } + | undefined; + + const redis: RedisClient = { + scriptKeyAccess: "multi-key", + zadd: vi.fn(), + zrangebyscore: vi.fn(), + set: vi.fn(), + eval: async ( + script: string, + _keys: string[], + args: Array, + ) => { + if (script.includes("state.status == 'EVENTS_PENDING'")) { + const token = String(args[0]); + const operationId = String(args[3]); + if (!state) { + state = { status: "PROCESSING", token, operationId }; + lifecycleValue = String(args[6]); + return [1, "", operationId] as unknown as TResult; + } + if ( + state.status === "EVENTS_PENDING" || + ((state.status === "PROCESSING" || state.status === "PUBLISHING") && leaseExpired) + ) { + state.status = state.delivery ? "PUBLISHING" : "PROCESSING"; + state.token = token; + state.operationId ??= operationId; + lifecycleValue = String(args[6]); + leaseExpired = false; + return [1, state.delivery ?? "", state.operationId] as unknown as TResult; + } + return [0, "", ""] as unknown as TResult; + } + + if (script.includes("state.delivery = ARGV[2]")) { + if (!state) { + return [0, "MISSING"] as unknown as TResult; + } + if (state.status !== "PROCESSING") { + return [0, `STATUS:${state.status}`] as unknown as TResult; + } + if (state.token !== String(args[0])) { + return [0, "TOKEN"] as unknown as TResult; + } + state.status = "PUBLISHING"; + state.delivery = String(args[1]); + return [1, "OK"] as unknown as TResult; + } + + if (script.includes("state.leaseExpiresAt = 0")) { + if (!state) { + return [0, "MISSING"] as unknown as TResult; + } + if (state.status !== "PROCESSING") { + return [0, `STATUS:${state.status}`] as unknown as TResult; + } + if (state.token !== String(args[0])) { + return [0, "TOKEN"] as unknown as TResult; + } + delete state.token; + leaseExpired = true; + return [1, "OK"] as unknown as TResult; + } + + if (script.includes("state.status = 'EVENTS_PENDING'")) { + if (!state) { + return [0, "MISSING"] as unknown as TResult; + } + if (state.status === "COMPLETED") { + return [1, "ALREADY_COMPLETED"] as unknown as TResult; + } + if (state.status !== "PUBLISHING") { + return [0, `STATUS:${state.status}`] as unknown as TResult; + } + if (state.token !== String(args[0])) { + return [0, "TOKEN"] as unknown as TResult; + } + + state.status = "EVENTS_PENDING"; + delete state.token; + return [1, "OK"] as unknown as TResult; + } + + if (script.includes('{"status":"COMPLETED"}')) { + if (!state) { + return [0, "MISSING"] as unknown as TResult; + } + if (state.status === "COMPLETED") { + return [1, "ALREADY_COMPLETED"] as unknown as TResult; + } + if (state.status !== "PUBLISHING") { + return [0, `STATUS:${state.status}`] as unknown as TResult; + } + if (state.token !== String(args[0])) { + return [0, "TOKEN"] as unknown as TResult; + } + state = { status: "COMPLETED" }; + lifecycleValue = String(args[2]); + return [1, "OK"] as unknown as TResult; + } + + if (script.includes("redis.call('DEL', KEYS[2])")) { + if (!state) { + return [0, "MISSING"] as unknown as TResult; + } + if (state.status !== "PROCESSING") { + return [0, `STATUS:${state.status}`] as unknown as TResult; + } + if (state.token !== String(args[0])) { + return [0, "TOKEN"] as unknown as TResult; + } + if (lifecycleValue !== String(args[1])) { + return [0, "LIFECYCLE"] as unknown as TResult; + } + + state = undefined; + lifecycleValue = undefined; + return [1, "OK"] as unknown as TResult; + } + + throw new Error(`Unsupported staged redis script: ${script}`); + }, + }; + + return { + redis, + expireLease(): void { + leaseExpired = true; + }, + readState() { + return state ? { status: state.status, token: state.token } : undefined; + }, + }; +} + describe("IdempotencyManager", () => { let manager!: IdempotencyManager; let mockRedis!: RedisClient; beforeEach(() => { mockRedis = { + scriptKeyAccess: "multi-key", zadd: vi.fn(), zrangebyscore: vi.fn(), set: vi.fn(), @@ -218,7 +370,7 @@ describe("IdempotencyManager", () => { describe("completeProcessing", () => { it("should mark in-progress key as completed", async () => { const claim = "claim-1" as IdempotencyClaim; - vi.mocked(mockRedis.eval).mockResolvedValue([1]); + vi.mocked(mockRedis.eval).mockResolvedValue([1, "OK"]); await manager.completeProcessing("tenant-1", "api_calls", "key-123", claim); @@ -275,6 +427,276 @@ describe("IdempotencyManager", () => { expect(leaseRedis.read(key)).toBe("COMPLETED"); }); + describe("metering delivery state", () => { + const deliveryClaim = "claim-token" as IdempotencyClaim; + const delivery = { + usageRecord: { + id: "usage-1", + tenantId: "tenant-1", + meterId: "api_calls", + value: 1, + timestamp: "2026-07-30T00:00:00.000Z", + idempotencyKey: "key-123", + }, + }; + + it("should claim a new processing lease", async () => { + vi.mocked(mockRedis.eval).mockResolvedValue([1, "", "operation-1"]); + + const claim = await manager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_calls", + "key-123", + ); + + expect(claim.token).toMatch(/^[0-9A-Z]{26}$/); + expect(claim.operationId).toBe("operation-1"); + expect(claim.delivery).toBeUndefined(); + expect(mockRedis.eval).toHaveBeenCalledWith( + expect.stringContaining("state.status == 'EVENTS_PENDING'"), + ["idem2:delivery:tenant-1:api_calls:key-123", "idem2:lifecycle:tenant-1:api_calls:key-123"], + [ + claim.token, + 30_000, + 86_400, + expect.stringMatching(/^[0-9A-Z]{26}$/), + "IN_PROGRESS:", + "COMPLETED", + `IN_PROGRESS:${claim.token}`, + ], + ); + }); + + it("should restore a durably pending delivery when claiming its lease", async () => { + vi.mocked(mockRedis.eval).mockResolvedValue([1, JSON.stringify(delivery), "operation-1"]); + + const claim = await manager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_calls", + "key-123", + ); + + expect(claim.delivery).toEqual(delivery); + }); + + it("should preserve opaque delivery JSON across publication retries", async () => { + const stagedRedis = createStagedRedis(); + const stagedManager = new IdempotencyManager(stagedRedis.redis, 60, 1_000); + const firstClaim = await stagedManager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_calls", + "key-123", + ); + const opaqueDelivery = { + ...delivery, + usageRecord: { + ...delivery.usageRecord, + metadata: { empty: [], nested: { empty: [] } }, + }, + }; + + await stagedManager.markMeteringEventsPublishing( + "tenant-1", + "api_calls", + "key-123", + firstClaim.token, + opaqueDelivery, + ); + await stagedManager.releaseMeteringEvents( + "tenant-1", + "api_calls", + "key-123", + firstClaim.token, + ); + + const retryClaim = await stagedManager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_calls", + "key-123", + ); + expect(retryClaim.delivery).toEqual(opaqueDelivery); + }); + + it("should immediately release processing for safe persistence replay", async () => { + const stagedRedis = createStagedRedis(); + const stagedManager = new IdempotencyManager(stagedRedis.redis, 60, 1_000); + const firstClaim = await stagedManager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_calls", + "key-123", + ); + + await stagedManager.releaseMeteringProcessing( + "tenant-1", + "api_calls", + "key-123", + firstClaim.token, + ); + const retryClaim = await stagedManager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_calls", + "key-123", + ); + + expect(retryClaim.operationId).toBe(firstClaim.operationId); + expect(retryClaim.token).not.toBe(firstClaim.token); + expect(retryClaim.delivery).toBeUndefined(); + }); + + it("should reject a delivery lease held by another caller", async () => { + vi.mocked(mockRedis.eval).mockResolvedValue([0, "", ""]); + + await expect( + manager.claimMeteringProcessingOrThrow("tenant-1", "api_calls", "key-123"), + ).rejects.toThrow(DuplicateRecordProblem); + }); + + it("should persist canonical delivery before publication", async () => { + vi.mocked(mockRedis.eval).mockResolvedValue([1, "OK"]); + + await manager.markMeteringEventsPublishing( + "tenant-1", + "api_calls", + "key-123", + deliveryClaim, + delivery, + ); + + expect(mockRedis.eval).toHaveBeenCalledWith( + expect.stringContaining("state.status = 'PUBLISHING'"), + ["idem2:delivery:tenant-1:api_calls:key-123"], + [deliveryClaim, JSON.stringify(delivery), 30_000, 86_400], + ); + }); + + it("should reject a stale publisher transition", async () => { + vi.mocked(mockRedis.eval).mockResolvedValue([0, "TOKEN"]); + + const transition = expect( + manager.markMeteringEventsPublishing( + "tenant-1", + "api_calls", + "key-123", + "stale-token" as IdempotencyClaim, + delivery, + ), + ).rejects; + + await transition.toThrow(MeteringTransitionProblem); + await transition.toMatchObject({ + code: "metering/transition-conflict", + extensions: { + idempotencyKey: "key-123", + reason: "TOKEN", + transition: "mark-events-publishing", + }, + }); + }); + + it("should release failed publication for an exclusive retry", async () => { + vi.mocked(mockRedis.eval).mockResolvedValue([1, "OK"]); + + await manager.releaseMeteringEvents("tenant-1", "api_calls", "key-123", deliveryClaim); + + expect(mockRedis.eval).toHaveBeenCalledWith( + expect.stringContaining("state.status = 'EVENTS_PENDING'"), + ["idem2:delivery:tenant-1:api_calls:key-123"], + [deliveryClaim, 86_400], + ); + }); + + it("should complete only the current publication claim", async () => { + vi.mocked(mockRedis.eval).mockResolvedValue([1, "OK"]); + + await manager.completeMeteringProcessing("tenant-1", "api_calls", "key-123", deliveryClaim); + + expect(mockRedis.eval).toHaveBeenCalledWith( + expect.stringContaining(`'{"status":"COMPLETED"}'`), + ["idem2:delivery:tenant-1:api_calls:key-123", "idem2:lifecycle:tenant-1:api_calls:key-123"], + [deliveryClaim, 86_400, "COMPLETED"], + ); + }); + + it("should keep active state alive longer than its processing lease", async () => { + manager = new IdempotencyManager(mockRedis, 1, 30_000); + vi.mocked(mockRedis.eval).mockResolvedValue([1, "", "operation-1"]); + + await manager.claimMeteringProcessingOrThrow("tenant-1", "api_calls", "key-123"); + + expect(vi.mocked(mockRedis.eval).mock.calls[0]?.[2][2]).toBe(31); + }); + + it("should fence every stale staged transition after lease reacquisition", async () => { + const stagedRedis = createStagedRedis(); + const stagedManager = new IdempotencyManager(stagedRedis.redis, 60, 1_000); + const firstClaim = await stagedManager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_calls", + "key-123", + ); + stagedRedis.expireLease(); + const currentClaim = await stagedManager.claimMeteringProcessingOrThrow( + "tenant-1", + "api_calls", + "key-123", + ); + + expect(currentClaim.token).not.toBe(firstClaim.token); + await expect( + stagedManager.markMeteringEventsPublishing( + "tenant-1", + "api_calls", + "key-123", + firstClaim.token, + delivery, + ), + ).rejects.toThrow(MeteringTransitionProblem); + await expect( + stagedManager.abortMeteringProcessing("tenant-1", "api_calls", "key-123", firstClaim.token), + ).rejects.toThrow(MeteringTransitionProblem); + expect(stagedRedis.readState()).toEqual({ + status: "PROCESSING", + token: currentClaim.token, + }); + + await stagedManager.markMeteringEventsPublishing( + "tenant-1", + "api_calls", + "key-123", + currentClaim.token, + delivery, + ); + await expect( + stagedManager.releaseMeteringEvents("tenant-1", "api_calls", "key-123", firstClaim.token), + ).rejects.toThrow(MeteringTransitionProblem); + await expect( + stagedManager.completeMeteringProcessing( + "tenant-1", + "api_calls", + "key-123", + firstClaim.token, + ), + ).rejects.toThrow(MeteringTransitionProblem); + expect(stagedRedis.readState()).toEqual({ + status: "PUBLISHING", + token: currentClaim.token, + }); + + await stagedManager.completeMeteringProcessing( + "tenant-1", + "api_calls", + "key-123", + currentClaim.token, + ); + expect(stagedRedis.readState()).toEqual({ status: "COMPLETED", token: undefined }); + + await expect( + stagedManager.releaseMeteringEvents("tenant-1", "api_calls", "key-123", currentClaim.token), + ).resolves.toBeUndefined(); + expect(stagedRedis.readState()).toEqual({ status: "COMPLETED", token: undefined }); + }); + }); + describe("checkAndMarkOrThrow", () => { it("should not throw for new key", async () => { vi.mocked(mockRedis.set).mockResolvedValue("OK"); diff --git a/packages/metering-core/src/tests/MeteringService.spec.ts b/packages/metering-core/src/tests/MeteringService.spec.ts index c56575ca1..c371ccdf5 100644 --- a/packages/metering-core/src/tests/MeteringService.spec.ts +++ b/packages/metering-core/src/tests/MeteringService.spec.ts @@ -2,8 +2,11 @@ import type { EventBus } from "@croco/events-core"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { QuotaExceededEvent } from "../libs/events/QuotaExceededEvent"; import { UsageRecordedEvent } from "../libs/events/UsageRecordedEvent"; -import type { IdempotencyManager } from "../libs/IdempotencyManager"; -import type { IdempotencyClaim } from "../libs/IdempotencyManager"; +import type { + IdempotencyClaim, + IdempotencyManager, + PendingMeteringDelivery, +} from "../libs/IdempotencyManager"; import { MeteringService } from "../libs/MeteringService"; import type { MeterRecordInput } from "../libs/MeterRef"; import { defineMeter, dimension } from "../libs/MeterRef"; @@ -21,7 +24,6 @@ describe("MeteringService", () => { let mockStorage!: UsageStorage; let mockIdempotency!: IdempotencyManager; let mockEventBus!: EventBus; - const idempotencyClaim = "claim-1" as IdempotencyClaim; const createMeter = (overrides: Partial = {}): MeterDefinition => ({ id: "meter-123", @@ -46,6 +48,7 @@ describe("MeteringService", () => { } as unknown as MeterRegistry; mockStorage = { + replayContract: "idempotent", record: vi.fn().mockResolvedValue(undefined), getUsage: vi.fn().mockResolvedValue(0), isIdempotent: vi.fn().mockResolvedValue(true), @@ -57,10 +60,18 @@ describe("MeteringService", () => { ensureIdempotencyKey: vi.fn().mockReturnValue("generated-key"), checkAndMark: vi.fn().mockResolvedValue(true), checkAndMarkOrThrow: vi.fn().mockResolvedValue(undefined), - beginProcessing: vi.fn().mockResolvedValue(idempotencyClaim), - beginProcessingOrThrow: vi.fn().mockResolvedValue(idempotencyClaim), + beginProcessing: vi.fn().mockResolvedValue(true), + beginProcessingOrThrow: vi.fn().mockResolvedValue(undefined), completeProcessing: vi.fn().mockResolvedValue(undefined), abortProcessing: vi.fn().mockResolvedValue(undefined), + claimMeteringProcessingOrThrow: vi + .fn() + .mockResolvedValue({ operationId: "operation-id", token: "claim-token" }), + markMeteringEventsPublishing: vi.fn().mockResolvedValue(undefined), + releaseMeteringProcessing: vi.fn().mockResolvedValue(undefined), + releaseMeteringEvents: vi.fn().mockResolvedValue(undefined), + completeMeteringProcessing: vi.fn().mockResolvedValue(undefined), + abortMeteringProcessing: vi.fn().mockResolvedValue(undefined), } as unknown as IdempotencyManager; mockEventBus = { @@ -91,16 +102,16 @@ describe("MeteringService", () => { expect(result.meterId).toBe("api_calls"); expect(result.value).toBe(5); expect(result.idempotencyKey).toBe("generated-key"); - expect(mockIdempotency.beginProcessingOrThrow).toHaveBeenCalledWith( + expect(mockIdempotency.claimMeteringProcessingOrThrow).toHaveBeenCalledWith( "tenant-1", "api_calls", "generated-key", ); - expect(mockIdempotency.completeProcessing).toHaveBeenCalledWith( + expect(mockIdempotency.completeMeteringProcessing).toHaveBeenCalledWith( "tenant-1", "api_calls", "generated-key", - idempotencyClaim, + "claim-token", ); expect(mockStorage.checkAndRecordWithinQuota).toHaveBeenCalledTimes(1); }); @@ -340,7 +351,7 @@ describe("MeteringService", () => { it("should throw DuplicateRecordProblem for duplicate key", async () => { const meter = createMeter(); vi.mocked(mockRegistry.getOrThrow).mockResolvedValue(meter); - vi.mocked(mockIdempotency.beginProcessingOrThrow).mockRejectedValue( + vi.mocked(mockIdempotency.claimMeteringProcessingOrThrow).mockRejectedValue( new DuplicateRecordProblem("dup-key"), ); @@ -371,13 +382,14 @@ describe("MeteringService", () => { }), ).rejects.toThrow(QuotaExceededProblem); - expect(mockIdempotency.completeProcessing).toHaveBeenCalledWith( + expect(mockIdempotency.completeMeteringProcessing).toHaveBeenCalledWith( "tenant-1", "api_calls", "generated-key", - idempotencyClaim, + "claim-token", ); - expect(mockIdempotency.abortProcessing).not.toHaveBeenCalled(); + expect(mockIdempotency.abortMeteringProcessing).not.toHaveBeenCalled(); + expect(mockIdempotency.releaseMeteringEvents).not.toHaveBeenCalled(); }); it("BUG-11 동시 할당량 소진에서 atomic storage 결과를 그대로 반영한다", async () => { @@ -470,11 +482,11 @@ describe("MeteringService", () => { }); expect(result.value).toBe(1000000); - expect(mockIdempotency.completeProcessing).toHaveBeenCalledWith( + expect(mockIdempotency.completeMeteringProcessing).toHaveBeenCalledWith( "tenant-1", "api_calls", "generated-key", - idempotencyClaim, + "claim-token", ); }); @@ -489,13 +501,13 @@ describe("MeteringService", () => { storageError, ); - expect(mockIdempotency.abortProcessing).toHaveBeenCalledWith( + expect(mockIdempotency.abortMeteringProcessing).toHaveBeenCalledWith( "tenant-1", "api_calls", "generated-key", - idempotencyClaim, + "claim-token", ); - expect(mockIdempotency.completeProcessing).not.toHaveBeenCalled(); + expect(mockIdempotency.completeMeteringProcessing).not.toHaveBeenCalled(); }); it("should publish UsageRecordedEvent", async () => { @@ -566,7 +578,103 @@ describe("MeteringService", () => { expect(result.metadata).toEqual({ userId: "user-1", action: "create" }); }); - it("BUG-12 publish 실패 후 retry 시 재진입 가능해야 한다 - quota branch", async () => { + it("should release non-quota processing state when delivery staging fails after persistence", async () => { + vi.mocked(mockRegistry.getOrThrow).mockResolvedValue(createMeter({ quota: undefined })); + vi.mocked(mockIdempotency.markMeteringEventsPublishing) + .mockRejectedValueOnce(new Error("staging unavailable")) + .mockResolvedValueOnce(undefined); + const persistedOperations = new Set(); + let recordCallCount = 0; + vi.mocked(mockStorage.record).mockImplementation(async (usage) => { + recordCallCount += 1; + persistedOperations.add(usage.idempotencyKey); + }); + + await expect( + service.record({ + tenantId: "tenant-1", + meterId: "api_calls", + value: 5, + idempotencyKey: "staging-failure", + }), + ).rejects.toThrow("staging unavailable"); + + expect(mockStorage.record).toHaveBeenCalledTimes(1); + expect(mockIdempotency.abortMeteringProcessing).not.toHaveBeenCalled(); + expect(mockIdempotency.releaseMeteringEvents).not.toHaveBeenCalled(); + expect(mockIdempotency.releaseMeteringProcessing).toHaveBeenCalledTimes(1); + + const recovered = await service.record({ + tenantId: "tenant-1", + meterId: "api_calls", + value: 5, + idempotencyKey: "staging-failure", + }); + + expect(recovered.value).toBe(5); + expect(persistedOperations.size).toBe(1); + expect(recordCallCount).toBe(2); + expect(mockStorage.record).toHaveBeenCalledTimes(2); + expect(mockEventBus.publish).toHaveBeenCalledTimes(1); + }); + + it("should release quota processing state when delivery staging fails after persistence", async () => { + const checkAndRecordWithinQuota = mockStorage.checkAndRecordWithinQuota; + if (!checkAndRecordWithinQuota) { + throw new Error("Expected atomic quota check support"); + } + vi.mocked(mockRegistry.getOrThrow).mockResolvedValue( + createMeter({ quota: 100, allowOverQuota: false }), + ); + const persistedOperations = new Map(); + let quotaCallCount = 0; + vi.mocked(checkAndRecordWithinQuota).mockImplementation(async ({ usageRecord }) => { + quotaCallCount += 1; + const persisted = persistedOperations.get(usageRecord.idempotencyKey); + if (persisted) { + return persisted; + } + const result = { + exceeded: true, + newUsage: 105, + }; + persistedOperations.set(usageRecord.idempotencyKey, result); + return result; + }); + vi.mocked(mockIdempotency.markMeteringEventsPublishing) + .mockRejectedValueOnce(new Error("staging unavailable")) + .mockResolvedValueOnce(undefined); + + await expect( + service.record({ + tenantId: "tenant-1", + meterId: "api_calls", + value: 5, + idempotencyKey: "quota-staging-failure", + }), + ).rejects.toThrow("staging unavailable"); + + expect(checkAndRecordWithinQuota).toHaveBeenCalledTimes(1); + expect(mockIdempotency.abortMeteringProcessing).not.toHaveBeenCalled(); + expect(mockIdempotency.releaseMeteringEvents).not.toHaveBeenCalled(); + expect(mockIdempotency.releaseMeteringProcessing).toHaveBeenCalledTimes(1); + + await expect( + service.record({ + tenantId: "tenant-1", + meterId: "api_calls", + value: 5, + idempotencyKey: "quota-staging-failure", + }), + ).rejects.toMatchObject({ code: "metering/quota-exceeded" }); + + expect(persistedOperations.size).toBe(1); + expect(quotaCallCount).toBe(2); + expect(checkAndRecordWithinQuota).toHaveBeenCalledTimes(2); + expect(mockEventBus.publish).toHaveBeenCalledTimes(1); + }); + + it("should recover quota event publication without duplicating usage", async () => { const meter = createMeter({ quota: 100, allowOverQuota: true }); const checkAndRecordWithinQuota = mockStorage.checkAndRecordWithinQuota; @@ -575,18 +683,41 @@ describe("MeteringService", () => { } vi.mocked(mockRegistry.getOrThrow).mockResolvedValue(meter); - vi.mocked(checkAndRecordWithinQuota).mockResolvedValue({ - exceeded: true, - newUsage: 50, + const recordedKeys = new Set(); + let quotaCallCount = 0; + vi.mocked(checkAndRecordWithinQuota).mockImplementation(async ({ usageRecord }) => { + quotaCallCount += 1; + recordedKeys.add(usageRecord.idempotencyKey); + return { + exceeded: true, + newUsage: 105, + }; }); vi.mocked(mockIdempotency.ensureIdempotencyKey).mockImplementation( (key?: string) => key ?? "generated-key", ); + let pendingDelivery: PendingMeteringDelivery | undefined; + let claimCount = 0; + vi.mocked(mockIdempotency.claimMeteringProcessingOrThrow).mockImplementation(async () => { + claimCount += 1; + return { + operationId: "quota-operation", + token: `claim-${claimCount}` as IdempotencyClaim, + delivery: pendingDelivery, + }; + }); + vi.mocked(mockIdempotency.markMeteringEventsPublishing).mockImplementation( + async (_tenantId, _meterId, _idempotencyKey, _token, delivery) => { + pendingDelivery = delivery; + }, + ); + vi.mocked(mockIdempotency.completeMeteringProcessing).mockImplementation(async () => { + pendingDelivery = undefined; + }); - let firstCall = true; - vi.mocked(mockEventBus.publish).mockImplementation(async () => { - if (firstCall) { - firstCall = false; + const publish = vi.mocked(mockEventBus.publish); + publish.mockImplementation(async () => { + if (publish.mock.calls.length === 1) { throw new Error("publish failure"); } }); @@ -600,30 +731,69 @@ describe("MeteringService", () => { }), ).rejects.toThrow("publish failure"); - vi.mocked(mockIdempotency.beginProcessing).mockResolvedValueOnce(null); - const result = await service.record({ tenantId: "tenant-1", meterId: "api_calls", - value: 5, + value: 999, idempotencyKey: "idem-publish-fail-quota", }); expect(result).toBeDefined(); expect(result.idempotencyKey).toBe("idem-publish-fail-quota"); + expect(result.value).toBe(5); + expect(quotaCallCount).toBe(1); + expect(recordedKeys).toEqual(new Set(["idem-publish-fail-quota"])); + expect(mockRegistry.getOrThrow).toHaveBeenCalledTimes(1); + expect(mockIdempotency.abortMeteringProcessing).not.toHaveBeenCalled(); + expect(mockIdempotency.releaseMeteringEvents).toHaveBeenCalledTimes(1); + expect(mockIdempotency.markMeteringEventsPublishing).toHaveBeenCalledTimes(1); + expect(mockIdempotency.completeMeteringProcessing).toHaveBeenCalledTimes(1); + + const firstQuotaEvent = publish.mock.calls[0]?.[0]; + const retriedQuotaEvent = publish.mock.calls[1]?.[0]; + expect(firstQuotaEvent).toBeInstanceOf(QuotaExceededEvent); + expect(retriedQuotaEvent).toBeInstanceOf(QuotaExceededEvent); + expect(retriedQuotaEvent?.eventId).toBe(firstQuotaEvent?.eventId); + expect(publish.mock.calls[2]?.[0]).toBeInstanceOf(UsageRecordedEvent); + expect(publish.mock.calls[2]?.[0]).toMatchObject({ value: 5 }); }); - it("BUG-12 publish 실패 후 retry 시 재진입 가능해야 한다 - non-quota branch", async () => { + it("should recover usage event publication without duplicating non-quota usage", async () => { const meter = createMeter({ quota: undefined }); vi.mocked(mockRegistry.getOrThrow).mockResolvedValue(meter); vi.mocked(mockIdempotency.ensureIdempotencyKey).mockImplementation( (key?: string) => key ?? "generated-key", ); + let pendingDelivery: PendingMeteringDelivery | undefined; + let claimCount = 0; + vi.mocked(mockIdempotency.claimMeteringProcessingOrThrow).mockImplementation(async () => { + claimCount += 1; + return { + operationId: "usage-operation", + token: `claim-${claimCount}` as IdempotencyClaim, + delivery: pendingDelivery, + }; + }); + vi.mocked(mockIdempotency.markMeteringEventsPublishing).mockImplementation( + async (_tenantId, _meterId, _idempotencyKey, _token, delivery) => { + pendingDelivery = delivery; + }, + ); + vi.mocked(mockIdempotency.completeMeteringProcessing).mockImplementation(async () => { + pendingDelivery = undefined; + }); + const recordedKeys = new Set(); + let persistedUsageCount = 0; + vi.mocked(mockStorage.record).mockImplementation(async (usage) => { + if (!recordedKeys.has(usage.idempotencyKey)) { + recordedKeys.add(usage.idempotencyKey); + persistedUsageCount += 1; + } + }); - let firstCall = true; - vi.mocked(mockEventBus.publish).mockImplementation(async () => { - if (firstCall) { - firstCall = false; + const publish = vi.mocked(mockEventBus.publish); + publish.mockImplementation(async () => { + if (publish.mock.calls.length === 1) { throw new Error("publish failure"); } }); @@ -637,17 +807,29 @@ describe("MeteringService", () => { }), ).rejects.toThrow("publish failure"); - vi.mocked(mockIdempotency.beginProcessing).mockResolvedValueOnce(null); - const result = await service.record({ tenantId: "tenant-1", meterId: "api_calls", - value: 1, + value: 999, idempotencyKey: "idem-publish-fail-non-quota", }); expect(result).toBeDefined(); expect(result.idempotencyKey).toBe("idem-publish-fail-non-quota"); + expect(result.value).toBe(1); + expect(persistedUsageCount).toBe(1); + expect(mockRegistry.getOrThrow).toHaveBeenCalledTimes(1); + expect(mockIdempotency.abortMeteringProcessing).not.toHaveBeenCalled(); + expect(mockIdempotency.releaseMeteringEvents).toHaveBeenCalledTimes(1); + expect(mockIdempotency.markMeteringEventsPublishing).toHaveBeenCalledTimes(1); + expect(mockIdempotency.completeMeteringProcessing).toHaveBeenCalledTimes(1); + + const firstUsageEvent = publish.mock.calls[0]?.[0]; + const retriedUsageEvent = publish.mock.calls[1]?.[0]; + expect(firstUsageEvent).toBeInstanceOf(UsageRecordedEvent); + expect(retriedUsageEvent).toBeInstanceOf(UsageRecordedEvent); + expect(retriedUsageEvent?.eventId).toBe(firstUsageEvent?.eventId); + expect(retriedUsageEvent).toMatchObject({ value: 1 }); }); }); diff --git a/packages/metering-core/src/tests/QuotaManager.spec.ts b/packages/metering-core/src/tests/QuotaManager.spec.ts index a205e2271..32c8e81d8 100644 --- a/packages/metering-core/src/tests/QuotaManager.spec.ts +++ b/packages/metering-core/src/tests/QuotaManager.spec.ts @@ -1,5 +1,4 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import { AtomicQuotaNotSupportedProblem } from "../libs/problems/AtomicQuotaNotSupportedProblem"; import { QuotaExceededProblem } from "../libs/problems/QuotaExceededProblem"; import { QuotaManager } from "../libs/QuotaManager"; import type { UsageRecord } from "../libs/types"; @@ -21,10 +20,12 @@ describe("QuotaManager", () => { beforeEach(() => { mockStorage = { + replayContract: "idempotent", record: vi.fn().mockResolvedValue(undefined), getUsage: vi.fn().mockResolvedValue(0), isIdempotent: vi.fn().mockResolvedValue(true), fetchUsageRecords: vi.fn().mockResolvedValue([]), + checkAndRecordWithinQuota: vi.fn().mockResolvedValue({ exceeded: false, newUsage: 8 }), }; quotaManager = new QuotaManager({ usageStorage: mockStorage }); @@ -58,19 +59,6 @@ describe("QuotaManager", () => { }); }); - it("should throw when storage does not support atomic quota checks", async () => { - await expect( - quotaManager.checkAndRecord({ - tenantId: "tenant-1", - meterId: "api_calls", - value: 4, - quota: 10, - allowOverQuota: false, - usageRecord: createUsageRecord(), - }), - ).rejects.toThrow(AtomicQuotaNotSupportedProblem); - }); - it("should return exceeded result from atomic storage", async () => { const usageRecord = createUsageRecord(); mockStorage.checkAndRecordWithinQuota = vi.fn().mockResolvedValue({ diff --git a/packages/metering-core/src/tests/RedisMetering.integration.spec.ts b/packages/metering-core/src/tests/RedisMetering.integration.spec.ts index 992d7ac28..d669b9f0a 100644 --- a/packages/metering-core/src/tests/RedisMetering.integration.spec.ts +++ b/packages/metering-core/src/tests/RedisMetering.integration.spec.ts @@ -19,6 +19,7 @@ function createRedisClient( let shouldThrowAfterEval = throwAfterNextEval; return { + scriptKeyAccess: "multi-key", eval: async ( script: string, keys: string[], @@ -150,6 +151,7 @@ describe.skipIf(!realResourcesEnabled)("Redis metering composition", () => { const keys = (await connection.client.keys("*")).filter((key) => key.includes("idem2:")).sort(); expect(keys).toEqual( [ + `${connection.keyPrefix}idem2:delivery:tenant-1:${meterId}:${idempotencyKey}`, `${connection.keyPrefix}idem2:lifecycle:tenant-1:${meterId}:${idempotencyKey}`, `${connection.keyPrefix}idem2:record:tenant-1:${meterId}:${idempotencyKey}`, ].sort(), @@ -167,7 +169,7 @@ describe.skipIf(!realResourcesEnabled)("Redis metering composition", () => { await expect(service.record(input)).resolves.toMatchObject(input); await expectSeparateIdempotencyKeys(input.meterId, input.idempotencyKey); - await expect(service.record(input)).rejects.toBeInstanceOf(DuplicateRecordProblem); + await expect(service.record(input)).rejects.toThrow(DuplicateRecordProblem); await expect( service.getUsage({ tenantId: input.tenantId, @@ -188,7 +190,7 @@ describe.skipIf(!realResourcesEnabled)("Redis metering composition", () => { await expect(service.record(input)).resolves.toMatchObject(input); await expectSeparateIdempotencyKeys(input.meterId, input.idempotencyKey); - await expect(service.record(input)).rejects.toBeInstanceOf(DuplicateRecordProblem); + await expect(service.record(input)).rejects.toThrow(DuplicateRecordProblem); await expect( service.getUsage({ tenantId: input.tenantId, @@ -217,7 +219,7 @@ describe.skipIf(!realResourcesEnabled)("Redis metering composition", () => { "-zadd", ); const restrictedClient = connection.client.duplicate({ - keyPrefix: "", + keyPrefix: connection.keyPrefix, username: zaddDeniedUser, password: zaddDeniedPassword, }); @@ -227,7 +229,9 @@ describe.skipIf(!realResourcesEnabled)("Redis metering composition", () => { const restrictedStorage = new RedisUsageStorage( createRedisClient({ ...connection, client: restrictedClient }), ); - await expect(restrictedStorage.record(record)).rejects.toMatchObject({ + const failedRecord = restrictedStorage.record(record); + await expect(failedRecord).rejects.toThrow(); + await expect(failedRecord).rejects.toMatchObject({ code: "metering/redis-error", extensions: { operation: "EVAL" }, }); @@ -256,7 +260,9 @@ describe.skipIf(!realResourcesEnabled)("Redis metering composition", () => { const dedupeKey = "idem2:record:tenant-atomic-record:api_calls:ambiguous-response"; const storage = new RedisUsageStorage(createRedisClient(connection, true)); - await expect(storage.record(record)).rejects.toMatchObject({ + const ambiguousRecord = storage.record(record); + await expect(ambiguousRecord).rejects.toThrow(); + await expect(ambiguousRecord).rejects.toMatchObject({ code: "metering/redis-error", extensions: { operation: "EVAL" }, }); diff --git a/packages/metering-core/src/tests/RedisUsageStorage.spec.ts b/packages/metering-core/src/tests/RedisUsageStorage.spec.ts index 34fb4cf92..11faeaa35 100644 --- a/packages/metering-core/src/tests/RedisUsageStorage.spec.ts +++ b/packages/metering-core/src/tests/RedisUsageStorage.spec.ts @@ -23,6 +23,7 @@ describe("RedisUsageStorage", () => { beforeEach(() => { mockRedis = { + scriptKeyAccess: "multi-key", zadd: vi.fn().mockResolvedValue(1), zrangebyscore: vi.fn().mockResolvedValue([]), set: vi.fn().mockResolvedValue("OK"), @@ -44,6 +45,7 @@ describe("RedisUsageStorage", () => { const scripts: string[] = []; const snapshots = new Map(); const redis: RedisClient = { + scriptKeyAccess: "multi-key", zadd: vi.fn().mockResolvedValue(1), zrangebyscore: vi.fn().mockResolvedValue([]), set: vi.fn().mockResolvedValue("OK"), @@ -117,7 +119,7 @@ describe("RedisUsageStorage", () => { await storage.record(usage); expect(mockRedis.eval).toHaveBeenCalledWith( - expect.stringContaining("redis.call('ZADD'"), + expect.any(String), ["usage2:tenant-1:api_calls:2024-01", "idem2:record:tenant-1:api_calls:key-123"], [usage.timestamp.getTime(), expect.stringMatching(/^usage-123:5:v2\./), 86400], ); @@ -259,6 +261,7 @@ describe("RedisUsageStorage", () => { await storage.record({ ...usage, id: "usage-456" }); expect(mockRedis.eval).toHaveBeenCalledTimes(2); + expect(mockRedis.zadd).not.toHaveBeenCalled(); }); it("should throw RedisProblem on error", async () => { @@ -792,7 +795,7 @@ describe("RedisUsageStorage", () => { expect(result).toEqual({ exceeded: false, newUsage: 8 }); expect(mockRedis.eval).toHaveBeenCalledWith( - expect.stringContaining("redis.call('ZRANGEBYSCORE'"), + expect.any(String), ["usage2:tenant-1:api_calls:2024-01", "idem2:record:tenant-1:api_calls:key-123"], [10, 5, usage.timestamp.getTime(), expect.stringMatching(/^usage-123:5:v2\./), 0], ); @@ -932,35 +935,140 @@ describe("RedisUsageStorage", () => { ).rejects.toThrow(RedisProblem); }); - it("should label cached idempotency reads as ZRANGEBYSCORE errors", async () => { - vi.mocked(mockRedis.eval).mockResolvedValueOnce([0, 8]); - vi.mocked(mockRedis.zrangebyscore).mockRejectedValue(new Error("Read failed")); + it("should replay the original quota result for a cached idempotency key", async () => { + vi.mocked(mockRedis.eval).mockResolvedValueOnce([1, 12]); const usageRecord = createUsageRecord("key-123"); - await storage.checkAndRecordWithinQuota({ + const first = await storage.checkAndRecordWithinQuota({ tenantId: usageRecord.tenantId, meterId: usageRecord.meterId, value: usageRecord.value, quota: 10, - allowOverQuota: false, + allowOverQuota: true, usageRecord, }); - const request = storage.checkAndRecordWithinQuota({ + const retry = await storage.checkAndRecordWithinQuota({ tenantId: usageRecord.tenantId, meterId: usageRecord.meterId, value: usageRecord.value, quota: 10, - allowOverQuota: false, + allowOverQuota: true, usageRecord: { ...usageRecord, id: "usage-456" }, }); - await expect(request).rejects.toThrow(RedisProblem); - await expect(request).rejects.toMatchObject({ - detail: expect.stringContaining("Redis operation 'ZRANGEBYSCORE' failed"), - extensions: { operation: "ZRANGEBYSCORE", originalMessage: "Read failed" }, + expect(first).toEqual({ exceeded: true, newUsage: 12 }); + expect(retry).toEqual(first); + expect(mockRedis.eval).toHaveBeenCalledTimes(1); + expect(mockRedis.zrangebyscore).not.toHaveBeenCalled(); + }); + + it("should persist and replay a rejected quota result after process restart", async () => { + const dedupeValues = new Map(); + let usageRecordCount = 0; + let evalCallCount = 0; + const redis: RedisClient = { + scriptKeyAccess: "multi-key", + zadd: vi.fn().mockResolvedValue(1), + zrangebyscore: vi.fn().mockResolvedValue([]), + set: vi.fn().mockResolvedValue("OK"), + async eval( + _script: string, + keys: string[], + args: Array, + ): Promise { + evalCallCount += 1; + const dedupeKey = keys[1]; + if (!dedupeKey) { + throw new Error("Expected quota dedupe key"); + } + const recordedResult = dedupeValues.get(dedupeKey); + const recordedMatch = recordedResult?.match(/^quota:([01]):(.+)$/); + if (recordedMatch) { + return [Number(recordedMatch[1]), Number(recordedMatch[2])] as unknown as TResult; + } + + const quota = Number(args[0]); + const value = Number(args[1]); + const newUsage = 8 + value; + const exceeded = newUsage > quota ? 1 : 0; + + if (exceeded === 0 || args[4] === 1) { + usageRecordCount += 1; + } + dedupeValues.set(dedupeKey, `quota:${exceeded}:${newUsage}`); + return [exceeded, newUsage] as unknown as TResult; + }, + }; + const usageRecord = createUsageRecord("rejected-key"); + const firstStorage = new RedisUsageStorage(redis); + + const first = await firstStorage.checkAndRecordWithinQuota({ + tenantId: usageRecord.tenantId, + meterId: usageRecord.meterId, + value: usageRecord.value, + quota: 10, + allowOverQuota: false, + usageRecord, + }); + + const restartedStorage = new RedisUsageStorage(redis); + const retry = await restartedStorage.checkAndRecordWithinQuota({ + tenantId: usageRecord.tenantId, + meterId: usageRecord.meterId, + value: 1, + quota: 100, + allowOverQuota: false, + usageRecord: { ...usageRecord, id: "usage-after-restart", value: 1 }, + }); + + expect(first).toEqual({ exceeded: true, newUsage: 13 }); + expect(retry).toEqual(first); + expect(dedupeValues.get("idem2:record:tenant-1:api_calls:rejected-key")).toBe("quota:1:13"); + expect(usageRecordCount).toBe(0); + expect(evalCallCount).toBe(2); + }); + + it("should replay a legacy dedupe marker with its current quota outcome", async () => { + const dedupeKey = "idem2:record:tenant-1:api_calls:legacy-key"; + const dedupeValues = new Map([[dedupeKey, "1"]]); + let usageRecordCount = 0; + const redis: RedisClient = { + scriptKeyAccess: "multi-key", + zadd: vi.fn().mockResolvedValue(1), + zrangebyscore: vi.fn().mockResolvedValue([]), + set: vi.fn().mockResolvedValue("OK"), + async eval( + _script: string, + keys: string[], + args: Array, + ): Promise { + const recordedResult = dedupeValues.get(keys[1] ?? ""); + if (recordedResult === "1") { + const currentUsage = 13; + return [currentUsage > Number(args[0]) ? 1 : 0, currentUsage] as unknown as TResult; + } + + usageRecordCount += 1; + return [0, 13] as unknown as TResult; + }, + }; + const legacyStorage = new RedisUsageStorage(redis); + const usageRecord = createUsageRecord("legacy-key"); + + const result = await legacyStorage.checkAndRecordWithinQuota({ + tenantId: usageRecord.tenantId, + meterId: usageRecord.meterId, + value: usageRecord.value, + quota: 10, + allowOverQuota: false, + usageRecord, }); + + expect(result).toEqual({ exceeded: true, newUsage: 13 }); + expect(dedupeValues.get(dedupeKey)).toBe("1"); + expect(usageRecordCount).toBe(0); }); }); diff --git a/packages/metering-core/src/tests/UsageAggregator.spec.ts b/packages/metering-core/src/tests/UsageAggregator.spec.ts index 317b2e207..c9b26405d 100644 --- a/packages/metering-core/src/tests/UsageAggregator.spec.ts +++ b/packages/metering-core/src/tests/UsageAggregator.spec.ts @@ -31,10 +31,12 @@ describe("UsageAggregator", () => { beforeEach(() => { mockStorage = { + replayContract: "idempotent", record: vi.fn().mockResolvedValue(undefined), getUsage: vi.fn().mockResolvedValue(0), isIdempotent: vi.fn().mockResolvedValue(true), fetchUsageRecords: vi.fn().mockResolvedValue([]), + checkAndRecordWithinQuota: vi.fn().mockResolvedValue({ exceeded: false, newUsage: 0 }), }; mockRepository = { diff --git a/packages/metering-core/src/tests/UsageStorage.spec.ts b/packages/metering-core/src/tests/UsageStorage.spec.ts index b69de47d5..a1d310f5b 100644 --- a/packages/metering-core/src/tests/UsageStorage.spec.ts +++ b/packages/metering-core/src/tests/UsageStorage.spec.ts @@ -7,10 +7,12 @@ describe("UsageStorage", () => { beforeEach(() => { mockStorage = { + replayContract: "idempotent", record: vi.fn(), getUsage: vi.fn(), isIdempotent: vi.fn(), fetchUsageRecords: vi.fn(), + checkAndRecordWithinQuota: vi.fn(), }; }); diff --git a/packages/metering-core/src/tests/events/Events.spec.ts b/packages/metering-core/src/tests/events/Events.spec.ts index 9158670a6..9284b4850 100644 --- a/packages/metering-core/src/tests/events/Events.spec.ts +++ b/packages/metering-core/src/tests/events/Events.spec.ts @@ -36,6 +36,48 @@ describe("Events", () => { expect(event.metadata).toBeUndefined(); }); + + it("should derive a stable logical identity from the idempotency key", () => { + const longKey = "sensitive-key".repeat(100); + const first = new UsageRecordedEvent("tenant-1", "api_calls", 1, longKey); + const retry = new UsageRecordedEvent("tenant-1", "api_calls", 1, longKey); + const other = new UsageRecordedEvent("tenant-1", "api_calls", 1, "key-2"); + + expect(retry.eventId).toBe(first.eventId); + expect(other.eventId).not.toBe(first.eventId); + expect(first.eventId).toMatch(/^[a-f0-9]{64}$/); + expect(first.eventId).not.toContain("sensitive-key"); + }); + + it("should distinguish a new operation after the idempotency window", () => { + const first = new UsageRecordedEvent( + "tenant-1", + "api_calls", + 1, + "reused-key", + undefined, + "operation-1", + ); + const retry = new UsageRecordedEvent( + "tenant-1", + "api_calls", + 1, + "reused-key", + undefined, + "operation-1", + ); + const laterOperation = new UsageRecordedEvent( + "tenant-1", + "api_calls", + 1, + "reused-key", + undefined, + "operation-2", + ); + + expect(retry.eventId).toBe(first.eventId); + expect(laterOperation.eventId).toBe(first.eventId); + }); }); describe("QuotaExceededEvent", () => { @@ -62,5 +104,40 @@ describe("Events", () => { expect(event.timestamp.getTime()).toBeGreaterThanOrEqual(before.getTime()); expect(event.timestamp.getTime()).toBeLessThanOrEqual(after.getTime()); }); + + it("should derive a stable logical identity when an idempotency key is provided", () => { + const longKey = "sensitive-key".repeat(100); + const first = new QuotaExceededEvent( + "tenant-1", + "api_calls", + 150, + 100, + longKey, + "operation-1", + ); + const retry = new QuotaExceededEvent( + "tenant-1", + "api_calls", + 150, + 100, + longKey, + "operation-1", + ); + const laterOperation = new QuotaExceededEvent( + "tenant-1", + "api_calls", + 150, + 100, + longKey, + "operation-2", + ); + const other = new QuotaExceededEvent("tenant-1", "api_calls", 150, 100, "key-2"); + + expect(retry.eventId).toBe(first.eventId); + expect(laterOperation.eventId).toBe(first.eventId); + expect(other.eventId).not.toBe(first.eventId); + expect(first.eventId).toMatch(/^[a-f0-9]{64}$/); + expect(first.eventId).not.toContain("sensitive-key"); + }); }); }); diff --git a/packages/metering-core/src/tests/problems/Problems.spec.ts b/packages/metering-core/src/tests/problems/Problems.spec.ts index e52d91754..0c7816d68 100644 --- a/packages/metering-core/src/tests/problems/Problems.spec.ts +++ b/packages/metering-core/src/tests/problems/Problems.spec.ts @@ -3,6 +3,7 @@ import { AtomicQuotaNotSupportedProblem } from "../../libs/problems/AtomicQuotaN import { DuplicateRecordProblem } from "../../libs/problems/DuplicateRecordProblem"; import { InvalidMeterProblem } from "../../libs/problems/InvalidMeterProblem"; import { InvalidUsageQueryProblem } from "../../libs/problems/InvalidUsageQueryProblem"; +import { MeteringTransitionProblem } from "../../libs/problems/MeteringTransitionProblem"; import { QuotaExceededProblem } from "../../libs/problems/QuotaExceededProblem"; import { RedisProblem } from "../../libs/problems/RedisProblem"; @@ -72,6 +73,20 @@ describe("Problems", () => { }); }); + describe("MeteringTransitionProblem", () => { + it("should expose stable transition failure evidence", () => { + const problem = new MeteringTransitionProblem("release-events", "TOKEN", "idem-key-123"); + + expect(problem.code).toBe("metering/transition-conflict"); + expect(problem.status).toBe(409); + expect(problem.toJSON()).toMatchObject({ + idempotencyKey: "idem-key-123", + reason: "TOKEN", + transition: "release-events", + }); + }); + }); + describe("RedisProblem", () => { it("should create with original error", () => { const originalError = new Error("Connection refused"); diff --git a/packages/metering-upstash/src/libs/UpstashRedisClient.ts b/packages/metering-upstash/src/libs/UpstashRedisClient.ts index d08e259d3..e536b6492 100644 --- a/packages/metering-upstash/src/libs/UpstashRedisClient.ts +++ b/packages/metering-upstash/src/libs/UpstashRedisClient.ts @@ -15,6 +15,8 @@ export type UpstashRedisClientEnv = { * `@upstash/redis`를 `@croco/metering-core`의 RedisClient로 감싸는 어댑터입니다. */ export class UpstashRedisClient implements RedisClient { + readonly scriptKeyAccess = "multi-key" as const; + private readonly redis: Redis; constructor(redis: Redis) { diff --git a/packages/problems-core/src/generated/problem-code-registry.ts b/packages/problems-core/src/generated/problem-code-registry.ts index 297935a5e..4af0334ab 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: 540, + problemCount: 541, problems: [ { code: "ACCESS_DENIED", @@ -9003,6 +9003,36 @@ export const CROCO_PROBLEM_CODE_REGISTRY = { }, ], }, + { + code: "metering/transition-conflict", + category: "Conflict", + status: 409, + title: "Conflict", + cookbookPath: "/reference/problem-recovery-cookbook/#metering-transition-conflict", + recovery: { + cause: "The request conflicts with current state or an idempotency constraint.", + userAction: "Refresh state, resolve the conflict, and retry with the updated intent.", + operatorAction: "Inspect concurrent writes, idempotency keys, and uniqueness constraints.", + retryability: "conditional", + redactionPolicy: "safe-message", + telemetry: { + eventName: "croco.problem.warning", + severity: "warning", + attributes: ["problem.code", "problem.category", "problem.status"], + }, + }, + lifecycle: { + status: "active", + }, + sources: [ + { + file: "packages/metering-core/src/libs/problems/MeteringTransitionProblem.ts", + line: 5, + column: 5, + kind: "problem-constructor", + }, + ], + }, { code: "metrics-billing/metric-dropped", category: "InternalServerError", diff --git a/public-api-surface.snapshot.json b/public-api-surface.snapshot.json index a59f89fad..70679c889 100644 --- a/public-api-surface.snapshot.json +++ b/public-api-surface.snapshot.json @@ -15155,6 +15155,12 @@ "source": "./libs/MeteringService", "declarationKind": "class" }, + { + "name": "MeteringTransitionProblem", + "exportKind": "named", + "source": "./libs/problems/MeteringTransitionProblem", + "declarationKind": "class" + }, { "name": "MeterRegistry", "exportKind": "named", @@ -15303,6 +15309,11 @@ "exportKind": "named", "source": "./libs/decorators/Metered" }, + { + "name": "MeteringProcessingClaim", + "exportKind": "named", + "source": "./libs/IdempotencyManager" + }, { "name": "MeteringServiceOptions", "exportKind": "named", @@ -15343,6 +15354,11 @@ "exportKind": "named", "source": "./libs/MeterRef" }, + { + "name": "PendingMeteringDelivery", + "exportKind": "named", + "source": "./libs/IdempotencyManager" + }, { "name": "QuotaCheckAndRecordOptions", "exportKind": "named", diff --git a/scripts/quick-start-lambda-smoke.mts b/scripts/quick-start-lambda-smoke.mts index d2b689807..626488a42 100644 --- a/scripts/quick-start-lambda-smoke.mts +++ b/scripts/quick-start-lambda-smoke.mts @@ -50,6 +50,7 @@ try { "--ignore-scripts", ]); await runPhase("build", "pnpm", ["--filter", `${packageName}...`, "build"]); + await runMeteringReplaySmoke(); await runRuntimeSmoke(); console.log("quick-start-lambda-smoke: all checks passed"); @@ -195,11 +196,80 @@ async function runRuntimeSmoke(): Promise { headers: { "content-type": "application/json", "x-api-key": "test-key" }, method: "POST", }); + await assertServerOutput("create user metering", serverOutput, "usage recorded"); } finally { await stopServer(server); } } +async function assertServerOutput( + label: string, + output: readonly string[], + expectedText: string, +): Promise { + const startedAt = Date.now(); + while (Date.now() - startedAt < 5_000) { + if (output.join("").includes(expectedText)) { + console.log(`quick-start-lambda-smoke: ${label} passed`); + return; + } + await delay(100); + } + + throw new Error( + `quick-start-lambda-smoke: ${label} failed: server output did not include ${JSON.stringify(expectedText)}`, + ); +} + +async function runMeteringReplaySmoke(): Promise { + const exampleDir = join(smokeRoot, "examples", "quick-start-lambda"); + const probe = ` + import { IdempotencyManager } from "@croco/metering-core"; + import { InMemoryRedisClient } from "./src/integrations/inMemoryMetering.ts"; + + void (async () => { + const manager = new IdempotencyManager(new InMemoryRedisClient()); + const firstClaim = await manager.claimMeteringProcessingOrThrow("tenant", "meter", "request"); + const delivery = { + usageRecord: { + id: firstClaim.operationId, + tenantId: "tenant", + meterId: "meter", + value: 1, + timestamp: new Date().toISOString(), + idempotencyKey: "request", + }, + }; + await manager.markMeteringEventsPublishing( + "tenant", + "meter", + "request", + firstClaim.token, + delivery, + ); + await manager.releaseMeteringEvents("tenant", "meter", "request", firstClaim.token); + const replayClaim = await manager.claimMeteringProcessingOrThrow("tenant", "meter", "request"); + if ( + replayClaim.operationId !== firstClaim.operationId || + JSON.stringify(replayClaim.delivery) !== JSON.stringify(delivery) + ) { + throw new Error("pending delivery did not replay with its original operation identity"); + } + await manager.completeMeteringProcessing( + "tenant", + "meter", + "request", + replayClaim.token, + ); + })().catch((error: unknown) => { + console.error("quick-start-lambda-smoke: metering replay probe failed", error); + process.exitCode = 1; + }); + `; + + await runPhase("metering replay", "pnpm", ["--dir", exampleDir, "exec", "tsx", "-e", probe]); +} + function writeLiveServerOutput(output: string, stream: NodeJS.WriteStream): void { const visibleOutput = output .split(/\r?\n/)