effect-agent 0.1.0-beta.111 → 0.1.0-beta.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DurableAgentRuntime-PyIgNYXF.mjs → DurableAgentRuntime-BIrgxwRl.mjs} +154 -21
- package/dist/DurableAgentRuntime-BIrgxwRl.mjs.map +1 -0
- package/dist/{EventSource-BUYLmL77.d.mts → EventSource-ARs56eBq.d.mts} +3 -3
- package/dist/{PreparedInputAdmission-J3YK6LAm.d.mts → PreparedInputAdmission-_WYg-D0f.d.mts} +4 -4
- package/dist/{Records-4qnRmniE.d.mts → Records-BtxMy8xD.d.mts} +94 -13
- package/dist/{Schedule-C2lH2kxY.d.mts → Schedule-DGPyXBzK.d.mts} +2 -2
- package/dist/{Subscription-pQUv0QD6.d.mts → Subscription-B9VszlF9.d.mts} +3 -3
- package/dist/{SubscriptionInput-DdJOiNMY.d.mts → SubscriptionInput-BJWZqCWP.d.mts} +3 -3
- package/dist/capabilities/Mcp.d.mts +1 -1
- package/dist/capabilities/Mcp.mjs +5 -6
- package/dist/capabilities/Mcp.mjs.map +1 -1
- package/dist/durable/ActivityStore.d.mts +1 -1
- package/dist/durable/Admin.d.mts +1 -1
- package/dist/durable/AgentRegistration.d.mts +1 -1
- package/dist/durable/Certification.d.mts +1 -1
- package/dist/durable/CommittedActivity.d.mts +1 -1
- package/dist/durable/Digest.d.mts +1 -1
- package/dist/durable/DurableAgentRuntime.d.mts +2 -2
- package/dist/durable/DurableAgentRuntime.mjs +2 -2
- package/dist/durable/EventSource.d.mts +1 -1
- package/dist/durable/GitHubWorkflowSource.d.mts +3 -3
- package/dist/durable/MessageDelivery.d.mts +3 -3
- package/dist/durable/MessageDeliveryStoreConformance.d.mts +39 -39
- package/dist/durable/PersistentHistory.d.mts +1 -1
- package/dist/durable/PreparedInputAdmission.d.mts +1 -1
- package/dist/durable/Records.d.mts +1 -1
- package/dist/durable/Recovery.d.mts +1 -1
- package/dist/durable/RunJournal.d.mts +1 -1
- package/dist/durable/Schedule.d.mts +1 -1
- package/dist/durable/ScheduleStoreConformance.d.mts +1 -1
- package/dist/durable/ScheduleTransition.d.mts +1 -1
- package/dist/durable/Scheduling.d.mts +2 -2
- package/dist/durable/SqlStorageV2Upgrade.d.mts +2 -2
- package/dist/durable/SqlSubscriptionStore.d.mts +2 -2
- package/dist/durable/SqlThreadNativeReads.d.mts +1 -1
- package/dist/durable/SubmissionLedger.d.mts +2 -2
- package/dist/durable/SubmissionLedger.mjs +19 -8
- package/dist/durable/SubmissionLedger.mjs.map +1 -1
- package/dist/durable/SubmissionLedgerConformance.d.mts +1 -1
- package/dist/durable/SubmissionLedgerConformance.mjs +2 -1
- package/dist/durable/SubmissionLedgerConformance.mjs.map +1 -1
- package/dist/durable/SubmissionStatus.d.mts +1 -1
- package/dist/durable/Subscription.d.mts +1 -1
- package/dist/durable/SubscriptionInput.d.mts +1 -1
- package/dist/durable/SubscriptionStoreConformance.d.mts +1 -1
- package/dist/durable/SubscriptionTools.d.mts +3 -3
- package/dist/durable/SubscriptionTransition.d.mts +1 -1
- package/dist/durable/Subscriptions.d.mts +5 -5
- package/dist/durable/ThreadContextHistory.d.mts +1 -1
- package/dist/durable/ThreadContextHistoryProjection.d.mts +1 -1
- package/dist/durable/ThreadInvariants.d.mts +1 -1
- package/dist/durable/ThreadProjection.d.mts +1 -1
- package/dist/durable/ThreadProjectionMaintenance.d.mts +1 -1
- package/dist/durable/ThreadStore.d.mts +2 -2
- package/dist/durable/ThreadStore.mjs +16 -2
- package/dist/durable/ThreadStore.mjs.map +1 -1
- package/dist/durable/ThreadStoreConformance.d.mts +1 -1
- package/dist/durable/WorkerHost.d.mts +1 -1
- package/dist/index.d.mts +6 -6
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/src/capabilities/Mcp.ts +6 -7
- package/src/durable/DurableAgentRuntime.ts +278 -49
- package/src/durable/SubmissionLedger.ts +22 -9
- package/src/durable/SubmissionLedgerConformance.ts +13 -1
- package/src/durable/ThreadStore.ts +16 -0
- package/dist/DurableAgentRuntime-PyIgNYXF.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubmissionLedgerConformance.mjs","names":[],"sources":["../../src/durable/SubmissionLedgerConformance.ts"],"sourcesContent":["import type { Crypto } from \"effect\";\nimport { Clock, DateTime, Duration, Effect, Option, Result, Schema, Stream } from \"effect\";\nimport { TestClock } from \"effect/testing\";\n\nimport { InputMessage, MessageAdmission } from \"../capabilities/Messaging.ts\";\nimport { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport { type ReceiptId } from \"../core/Identifiers.ts\";\nimport { AgentId, ThreadId, SubmissionId, ToolCallId, DelegationId } from \"../core/Identifiers.ts\";\nimport {\n SubagentDelegationCaps,\n SubagentGrant,\n SubagentReservationAmounts,\n} from \"../core/SubagentContract.ts\";\nimport { WorkerCompletion, WorkerUpdate } from \"../core/Worker.ts\";\nimport { digestJson, type DigestError } from \"./Digest.ts\";\nimport {\n CanonicalSequence,\n DefinitionDigests,\n DeploymentId,\n Digest,\n ProducerId,\n RecordEnvelope,\n SubmissionSettled,\n SubmissionSettledRecord,\n PersistedJson,\n WorkerAdmission,\n type SettlementFailureDiagnostic,\n} from \"./Records.ts\";\nimport {\n type AdmissionResult,\n AbortCommand,\n AbortIntentRequest,\n AdmissionConflict,\n AdmissionPolicyError,\n AdmissionRequest,\n ApprovalConflict,\n ApprovalDecisionCommand,\n ApprovalPendingSuspension,\n AttachChildToReservationRequest,\n BeginChildBudgetReleaseRequest,\n ChildBudgetReservationRequest,\n ChildReservationConflict,\n ChildReservationId,\n ChildSettledNotification,\n ClaimJoiningRequest,\n ClaimRequest,\n IdempotencyKey,\n JoinedToHost,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n MarkReadyRequest,\n MarkUnknownRequest,\n OwnershipLost,\n OwnershipToken,\n ParentLinkage,\n Principal,\n RecoverySnapshotRequest,\n ReleaseChildBudgetRequest,\n ReleaseOwnershipRequest,\n RenewOwnershipRequest,\n ResolutionCompletedWithResult,\n ResolutionNeverHappened,\n ResolutionSafeToRetry,\n RevertJoiningRequest,\n SettlementConflict,\n SettlementFinalization,\n SettlementReservation,\n SubmissionLedger,\n SubmissionLookupById,\n SubmissionLookupByKey,\n SuspendRequest,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n WaitingChild,\n WaitingForChildSuspension,\n submissionInputRecordId,\n submissionSettlementId,\n submissionSettlementRecordId,\n type SubmissionLedgerFailure,\n} from \"./SubmissionLedger.ts\";\n\n/** A SubmissionLedger contract invariant that an adapter under test violated. */\nexport class SubmissionLedgerConformanceViolation extends Schema.TaggedError<SubmissionLedgerConformanceViolation>()(\n \"SubmissionLedgerConformanceViolation\",\n {\n caseName: Schema.String,\n message: Schema.String,\n },\n) {}\n\nexport type SubmissionLedgerConformanceFailure =\n | SubmissionLedgerFailure\n | DigestError\n | SubmissionLedgerConformanceViolation;\n\n/**\n * One adapter-neutral SubmissionLedger contract case. Each case owns disjoint Thread\n * lanes, so a suite may run every case against one shared ledger instance or against a fresh\n * ledger per case. Cases drive lease expiry through `TestClock`, so they must run inside the\n * `@effect/vitest` test environment (`it.effect`), and they compute real content digests, so the\n * host suite must provide `Crypto.Crypto`.\n */\nexport interface SubmissionLedgerConformanceCase {\n readonly name: string;\n readonly run: Effect.Effect<\n void,\n SubmissionLedgerConformanceFailure,\n SubmissionLedger | Crypto.Crypto\n >;\n}\n\nconst decodeThreadId = Schema.decodeSync(ThreadId);\nconst decodeSubmissionId = Schema.decodeSync(SubmissionId);\nconst decodeIdempotencyKey = Schema.decodeSync(IdempotencyKey);\nconst decodeSequence = Schema.decodeSync(CanonicalSequence);\nconst decodeToolCallId = Schema.decodeSync(ToolCallId);\nconst decodeChildReservationId = Schema.decodeSync(ChildReservationId);\n\n/** A token that never owned any lane, for ownership-fencing assertions. */\nconst BOGUS_TOKEN = Schema.decodeSync(OwnershipToken)(\"ownership-ledger-conformance-bogus\");\n\nconst persistedJsonEquivalent = Schema.toEquivalence(PersistedJson);\nconst isAdmissionConflict = Schema.is(AdmissionConflict);\nconst isApprovalConflict = Schema.is(ApprovalConflict);\nconst isChildReservationConflict = Schema.is(ChildReservationConflict);\nconst isJoinedToHost = Schema.is(JoinedToHost);\nconst isLedgerError = Schema.is(LedgerError);\nconst isOwnershipLost = Schema.is(OwnershipLost);\nconst isSettlementConflict = Schema.is(SettlementConflict);\nconst isUnknownResolutionConflict = Schema.is(UnknownResolutionConflict);\n\nconst CONFORMANCE_PRINCIPAL = Schema.decodeSync(Principal)(\"principal-ledger-conformance\");\nconst OTHER_PRINCIPAL = Schema.decodeSync(Principal)(\"principal-ledger-conformance-other\");\nconst CONFORMANCE_AGENT = Schema.decodeSync(AgentId)(\"agent-ledger-conformance\");\nconst CONFORMANCE_DEPLOYMENT = Schema.decodeSync(DeploymentId)(\"deployment-ledger-conformance\");\nconst CONFORMANCE_DEFINITION_DIGEST = Schema.decodeSync(Digest)(\"d\".repeat(64));\n\nconst CONFORMANCE_DIGESTS = DefinitionDigests.make({\n agent: CONFORMANCE_DEFINITION_DIGEST,\n model: CONFORMANCE_DEFINITION_DIGEST,\n tools: CONFORMANCE_DEFINITION_DIGEST,\n});\n\nconst CONFORMANCE_CREATED_AT = DateTime.toUtc(DateTime.makeUnsafe(1));\nconst PRODUCER_A = Schema.decodeSync(ProducerId)(\"producer-ledger-conformance-a\");\nconst PRODUCER_B = Schema.decodeSync(ProducerId)(\"producer-ledger-conformance-b\");\n\nconst sameInstant = (left: DateTime.Utc, right: DateTime.Utc): boolean =>\n DateTime.toEpochMillis(left) === DateTime.toEpochMillis(right);\n\nconst admissionRequest = Effect.fn(\"SubmissionLedgerConformance.admissionRequest\")(function* (\n threadId: ThreadId,\n idempotencyKey: string,\n input: PersistedJson,\n parentLinkage?: ParentLinkage,\n) {\n const inputDigest = yield* digestJson(input);\n\n return AdmissionRequest.make({\n threadId,\n principal: CONFORMANCE_PRINCIPAL,\n idempotencyKey: decodeIdempotencyKey(idempotencyKey),\n agentId: CONFORMANCE_AGENT,\n agentDigests: CONFORMANCE_DIGESTS,\n deploymentId: CONFORMANCE_DEPLOYMENT,\n inputPayload: input,\n inputDigest,\n ...(parentLinkage === undefined ? {} : { parentLinkage }),\n });\n});\n\nconst admitReady = Effect.fn(\"SubmissionLedgerConformance.admitReady\")(function* (\n threadId: ThreadId,\n idempotencyKey: string,\n input: PersistedJson,\n) {\n const ledger = yield* SubmissionLedger;\n const admitted = yield* ledger.admit(yield* admissionRequest(threadId, idempotencyKey, input));\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n\n return admitted;\n});\n\nconst claimLane = Effect.fn(\"SubmissionLedgerConformance.claimLane\")(function* (\n threadId: ThreadId,\n producerId: ProducerId,\n) {\n const ledger = yield* SubmissionLedger;\n\n return yield* ledger.claim(ClaimRequest.make({ threadId, producerId }));\n});\n\nconst lookupById = Effect.fn(\"SubmissionLedgerConformance.lookupById\")(function* (\n submissionId: SubmissionId,\n) {\n const ledger = yield* SubmissionLedger;\n\n return yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n});\n\nconst recoverySnapshot = Effect.fn(\"SubmissionLedgerConformance.recoverySnapshot\")(function* (\n submissionId: SubmissionId,\n) {\n const ledger = yield* SubmissionLedger;\n\n return yield* ledger.loadRecoverySnapshot(RecoverySnapshotRequest.make({ submissionId }));\n});\n\ninterface ReservationIdentity {\n readonly submissionId: SubmissionId;\n readonly ownershipToken: OwnershipToken;\n readonly receiptId: ReceiptId;\n}\n\ntype ReservationOptions = ReservationIdentity &\n (\n | {\n readonly outcome: \"completed\";\n readonly result?: PersistedJson;\n }\n | {\n readonly outcome: \"failed\";\n readonly result: SettlementFailureDiagnostic;\n }\n | {\n readonly outcome: \"aborted\";\n readonly result?: never;\n }\n );\n\n/**\n * Builds a complete, deterministic settlement reservation: the exact canonical envelope that\n * would be appended (DUR-011) plus the digest of its canonical JSON encoding. Two calls with the\n * same options produce byte-identical content, so replays are honest reservation replays.\n */\nconst settlementReservation = Effect.fn(\"SubmissionLedgerConformance.settlementReservation\")(\n function* (options: ReservationOptions) {\n const settlementId = submissionSettlementId(options.submissionId);\n\n const payload = yield* Schema.decodeEffect(SubmissionSettledRecord)(\n SubmissionSettled.make({\n submissionId: options.submissionId,\n settlementId,\n receiptId: options.receiptId,\n outcome: options.outcome,\n ...(options.result === undefined ? {} : { result: options.result }),\n }),\n ).pipe(Effect.orDie);\n\n const record = RecordEnvelope.make({\n recordId: submissionSettlementRecordId(options.submissionId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: CONFORMANCE_CREATED_AT,\n deploymentId: CONFORMANCE_DEPLOYMENT,\n payload,\n });\n\n const encoded = yield* Schema.encodeEffect(RecordEnvelope)(record).pipe(Effect.orDie);\n const recordDigest = yield* digestJson(encoded);\n\n return SettlementReservation.make({\n submissionId: options.submissionId,\n ownershipToken: options.ownershipToken,\n settlementId,\n outcome: options.outcome,\n record,\n recordDigest,\n });\n },\n);\n\nconst settleClaimed = Effect.fn(\"SubmissionLedgerConformance.settleClaimed\")(function* (\n admitted: AdmissionResult,\n ownershipToken: OwnershipToken,\n) {\n const ledger = yield* SubmissionLedger;\n\n const reservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n });\n\n yield* ledger.reserveSettlement(reservation);\n\n return yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: submissionSettlementId(admitted.submissionId),\n }),\n );\n});\n\n/** Advances the TestClock one millisecond past the given lease boundary. */\nconst advancePastLease = Effect.fn(\"SubmissionLedgerConformance.advancePastLease\")(function* (\n leaseExpiresAt: DateTime.Utc,\n) {\n const nowMillis = yield* Clock.currentTimeMillis;\n const waitMillis = Math.max(0, DateTime.toEpochMillis(leaseExpiresAt) - nowMillis) + 1;\n\n yield* TestClock.adjust(Duration.millis(waitMillis));\n});\n\nconst conformanceCase = (\n name: string,\n build: (assert: {\n readonly ensure: (\n condition: boolean,\n message: string,\n ) => Effect.Effect<void, SubmissionLedgerConformanceViolation>;\n readonly expectFailure: <A, E, R>(\n description: string,\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<E, SubmissionLedgerConformanceViolation, R>;\n readonly expectSome: <A>(\n description: string,\n option: Option.Option<A>,\n ) => Effect.Effect<A, SubmissionLedgerConformanceViolation>;\n }) => Effect.Effect<void, SubmissionLedgerConformanceFailure, SubmissionLedger | Crypto.Crypto>,\n): SubmissionLedgerConformanceCase => ({\n name,\n run: build({\n ensure: (condition, message) =>\n condition\n ? Effect.void\n : Effect.fail(SubmissionLedgerConformanceViolation.make({ caseName: name, message })),\n expectFailure: (description, effect) =>\n Effect.flip(effect).pipe(\n Effect.mapError(() =>\n SubmissionLedgerConformanceViolation.make({\n caseName: name,\n message: `Expected failure but the operation succeeded: ${description}`,\n }),\n ),\n ),\n expectSome: (description, option) =>\n Effect.fromOption(option, () =>\n SubmissionLedgerConformanceViolation.make({\n caseName: name,\n message: `Expected a value but found none: ${description}`,\n }),\n ),\n }).pipe(Effect.withSpan(`SubmissionLedgerConformance.${name}`)),\n});\n\nconst admissionGroupRace = conformanceCase(\n \"admits only one concurrent group request and retains immutable constraints\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const requests = yield* Effect.forEach([\"first\", \"second\"], (key) =>\n admissionRequest(decodeThreadId(\"ledger-group-race\"), key, {}).pipe(\n Effect.map((request) => AdmissionRequest.make({ ...request, admissionGroup: \"entity\" })),\n ),\n );\n\n const outcomes = yield* Effect.forEach(\n requests,\n (request) => ledger.admit(request).pipe(Effect.result),\n { concurrency: 2 },\n );\n\n yield* ensure(\n outcomes.filter(Result.isSuccess).length === 1,\n \"More than one unsettled group submission was admitted\",\n );\n yield* ensure(\n outcomes.some(\n (outcome) =>\n Result.isFailure(outcome) &&\n Schema.is(AdmissionPolicyError)(outcome.failure) &&\n outcome.failure.reason === \"occupied\",\n ),\n \"Concurrent loser was not a typed capacity wait\",\n );\n for (const [index, outcome] of outcomes.entries()) {\n if (Result.isFailure(outcome)) continue;\n const request = requests[index];\n\n if (request === undefined) return yield* Effect.die(\"Missing group race request\");\n\n const snapshot = yield* expectSome(\n \"group snapshot\",\n yield* lookupById(outcome.success.submissionId),\n );\n\n yield* ensure(\n snapshot.admissionGroup === \"entity\",\n \"Admission constraints disappeared from the durable snapshot\",\n );\n yield* ensure(\n isAdmissionConflict(\n yield* expectFailure(\n \"changed retained group\",\n ledger.admit(AdmissionRequest.make({ ...request, admissionGroup: \"other\" })),\n ),\n ),\n \"Changed constraints did not produce an admission conflict\",\n );\n }\n }),\n);\n\nconst admissionGroupSettlement = conformanceCase(\n \"retains group capacity through terminalizing and permits exact replay\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n const threadId = decodeThreadId(\"ledger-conformance-group\");\n\n const original = AdmissionRequest.make({\n ...(yield* admissionRequest(threadId, \"group-first\", { n: 1 })),\n admissionGroup: \"entity-work\",\n });\n\n const successor = AdmissionRequest.make({\n ...(yield* admissionRequest(threadId, \"group-second\", { n: 2 })),\n admissionGroup: \"entity-work\",\n });\n\n const first = yield* ledger.admit(original);\n\n yield* expectFailure(\"occupied group\", ledger.admit(successor));\n yield* ensure(\n (yield* ledger.admit(original)).submissionId === first.submissionId,\n \"Exact retry must resolve before occupied group checks\",\n );\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: first.submissionId }));\n const claim = yield* expectSome(\"claimed group head\", yield* claimLane(threadId, PRODUCER_A));\n\n yield* ledger.reserveSettlement(\n yield* settlementReservation({\n submissionId: first.submissionId,\n receiptId: first.receiptId,\n ownershipToken: claim.ownershipToken,\n outcome: \"completed\",\n }),\n );\n yield* expectFailure(\"terminalizing group\", ledger.admit(successor));\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: first.submissionId,\n settlementId: submissionSettlementId(first.submissionId),\n }),\n );\n yield* ensure(\n !(yield* ledger.admit(successor)).replayed,\n \"Only canonical settlement releases group capacity\",\n );\n }),\n);\n\nconst admissionIdempotency = conformanceCase(\n \"replays identical admissions and rejects conflicting input digests\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-admission\");\n const ledger = yield* SubmissionLedger;\n\n const request = yield* admissionRequest(threadId, \"admission-key-1\", {\n city: \"Lisbon\",\n });\n\n const first = yield* ledger.admit(request);\n\n yield* ensure(!first.replayed, \"The first admission of a key must not report replayed\");\n yield* ensure(first.state === \"admitted\", \"A fresh admission must start in state admitted\");\n\n const afterAdmit = yield* expectSome(\n \"lookup immediately after admission\",\n yield* lookupById(first.submissionId),\n );\n\n yield* ensure(\n afterAdmit.inputDigest === request.inputDigest && afterAdmit.state === \"admitted\",\n \"Admission must be readable with strong consistency immediately after the write\",\n );\n\n const replayed = yield* ledger.admit(request);\n\n yield* ensure(\n replayed.replayed &&\n replayed.submissionId === first.submissionId &&\n replayed.receiptId === first.receiptId &&\n replayed.queueSequence === first.queueSequence,\n \"An identical admission must replay the original identities with replayed set\",\n );\n\n const conflicting = yield* admissionRequest(threadId, \"admission-key-1\", {\n city: \"Porto\",\n });\n\n const conflict = yield* expectFailure(\n \"an admission reusing the key with different canonical input\",\n ledger.admit(conflicting),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict) &&\n conflict.existingInputDigest === request.inputDigest &&\n conflict.attemptedInputDigest === conflicting.inputDigest,\n \"A same-key admission with a different digest must fail with both digests reported\",\n );\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: first.submissionId }));\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: first.submissionId }));\n\n const ready = yield* expectSome(\n \"lookup after readiness\",\n yield* lookupById(first.submissionId),\n );\n\n yield* ensure(\n ready.state === \"ready\" && ready.readyAt !== undefined,\n \"markReady must be idempotent and record readiness exactly once\",\n );\n\n const retryAfterReady = yield* ledger.admit(request);\n\n yield* ensure(\n retryAfterReady.replayed && retryAfterReady.receiptId === first.receiptId,\n \"A client retry after readiness must return the original Receipt\",\n );\n\n const second = yield* ledger.admit(\n yield* admissionRequest(threadId, \"admission-key-2\", { city: \"Faro\" }),\n );\n\n yield* ensure(\n second.submissionId !== first.submissionId && second.queueSequence !== first.queueSequence,\n \"A different key on the same lane must mint fresh identities and a fresh queue sequence\",\n );\n }),\n);\n\nconst workerAdmissionIdentity = conformanceCase(\n \"retains immutable worker admission metadata and rejects same-key changes or omission\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const base = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-worker\"),\n \"worker-message\",\n { text: \"first\" },\n );\n\n const metadata = WorkerAdmission.make({\n messageId: base.idempotencyKey,\n sourceSubmissionId: Schema.decodeSync(SubmissionId)(\"source-input\"),\n deliveryPrincipal: base.principal,\n parameters: { prompt: \"original projection parameters\" },\n createdAtMillis: 1,\n origin: {\n worker: {\n schemaVersion: 1,\n threadId: base.threadId,\n targetAgentId: CONFORMANCE_AGENT,\n delegationId: Schema.decodeSync(DelegationId)(\"worker-research\"),\n },\n source: {\n _tag: \"programmatic\",\n threadId: decodeThreadId(\"worker-source\"),\n agentId: CONFORMANCE_AGENT,\n },\n targetDigests: CONFORMANCE_DIGESTS,\n policy: AgentPolicy.resolve(),\n budget: {\n caps: SubagentDelegationCaps.make({\n maxConcurrentChildren: 1,\n maxTotalChildInvocations: 2,\n }),\n allocation: SubagentReservationAmounts.make({\n turns: 12,\n toolCalls: 24,\n durationMillis: 300_000,\n inputTokens: 0,\n outputTokens: 0,\n costMicrousd: 0,\n resultBytes: 1_000,\n }),\n },\n grant: SubagentGrant.make({ maxDepth: 1, allowedToolNames: [] }),\n depth: 1,\n firstMessageId: base.idempotencyKey,\n createdAtMillis: 1,\n expiresAtMillis: 1_000_000,\n },\n });\n\n const admitted = yield* ledger.admit(\n AdmissionRequest.make({ ...base, workerAdmission: metadata }),\n );\n\n const saved = yield* expectSome(\n \"worker admission lookup\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n saved.workerAdmission !== undefined &&\n Schema.toEquivalence(WorkerAdmission)(saved.workerAdmission, metadata),\n \"Worker origin and per-input parameters must survive admission lookup\",\n );\n yield* ensure(\n saved.parentLinkage === undefined,\n \"Background work must not acquire attached-parent semantics\",\n );\n const recovery = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n recovery.submission.workerAdmission !== undefined &&\n Schema.toEquivalence(WorkerAdmission)(recovery.submission.workerAdmission, metadata),\n \"Recovery must retain the exact worker envelope\",\n );\n\n const replayed = yield* ledger.admit(\n AdmissionRequest.make({ ...base, workerAdmission: metadata }),\n );\n\n yield* ensure(\n replayed.replayed && replayed.receiptId === admitted.receiptId,\n \"Identical metadata must replay the original receipt\",\n );\n for (const changed of [\n undefined,\n WorkerAdmission.make({ ...metadata, parameters: { prompt: \"changed\" } }),\n WorkerAdmission.make({\n ...metadata,\n sourceSubmissionId: Schema.decodeSync(SubmissionId)(\"other-source-input\"),\n }),\n WorkerAdmission.make({\n ...metadata,\n origin: { ...metadata.origin, expiresAtMillis: 2_000_000 },\n }),\n ]) {\n const conflict = yield* expectFailure(\n \"different or omitted worker metadata\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n ...(changed === undefined ? {} : { workerAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict),\n \"Worker metadata changes must produce AdmissionConflict even when input is unchanged\",\n );\n }\n\n const nextKey = decodeIdempotencyKey(\"worker-follow-up\");\n\n const next = AdmissionRequest.make({\n ...base,\n idempotencyKey: nextKey,\n workerAdmission: { ...metadata, messageId: nextKey, parameters: { prompt: \"next\" } },\n });\n\n const followed = yield* ledger.admit(next);\n\n yield* ensure(\n followed.queueSequence > admitted.queueSequence,\n \"Matching worker origins must admit later inputs\",\n );\n for (const changed of [\n undefined,\n WorkerAdmission.make({\n ...metadata,\n origin: { ...metadata.origin, expiresAtMillis: 3_000_000 },\n }),\n ]) {\n const conflict = yield* expectFailure(\n \"worker lane origin replacement\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n idempotencyKey: decodeIdempotencyKey(\"worker-lane-replacement\"),\n ...(changed === undefined ? {} : { workerAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n conflict._tag === \"AdmissionPolicyError\" && conflict.reason === \"refused\",\n \"New keys cannot remove or replace an established worker origin\",\n );\n }\n\n const ordinary = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-ordinary-lane\"),\n \"ordinary\",\n { text: \"ordinary\" },\n );\n\n yield* ledger.admit(ordinary);\n\n const takeover = yield* expectFailure(\n \"ordinary lane takeover\",\n ledger.admit(\n AdmissionRequest.make({\n ...ordinary,\n idempotencyKey: decodeIdempotencyKey(\"takeover\"),\n workerAdmission: {\n ...metadata,\n origin: {\n ...metadata.origin,\n worker: { ...metadata.origin.worker, threadId: ordinary.threadId },\n },\n },\n }),\n ),\n );\n\n yield* ensure(\n takeover._tag === \"AdmissionPolicyError\" && takeover.reason === \"refused\",\n \"A worker cannot take over an ordinary lane before canonical materialization\",\n );\n\n const racing = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-lane-race\"),\n \"ordinary-race\",\n { text: \"race\" },\n );\n\n const raced = yield* Effect.forEach(\n [\n racing,\n AdmissionRequest.make({\n ...racing,\n idempotencyKey: decodeIdempotencyKey(\"worker-race\"),\n workerAdmission: {\n ...metadata,\n origin: {\n ...metadata.origin,\n worker: { ...metadata.origin.worker, threadId: racing.threadId },\n },\n },\n }),\n ],\n (request) => ledger.admit(request).pipe(Effect.result),\n { concurrency: 2 },\n );\n\n yield* ensure(\n raced.filter((result) => result._tag === \"Success\").length === 1 &&\n raced.filter(\n (result) => result._tag === \"Failure\" && result.failure._tag === \"AdmissionPolicyError\",\n ).length === 1,\n \"Concurrent ordinary/worker admissions must atomically choose exactly one lane identity\",\n );\n }),\n);\n\nconst messageAdmissionIdentity = conformanceCase(\n \"retains authenticated peer provenance and rejects same-key changes or omission\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const base = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-peer\"),\n \"peer-message\",\n { text: \"hello\" },\n );\n\n const metadata = Schema.decodeSync(MessageAdmission)({\n schemaVersion: 1,\n message: { ownerThreadId: \"peer-source\", messageId: \"peer-message\" },\n peerName: \"reviewer\",\n sender: { threadId: \"peer-source\", agentId: \"peer-agent\" },\n returnAddress: { threadId: \"peer-source\", agentId: \"peer-agent\" },\n });\n\n const admitted = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n const saved = yield* expectSome(\n \"peer admission lookup\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n saved.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(saved.messageAdmission, metadata),\n \"Peer sender and return address must survive lookup without becoming application input\",\n );\n const recovery = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n recovery.submission.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(recovery.submission.messageAdmission, metadata),\n \"Recovery must retain peer provenance\",\n );\n\n const replayed = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n yield* ensure(\n replayed.replayed && replayed.receiptId === admitted.receiptId,\n \"Identical peer metadata must replay its receipt\",\n );\n for (const changed of [\n undefined,\n MessageAdmission.make({ ...metadata, peerName: \"other\" }),\n MessageAdmission.make({ ...metadata, inReplyTo: metadata.message }),\n ]) {\n const conflict = yield* expectFailure(\n \"different or omitted peer metadata\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n ...(changed === undefined ? {} : { messageAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict),\n \"Peer provenance changes must produce AdmissionConflict\",\n );\n }\n }),\n);\n\nconst workerUpdateIdentity = conformanceCase(\n \"retains framework updates separately and rejects changed same-key metadata\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const base = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-update\"),\n \"update-message\",\n { text: \"original application input\" },\n );\n\n const metadata = Schema.decodeSync(WorkerUpdate)({\n _tag: \"WorkerUpdate\",\n schemaVersion: 1,\n worker: {\n schemaVersion: 1,\n delegationId: \"research\",\n targetAgentId: \"child\",\n threadId: \"child-thread\",\n },\n update: {\n schemaVersion: 1,\n agentId: \"child\",\n threadId: \"child-thread\",\n runId: \"child-run\",\n updateId: \"finding\",\n sequence: 1,\n value: { finding: \"partial\" },\n },\n });\n\n const admitted = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n const saved = yield* expectSome(\n \"update admission lookup\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n saved.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(saved.messageAdmission, metadata),\n \"Update identity and value must survive lookup\",\n );\n yield* ensure(\n Schema.toEquivalence(PersistedJson)(saved.inputPayload, base.inputPayload),\n \"Framework update must not replace application input\",\n );\n const recovery = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n recovery.submission.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(recovery.submission.messageAdmission, metadata),\n \"Recovery must retain update provenance\",\n );\n\n const replay = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n yield* ensure(\n replay.replayed && replay.receiptId === admitted.receiptId,\n \"Identical update retries must reuse the original receipt\",\n );\n for (const changed of [\n undefined,\n WorkerUpdate.make({ ...metadata, update: { ...metadata.update, sequence: 2 } }),\n WorkerUpdate.make({\n ...metadata,\n update: { ...metadata.update, value: { finding: \"changed\" } },\n }),\n ]) {\n const conflict = yield* expectFailure(\n \"changed update metadata\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n ...(changed === undefined ? {} : { messageAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict),\n \"Changed update identity or value must conflict\",\n );\n }\n }),\n);\n\nconst workerCompletionIdentity = conformanceCase(\n \"retains framework completions and rejects same-key changes or omission\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const base = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-completion\"),\n \"completion-message\",\n { text: \"hello\" },\n );\n\n const metadata = Schema.decodeSync(WorkerCompletion)({\n _tag: \"WorkerCompletion\",\n schemaVersion: 1,\n budgetExhausted: false,\n report: {\n _tag: \"Settled\",\n worker: {\n schemaVersion: 1,\n delegationId: \"research\",\n targetAgentId: \"child\",\n threadId: \"child-thread\",\n },\n receipt: {\n threadId: \"child-thread\",\n submissionId: \"child-input\",\n receiptId: \"child-receipt\",\n queueSequence: 1,\n },\n runId: \"child-run\",\n settlementId: \"child-settlement\",\n outcome: \"completed\",\n result: { answer: \"done\" },\n },\n });\n\n const admitted = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n const saved = yield* expectSome(\n \"completion admission lookup\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n saved.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(saved.messageAdmission, metadata),\n \"Completion identity and projected result must survive lookup without becoming application input\",\n );\n const recovery = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n recovery.submission.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(recovery.submission.messageAdmission, metadata),\n \"Recovery must retain completion provenance\",\n );\n\n const replayed = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n yield* ensure(\n replayed.replayed && replayed.receiptId === admitted.receiptId,\n \"Identical completion metadata must replay its receipt\",\n );\n for (const changed of [\n undefined,\n WorkerCompletion.make({ ...metadata, budgetExhausted: true }),\n ]) {\n const conflict = yield* expectFailure(\n \"different or omitted completion metadata\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n ...(changed === undefined ? {} : { messageAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict),\n \"Completion metadata changes must produce AdmissionConflict\",\n );\n }\n }),\n);\n\nconst crossPrincipalAdmissionScoping = conformanceCase(\n \"scopes idempotency keys to their principal: a second principal reusing a key mints a distinct Submission\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n // SEC-002 (security-operations §2): \"Client idempotency keys are scoped so one principal\n // cannot discover or collide with another principal's submission.\" This is the COLLIDE\n // half — a second principal reusing an existing (thread, idempotency key) must not\n // replay, overwrite, or conflict with the first principal's Submission, and must not learn\n // its identity. (The DISCOVER half — scoped lookup/resolveAdmission — is covered by\n // `lookupByIdAndKey` and `resolveAdmissionAuthority`.)\n const threadId = decodeThreadId(\"ledger-conformance-cross-principal\");\n const ledger = yield* SubmissionLedger;\n const idempotencyKey = decodeIdempotencyKey(\"shared-key-1\");\n\n const mineRequest = yield* admissionRequest(threadId, \"shared-key-1\", {\n owner: \"mine\",\n });\n\n const mine = yield* ledger.admit(mineRequest);\n\n // A DIFFERENT principal admits the SAME (thread, key) with different canonical input.\n // It is neither a replay nor an AdmissionConflict: keys are principal-scoped, so this mints\n // a fresh, distinct Submission with its own identities and queue position.\n const theirsRequest = AdmissionRequest.make({\n threadId,\n principal: OTHER_PRINCIPAL,\n idempotencyKey,\n agentId: CONFORMANCE_AGENT,\n agentDigests: CONFORMANCE_DIGESTS,\n deploymentId: CONFORMANCE_DEPLOYMENT,\n inputPayload: { owner: \"theirs\" },\n inputDigest: yield* digestJson({ owner: \"theirs\" }),\n });\n\n const theirs = yield* ledger.admit(theirsRequest);\n\n yield* ensure(\n !theirs.replayed &&\n theirs.submissionId !== mine.submissionId &&\n theirs.receiptId !== mine.receiptId &&\n theirs.queueSequence !== mine.queueSequence,\n \"A second principal reusing a key must mint a fresh, distinct Submission — never a replay or collision\",\n );\n\n // The first principal's own replay is unaffected by the second principal's admission.\n const mineReplay = yield* ledger.admit(mineRequest);\n\n yield* ensure(\n mineReplay.replayed && mineReplay.submissionId === mine.submissionId,\n \"The original principal's replay must still resolve to its own Submission after the other principal admitted\",\n );\n\n // Each principal's scoped lookup resolves ONLY its own Submission — no cross-principal\n // discovery through the shared key.\n const mineByKey = yield* expectSome(\n \"the first principal's scoped lookup\",\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: CONFORMANCE_PRINCIPAL,\n idempotencyKey,\n }),\n ),\n );\n\n const theirsByKey = yield* expectSome(\n \"the second principal's scoped lookup\",\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: OTHER_PRINCIPAL,\n idempotencyKey,\n }),\n ),\n );\n\n yield* ensure(\n mineByKey.submissionId === mine.submissionId &&\n theirsByKey.submissionId === theirs.submissionId &&\n mineByKey.submissionId !== theirsByKey.submissionId,\n \"Each principal's scoped lookup must resolve only its own Submission under the shared key\",\n );\n }),\n);\n\nconst admissionTupleBoundaries = conformanceCase(\n \"preserves admission tuple boundaries when principal and key contain separators\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-admission-separators\");\n const ledger = yield* SubmissionLedger;\n const base = yield* admissionRequest(threadId, \"r\", { work: \"separators\" });\n\n const firstRequest = AdmissionRequest.make({\n ...base,\n principal: Schema.decodeSync(Principal)(\"p\\u001fq\"),\n });\n\n const secondRequest = AdmissionRequest.make({\n ...base,\n principal: Schema.decodeSync(Principal)(\"p\"),\n idempotencyKey: decodeIdempotencyKey(\"q\\u001fr\"),\n });\n\n const first = yield* ledger.admit(firstRequest);\n const second = yield* ledger.admit(secondRequest);\n\n yield* ensure(\n !second.replayed &&\n second.submissionId !== first.submissionId &&\n second.receiptId !== first.receiptId &&\n second.queueSequence === first.queueSequence + 1,\n \"Distinct admission tuples must allocate distinct identities and consecutive queue positions\",\n );\n\n for (const [request, admitted] of [\n [firstRequest, first],\n [secondRequest, second],\n ] as const) {\n const key = SubmissionLookupByKey.make({\n threadId,\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n });\n\n const found = yield* expectSome(\"the exact admission tuple\", yield* ledger.lookup(key));\n const resolved = yield* ledger.resolveAdmission(key);\n const replay = yield* ledger.admit(request);\n\n yield* ensure(\n found.submissionId === admitted.submissionId &&\n resolved._tag === \"Admitted\" &&\n resolved.submission.submissionId === admitted.submissionId &&\n replay.replayed &&\n replay.submissionId === admitted.submissionId &&\n replay.receiptId === admitted.receiptId &&\n replay.queueSequence === admitted.queueSequence,\n \"Lookup, authoritative resolution, and replay must preserve the exact admission tuple\",\n );\n }\n }),\n);\n\nconst concurrentAdmissionFifo = conformanceCase(\n \"allocates distinct FIFO queue sequences under concurrent admission and claims in order\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-fifo-concurrent\");\n const ledger = yield* SubmissionLedger;\n\n const requests = [\n yield* admissionRequest(threadId, \"fifo-key-0\", { step: 0 }),\n yield* admissionRequest(threadId, \"fifo-key-1\", { step: 1 }),\n yield* admissionRequest(threadId, \"fifo-key-2\", { step: 2 }),\n ];\n\n const admitted = yield* Effect.forEach(requests, (request) => ledger.admit(request), {\n concurrency: \"unbounded\",\n });\n\n const duplicate = yield* admissionRequest(threadId, \"fifo-key-dup\", { step: 3 });\n\n const duplicated = yield* Effect.all([ledger.admit(duplicate), ledger.admit(duplicate)], {\n concurrency: \"unbounded\",\n });\n\n yield* ensure(\n duplicated[0].submissionId === duplicated[1].submissionId &&\n duplicated[0].receiptId === duplicated[1].receiptId &&\n duplicated[0].queueSequence === duplicated[1].queueSequence,\n \"Concurrent duplicate admissions must resolve to one Submission and one Receipt\",\n );\n yield* ensure(\n duplicated.filter((result) => !result.replayed).length === 1,\n \"Exactly one of two concurrent duplicate admissions must create the Submission\",\n );\n\n const lane = [...admitted, duplicated[0]];\n\n yield* ensure(\n new Set(lane.map((result) => result.queueSequence)).size === lane.length,\n \"Concurrent admissions on one lane must allocate distinct queue sequences\",\n );\n yield* ensure(\n new Set(lane.map((result) => result.submissionId)).size === lane.length,\n \"Concurrent admissions on one lane must mint distinct Submission identities\",\n );\n\n yield* Effect.forEach(\n lane,\n (result) => ledger.markReady(MarkReadyRequest.make({ submissionId: result.submissionId })),\n { discard: true },\n );\n\n const expectedOrder = [...lane].sort((a, b) => a.queueSequence - b.queueSequence);\n\n for (const expected of expectedOrder) {\n const claim = yield* expectSome(\n `a claim while ${expected.submissionId} heads the lane`,\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n yield* ensure(\n claim.submissionId === expected.submissionId,\n \"Claims must deliver Submissions in ascending queue-sequence order\",\n );\n yield* settleClaimed(expected, claim.ownershipToken);\n }\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_A)),\n \"A fully settled lane must produce no claim\",\n );\n }),\n);\n\nconst fifoHeadClaim = conformanceCase(\n \"claims only the lowest unsettled head and fences the lane epoch forward\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const emptyLane = decodeThreadId(\"ledger-conformance-empty\");\n\n yield* ensure(\n Option.isNone(yield* claimLane(emptyLane, PRODUCER_A)),\n \"Claiming a lane with no admitted work must return none\",\n );\n\n const threadId = decodeThreadId(\"ledger-conformance-head\");\n const first = yield* admitReady(threadId, \"head-key-1\", { order: 1 });\n const second = yield* admitReady(threadId, \"head-key-2\", { order: 2 });\n\n yield* ensure(\n second.queueSequence > first.queueSequence,\n \"Sequential admissions must allocate increasing queue sequences\",\n );\n\n const headClaim = yield* expectSome(\n \"the first claim on the lane\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n yield* ensure(\n headClaim.submissionId === first.submissionId,\n \"A claim must take the lowest unsettled queue sequence, never later work\",\n );\n\n const running = yield* expectSome(\n \"lookup of the claimed head\",\n yield* lookupById(first.submissionId),\n );\n\n yield* ensure(\n running.state === \"running\",\n \"Claiming a ready head must transition it to running with strong read visibility\",\n );\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"A lane whose head lease is live under another owner must produce no claim\",\n );\n\n yield* settleClaimed(first, headClaim.ownershipToken);\n\n const nextClaim = yield* expectSome(\n \"the claim after the head settled\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n nextClaim.submissionId === second.submissionId,\n \"Settling the head must make exactly the next queue sequence claimable\",\n );\n yield* ensure(\n nextClaim.producerEpoch > headClaim.producerEpoch,\n \"Every successful claim must bump the Thread producer epoch\",\n );\n yield* settleClaimed(second, nextClaim.ownershipToken);\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_A)),\n \"A drained lane must produce no claim\",\n );\n }),\n);\n\nconst leaseExpiryReclaim = conformanceCase(\n \"reclaims an expired lease with a higher epoch and fences the stale token\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-lease\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"lease-key-1\", { work: \"lease\" });\n\n const firstClaim = yield* expectSome(\n \"the initial claim\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const renewal = yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n yield* ensure(\n DateTime.toEpochMillis(renewal.leaseExpiresAt) >=\n DateTime.toEpochMillis(firstClaim.leaseExpiresAt),\n \"Renewal must never shorten the ownership lease\",\n );\n const liveToken = renewal.ownershipToken;\n\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"A renewed live lease must keep the lane blocked for other owners\",\n );\n\n yield* advancePastLease(renewal.leaseExpiresAt);\n\n const reclaim = yield* expectSome(\n \"the reclaim after lease expiry\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === admitted.submissionId &&\n reclaim.attemptId !== firstClaim.attemptId &&\n reclaim.ownershipToken !== liveToken,\n \"Reclaiming an expired lease must start a fresh Attempt with a fresh token\",\n );\n yield* ensure(\n reclaim.producerEpoch > firstClaim.producerEpoch,\n \"Reclaiming an expired lease must bump the producer epoch past the stale Attempt\",\n );\n\n const staleRenew = yield* expectFailure(\n \"renewing with the superseded token\",\n ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: liveToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(staleRenew) && staleRenew.actualEpoch === reclaim.producerEpoch,\n \"A superseded token must fail renewal with the current epoch reported\",\n );\n\n const staleRelease = yield* expectFailure(\n \"releasing with the superseded token\",\n ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: liveToken,\n }),\n ),\n );\n\n yield* ensure(isOwnershipLost(staleRelease), \"A superseded token must not release the lane\");\n\n const staleMark = yield* expectFailure(\n \"marking input applied with the superseded token\",\n ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: liveToken,\n recordId: submissionInputRecordId(admitted.submissionId),\n sequence: decodeSequence(1),\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(staleMark),\n \"A superseded token must not mark canonical input applied\",\n );\n\n const staleReservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: liveToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n });\n\n const staleReserve = yield* expectFailure(\n \"reserving a settlement with the superseded token\",\n ledger.reserveSettlement(staleReservation),\n );\n\n yield* ensure(\n isOwnershipLost(staleReserve),\n \"A superseded token must not reserve a settlement\",\n );\n const afterStale = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n afterStale.reservation === undefined,\n \"A fenced settlement reservation must leave no reservation behind\",\n );\n\n yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: reclaim.ownershipToken,\n }),\n );\n\n const renewalLane = decodeThreadId(\"ledger-conformance-renewal\");\n const renewalWork = yield* admitReady(renewalLane, \"renewal-key-1\", { work: \"renewal\" });\n\n const renewalClaim = yield* expectSome(\n \"the claim on the renewal lane\",\n yield* claimLane(renewalLane, PRODUCER_A),\n );\n\n yield* advancePastLease(renewalClaim.leaseExpiresAt);\n\n const lateRenewal = yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: renewalWork.submissionId,\n ownershipToken: renewalClaim.ownershipToken,\n }),\n );\n\n yield* ensure(\n DateTime.toEpochMillis(lateRenewal.leaseExpiresAt) >\n DateTime.toEpochMillis(renewalClaim.leaseExpiresAt),\n \"Renewal after expiry must succeed and extend the lease when nobody claimed in between\",\n );\n }),\n);\n\nconst releaseMakesHeadClaimable = conformanceCase(\n \"releases ownership gracefully so the head is immediately claimable\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-release\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"release-key-1\", { work: \"release\" });\n\n const firstClaim = yield* expectSome(\n \"the initial claim\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n yield* ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n const releasedRenew = yield* expectFailure(\n \"renewing a released token\",\n ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(releasedRenew),\n \"A released token must no longer renew the lease\",\n );\n\n const reclaim = yield* expectSome(\n \"the claim immediately after release\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === admitted.submissionId &&\n reclaim.producerEpoch > firstClaim.producerEpoch,\n \"A released nonterminal head must be claimable immediately with a higher epoch\",\n );\n\n const doubleRelease = yield* expectFailure(\n \"releasing with the pre-release token after a new claim\",\n ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(doubleRelease),\n \"A superseded token must not release the new Attempt's ownership\",\n );\n yield* settleClaimed(admitted, reclaim.ownershipToken);\n }),\n);\n\nconst inputAppliedIdempotency = conformanceCase(\n \"marks canonical input applied idempotently under the owning token\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-input\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"input-key-1\", { work: \"input\" });\n\n const claim = yield* expectSome(\n \"the claim before input apply\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const marker = MarkInputAppliedRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n recordId: submissionInputRecordId(admitted.submissionId),\n sequence: decodeSequence(2),\n });\n\n yield* ledger.markInputApplied(marker);\n\n const applied = yield* expectSome(\n \"lookup after marking input applied\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n applied.state === \"input-applied\",\n \"Marking input applied must transition the Submission to input-applied\",\n );\n\n yield* ledger.markInputApplied(marker);\n for (const conflicting of [\n MarkInputAppliedRequest.make({\n ...marker,\n recordId: submissionInputRecordId(decodeSubmissionId(\"different-input-marker\")),\n }),\n MarkInputAppliedRequest.make({ ...marker, sequence: decodeSequence(3) }),\n ]) {\n const error = yield* expectFailure(\n \"a conflicting input-applied marker\",\n ledger.markInputApplied(conflicting),\n );\n\n yield* ensure(isLedgerError(error), \"Conflicting input markers must fail as LedgerError\");\n }\n const snapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n snapshot.inputApplied !== undefined &&\n snapshot.inputApplied.recordId === marker.recordId &&\n snapshot.inputApplied.sequence === marker.sequence &&\n snapshot.submission.state === \"input-applied\",\n \"Identical replays and rejected conflicts must retain the original input-applied marker\",\n );\n }),\n);\n\nconst settlementLifecycle = conformanceCase(\n \"reserves and finalizes exactly one settlement with idempotent replays\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-settle\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"settle-key-1\", { work: \"settle\" });\n\n const claim = yield* expectSome(\n \"the claim before terminalization\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const reservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n result: { answer: 42 },\n });\n\n const reserved = yield* ledger.reserveSettlement(reservation);\n\n yield* ensure(\n !reserved.replayed &&\n reserved.settlementId === reservation.settlementId &&\n reserved.outcome === \"completed\" &&\n reserved.recordDigest === reservation.recordDigest,\n \"The first reservation must commit the exact reserved record without replay\",\n );\n\n const terminalizing = yield* expectSome(\n \"lookup after reservation\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n terminalizing.state === \"terminalizing\",\n \"Reserving a settlement must transition the Submission to terminalizing\",\n );\n\n const replayedReservation = yield* ledger.reserveSettlement(reservation);\n\n yield* ensure(\n replayedReservation.replayed &&\n replayedReservation.recordDigest === reservation.recordDigest,\n \"An identical reservation must replay with the stored exact record\",\n );\n\n const finalization = SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: reservation.settlementId,\n });\n\n const settlement = yield* ledger.finalizeSettlement(finalization);\n\n yield* ensure(\n settlement.submissionId === admitted.submissionId &&\n settlement.settlementId === reservation.settlementId &&\n settlement.receiptId === admitted.receiptId &&\n settlement.outcome === \"completed\",\n \"Finalization must return the Settlement bound to the admission Receipt\",\n );\n\n const settled = yield* expectSome(\n \"lookup after finalization\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n settled.state === \"settled\" && settled.settledOutcome === \"completed\",\n \"Finalization must settle the Submission with its recorded outcome\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n const retried = yield* ledger.finalizeSettlement(finalization);\n\n yield* ensure(\n retried.settlementId === settlement.settlementId &&\n retried.receiptId === settlement.receiptId &&\n retried.outcome === settlement.outcome &&\n sameInstant(retried.settledAt, settlement.settledAt),\n \"Retrying finalization after a lost acknowledgment must return the same Settlement\",\n );\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"A settled lane with no further work must produce no claim\",\n );\n\n const failedDiagnostic = {\n errorTag: \"ConformanceFailure\",\n message: \"The conformance Submission failed\",\n } as const;\n\n const failedAdmission = yield* admitReady(threadId, \"settle-key-2\", {\n work: \"fail\",\n });\n\n const failedClaim = yield* expectSome(\n \"the claim before failed terminalization\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const failedReservation = yield* settlementReservation({\n submissionId: failedAdmission.submissionId,\n ownershipToken: failedClaim.ownershipToken,\n receiptId: failedAdmission.receiptId,\n outcome: \"failed\",\n result: failedDiagnostic,\n });\n\n yield* ledger.reserveSettlement(failedReservation);\n\n const failedSettlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: failedAdmission.submissionId,\n settlementId: failedReservation.settlementId,\n }),\n );\n\n yield* ensure(\n failedSettlement.outcome === \"failed\" &&\n failedSettlement.failure?.errorTag === failedDiagnostic.errorTag &&\n failedSettlement.failure.message === failedDiagnostic.message,\n \"A failed finalization must return the exact bounded canonical diagnostic\",\n );\n yield* TestClock.adjust(\"1 second\");\n\n const replayedFailedSettlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: failedAdmission.submissionId,\n settlementId: failedReservation.settlementId,\n }),\n );\n\n yield* ensure(\n replayedFailedSettlement.failure?.errorTag === failedDiagnostic.errorTag &&\n replayedFailedSettlement.failure.message === failedDiagnostic.message &&\n sameInstant(replayedFailedSettlement.settledAt, failedSettlement.settledAt),\n \"A replayed failed finalization must preserve its diagnostic and original settledAt\",\n );\n }),\n);\n\nconst settlementConflicts = conformanceCase(\n \"rejects conflicting settlement reservations and finalizations\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-settle-conflict\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"conflict-key-1\", { work: \"conflict\" });\n\n const claim = yield* expectSome(\n \"the claim before terminalization\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const reservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n result: { attempt: 1 },\n });\n\n yield* ledger.reserveSettlement(reservation);\n\n const conflictingOutcome = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"failed\",\n result: {\n errorTag: \"ConformanceFailure\",\n message: \"The conflicting conformance reservation failed\",\n },\n });\n\n const outcomeConflict = yield* expectFailure(\n \"reserving a different outcome for the same Submission\",\n ledger.reserveSettlement(conflictingOutcome),\n );\n\n yield* ensure(\n isSettlementConflict(outcomeConflict) && outcomeConflict.existingOutcome === \"completed\",\n \"A second reservation with a different outcome must conflict with the recorded outcome\",\n );\n\n const conflictingContent = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n result: { attempt: 2 },\n });\n\n const contentConflict = yield* expectFailure(\n \"reserving the same outcome with different canonical content\",\n ledger.reserveSettlement(conflictingContent),\n );\n\n yield* ensure(\n isSettlementConflict(contentConflict) && contentConflict.existingOutcome === \"completed\",\n \"A second reservation with different content must conflict even when outcomes match\",\n );\n\n const wrongFinalization = yield* expectFailure(\n \"finalizing with a settlement identity that was never reserved\",\n ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: submissionSettlementId(\n decodeSubmissionId(`${admitted.submissionId}-other`),\n ),\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(wrongFinalization) &&\n wrongFinalization.existingOutcome === \"completed\",\n \"Finalization disagreeing with the reserved settlement must conflict\",\n );\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: reservation.settlementId,\n }),\n );\n\n yield* ensure(\n settlement.outcome === \"completed\",\n \"The originally reserved outcome must remain the one that settles\",\n );\n }),\n);\n\nconst abortIdempotency = conformanceCase(\n \"records abort intent idempotently and refuses to abort settled work\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-abort\");\n const ledger = yield* SubmissionLedger;\n\n const admitted = yield* ledger.admit(\n yield* admissionRequest(threadId, \"abort-key-1\", { work: \"abort\" }),\n );\n\n const readRequest = AbortIntentRequest.make({ submissionId: admitted.submissionId });\n\n yield* ensure(\n (yield* ledger.readAbortIntent(readRequest)) === undefined,\n \"An admitted Submission without an abort intent must return undefined\",\n );\n\n const intent = yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: admitted.submissionId,\n author: \"conformance-operator\",\n reason: \"first abort request\",\n }),\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const repeated = yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: admitted.submissionId,\n author: \"conformance-operator\",\n reason: \"second abort request\",\n }),\n );\n\n yield* ensure(\n repeated.reason === intent.reason &&\n repeated.author === intent.author &&\n sameInstant(repeated.requestedAt, intent.requestedAt),\n \"Repeating an abort command must return the recorded intent unchanged\",\n );\n const snapshot = yield* recoverySnapshot(admitted.submissionId);\n const narrow = yield* ledger.readAbortIntent(readRequest);\n\n yield* ensure(\n snapshot.abortIntent !== undefined && snapshot.abortIntent.reason === intent.reason,\n \"The recovery snapshot must expose the recorded abort intent\",\n );\n yield* ensure(\n narrow !== undefined &&\n narrow.submissionId === intent.submissionId &&\n narrow.author === intent.author &&\n narrow.reason === intent.reason &&\n sameInstant(narrow.requestedAt, intent.requestedAt) &&\n narrow.canonicalRecordId === snapshot.abortIntent?.canonicalRecordId,\n \"The narrow read must preserve the recorded intent and canonical proof\",\n );\n\n const unknown = yield* expectFailure(\n \"reading an unknown Submission's abort intent\",\n ledger.readAbortIntent(\n AbortIntentRequest.make({ submissionId: decodeSubmissionId(\"unknown-abort-target\") }),\n ),\n );\n\n yield* ensure(unknown._tag === \"LedgerError\", \"Unknown abort targets must fail typed\");\n\n const settledLane = decodeThreadId(\"ledger-conformance-abort-settled\");\n const settledWork = yield* admitReady(settledLane, \"abort-key-2\", { work: \"settled\" });\n\n const claim = yield* expectSome(\n \"the claim on the settled lane\",\n yield* claimLane(settledLane, PRODUCER_A),\n );\n\n yield* settleClaimed(settledWork, claim.ownershipToken);\n\n const terminalAbort = yield* expectFailure(\n \"aborting a settled Submission\",\n ledger.requestAbort(\n AbortCommand.make({\n submissionId: settledWork.submissionId,\n author: \"conformance-operator\",\n reason: \"too late\",\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(terminalAbort) && terminalAbort.existingOutcome === \"completed\",\n \"Abort must never rewrite a terminal outcome\",\n );\n }),\n);\n\nconst scanNonterminalWorklist = conformanceCase(\n \"scans exactly the unsettled work in lane order\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const laneA = decodeThreadId(\"ledger-conformance-scan-a\");\n const laneB = decodeThreadId(\"ledger-conformance-scan-b\");\n const ledger = yield* SubmissionLedger;\n\n const first = yield* admitReady(laneA, \"scan-key-1\", { step: 1 });\n const second = yield* admitReady(laneA, \"scan-key-2\", { step: 2 });\n const third = yield* admitReady(laneA, \"scan-key-3\", { step: 3 });\n const settledElsewhere = yield* admitReady(laneB, \"scan-key-4\", { step: 4 });\n\n const firstClaim = yield* expectSome(\n \"the claim on the first head\",\n yield* claimLane(laneA, PRODUCER_A),\n );\n\n yield* settleClaimed(first, firstClaim.ownershipToken);\n yield* expectSome(\"the claim on the second head\", yield* claimLane(laneA, PRODUCER_A));\n\n const otherClaim = yield* expectSome(\n \"the claim on the other lane\",\n yield* claimLane(laneB, PRODUCER_A),\n );\n\n yield* settleClaimed(settledElsewhere, otherClaim.ownershipToken);\n\n const scanned = yield* ledger.scanNonterminal.pipe(Stream.runCollect);\n\n yield* ensure(\n scanned.every((snapshot) => snapshot.state !== \"settled\"),\n \"scanNonterminal must never emit settled Submissions\",\n );\n\n const mine = scanned.filter(\n (snapshot) => snapshot.threadId === laneA || snapshot.threadId === laneB,\n );\n\n yield* ensure(\n mine.length === 2 &&\n mine.at(0)?.submissionId === second.submissionId &&\n mine.at(1)?.submissionId === third.submissionId,\n \"scanNonterminal must emit exactly the unsettled Submissions in queue-sequence order\",\n );\n yield* ensure(\n mine.at(0)?.state === \"running\" && mine.at(1)?.state === \"ready\",\n \"scanNonterminal snapshots must carry the current Submission states\",\n );\n const start = scanned.findIndex((snapshot) => snapshot.submissionId === second.submissionId);\n\n yield* ensure(\n start >= 0 && scanned.at(start + 1)?.submissionId === third.submissionId,\n \"One lane's unsettled Submissions must be contiguous in (thread, sequence) order\",\n );\n }),\n);\n\nconst lookupByIdAndKey = conformanceCase(\n \"looks up submissions by identity and scoped idempotency key with strong reads\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-lookup\");\n const ledger = yield* SubmissionLedger;\n const request = yield* admissionRequest(threadId, \"lookup-key-1\", { city: \"Kyoto\" });\n const admitted = yield* ledger.admit(request);\n\n const byId = yield* expectSome(\n \"lookup by Submission identity\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n byId.submissionId === admitted.submissionId &&\n byId.threadId === threadId &&\n byId.queueSequence === admitted.queueSequence &&\n byId.principal === request.principal &&\n byId.idempotencyKey === request.idempotencyKey &&\n byId.agentId === request.agentId &&\n byId.deploymentId === request.deploymentId &&\n byId.inputDigest === request.inputDigest &&\n byId.receiptId === admitted.receiptId &&\n byId.state === \"admitted\" &&\n byId.settledOutcome === undefined &&\n byId.readyAt === undefined,\n \"Lookup by identity must return the full admission snapshot\",\n );\n\n const byKey = yield* expectSome(\n \"lookup by scoped idempotency key\",\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n }),\n ),\n );\n\n yield* ensure(\n byKey.submissionId === admitted.submissionId,\n \"Lookup by key must resolve to the same Submission as lookup by identity\",\n );\n\n yield* ensure(\n Option.isNone(\n yield* lookupById(decodeSubmissionId(\"submission-ledger-conformance-missing\")),\n ),\n \"Lookup of an unknown Submission identity must return none\",\n );\n yield* ensure(\n Option.isNone(\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: request.principal,\n idempotencyKey: decodeIdempotencyKey(\"lookup-key-missing\"),\n }),\n ),\n ),\n \"Lookup of an unknown idempotency key must return none\",\n );\n yield* ensure(\n Option.isNone(\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: OTHER_PRINCIPAL,\n idempotencyKey: request.idempotencyKey,\n }),\n ),\n ),\n \"Idempotency keys must be scoped to their principal\",\n );\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n\n const readyByKey = yield* expectSome(\n \"lookup by key after readiness\",\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n }),\n ),\n );\n\n yield* ensure(\n readyByKey.state === \"ready\" && readyByKey.readyAt !== undefined,\n \"Lookups must observe prior writes with strong consistency\",\n );\n }),\n);\n\nconst recoverySnapshotConsistency = conformanceCase(\n \"loads a strongly consistent recovery snapshot without exposing the live token\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-recovery\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"recovery-key-1\", { work: \"recovery\" });\n\n const initial = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n initial.submission.state === \"ready\" &&\n initial.ownership === undefined &&\n initial.inputApplied === undefined &&\n initial.reservation === undefined &&\n initial.abortIntent === undefined,\n \"A ready, unclaimed Submission must have no ownership, marker, reservation, or intent\",\n );\n\n const claim = yield* expectSome(\n \"the claim before snapshotting\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const owned = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n owned.ownership !== undefined &&\n owned.ownership.attemptId === claim.attemptId &&\n owned.ownership.producerEpoch === claim.producerEpoch &&\n owned.ownership.ownerProducerId === PRODUCER_A &&\n sameInstant(owned.ownership.leaseExpiresAt, claim.leaseExpiresAt),\n \"The recovery snapshot must expose the live Attempt's identity, owner, epoch, and lease\",\n );\n\n const marker = MarkInputAppliedRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n recordId: submissionInputRecordId(admitted.submissionId),\n sequence: decodeSequence(3),\n });\n\n yield* ledger.markInputApplied(marker);\n yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: admitted.submissionId,\n author: \"conformance-operator\",\n reason: \"abort during recovery case\",\n }),\n );\n\n const reservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"aborted\",\n });\n\n yield* ledger.reserveSettlement(reservation);\n\n const reserved = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n reserved.inputApplied !== undefined &&\n reserved.inputApplied.recordId === marker.recordId &&\n reserved.inputApplied.sequence === marker.sequence,\n \"The recovery snapshot must expose the applied-input marker\",\n );\n yield* ensure(\n reserved.abortIntent !== undefined &&\n reserved.abortIntent.reason === \"abort during recovery case\",\n \"The recovery snapshot must expose the abort intent\",\n );\n yield* ensure(\n reserved.reservation !== undefined &&\n !reserved.reservation.finalized &&\n reserved.reservation.settlementId === reservation.settlementId &&\n reserved.reservation.outcome === \"aborted\" &&\n reserved.reservation.recordDigest === reservation.recordDigest,\n \"The recovery snapshot must expose the unfinalized reservation with its exact record\",\n );\n\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: reservation.settlementId,\n }),\n );\n const settled = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n settled.submission.state === \"settled\" &&\n settled.submission.settledOutcome === \"aborted\" &&\n settled.reservation !== undefined &&\n settled.reservation.finalized,\n \"After finalization the snapshot must show the settled state and finalized reservation\",\n );\n }),\n);\n\nconst joiningPrefixClaim = conformanceCase(\n \"claims a contiguous joining prefix and stops at a gap\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-joining-prefix\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"join-prefix-host\", { work: \"host\" });\n const second = yield* admitReady(threadId, \"join-prefix-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"join-prefix-3\", { queued: 3 });\n\n // Admitted but never marked ready: the gap that breaks the contiguous prefix.\n const fourth = yield* ledger.admit(\n yield* admissionRequest(threadId, \"join-prefix-4\", { queued: 4 }),\n );\n\n const fifth = yield* admitReady(threadId, \"join-prefix-5\", { queued: 5 });\n\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n yield* ensure(\n hostClaim.submissionId === host.submissionId,\n \"The host must head the lane before joining later work\",\n );\n\n const foreign = yield* expectFailure(\n \"claiming joining work without owning the host lane\",\n ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: BOGUS_TOKEN,\n maxCount: 8,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(foreign),\n \"claimJoining must be fenced by the host's ownership token\",\n );\n\n const first = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 1,\n }),\n );\n\n yield* ensure(\n first.length === 1 &&\n first[0].submissionId === second.submissionId &&\n first[0].queueSequence === second.queueSequence &&\n persistedJsonEquivalent(first[0].inputPayload, { queued: 2 }),\n \"maxCount must bound the claim to exactly the next queued Submission with its input\",\n );\n\n const rest = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n rest.length === 1 && rest[0].submissionId === third.submissionId,\n \"A repeated claim must skip already-joining rows and stop at the admitted gap\",\n );\n\n const blocked = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n blocked.length === 0,\n \"An admitted-not-ready row must break the contiguous prefix and hide later ready work\",\n );\n\n const secondState = yield* expectSome(\n \"lookup of a claimed joining Submission\",\n yield* lookupById(second.submissionId),\n );\n\n const fourthState = yield* expectSome(\n \"lookup of the gap Submission\",\n yield* lookupById(fourth.submissionId),\n );\n\n const fifthState = yield* expectSome(\n \"lookup of the ready Submission after the gap\",\n yield* lookupById(fifth.submissionId),\n );\n\n yield* ensure(\n secondState.state === \"joining\" &&\n fourthState.state === \"admitted\" &&\n fifthState.state === \"ready\",\n \"Claiming must transition exactly the claimed prefix to joining\",\n );\n\n const hostSnapshot = yield* recoverySnapshot(host.submissionId);\n\n yield* ensure(\n hostSnapshot.joins.length === 2 &&\n hostSnapshot.joins[0].submissionId === second.submissionId &&\n hostSnapshot.joins[0].state === \"joining\" &&\n hostSnapshot.joins[0].hostSubmissionId === host.submissionId &&\n hostSnapshot.joins[1].submissionId === third.submissionId,\n \"The host recovery snapshot must expose the claimed prefix in queue order\",\n );\n const joinedSide = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n joinedSide.hostSubmissionId === host.submissionId,\n \"A joining Submission's recovery snapshot must expose its host linkage\",\n );\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: fourth.submissionId }));\n\n const afterGap = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n afterGap.length === 2 &&\n afterGap[0].submissionId === fourth.submissionId &&\n afterGap[1].submissionId === fifth.submissionId,\n \"Once the gap closes, the claim must extend past already-claimed rows in queue order\",\n );\n }),\n);\n\nconst revertJoiningReturnsToReady = conformanceCase(\n \"revertJoining returns exactly the pre-append claims to ready\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-revert-joining\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"revert-host\", { work: \"host\" });\n const second = yield* admitReady(threadId, \"revert-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"revert-3\", { queued: 3 });\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const claims = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(claims.length === 2, \"Both queued Submissions must join the host's prefix\");\n\n // third's canonical input is appended; second's never is.\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: third.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: submissionInputRecordId(third.submissionId),\n sequence: decodeSequence(7),\n }),\n );\n\n yield* ledger.revertJoining(RevertJoiningRequest.make({ submissionId: second.submissionId }));\n\n const reverted = yield* expectSome(\n \"lookup after revert\",\n yield* lookupById(second.submissionId),\n );\n\n yield* ensure(\n reverted.state === \"ready\",\n \"Reverting a pre-append joining Submission must return it to ready\",\n );\n const revertedSnapshot = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n revertedSnapshot.hostSubmissionId === undefined,\n \"Reverting must clear the host linkage\",\n );\n const hostSnapshot = yield* recoverySnapshot(host.submissionId);\n\n yield* ensure(\n hostSnapshot.joins.length === 1 &&\n hostSnapshot.joins[0].submissionId === third.submissionId &&\n hostSnapshot.joins[0].state === \"joined\",\n \"The reverted Submission must leave the host's join view\",\n );\n\n yield* ledger.revertJoining(RevertJoiningRequest.make({ submissionId: second.submissionId }));\n\n const stillReady = yield* expectSome(\n \"lookup after repeating the revert\",\n yield* lookupById(second.submissionId),\n );\n\n yield* ensure(stillReady.state === \"ready\", \"Repeating revertJoining must be a no-op\");\n\n // A post-append joined Submission must NOT revert (DUR-016: it reattaches instead).\n yield* ledger.revertJoining(RevertJoiningRequest.make({ submissionId: third.submissionId }));\n\n const joined = yield* expectSome(\n \"lookup of the joined Submission after an attempted revert\",\n yield* lookupById(third.submissionId),\n );\n\n yield* ensure(\n joined.state === \"joined\",\n \"revertJoining must be a no-op for an already-joined Submission\",\n );\n\n const reclaimed = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n reclaimed.length === 1 && reclaimed[0].submissionId === second.submissionId,\n \"A reverted Submission must be claimable again exactly once\",\n );\n }),\n);\n\nconst markJoinedIdempotency = conformanceCase(\n \"markJoined is idempotent and repairable from history\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-mark-joined\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"mark-joined-host\", { work: \"host\" });\n const second = yield* admitReady(threadId, \"mark-joined-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"mark-joined-3\", { queued: 3 });\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n const marker = MarkJoinedRequest.make({\n submissionId: second.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: submissionInputRecordId(second.submissionId),\n sequence: decodeSequence(4),\n });\n\n yield* ledger.markJoined(marker);\n\n const joined = yield* expectSome(\n \"lookup after marking joined\",\n yield* lookupById(second.submissionId),\n );\n\n yield* ensure(\n joined.state === \"joined\",\n \"Marking the canonical input position must transition joining to joined\",\n );\n\n yield* ledger.markJoined(marker);\n const snapshot = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n snapshot.submission.state === \"joined\" &&\n snapshot.hostSubmissionId === host.submissionId &&\n snapshot.inputApplied !== undefined &&\n snapshot.inputApplied.recordId === marker.recordId &&\n snapshot.inputApplied.sequence === marker.sequence,\n \"Repeating the identical join marker must be a no-op with the marker retained\",\n );\n\n const divergent = yield* expectFailure(\n \"re-marking with a different canonical position\",\n ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: second.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: marker.recordId,\n sequence: decodeSequence(5),\n }),\n ),\n );\n\n yield* ensure(\n !isOwnershipLost(divergent),\n \"A divergent join marker must fail as a ledger integrity error, not ownership loss\",\n );\n\n const stale = yield* expectFailure(\n \"marking joined without owning the host lane\",\n ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: third.submissionId,\n ownershipToken: BOGUS_TOKEN,\n recordId: submissionInputRecordId(third.submissionId),\n sequence: decodeSequence(6),\n }),\n ),\n );\n\n yield* ensure(isOwnershipLost(stale), \"markJoined must be fenced by the host's ownership\");\n\n // Repairable from history: the host Attempt dies and a later host Attempt repairs the\n // lost marker under its fresh ownership token (DUR-016).\n yield* ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n }),\n );\n\n const reclaim = yield* expectSome(\n \"the host reclaim after release\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === host.submissionId &&\n reclaim.producerEpoch > hostClaim.producerEpoch,\n \"The host must be reclaimable while its joined work is pending\",\n );\n\n const superseded = yield* expectFailure(\n \"repairing the marker with the superseded host token\",\n ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: third.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: submissionInputRecordId(third.submissionId),\n sequence: decodeSequence(6),\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(superseded),\n \"A superseded host token must not repair a join marker\",\n );\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: third.submissionId,\n ownershipToken: reclaim.ownershipToken,\n recordId: submissionInputRecordId(third.submissionId),\n sequence: decodeSequence(6),\n }),\n );\n\n const repaired = yield* expectSome(\n \"lookup after the repair\",\n yield* lookupById(third.submissionId),\n );\n\n yield* ensure(\n repaired.state === \"joined\",\n \"A later host Attempt must repair the lost join marker from history\",\n );\n }),\n);\n\nconst claimNeverGrantsBlockedHead = conformanceCase(\n \"claim never grants a suspended, unknown, joining, or joined head\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n // joining head: the host settled while a claimed-but-unappended join was pending.\n const joiningLane = decodeThreadId(\"ledger-conformance-head-joining\");\n const joiningHost = yield* admitReady(joiningLane, \"head-joining-host\", { work: \"host\" });\n const joiningSub = yield* admitReady(joiningLane, \"head-joining-2\", { queued: 2 });\n\n yield* admitReady(joiningLane, \"head-joining-3\", { queued: 3 });\n\n const joiningHostClaim = yield* expectSome(\n \"the joining lane's host claim\",\n yield* claimLane(joiningLane, PRODUCER_A),\n );\n\n yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: joiningLane,\n hostSubmissionId: joiningHost.submissionId,\n ownershipToken: joiningHostClaim.ownershipToken,\n maxCount: 1,\n }),\n );\n yield* settleClaimed(joiningHost, joiningHostClaim.ownershipToken);\n yield* ensure(\n Option.isNone(yield* claimLane(joiningLane, PRODUCER_B)),\n \"A joining head must block the lane; later ready work is never skipped past it\",\n );\n yield* ledger.revertJoining(\n RevertJoiningRequest.make({ submissionId: joiningSub.submissionId }),\n );\n\n const afterRevert = yield* expectSome(\n \"the claim after reverting the joining head\",\n yield* claimLane(joiningLane, PRODUCER_B),\n );\n\n yield* ensure(\n afterRevert.submissionId === joiningSub.submissionId,\n \"Reverting the joining head must make it claimable in FIFO order\",\n );\n\n // joined head: the host settled between its finalization and the joined settlement.\n const joinedLane = decodeThreadId(\"ledger-conformance-head-joined\");\n const joinedHost = yield* admitReady(joinedLane, \"head-joined-host\", { work: \"host\" });\n const joinedSub = yield* admitReady(joinedLane, \"head-joined-2\", { queued: 2 });\n\n const joinedHostClaim = yield* expectSome(\n \"the joined lane's host claim\",\n yield* claimLane(joinedLane, PRODUCER_A),\n );\n\n yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: joinedLane,\n hostSubmissionId: joinedHost.submissionId,\n ownershipToken: joinedHostClaim.ownershipToken,\n maxCount: 1,\n }),\n );\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: joinedSub.submissionId,\n ownershipToken: joinedHostClaim.ownershipToken,\n recordId: submissionInputRecordId(joinedSub.submissionId),\n sequence: decodeSequence(3),\n }),\n );\n\n const joinedAbort = yield* expectFailure(\n \"aborting a joined Submission\",\n ledger.requestAbort(\n AbortCommand.make({\n submissionId: joinedSub.submissionId,\n author: \"conformance-operator\",\n reason: \"joined abort target\",\n }),\n ),\n );\n\n yield* ensure(\n isJoinedToHost(joinedAbort) && joinedAbort.hostSubmissionId === joinedHost.submissionId,\n \"Abort of a joined Submission must fail with the host linkage — the abort target is the host\",\n );\n yield* settleClaimed(joinedHost, joinedHostClaim.ownershipToken);\n yield* ensure(\n Option.isNone(yield* claimLane(joinedLane, PRODUCER_B)),\n \"A joined head must block the lane; it settles with the host, never with a worker claim\",\n );\n\n // suspended head: durable approval waiting consumes no worker permit.\n const suspendedLane = decodeThreadId(\"ledger-conformance-head-suspended\");\n\n const suspendedHost = yield* admitReady(suspendedLane, \"head-suspended-host\", {\n work: \"host\",\n });\n\n const suspendedClaim = yield* expectSome(\n \"the suspended lane's claim\",\n yield* claimLane(suspendedLane, PRODUCER_A),\n );\n\n const gatedCall = decodeToolCallId(\"call-head-suspended\");\n\n const suspendOutcome = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: suspendedHost.submissionId,\n ownershipToken: suspendedClaim.ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [gatedCall] }),\n }),\n );\n\n yield* ensure(suspendOutcome === \"suspended\", \"An undecided approval must suspend durably\");\n yield* ensure(\n Option.isNone(yield* claimLane(suspendedLane, PRODUCER_B)),\n \"A suspended head must produce no claim\",\n );\n yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: suspendedHost.submissionId,\n toolCallId: gatedCall,\n decision: \"approved\",\n resolver: \"conformance-approver\",\n reason: \"unblock the suspended head\",\n }),\n );\n\n const wokenClaim = yield* expectSome(\n \"the claim after the covering decision\",\n yield* claimLane(suspendedLane, PRODUCER_B),\n );\n\n yield* ensure(\n wokenClaim.submissionId === suspendedHost.submissionId &&\n wokenClaim.producerEpoch > suspendedClaim.producerEpoch,\n \"A covering decision must wake the lane for a fresh fenced Attempt\",\n );\n\n // unknown head: the DUR-017 blocked lane outlives lease expiry.\n const unknownLane = decodeThreadId(\"ledger-conformance-head-unknown\");\n const unknownHost = yield* admitReady(unknownLane, \"head-unknown-host\", { work: \"host\" });\n\n const unknownClaim = yield* expectSome(\n \"the unknown lane's claim\",\n yield* claimLane(unknownLane, PRODUCER_A),\n );\n\n const unknownCall = decodeToolCallId(\"call-head-unknown\");\n\n yield* ledger.markUnknown(\n MarkUnknownRequest.make({\n submissionId: unknownHost.submissionId,\n toolCallIds: [unknownCall],\n reason: \"an ordinary call may have executed\",\n }),\n );\n yield* advancePastLease(unknownClaim.leaseExpiresAt);\n yield* ensure(\n Option.isNone(yield* claimLane(unknownLane, PRODUCER_B)),\n \"An unknown head must stay blocked even after the stale lease expires\",\n );\n yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: unknownHost.submissionId,\n toolCallId: unknownCall,\n author: \"conformance-operator\",\n reason: \"supplier store shows no effect\",\n resolution: ResolutionNeverHappened.make(),\n }),\n );\n\n const reopened = yield* expectSome(\n \"the claim after the covering resolution\",\n yield* claimLane(unknownLane, PRODUCER_B),\n );\n\n yield* ensure(\n reopened.submissionId === unknownHost.submissionId,\n \"A covering resolution must reopen the blocked lane\",\n );\n }),\n);\n\nconst approvalDecisionIdempotency = conformanceCase(\n \"approval decisions are idempotent and conflict on divergence\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-approval\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"approval-key-1\", { work: \"approve\" });\n\n const claim = yield* expectSome(\n \"the claim before decisions\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const callA = decodeToolCallId(\"call-approval-a\");\n const callB = decodeToolCallId(\"call-approval-b\");\n\n const first = yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callA,\n decision: \"approved\",\n resolver: \"conformance-approver\",\n reason: \"policy allows the booking\",\n }),\n );\n\n yield* ensure(\n first.decision === \"approved\" && first.toolCallId === callA,\n \"The first decision must record the intent\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const replayed = yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callA,\n decision: \"approved\",\n resolver: \"conformance-approver-second\",\n reason: \"a different reason text\",\n }),\n );\n\n yield* ensure(\n replayed.reason === first.reason &&\n replayed.resolver === first.resolver &&\n sameInstant(replayed.decidedAt, first.decidedAt),\n \"Repeating the same decision must replay the recorded intent unchanged\",\n );\n\n const conflict = yield* expectFailure(\n \"re-deciding the same call divergently\",\n ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callA,\n decision: \"denied\",\n resolver: \"conformance-approver\",\n reason: \"changed my mind\",\n }),\n ),\n );\n\n yield* ensure(\n isApprovalConflict(conflict) &&\n conflict.toolCallId === callA &&\n conflict.existingDecision === \"approved\",\n \"A divergent re-decision must conflict with the recorded decision\",\n );\n\n yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callB,\n decision: \"denied\",\n resolver: \"conformance-approver\",\n reason: \"policy denies the cancellation\",\n }),\n );\n const snapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n snapshot.approvalDecisions.length === 2 &&\n snapshot.approvalDecisions.some(\n (intent) => intent.toolCallId === callA && intent.decision === \"approved\",\n ) &&\n snapshot.approvalDecisions.some(\n (intent) => intent.toolCallId === callB && intent.decision === \"denied\",\n ),\n \"The recovery snapshot must expose every recorded decision intent\",\n );\n\n yield* settleClaimed(admitted, claim.ownershipToken);\n\n const late = yield* expectFailure(\n \"deciding an approval for a settled Submission\",\n ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: decodeToolCallId(\"call-approval-late\"),\n decision: \"approved\",\n resolver: \"conformance-approver\",\n reason: \"too late\",\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(late) && late.existingOutcome === \"completed\",\n \"A decision must never land on a settled Submission\",\n );\n }),\n);\n\nconst unknownAbortClaim = conformanceCase(\n \"a durable abort makes an unknown head claimable without resolving or replaying its calls\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n for (const abortFirst of [false, true]) {\n const threadId = decodeThreadId(`ledger-conformance-unknown-abort-${abortFirst}`);\n const head = yield* admitReady(threadId, \"head\", { work: \"uncertain\" });\n\n const original = yield* expectSome(\n \"original claim\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const follower = yield* admitReady(threadId, \"follower\", { work: \"later\" });\n\n const command = AbortCommand.make({\n submissionId: head.submissionId,\n author: \"first-operator\",\n reason: \"stop without asserting external rollback\",\n });\n\n if (abortFirst) yield* ledger.requestAbort(command);\n yield* ledger.markUnknown(\n MarkUnknownRequest.make({\n submissionId: head.submissionId,\n toolCallIds: [decodeToolCallId(\"uncertain-one\"), decodeToolCallId(\"uncertain-two\")],\n reason: \"external replies were lost\",\n }),\n );\n if (abortFirst) {\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"Abort must not bypass a still-live ownership lease\",\n );\n }\n yield* advancePastLease(original.leaseExpiresAt);\n if (!abortFirst) {\n const later = yield* expectSome(\n \"runnable follower behind unknown work\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n later.submissionId === follower.submissionId,\n \"Unknown work must preserve the queue order of runnable followers\",\n );\n yield* ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: later.submissionId,\n ownershipToken: later.ownershipToken,\n }),\n );\n }\n const intent = yield* ledger.requestAbort(command);\n\n const duplicate = yield* ledger.requestAbort(\n AbortCommand.make({\n ...command,\n author: \"later-operator\",\n reason: \"lost acknowledgement retry\",\n }),\n );\n\n yield* ensure(\n duplicate.author === intent.author &&\n duplicate.reason === intent.reason &&\n sameInstant(duplicate.requestedAt, intent.requestedAt),\n \"The first abort audit must win\",\n );\n\n const reclaimed = yield* expectSome(\n \"unknown head with durable abort\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaimed.submissionId === head.submissionId &&\n reclaimed.producerEpoch > original.producerEpoch,\n \"Abort must claim the head with a fresh fence, never skip to its follower\",\n );\n const snapshot = yield* recoverySnapshot(head.submissionId);\n\n yield* ensure(\n snapshot.submission.state === \"unknown\" && snapshot.unknownResolutions.length === 0,\n \"Claiming for abort must not erase uncertainty or manufacture tool resolutions\",\n );\n\n const stale = yield* expectFailure(\n \"stale owner\",\n ledger.reserveSettlement(\n yield* settlementReservation({\n ...head,\n ownershipToken: original.ownershipToken,\n outcome: \"completed\",\n }),\n ),\n );\n\n yield* ensure(isOwnershipLost(stale), \"The original owner must remain fenced\");\n\n const reservation = yield* settlementReservation({\n ...head,\n ownershipToken: reclaimed.ownershipToken,\n outcome: \"aborted\",\n });\n\n yield* ledger.reserveSettlement(reservation);\n yield* ledger.requestAbort(command);\n const settled = yield* ledger.finalizeSettlement(SettlementFinalization.make(reservation));\n\n yield* ensure(\n settled.outcome === \"aborted\",\n \"The abort reservation must survive a duplicate command\",\n );\n const late = yield* expectFailure(\"abort after settlement\", ledger.requestAbort(command));\n\n yield* ensure(\n isSettlementConflict(late) && late.existingOutcome === \"aborted\",\n \"A terminal outcome must not change\",\n );\n const next = yield* expectSome(\"follower claim\", yield* claimLane(threadId, PRODUCER_B));\n\n yield* ensure(\n next.submissionId === follower.submissionId,\n \"Settlement must release the follower\",\n );\n }\n }),\n);\n\nconst unknownResolutionLifecycle = conformanceCase(\n \"unknown resolutions reopen the lane only when no open call remains\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-unknown\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"unknown-key-1\", { work: \"unknown\" });\n\n const claim = yield* expectSome(\n \"the claim before the unknown marking\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const call1 = decodeToolCallId(\"call-unknown-1\");\n const call2 = decodeToolCallId(\"call-unknown-2\");\n const call3 = decodeToolCallId(\"call-unknown-3\");\n\n const marking = MarkUnknownRequest.make({\n submissionId: admitted.submissionId,\n toolCallIds: [call1, call2],\n reason: \"the worker died during two supplier calls\",\n });\n\n yield* ledger.markUnknown(marking);\n yield* ledger.markUnknown(marking);\n\n const marked = yield* expectSome(\n \"lookup after marking unknown\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n marked.state === \"unknown\",\n \"Marking unknown must be idempotent and block the lane\",\n );\n\n yield* advancePastLease(claim.leaseExpiresAt);\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"An unknown lane must consume no worker permit\",\n );\n\n const first = yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call1,\n author: \"conformance-operator\",\n reason: \"supplier store shows no booking\",\n resolution: ResolutionNeverHappened.make(),\n }),\n );\n\n const partiallyResolved = yield* expectSome(\n \"lookup after a partial resolution\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n partiallyResolved.state === \"unknown\" &&\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"A partial resolution must keep the lane blocked while calls remain open\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const divergent = yield* expectFailure(\n \"re-resolving the same call divergently\",\n ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call1,\n author: \"conformance-operator\",\n reason: \"changed my mind\",\n resolution: ResolutionSafeToRetry.make(),\n }),\n ),\n );\n\n yield* ensure(\n isUnknownResolutionConflict(divergent) && divergent.toolCallId === call1,\n \"A divergent re-resolution must conflict\",\n );\n\n const replayed = yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call1,\n author: \"conformance-operator-second\",\n reason: \"a different reason text\",\n resolution: ResolutionNeverHappened.make(),\n }),\n );\n\n yield* ensure(\n sameInstant(replayed.resolvedAt, first.resolvedAt) && replayed.reason === first.reason,\n \"Repeating the same resolution must replay the recorded intent unchanged\",\n );\n\n // A later marking extends the open set; the lane must not reopen until it is covered too.\n yield* ledger.markUnknown(\n MarkUnknownRequest.make({\n submissionId: admitted.submissionId,\n toolCallIds: [call3],\n reason: \"a second wave of uncertainty\",\n }),\n );\n yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call2,\n author: \"conformance-operator\",\n reason: \"supplier confirmed the booking\",\n resolution: ResolutionCompletedWithResult.make({\n result: { bookingRef: \"booking-1\" },\n isFailure: false,\n }),\n }),\n );\n\n const stillBlocked = yield* expectSome(\n \"lookup while the extended set stays open\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n stillBlocked.state === \"unknown\" && Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"The lane must stay blocked while any marked call lacks a resolution\",\n );\n\n yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call3,\n author: \"conformance-operator\",\n reason: \"idempotency key covers a repeat\",\n resolution: ResolutionSafeToRetry.make(),\n }),\n );\n\n const reopenedState = yield* expectSome(\n \"lookup after the covering resolution\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n reopenedState.state === \"input-applied\",\n \"Covering every marked call must reopen the lane as input-applied\",\n );\n const snapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n snapshot.unknownResolutions.length === 3,\n \"The recovery snapshot must expose every recorded resolution intent\",\n );\n\n const reclaim = yield* expectSome(\n \"the claim after the lane reopened\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === admitted.submissionId &&\n reclaim.producerEpoch > claim.producerEpoch,\n \"The reopened lane must grant a fresh fenced Attempt\",\n );\n\n yield* settleClaimed(admitted, reclaim.ownershipToken);\n\n const late = yield* expectFailure(\n \"resolving an unknown call for a settled Submission\",\n ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: decodeToolCallId(\"call-unknown-late\"),\n author: \"conformance-operator\",\n reason: \"too late\",\n resolution: ResolutionNeverHappened.make(),\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(late),\n \"A resolution must never land on a settled Submission\",\n );\n }),\n);\n\nconst suspendResumesImmediatelyWhenDecided = conformanceCase(\n \"suspend with an already-present decision resumes immediately\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-suspend\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"suspend-key-1\", { work: \"suspend\" });\n\n const claim = yield* expectSome(\n \"the claim before suspension\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const callA = decodeToolCallId(\"call-suspend-a\");\n const callB = decodeToolCallId(\"call-suspend-b\");\n\n const foreign = yield* expectFailure(\n \"suspending without owning the lane\",\n ledger.suspend(\n SuspendRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: BOGUS_TOKEN,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [callA] }),\n }),\n ),\n );\n\n yield* ensure(isOwnershipLost(foreign), \"suspend must be fenced by the owning token\");\n\n // The decision raced ahead of the suspend transaction (plan §2.6).\n yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callA,\n decision: \"approved\",\n resolver: \"conformance-approver\",\n reason: \"decided before the suspend committed\",\n }),\n );\n\n const immediate = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [callA] }),\n }),\n );\n\n yield* ensure(\n immediate === \"resume-immediately\",\n \"A fully-decided suspension reason must resume immediately\",\n );\n\n const notSuspended = yield* expectSome(\n \"lookup after the immediate resume\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n notSuspended.state === \"running\",\n \"An immediate resume must not transition the Submission to suspended\",\n );\n // The ownership period must survive an immediate resume: the caller keeps working.\n yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n );\n\n const suspended = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [callA, callB] }),\n }),\n );\n\n yield* ensure(\n suspended === \"suspended\",\n \"An undecided call in the reason must suspend durably\",\n );\n\n const suspendedState = yield* expectSome(\n \"lookup after the suspension\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(suspendedState.state === \"suspended\", \"The suspension must be durable\");\n const suspendedSnapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n suspendedSnapshot.suspension !== undefined &&\n suspendedSnapshot.suspension.reason._tag === \"ApprovalPending\" &&\n suspendedSnapshot.suspension.reason.toolCallIds.length === 2 &&\n suspendedSnapshot.approvalDecisions.length === 1,\n \"The recovery snapshot must expose the suspension reason and prior decisions\",\n );\n\n const ended = yield* expectFailure(\n \"renewing after the suspension ended the ownership period\",\n ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(ended),\n \"Suspension must end the ownership period without settling\",\n );\n\n yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callB,\n decision: \"denied\",\n resolver: \"conformance-approver\",\n reason: \"the covering decision\",\n }),\n );\n\n const woken = yield* expectSome(\n \"lookup after the covering decision\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n woken.state === \"input-applied\",\n \"The covering decision must wake the suspended lane\",\n );\n const wokenSnapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n wokenSnapshot.suspension === undefined,\n \"Waking must clear the durable suspension\",\n );\n\n const reclaim = yield* expectSome(\n \"the claim after waking\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* settleClaimed(admitted, reclaim.ownershipToken);\n\n const terminal = yield* expectFailure(\n \"suspending a settled Submission\",\n ledger.suspend(\n SuspendRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: reclaim.ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [callA] }),\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(terminal) && terminal.existingOutcome === \"completed\",\n \"Suspension must never land on a settled Submission\",\n );\n }),\n);\n\nconst joinedSettlementLinkageAuthority = conformanceCase(\n \"a joined Submission's settlement reservation is authorized by host linkage\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-joined-settlement\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"joined-settle-host\", { work: \"host\" });\n const queued = yield* admitReady(threadId, \"joined-settle-2\", { queued: 2 });\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const claims = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 1,\n }),\n );\n\n yield* ensure(\n claims.length === 1 && claims[0]?.submissionId === queued.submissionId,\n \"The queued Submission must join the host's contiguous prefix\",\n );\n\n // A merely-`joining` Submission is still revertible: its reservation stays fenced by\n // lane ownership like any other row.\n const joiningReservation = yield* settlementReservation({\n submissionId: queued.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: queued.receiptId,\n outcome: \"completed\",\n });\n\n const fenced = yield* expectFailure(\n \"reserving a joining Submission's settlement without lane ownership\",\n ledger.reserveSettlement(joiningReservation),\n );\n\n yield* ensure(\n isOwnershipLost(fenced),\n \"A joining Submission's settlement reservation must stay ownership-fenced\",\n );\n\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: queued.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: submissionInputRecordId(queued.submissionId),\n sequence: decodeSequence(7),\n }),\n );\n\n // A `joined` lane is never worker-claimable, so no ownership token can exist for it:\n // the recorded host linkage authorizes the reservation and the presented token is not\n // consulted (plan §2.5 — the coordinator's joined-settlement loop and the\n // SettleJoinedWithHost recovery executor both rely on this).\n const joinedReservation = yield* settlementReservation({\n submissionId: queued.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: queued.receiptId,\n outcome: \"completed\",\n });\n\n yield* ledger.reserveSettlement(joinedReservation);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: queued.submissionId,\n settlementId: submissionSettlementId(queued.submissionId),\n }),\n );\n\n yield* ensure(\n settlement.outcome === \"completed\",\n \"The joined settlement must finalize with the reserved outcome\",\n );\n\n const settled = yield* expectSome(\n \"lookup after the joined settlement\",\n yield* lookupById(queued.submissionId),\n );\n\n yield* ensure(\n settled.state === \"settled\" && settled.settledOutcome === \"completed\",\n \"The joined Submission must settle terminally\",\n );\n }),\n);\n\nconst childReservationIdempotency = conformanceCase(\n \"replays an identical child reservation and rejects a divergent allocation digest\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-reserve\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-reserve-parent\", { work: \"parent\" });\n const claim = yield* expectSome(\"the parent claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const allocation = { turns: 4, toolCalls: 8 };\n const allocationDigest = yield* digestJson(allocation);\n\n const requestFields = {\n reservationId: decodeChildReservationId(\"child-reservation:run-reserve:call-1\"),\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-reserve\"),\n ownershipToken: claim.ownershipToken,\n allocation,\n allocationDigest,\n };\n\n const request = ChildBudgetReservationRequest.make(requestFields);\n const first = yield* ledger.reserveChildBudget(request);\n\n yield* ensure(\n !first.replayed &&\n first.reservation.status === \"reserved\" &&\n first.reservation.allocationDigest === allocationDigest &&\n first.reservation.childSubmissionId === undefined &&\n persistedJsonEquivalent(first.reservation.allocation, allocation),\n \"The first reservation must create a reserved row carrying the exact allocation\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const replayed = yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n allocation: { toolCalls: 8, turns: 4 },\n }),\n );\n\n yield* ensure(\n replayed.replayed &&\n replayed.reservation.status === \"reserved\" &&\n persistedJsonEquivalent(replayed.reservation.allocation, allocation) &&\n sameInstant(replayed.reservation.reservedAt, first.reservation.reservedAt),\n \"An identical reservation must replay the stored row unchanged\",\n );\n\n const divergentAllocation = { turns: 64, toolCalls: 8 };\n\n const divergent = yield* expectFailure(\n \"a divergent allocation for the same reservation id\",\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n allocation: divergentAllocation,\n allocationDigest: yield* digestJson(divergentAllocation),\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(divergent) && divergent.status === \"reserved\",\n \"A divergent allocation must conflict with the recorded reservation\",\n );\n\n const secondId = yield* expectFailure(\n \"a second reservation id for the same parent Tool Call\",\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n reservationId: decodeChildReservationId(\"child-reservation:run-reserve:call-1-other\"),\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(secondId),\n \"One parent Tool Call must never own two reservations\",\n );\n\n const snapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n snapshot.childReservations.length === 1 &&\n snapshot.childReservations[0].reservationId === request.reservationId &&\n snapshot.childReservations[0].status === \"reserved\" &&\n snapshot.childAttachments.length === 0,\n \"The parent recovery snapshot must expose the reservation before any attachment\",\n );\n }),\n);\n\nconst childReservationFencing = conformanceCase(\n \"a stale parent token cannot transition a child reservation\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-fence\");\n const childLane = decodeThreadId(\"ledger-conformance-child-fence-child\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-fence-parent\", { work: \"parent\" });\n const child = yield* admitReady(childLane, \"child-fence-child\", { work: \"child\" });\n\n const firstClaim = yield* expectSome(\n \"the first parent claim\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const allocation = { turns: 2 };\n const allocationDigest = yield* digestJson(allocation);\n\n const requestFields = {\n reservationId: decodeChildReservationId(\"child-reservation:run-fence:call-1\"),\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-fence\"),\n ownershipToken: BOGUS_TOKEN,\n allocation,\n allocationDigest,\n };\n\n const request = ChildBudgetReservationRequest.make(requestFields);\n\n const foreign = yield* expectFailure(\n \"creating a reservation without owning the parent lane\",\n ledger.reserveChildBudget(request),\n );\n\n yield* ensure(\n isOwnershipLost(foreign),\n \"Reservation creation must be fenced by the parent's live ownership token\",\n );\n const afterForeign = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n afterForeign.childReservations.length === 0,\n \"A fenced reservation attempt must leave no row behind\",\n );\n\n yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n // The parent Attempt ends and a replacement claims the lane: the old token is fenced.\n yield* ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n const reclaim = yield* expectSome(\n \"the replacement parent claim\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.producerEpoch > firstClaim.producerEpoch,\n \"The replacement claim must fence the stale parent Attempt\",\n );\n\n const staleAttach = yield* expectFailure(\n \"attaching a child with the superseded parent token\",\n ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: request.reservationId,\n ownershipToken: firstClaim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(staleAttach),\n \"A superseded parent token must not attach a child\",\n );\n\n const staleCreate = yield* expectFailure(\n \"creating a second-call reservation with the superseded parent token\",\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n reservationId: decodeChildReservationId(\"child-reservation:run-fence:call-2\"),\n parentToolCallId: decodeToolCallId(\"call-child-fence-second\"),\n ownershipToken: firstClaim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(staleCreate),\n \"A superseded parent token must not create new reservation state\",\n );\n\n // An identical replay creates nothing, so it short-circuits before the fence exactly\n // like reserveSettlement: a recovering caller reads the recorded row.\n const staleReplay = yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n yield* ensure(\n staleReplay.replayed && staleReplay.reservation.status === \"reserved\",\n \"An identical reservation replay must return the recorded row even from a stale caller\",\n );\n\n const attached = yield* ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: request.reservationId,\n ownershipToken: reclaim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n );\n\n yield* ensure(\n attached.childSubmissionId === child.submissionId,\n \"The live replacement token must attach the child\",\n );\n }),\n);\n\nconst attachChildIdempotency = conformanceCase(\n \"attachChildToReservation is idempotent and rejects a divergent child\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-attach\");\n const childLane = decodeThreadId(\"ledger-conformance-child-attach-child\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-attach-parent\", { work: \"parent\" });\n const child = yield* admitReady(childLane, \"child-attach-child\", { queued: 1 });\n const otherChild = yield* admitReady(childLane, \"child-attach-other\", { queued: 2 });\n const claim = yield* expectSome(\"the parent claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const allocation = { turns: 3 };\n const reservationId = decodeChildReservationId(\"child-reservation:run-attach:call-1\");\n\n yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n reservationId,\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-attach\"),\n ownershipToken: claim.ownershipToken,\n allocation,\n allocationDigest: yield* digestJson(allocation),\n }),\n );\n\n const unknownReservation = yield* expectFailure(\n \"attaching to a reservation that was never created\",\n ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: decodeChildReservationId(\"child-reservation:run-attach:missing\"),\n ownershipToken: claim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n ),\n );\n\n yield* ensure(\n isLedgerError(unknownReservation),\n \"Attaching to an unknown reservation must fail as a ledger error\",\n );\n\n const attached = yield* ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId,\n ownershipToken: claim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n );\n\n yield* ensure(\n attached.childSubmissionId === child.submissionId && attached.status === \"reserved\",\n \"Attaching must record the child on the reservation row\",\n );\n\n const replayed = yield* ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId,\n ownershipToken: claim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n );\n\n yield* ensure(\n replayed.childSubmissionId === child.submissionId,\n \"Repeating the identical attachment must be a no-op\",\n );\n\n const divergent = yield* expectFailure(\n \"attaching a different child to the same reservation\",\n ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId,\n ownershipToken: claim.ownershipToken,\n childSubmissionId: otherChild.submissionId,\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(divergent),\n \"A divergent child attachment must conflict with the recorded child\",\n );\n\n const snapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n snapshot.childAttachments.length === 1 &&\n snapshot.childAttachments[0].childSubmissionId === child.submissionId &&\n snapshot.childAttachments[0].toolCallId === decodeToolCallId(\"call-child-attach\") &&\n snapshot.childAttachments[0].childState === \"ready\" &&\n snapshot.childAttachments[0].childOutcome === undefined,\n \"The parent recovery snapshot must expose the attachment with the child's lane state\",\n );\n }),\n);\n\nconst beginReleaseFreezesAccountingOnce = conformanceCase(\n \"beginRelease freezes the accounting decision exactly once\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-freeze\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-freeze-parent\", { work: \"parent\" });\n const claim = yield* expectSome(\"the parent claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const allocation = { turns: 4 };\n const reservationId = decodeChildReservationId(\"child-reservation:run-freeze:call-1\");\n\n yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n reservationId,\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-freeze\"),\n ownershipToken: claim.ownershipToken,\n allocation,\n allocationDigest: yield* digestJson(allocation),\n }),\n );\n\n const accounting = { consumed: { turns: 1 }, released: { turns: 3 } };\n\n const frozen = yield* ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({ reservationId, accounting }),\n );\n\n yield* ensure(\n frozen.status === \"releasePending\" &&\n frozen.accounting !== undefined &&\n persistedJsonEquivalent(frozen.accounting, accounting) &&\n frozen.releaseBeganAt !== undefined,\n \"The first beginRelease must freeze the accounting and move to releasePending\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const replayed = yield* ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: { released: { turns: 3 }, consumed: { turns: 1 } },\n }),\n );\n\n yield* ensure(\n replayed.status === \"releasePending\" &&\n replayed.releaseBeganAt !== undefined &&\n frozen.releaseBeganAt !== undefined &&\n sameInstant(replayed.releaseBeganAt, frozen.releaseBeganAt),\n \"Replaying the identical accounting must be a no-op with the frozen decision retained\",\n );\n\n const divergent = yield* expectFailure(\n \"freezing a different accounting decision\",\n ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: { consumed: { turns: 4 }, released: { turns: 0 } },\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(divergent) && divergent.status === \"releasePending\",\n \"A divergent accounting freeze must conflict with the frozen decision\",\n );\n\n yield* ledger.releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId }));\n\n const afterRelease = yield* ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({ reservationId, accounting }),\n );\n\n yield* ensure(\n afterRelease.status === \"released\" &&\n afterRelease.accounting !== undefined &&\n persistedJsonEquivalent(afterRelease.accounting, accounting),\n \"Replaying the identical accounting after release must return the released row\",\n );\n\n const divergentAfterRelease = yield* expectFailure(\n \"freezing a different accounting decision after release\",\n ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: { consumed: { turns: 2 }, released: { turns: 2 } },\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(divergentAfterRelease) &&\n divergentAfterRelease.status === \"released\",\n \"The frozen decision must stay immutable after release\",\n );\n }),\n);\n\nconst releaseAppliedExactlyOnce = conformanceCase(\n \"release returns unused allocation exactly once\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-release\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-release-parent\", { work: \"parent\" });\n const claim = yield* expectSome(\"the parent claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const allocation = { turns: 4 };\n const reservationId = decodeChildReservationId(\"child-reservation:run-release:call-1\");\n\n yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n reservationId,\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-release\"),\n ownershipToken: claim.ownershipToken,\n allocation,\n allocationDigest: yield* digestJson(allocation),\n }),\n );\n\n const early = yield* expectFailure(\n \"releasing before the accounting decision is frozen\",\n ledger.releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId })),\n );\n\n yield* ensure(\n isChildReservationConflict(early) && early.status === \"reserved\",\n \"Release must never skip the releasePending freeze\",\n );\n\n yield* ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: { consumed: {}, released: { turns: 4 } },\n }),\n );\n\n const released = yield* ledger.releaseChildBudget(\n ReleaseChildBudgetRequest.make({ reservationId }),\n );\n\n yield* ensure(\n released.status === \"released\" && released.releasedAt !== undefined,\n \"Release must transition releasePending to released\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const replayed = yield* ledger.releaseChildBudget(\n ReleaseChildBudgetRequest.make({ reservationId }),\n );\n\n yield* ensure(\n replayed.status === \"released\" &&\n replayed.releasedAt !== undefined &&\n released.releasedAt !== undefined &&\n sameInstant(replayed.releasedAt, released.releasedAt),\n \"Replaying the release must return the stored row unchanged — never applied twice\",\n );\n\n const snapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n snapshot.childReservations.length === 1 &&\n snapshot.childReservations[0].status === \"released\",\n \"The recovery snapshot must expose the released reservation\",\n );\n }),\n);\n\nconst recordChildSettledWake = conformanceCase(\n \"recordChildSettled accepts canonical terminalizing prefixes and wakes only when all are covered\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const parentLane = decodeThreadId(\"ledger-conformance-child-wake\");\n const childLaneA = decodeThreadId(\"ledger-conformance-child-wake-a\");\n const childLaneB = decodeThreadId(\"ledger-conformance-child-wake-b\");\n const ledger = yield* SubmissionLedger;\n\n const parent = yield* admitReady(parentLane, \"child-wake-parent\", { work: \"parent\" });\n const childA = yield* admitReady(childLaneA, \"child-wake-a\", { child: \"a\" });\n const childB = yield* admitReady(childLaneB, \"child-wake-b\", { child: \"b\" });\n\n const parentClaim = yield* expectSome(\n \"the parent claim\",\n yield* claimLane(parentLane, PRODUCER_A),\n );\n\n const suspended = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n reason: WaitingForChildSuspension.make({\n children: [\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-wake-a\"),\n childSubmissionId: childA.submissionId,\n }),\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-wake-b\"),\n childSubmissionId: childB.submissionId,\n }),\n ],\n }),\n }),\n );\n\n yield* ensure(\n suspended === \"suspended\",\n \"Unsettled children must suspend the parent durably\",\n );\n\n const ended = yield* expectFailure(\n \"renewing after the waitingForChild suspension ended the ownership period\",\n ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(ended),\n \"waitingForChild must end the ownership period without settling (SUB-030)\",\n );\n yield* ensure(\n Option.isNone(yield* claimLane(parentLane, PRODUCER_B)),\n \"A waitingForChild head must produce no claim and consume no worker permit\",\n );\n\n const childClaimA = yield* expectSome(\n \"the first child claim\",\n yield* claimLane(childLaneA, PRODUCER_A),\n );\n\n const childReservationA = yield* settlementReservation({\n submissionId: childA.submissionId,\n ownershipToken: childClaimA.ownershipToken,\n receiptId: childA.receiptId,\n outcome: \"completed\",\n });\n\n yield* ledger.reserveSettlement(childReservationA);\n\n const partial = yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: parent.submissionId,\n childSubmissionId: childA.submissionId,\n }),\n );\n\n yield* ensure(\n partial === \"still-waiting\",\n \"A settlement notification must not wake the parent while a listed child is unsettled\",\n );\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: childA.submissionId,\n settlementId: childReservationA.settlementId,\n }),\n );\n\n const stillSuspended = yield* expectSome(\n \"lookup while one child is outstanding\",\n yield* lookupById(parent.submissionId),\n );\n\n yield* ensure(\n stillSuspended.state === \"suspended\" &&\n Option.isNone(yield* claimLane(parentLane, PRODUCER_B)),\n \"The parent lane must stay suspended until every listed child settled\",\n );\n\n const childClaimB = yield* expectSome(\n \"the second child claim\",\n yield* claimLane(childLaneB, PRODUCER_A),\n );\n\n const childReservationB = yield* settlementReservation({\n submissionId: childB.submissionId,\n ownershipToken: childClaimB.ownershipToken,\n receiptId: childB.receiptId,\n outcome: \"completed\",\n });\n\n yield* ledger.reserveSettlement(childReservationB);\n\n const woken = yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: parent.submissionId,\n childSubmissionId: childB.submissionId,\n }),\n );\n\n yield* ensure(\n woken === \"woken\",\n \"The covering canonical settlement prefix must wake the parent before child finalization\",\n );\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: childB.submissionId,\n settlementId: childReservationB.settlementId,\n }),\n );\n\n const awake = yield* expectSome(\n \"lookup after the covering settlement\",\n yield* lookupById(parent.submissionId),\n );\n\n yield* ensure(\n awake.state === \"input-applied\",\n \"The woken parent must transition suspended(WaitingForChild) to input-applied\",\n );\n const wokenSnapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n wokenSnapshot.suspension === undefined,\n \"Waking must clear the durable suspension\",\n );\n\n const replayedNotification = yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: parent.submissionId,\n childSubmissionId: childA.submissionId,\n }),\n );\n\n yield* ensure(\n replayedNotification === \"not-waiting\",\n \"Replaying a notification after the wake must be an idempotent no-op\",\n );\n\n const reclaim = yield* expectSome(\n \"the parent claim after waking\",\n yield* claimLane(parentLane, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === parent.submissionId &&\n reclaim.producerEpoch > parentClaim.producerEpoch,\n \"The woken lane must grant a fresh fenced Attempt\",\n );\n yield* settleClaimed(parent, reclaim.ownershipToken);\n\n const afterSettlement = yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: parent.submissionId,\n childSubmissionId: childB.submissionId,\n }),\n );\n\n yield* ensure(\n afterSettlement === \"not-waiting\",\n \"A notification for a settled parent must answer not-waiting\",\n );\n }),\n);\n\nconst suspendResumesImmediatelyForSettledChildren = conformanceCase(\n \"suspend returns resume-immediately when children already settled\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const parentLane = decodeThreadId(\"ledger-conformance-child-raced\");\n const childLaneA = decodeThreadId(\"ledger-conformance-child-raced-a\");\n const childLaneB = decodeThreadId(\"ledger-conformance-child-raced-b\");\n const ledger = yield* SubmissionLedger;\n\n // The child settles BEFORE the parent's suspend transaction commits (spec §12 step 10\n // race): the suspend must observe the settlement and resume immediately.\n const settledChild = yield* admitReady(childLaneA, \"child-raced-a\", { child: \"a\" });\n\n const settledClaim = yield* expectSome(\n \"the settled child's claim\",\n yield* claimLane(childLaneA, PRODUCER_A),\n );\n\n yield* settleClaimed(settledChild, settledClaim.ownershipToken);\n const pendingChild = yield* admitReady(childLaneB, \"child-raced-b\", { child: \"b\" });\n\n const parent = yield* admitReady(parentLane, \"child-raced-parent\", { work: \"parent\" });\n\n const parentClaim = yield* expectSome(\n \"the parent claim\",\n yield* claimLane(parentLane, PRODUCER_A),\n );\n\n const immediate = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n reason: WaitingForChildSuspension.make({\n children: [\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-raced-a\"),\n childSubmissionId: settledChild.submissionId,\n }),\n ],\n }),\n }),\n );\n\n yield* ensure(\n immediate === \"resume-immediately\",\n \"A suspend listing only settled children must resume immediately\",\n );\n\n const stillRunning = yield* expectSome(\n \"lookup after the immediate resume\",\n yield* lookupById(parent.submissionId),\n );\n\n yield* ensure(\n stillRunning.state === \"running\",\n \"An immediate resume must not transition the parent to suspended\",\n );\n // The ownership period must survive an immediate resume: the caller keeps working.\n yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n }),\n );\n\n const suspended = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n reason: WaitingForChildSuspension.make({\n children: [\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-raced-a\"),\n childSubmissionId: settledChild.submissionId,\n }),\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-raced-b\"),\n childSubmissionId: pendingChild.submissionId,\n }),\n ],\n }),\n }),\n );\n\n yield* ensure(\n suspended === \"suspended\",\n \"One unsettled listed child must suspend the parent durably\",\n );\n const snapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n snapshot.suspension !== undefined &&\n snapshot.suspension.reason._tag === \"WaitingForChild\" &&\n snapshot.suspension.reason.children.length === 2,\n \"The recovery snapshot must expose the WaitingForChild reason with its children\",\n );\n }),\n);\n\nconst admissionParentLinkage = conformanceCase(\n \"admit records and replays parent linkage\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const parentLane = decodeThreadId(\"ledger-conformance-linkage\");\n const childLane = decodeThreadId(\"ledger-conformance-linkage-child\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(parentLane, \"linkage-parent\", { work: \"parent\" });\n\n const linkage = ParentLinkage.make({\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-linkage\"),\n });\n\n const request = yield* admissionRequest(\n childLane,\n \"linkage-child-key\",\n { task: \"research\" },\n linkage,\n );\n\n const admitted = yield* ledger.admit(request);\n\n yield* ensure(!admitted.replayed, \"The first linked admission must create the child\");\n\n const byId = yield* expectSome(\n \"lookup of the linked child\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n byId.parentLinkage !== undefined &&\n byId.parentLinkage.parentSubmissionId === parent.submissionId &&\n byId.parentLinkage.parentToolCallId === linkage.parentToolCallId,\n \"The child snapshot must expose its immutable parent linkage\",\n );\n const childSnapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n childSnapshot.parentLinkage !== undefined &&\n childSnapshot.parentLinkage.parentSubmissionId === parent.submissionId,\n \"The child recovery snapshot must expose its parent linkage\",\n );\n\n const replayed = yield* ledger.admit(request);\n\n yield* ensure(\n replayed.replayed &&\n replayed.submissionId === admitted.submissionId &&\n replayed.receiptId === admitted.receiptId,\n \"An identical linked admission must replay the original identities (SUB-016)\",\n );\n\n const divergentLinkage = yield* expectFailure(\n \"replaying the admission with a different parent Tool Call\",\n ledger.admit(\n yield* admissionRequest(\n childLane,\n \"linkage-child-key\",\n { task: \"research\" },\n ParentLinkage.make({\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-linkage-other\"),\n }),\n ),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(divergentLinkage),\n \"A divergent parent linkage must conflict even when the input digest matches\",\n );\n\n const droppedLinkage = yield* expectFailure(\n \"replaying the admission without its parent linkage\",\n ledger.admit(yield* admissionRequest(childLane, \"linkage-child-key\", { task: \"research\" })),\n );\n\n yield* ensure(\n isAdmissionConflict(droppedLinkage),\n \"Dropping the recorded linkage on replay must conflict\",\n );\n\n const plain = yield* ledger.admit(\n yield* admissionRequest(childLane, \"linkage-plain-key\", { task: \"plain\" }),\n );\n\n const addedLinkage = yield* expectFailure(\n \"replaying an unlinked admission with a parent linkage\",\n ledger.admit(\n yield* admissionRequest(childLane, \"linkage-plain-key\", { task: \"plain\" }, linkage),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(addedLinkage),\n \"Adding a linkage to an unlinked admission on replay must conflict\",\n );\n\n const plainSnapshot = yield* expectSome(\n \"lookup of the unlinked Submission\",\n yield* lookupById(plain.submissionId),\n );\n\n yield* ensure(\n plainSnapshot.parentLinkage === undefined,\n \"An unlinked Submission must expose no parent linkage\",\n );\n }),\n);\n\nconst resolveAdmissionAuthority = conformanceCase(\n \"resolveAdmission distinguishes notAdmitted from admitted authoritatively\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-resolve\");\n const ledger = yield* SubmissionLedger;\n\n const key = SubmissionLookupByKey.make({\n threadId,\n principal: CONFORMANCE_PRINCIPAL,\n idempotencyKey: decodeIdempotencyKey(\"resolve-key-1\"),\n });\n\n const before = yield* ledger.resolveAdmission(key);\n\n yield* ensure(\n before._tag === \"NotAdmitted\",\n \"The authoritative store must prove absence before admission (SUB-031)\",\n );\n\n const admitted = yield* ledger.admit(\n yield* admissionRequest(threadId, \"resolve-key-1\", { work: \"resolve\" }),\n );\n\n const after = yield* ledger.resolveAdmission(key);\n\n yield* ensure(\n after._tag === \"Admitted\" &&\n after.submission.submissionId === admitted.submissionId &&\n after.submission.receiptId === admitted.receiptId &&\n after.submission.state === \"admitted\",\n \"An admitted key must resolve to the full authoritative snapshot\",\n );\n\n const foreign = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId,\n principal: OTHER_PRINCIPAL,\n idempotencyKey: decodeIdempotencyKey(\"resolve-key-1\"),\n }),\n );\n\n yield* ensure(\n foreign._tag === \"NotAdmitted\",\n \"Admission resolution must stay scoped to the requesting principal\",\n );\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n\n const claim = yield* expectSome(\n \"the claim before terminal resolution\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n yield* settleClaimed(admitted, claim.ownershipToken);\n const settled = yield* ledger.resolveAdmission(key);\n\n yield* ensure(\n settled._tag === \"Admitted\" &&\n settled.submission.state === \"settled\" &&\n settled.submission.settledOutcome === \"completed\",\n \"A settled Submission still resolves as admitted — terminality never becomes absence\",\n );\n }),\n);\n\nconst queuedAbortSettlementAuthority = conformanceCase(\n \"reserveSettlement authorizes an aborted, unowned queued settlement by its durable intent\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n // P7 §7(c): an aborted, never-claimed, still-queued `ready` Submission has no live\n // ownership to fence against, so its durable abort intent authorizes exactly its\n // ABORTED settlement — recovery settles it without waiting for it to head the lane.\n // The authorization is outcome- and state-narrow and stays fail-closed otherwise.\n const threadId = decodeThreadId(\"ledger-conformance-queued-abort\");\n const ledger = yield* SubmissionLedger;\n\n const head = yield* admitReady(threadId, \"queued-abort-head\", { work: \"head\" });\n const second = yield* admitReady(threadId, \"queued-abort-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"queued-abort-3\", { queued: 3 });\n\n yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: second.submissionId,\n author: \"operator\",\n reason: \"cancelled while queued\",\n }),\n );\n\n // Fail-closed control: a queued row WITHOUT an abort intent never accepts an unowned\n // reservation, aborted or not.\n const unaborted = yield* expectFailure(\n \"reserving an aborted settlement for a queued row without an abort intent\",\n settlementReservation({\n submissionId: third.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: third.receiptId,\n outcome: \"aborted\",\n }).pipe(Effect.flatMap((reservation) => ledger.reserveSettlement(reservation))),\n );\n\n yield* ensure(\n isOwnershipLost(unaborted),\n \"A queued reservation without a durable abort intent must stay fenced (OwnershipLost)\",\n );\n\n // Fail-closed control: the durable intent authorizes ONLY the aborted outcome.\n const wrongOutcome = yield* expectFailure(\n \"reserving a completed settlement for the aborted queued row\",\n settlementReservation({\n submissionId: second.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: second.receiptId,\n outcome: \"completed\",\n result: { fabricated: true },\n }).pipe(Effect.flatMap((reservation) => ledger.reserveSettlement(reservation))),\n );\n\n yield* ensure(\n isOwnershipLost(wrongOutcome),\n \"An abort intent must never authorize a non-aborted settlement outcome\",\n );\n\n const reservation = yield* settlementReservation({\n submissionId: second.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: second.receiptId,\n outcome: \"aborted\",\n });\n\n const reserved = yield* ledger.reserveSettlement(reservation);\n\n yield* ensure(\n reserved.replayed === false && reserved.outcome === \"aborted\",\n \"The abort intent must authorize the aborted reservation without lane ownership\",\n );\n // The crash replay (`terminalizing` + committed reservation) is equally authorized.\n const replayed = yield* ledger.reserveSettlement(reservation);\n\n yield* ensure(\n replayed.replayed === true,\n \"Replaying the identical aborted reservation must short-circuit idempotently\",\n );\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: second.submissionId,\n settlementId: submissionSettlementId(second.submissionId),\n }),\n );\n\n const settled = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n settled.submission.state === \"settled\" && settled.submission.settledOutcome === \"aborted\",\n \"The aborted queued Submission must settle while the head is still unsettled\",\n );\n const headState = yield* recoverySnapshot(head.submissionId);\n\n yield* ensure(\n headState.submission.state === \"ready\",\n \"Settling the aborted queued row must not disturb the unclaimed head\",\n );\n }),\n);\n\nconst abortedSettledRowIsNotAJoiningGap = conformanceCase(\n \"claimJoining treats an aborted-settled row as a non-gap\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n // P7 §7(c): an aborted-settled row is a CLOSED obligation — the contiguous joining\n // prefix walks over it so later ready work still joins the host (the pre-P7 rule\n // treated every settled row as a conservative gap).\n const threadId = decodeThreadId(\"ledger-conformance-aborted-non-gap\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"aborted-gap-host\", { work: \"host\" });\n const second = yield* admitReady(threadId, \"aborted-gap-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"aborted-gap-3\", { queued: 3 });\n\n yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: second.submissionId,\n author: \"operator\",\n reason: \"cancelled while queued\",\n }),\n );\n\n const reservation = yield* settlementReservation({\n submissionId: second.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: second.receiptId,\n outcome: \"aborted\",\n });\n\n yield* ledger.reserveSettlement(reservation);\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: second.submissionId,\n settlementId: submissionSettlementId(second.submissionId),\n }),\n );\n\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n yield* ensure(\n hostClaim.submissionId === host.submissionId,\n \"The host must head the lane (the aborted-settled row is out of the queue)\",\n );\n\n const claims = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n claims.length === 1 && claims[0].submissionId === third.submissionId,\n \"The joining prefix must skip the aborted-settled row and claim the later ready work\",\n );\n const settled = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n settled.submission.state === \"settled\" && settled.submission.settledOutcome === \"aborted\",\n \"Walking the prefix must never disturb the aborted-settled row\",\n );\n }),\n);\n\n/**\n * The shared, adapter-parameterized SubmissionLedger contract suite (STORE-010). Every durable\n * ledger adapter test suite must execute each case against its own ledger provisioning, inside\n * the `@effect/vitest` test environment (TestClock) and with `Crypto.Crypto` provided.\n */\nexport const submissionLedgerConformanceCases: ReadonlyArray<SubmissionLedgerConformanceCase> = [\n admissionIdempotency,\n workerAdmissionIdentity,\n messageAdmissionIdentity,\n workerCompletionIdentity,\n workerUpdateIdentity,\n admissionGroupRace,\n admissionGroupSettlement,\n crossPrincipalAdmissionScoping,\n admissionTupleBoundaries,\n concurrentAdmissionFifo,\n fifoHeadClaim,\n leaseExpiryReclaim,\n releaseMakesHeadClaimable,\n inputAppliedIdempotency,\n settlementLifecycle,\n settlementConflicts,\n abortIdempotency,\n scanNonterminalWorklist,\n lookupByIdAndKey,\n recoverySnapshotConsistency,\n joiningPrefixClaim,\n revertJoiningReturnsToReady,\n markJoinedIdempotency,\n claimNeverGrantsBlockedHead,\n approvalDecisionIdempotency,\n unknownResolutionLifecycle,\n unknownAbortClaim,\n suspendResumesImmediatelyWhenDecided,\n joinedSettlementLinkageAuthority,\n childReservationIdempotency,\n childReservationFencing,\n attachChildIdempotency,\n beginReleaseFreezesAccountingOnce,\n releaseAppliedExactlyOnce,\n recordChildSettledWake,\n suspendResumesImmediatelyForSettledChildren,\n admissionParentLinkage,\n resolveAdmissionAuthority,\n queuedAbortSettlementAuthority,\n abortedSettledRowIsNotAJoiningGap,\n];\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SubmissionLedgerConformance.mjs","names":[],"sources":["../../src/durable/SubmissionLedgerConformance.ts"],"sourcesContent":["import type { Crypto } from \"effect\";\nimport { Clock, DateTime, Duration, Effect, Option, Result, Schema, Stream } from \"effect\";\nimport { TestClock } from \"effect/testing\";\n\nimport { InputMessage, MessageAdmission } from \"../capabilities/Messaging.ts\";\nimport { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport { type ReceiptId } from \"../core/Identifiers.ts\";\nimport { AgentId, ThreadId, SubmissionId, ToolCallId, DelegationId } from \"../core/Identifiers.ts\";\nimport {\n SubagentDelegationCaps,\n SubagentGrant,\n SubagentReservationAmounts,\n} from \"../core/SubagentContract.ts\";\nimport { WorkerCompletion, WorkerUpdate } from \"../core/Worker.ts\";\nimport { digestJson, type DigestError } from \"./Digest.ts\";\nimport {\n CanonicalSequence,\n DefinitionDigests,\n DeploymentId,\n Digest,\n ProducerId,\n RecordEnvelope,\n SubmissionSettled,\n SubmissionSettledRecord,\n PersistedJson,\n WorkerAdmission,\n type SettlementFailureDiagnostic,\n} from \"./Records.ts\";\nimport {\n type AdmissionResult,\n AbortCommand,\n AbortIntentRequest,\n AdmissionConflict,\n AdmissionPolicyError,\n AdmissionRequest,\n ApprovalConflict,\n ApprovalDecisionCommand,\n ApprovalPendingSuspension,\n AttachChildToReservationRequest,\n BeginChildBudgetReleaseRequest,\n ChildBudgetReservationRequest,\n ChildReservationConflict,\n ChildReservationId,\n ChildSettledNotification,\n ClaimJoiningRequest,\n ClaimRequest,\n IdempotencyKey,\n JoinedToHost,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n MarkReadyRequest,\n MarkUnknownRequest,\n OwnershipLost,\n OwnershipToken,\n ParentLinkage,\n Principal,\n RecoverySnapshotRequest,\n ReleaseChildBudgetRequest,\n ReleaseOwnershipRequest,\n RenewOwnershipRequest,\n ResolutionCompletedWithResult,\n ResolutionNeverHappened,\n ResolutionSafeToRetry,\n RevertJoiningRequest,\n SettlementConflict,\n SettlementFinalization,\n SettlementReservation,\n SubmissionLedger,\n SubmissionLookupById,\n SubmissionLookupByKey,\n SuspendRequest,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n WaitingChild,\n WaitingForChildSuspension,\n submissionInputRecordId,\n submissionSettlementId,\n submissionSettlementRecordId,\n type SubmissionLedgerFailure,\n} from \"./SubmissionLedger.ts\";\n\n/** A SubmissionLedger contract invariant that an adapter under test violated. */\nexport class SubmissionLedgerConformanceViolation extends Schema.TaggedError<SubmissionLedgerConformanceViolation>()(\n \"SubmissionLedgerConformanceViolation\",\n {\n caseName: Schema.String,\n message: Schema.String,\n },\n) {}\n\nexport type SubmissionLedgerConformanceFailure =\n | SubmissionLedgerFailure\n | DigestError\n | SubmissionLedgerConformanceViolation;\n\n/**\n * One adapter-neutral SubmissionLedger contract case. Each case owns disjoint Thread\n * lanes, so a suite may run every case against one shared ledger instance or against a fresh\n * ledger per case. Cases drive lease expiry through `TestClock`, so they must run inside the\n * `@effect/vitest` test environment (`it.effect`), and they compute real content digests, so the\n * host suite must provide `Crypto.Crypto`.\n */\nexport interface SubmissionLedgerConformanceCase {\n readonly name: string;\n readonly run: Effect.Effect<\n void,\n SubmissionLedgerConformanceFailure,\n SubmissionLedger | Crypto.Crypto\n >;\n}\n\nconst decodeThreadId = Schema.decodeSync(ThreadId);\nconst decodeSubmissionId = Schema.decodeSync(SubmissionId);\nconst decodeIdempotencyKey = Schema.decodeSync(IdempotencyKey);\nconst decodeSequence = Schema.decodeSync(CanonicalSequence);\nconst decodeToolCallId = Schema.decodeSync(ToolCallId);\nconst decodeChildReservationId = Schema.decodeSync(ChildReservationId);\n\n/** A token that never owned any lane, for ownership-fencing assertions. */\nconst BOGUS_TOKEN = Schema.decodeSync(OwnershipToken)(\"ownership-ledger-conformance-bogus\");\n\nconst persistedJsonEquivalent = Schema.toEquivalence(PersistedJson);\nconst isAdmissionConflict = Schema.is(AdmissionConflict);\nconst isApprovalConflict = Schema.is(ApprovalConflict);\nconst isChildReservationConflict = Schema.is(ChildReservationConflict);\nconst isJoinedToHost = Schema.is(JoinedToHost);\nconst isLedgerError = Schema.is(LedgerError);\nconst isOwnershipLost = Schema.is(OwnershipLost);\nconst isSettlementConflict = Schema.is(SettlementConflict);\nconst isUnknownResolutionConflict = Schema.is(UnknownResolutionConflict);\n\nconst CONFORMANCE_PRINCIPAL = Schema.decodeSync(Principal)(\"principal-ledger-conformance\");\nconst OTHER_PRINCIPAL = Schema.decodeSync(Principal)(\"principal-ledger-conformance-other\");\nconst CONFORMANCE_AGENT = Schema.decodeSync(AgentId)(\"agent-ledger-conformance\");\nconst CONFORMANCE_DEPLOYMENT = Schema.decodeSync(DeploymentId)(\"deployment-ledger-conformance\");\nconst CONFORMANCE_DEFINITION_DIGEST = Schema.decodeSync(Digest)(\"d\".repeat(64));\n\nconst CONFORMANCE_DIGESTS = DefinitionDigests.make({\n agent: CONFORMANCE_DEFINITION_DIGEST,\n model: CONFORMANCE_DEFINITION_DIGEST,\n tools: CONFORMANCE_DEFINITION_DIGEST,\n});\n\nconst CONFORMANCE_CREATED_AT = DateTime.toUtc(DateTime.makeUnsafe(1));\nconst PRODUCER_A = Schema.decodeSync(ProducerId)(\"producer-ledger-conformance-a\");\nconst PRODUCER_B = Schema.decodeSync(ProducerId)(\"producer-ledger-conformance-b\");\n\nconst sameInstant = (left: DateTime.Utc, right: DateTime.Utc): boolean =>\n DateTime.toEpochMillis(left) === DateTime.toEpochMillis(right);\n\nconst admissionRequest = Effect.fn(\"SubmissionLedgerConformance.admissionRequest\")(function* (\n threadId: ThreadId,\n idempotencyKey: string,\n input: PersistedJson,\n parentLinkage?: ParentLinkage,\n) {\n const inputDigest = yield* digestJson(input);\n\n return AdmissionRequest.make({\n threadId,\n principal: CONFORMANCE_PRINCIPAL,\n idempotencyKey: decodeIdempotencyKey(idempotencyKey),\n agentId: CONFORMANCE_AGENT,\n agentDigests: CONFORMANCE_DIGESTS,\n deploymentId: CONFORMANCE_DEPLOYMENT,\n inputPayload: input,\n inputDigest,\n ...(parentLinkage === undefined ? {} : { parentLinkage }),\n });\n});\n\nconst admitReady = Effect.fn(\"SubmissionLedgerConformance.admitReady\")(function* (\n threadId: ThreadId,\n idempotencyKey: string,\n input: PersistedJson,\n) {\n const ledger = yield* SubmissionLedger;\n const admitted = yield* ledger.admit(yield* admissionRequest(threadId, idempotencyKey, input));\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n\n return admitted;\n});\n\nconst claimLane = Effect.fn(\"SubmissionLedgerConformance.claimLane\")(function* (\n threadId: ThreadId,\n producerId: ProducerId,\n) {\n const ledger = yield* SubmissionLedger;\n\n return yield* ledger.claim(ClaimRequest.make({ threadId, producerId }));\n});\n\nconst lookupById = Effect.fn(\"SubmissionLedgerConformance.lookupById\")(function* (\n submissionId: SubmissionId,\n) {\n const ledger = yield* SubmissionLedger;\n\n return yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n});\n\nconst recoverySnapshot = Effect.fn(\"SubmissionLedgerConformance.recoverySnapshot\")(function* (\n submissionId: SubmissionId,\n) {\n const ledger = yield* SubmissionLedger;\n\n return yield* ledger.loadRecoverySnapshot(RecoverySnapshotRequest.make({ submissionId }));\n});\n\ninterface ReservationIdentity {\n readonly submissionId: SubmissionId;\n readonly ownershipToken: OwnershipToken;\n readonly receiptId: ReceiptId;\n}\n\ntype ReservationOptions = ReservationIdentity &\n (\n | {\n readonly outcome: \"completed\";\n readonly result?: PersistedJson;\n }\n | {\n readonly outcome: \"failed\";\n readonly result: SettlementFailureDiagnostic;\n }\n | {\n readonly outcome: \"aborted\";\n readonly result?: never;\n }\n );\n\n/**\n * Builds a complete, deterministic settlement reservation: the exact canonical envelope that\n * would be appended (DUR-011) plus the digest of its canonical JSON encoding. Two calls with the\n * same options produce byte-identical content, so replays are honest reservation replays.\n */\nconst settlementReservation = Effect.fn(\"SubmissionLedgerConformance.settlementReservation\")(\n function* (options: ReservationOptions) {\n const settlementId = submissionSettlementId(options.submissionId);\n\n const payload = yield* Schema.decodeEffect(SubmissionSettledRecord)(\n SubmissionSettled.make({\n submissionId: options.submissionId,\n settlementId,\n receiptId: options.receiptId,\n outcome: options.outcome,\n ...(options.result === undefined ? {} : { result: options.result }),\n }),\n ).pipe(Effect.orDie);\n\n const record = RecordEnvelope.make({\n recordId: submissionSettlementRecordId(options.submissionId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: CONFORMANCE_CREATED_AT,\n deploymentId: CONFORMANCE_DEPLOYMENT,\n payload,\n });\n\n const encoded = yield* Schema.encodeEffect(RecordEnvelope)(record).pipe(Effect.orDie);\n const recordDigest = yield* digestJson(encoded);\n\n return SettlementReservation.make({\n submissionId: options.submissionId,\n ownershipToken: options.ownershipToken,\n settlementId,\n outcome: options.outcome,\n record,\n recordDigest,\n });\n },\n);\n\nconst settleClaimed = Effect.fn(\"SubmissionLedgerConformance.settleClaimed\")(function* (\n admitted: AdmissionResult,\n ownershipToken: OwnershipToken,\n) {\n const ledger = yield* SubmissionLedger;\n\n const reservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n });\n\n yield* ledger.reserveSettlement(reservation);\n\n return yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: submissionSettlementId(admitted.submissionId),\n }),\n );\n});\n\n/** Advances the TestClock one millisecond past the given lease boundary. */\nconst advancePastLease = Effect.fn(\"SubmissionLedgerConformance.advancePastLease\")(function* (\n leaseExpiresAt: DateTime.Utc,\n) {\n const nowMillis = yield* Clock.currentTimeMillis;\n const waitMillis = Math.max(0, DateTime.toEpochMillis(leaseExpiresAt) - nowMillis) + 1;\n\n yield* TestClock.adjust(Duration.millis(waitMillis));\n});\n\nconst conformanceCase = (\n name: string,\n build: (assert: {\n readonly ensure: (\n condition: boolean,\n message: string,\n ) => Effect.Effect<void, SubmissionLedgerConformanceViolation>;\n readonly expectFailure: <A, E, R>(\n description: string,\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<E, SubmissionLedgerConformanceViolation, R>;\n readonly expectSome: <A>(\n description: string,\n option: Option.Option<A>,\n ) => Effect.Effect<A, SubmissionLedgerConformanceViolation>;\n }) => Effect.Effect<void, SubmissionLedgerConformanceFailure, SubmissionLedger | Crypto.Crypto>,\n): SubmissionLedgerConformanceCase => ({\n name,\n run: build({\n ensure: (condition, message) =>\n condition\n ? Effect.void\n : Effect.fail(SubmissionLedgerConformanceViolation.make({ caseName: name, message })),\n expectFailure: (description, effect) =>\n Effect.flip(effect).pipe(\n Effect.mapError(() =>\n SubmissionLedgerConformanceViolation.make({\n caseName: name,\n message: `Expected failure but the operation succeeded: ${description}`,\n }),\n ),\n ),\n expectSome: (description, option) =>\n Effect.fromOption(option, () =>\n SubmissionLedgerConformanceViolation.make({\n caseName: name,\n message: `Expected a value but found none: ${description}`,\n }),\n ),\n }).pipe(Effect.withSpan(`SubmissionLedgerConformance.${name}`)),\n});\n\nconst admissionGroupRace = conformanceCase(\n \"admits only one concurrent group request and retains immutable constraints\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const requests = yield* Effect.forEach([\"first\", \"second\"], (key) =>\n admissionRequest(decodeThreadId(\"ledger-group-race\"), key, {}).pipe(\n Effect.map((request) => AdmissionRequest.make({ ...request, admissionGroup: \"entity\" })),\n ),\n );\n\n const outcomes = yield* Effect.forEach(\n requests,\n (request) => ledger.admit(request).pipe(Effect.result),\n { concurrency: 2 },\n );\n\n yield* ensure(\n outcomes.filter(Result.isSuccess).length === 1,\n \"More than one unsettled group submission was admitted\",\n );\n yield* ensure(\n outcomes.some(\n (outcome) =>\n Result.isFailure(outcome) &&\n Schema.is(AdmissionPolicyError)(outcome.failure) &&\n outcome.failure.reason === \"occupied\",\n ),\n \"Concurrent loser was not a typed capacity wait\",\n );\n for (const [index, outcome] of outcomes.entries()) {\n if (Result.isFailure(outcome)) continue;\n const request = requests[index];\n\n if (request === undefined) return yield* Effect.die(\"Missing group race request\");\n\n const snapshot = yield* expectSome(\n \"group snapshot\",\n yield* lookupById(outcome.success.submissionId),\n );\n\n yield* ensure(\n snapshot.admissionGroup === \"entity\",\n \"Admission constraints disappeared from the durable snapshot\",\n );\n yield* ensure(\n isAdmissionConflict(\n yield* expectFailure(\n \"changed retained group\",\n ledger.admit(AdmissionRequest.make({ ...request, admissionGroup: \"other\" })),\n ),\n ),\n \"Changed constraints did not produce an admission conflict\",\n );\n }\n }),\n);\n\nconst admissionGroupSettlement = conformanceCase(\n \"retains group capacity through terminalizing and permits exact replay\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n const threadId = decodeThreadId(\"ledger-conformance-group\");\n\n const original = AdmissionRequest.make({\n ...(yield* admissionRequest(threadId, \"group-first\", { n: 1 })),\n admissionGroup: \"entity-work\",\n });\n\n const successor = AdmissionRequest.make({\n ...(yield* admissionRequest(threadId, \"group-second\", { n: 2 })),\n admissionGroup: \"entity-work\",\n });\n\n const first = yield* ledger.admit(original);\n\n yield* expectFailure(\"occupied group\", ledger.admit(successor));\n yield* ensure(\n (yield* ledger.admit(original)).submissionId === first.submissionId,\n \"Exact retry must resolve before occupied group checks\",\n );\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: first.submissionId }));\n const claim = yield* expectSome(\"claimed group head\", yield* claimLane(threadId, PRODUCER_A));\n\n yield* ledger.reserveSettlement(\n yield* settlementReservation({\n submissionId: first.submissionId,\n receiptId: first.receiptId,\n ownershipToken: claim.ownershipToken,\n outcome: \"completed\",\n }),\n );\n yield* expectFailure(\"terminalizing group\", ledger.admit(successor));\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: first.submissionId,\n settlementId: submissionSettlementId(first.submissionId),\n }),\n );\n yield* ensure(\n !(yield* ledger.admit(successor)).replayed,\n \"Only canonical settlement releases group capacity\",\n );\n }),\n);\n\nconst admissionIdempotency = conformanceCase(\n \"replays identical admissions and rejects conflicting input digests\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-admission\");\n const ledger = yield* SubmissionLedger;\n\n const request = yield* admissionRequest(threadId, \"admission-key-1\", {\n city: \"Lisbon\",\n });\n\n const first = yield* ledger.admit(request);\n\n yield* ensure(!first.replayed, \"The first admission of a key must not report replayed\");\n yield* ensure(first.state === \"admitted\", \"A fresh admission must start in state admitted\");\n\n const afterAdmit = yield* expectSome(\n \"lookup immediately after admission\",\n yield* lookupById(first.submissionId),\n );\n\n yield* ensure(\n afterAdmit.inputDigest === request.inputDigest && afterAdmit.state === \"admitted\",\n \"Admission must be readable with strong consistency immediately after the write\",\n );\n\n const replayed = yield* ledger.admit(request);\n\n yield* ensure(\n replayed.replayed &&\n replayed.submissionId === first.submissionId &&\n replayed.receiptId === first.receiptId &&\n replayed.queueSequence === first.queueSequence,\n \"An identical admission must replay the original identities with replayed set\",\n );\n\n const conflicting = yield* admissionRequest(threadId, \"admission-key-1\", {\n city: \"Porto\",\n });\n\n const conflict = yield* expectFailure(\n \"an admission reusing the key with different canonical input\",\n ledger.admit(conflicting),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict) &&\n conflict.existingInputDigest === request.inputDigest &&\n conflict.attemptedInputDigest === conflicting.inputDigest,\n \"A same-key admission with a different digest must fail with both digests reported\",\n );\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: first.submissionId }));\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: first.submissionId }));\n\n const ready = yield* expectSome(\n \"lookup after readiness\",\n yield* lookupById(first.submissionId),\n );\n\n yield* ensure(\n ready.state === \"ready\" && ready.readyAt !== undefined,\n \"markReady must be idempotent and record readiness exactly once\",\n );\n\n const retryAfterReady = yield* ledger.admit(request);\n\n yield* ensure(\n retryAfterReady.replayed && retryAfterReady.receiptId === first.receiptId,\n \"A client retry after readiness must return the original Receipt\",\n );\n\n const second = yield* ledger.admit(\n yield* admissionRequest(threadId, \"admission-key-2\", { city: \"Faro\" }),\n );\n\n yield* ensure(\n second.submissionId !== first.submissionId && second.queueSequence !== first.queueSequence,\n \"A different key on the same lane must mint fresh identities and a fresh queue sequence\",\n );\n }),\n);\n\nconst workerAdmissionIdentity = conformanceCase(\n \"retains immutable worker admission metadata and rejects same-key changes or omission\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const base = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-worker\"),\n \"worker-message\",\n { text: \"first\" },\n );\n\n const metadata = WorkerAdmission.make({\n messageId: base.idempotencyKey,\n sourceSubmissionId: Schema.decodeSync(SubmissionId)(\"source-input\"),\n deliveryPrincipal: base.principal,\n parameters: { prompt: \"original projection parameters\" },\n createdAtMillis: 1,\n origin: {\n worker: {\n schemaVersion: 1,\n threadId: base.threadId,\n targetAgentId: CONFORMANCE_AGENT,\n delegationId: Schema.decodeSync(DelegationId)(\"worker-research\"),\n },\n source: {\n _tag: \"programmatic\",\n threadId: decodeThreadId(\"worker-source\"),\n agentId: CONFORMANCE_AGENT,\n },\n targetDigests: CONFORMANCE_DIGESTS,\n policy: AgentPolicy.resolve(),\n budget: {\n caps: SubagentDelegationCaps.make({\n maxConcurrentChildren: 1,\n maxTotalChildInvocations: 2,\n }),\n allocation: SubagentReservationAmounts.make({\n turns: 12,\n toolCalls: 24,\n durationMillis: 300_000,\n inputTokens: 0,\n outputTokens: 0,\n costMicrousd: 0,\n resultBytes: 1_000,\n }),\n },\n grant: SubagentGrant.make({ maxDepth: 1, allowedToolNames: [] }),\n depth: 1,\n firstMessageId: base.idempotencyKey,\n createdAtMillis: 1,\n expiresAtMillis: 1_000_000,\n },\n });\n\n const admitted = yield* ledger.admit(\n AdmissionRequest.make({ ...base, workerAdmission: metadata }),\n );\n\n const saved = yield* expectSome(\n \"worker admission lookup\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n saved.workerAdmission !== undefined &&\n Schema.toEquivalence(WorkerAdmission)(saved.workerAdmission, metadata),\n \"Worker origin and per-input parameters must survive admission lookup\",\n );\n yield* ensure(\n saved.parentLinkage === undefined,\n \"Background work must not acquire attached-parent semantics\",\n );\n const recovery = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n recovery.submission.workerAdmission !== undefined &&\n Schema.toEquivalence(WorkerAdmission)(recovery.submission.workerAdmission, metadata),\n \"Recovery must retain the exact worker envelope\",\n );\n\n const replayed = yield* ledger.admit(\n AdmissionRequest.make({ ...base, workerAdmission: metadata }),\n );\n\n yield* ensure(\n replayed.replayed && replayed.receiptId === admitted.receiptId,\n \"Identical metadata must replay the original receipt\",\n );\n for (const changed of [\n undefined,\n WorkerAdmission.make({ ...metadata, parameters: { prompt: \"changed\" } }),\n WorkerAdmission.make({\n ...metadata,\n sourceSubmissionId: Schema.decodeSync(SubmissionId)(\"other-source-input\"),\n }),\n WorkerAdmission.make({\n ...metadata,\n origin: { ...metadata.origin, expiresAtMillis: 2_000_000 },\n }),\n ]) {\n const conflict = yield* expectFailure(\n \"different or omitted worker metadata\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n ...(changed === undefined ? {} : { workerAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict),\n \"Worker metadata changes must produce AdmissionConflict even when input is unchanged\",\n );\n }\n\n const nextKey = decodeIdempotencyKey(\"worker-follow-up\");\n\n const next = AdmissionRequest.make({\n ...base,\n idempotencyKey: nextKey,\n workerAdmission: { ...metadata, messageId: nextKey, parameters: { prompt: \"next\" } },\n });\n\n const followed = yield* ledger.admit(next);\n\n yield* ensure(\n followed.queueSequence > admitted.queueSequence,\n \"Matching worker origins must admit later inputs\",\n );\n for (const changed of [\n undefined,\n WorkerAdmission.make({\n ...metadata,\n origin: { ...metadata.origin, expiresAtMillis: 3_000_000 },\n }),\n ]) {\n const conflict = yield* expectFailure(\n \"worker lane origin replacement\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n idempotencyKey: decodeIdempotencyKey(\"worker-lane-replacement\"),\n ...(changed === undefined ? {} : { workerAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n conflict._tag === \"AdmissionPolicyError\" && conflict.reason === \"refused\",\n \"New keys cannot remove or replace an established worker origin\",\n );\n }\n\n const ordinary = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-ordinary-lane\"),\n \"ordinary\",\n { text: \"ordinary\" },\n );\n\n yield* ledger.admit(ordinary);\n\n const takeover = yield* expectFailure(\n \"ordinary lane takeover\",\n ledger.admit(\n AdmissionRequest.make({\n ...ordinary,\n idempotencyKey: decodeIdempotencyKey(\"takeover\"),\n workerAdmission: {\n ...metadata,\n origin: {\n ...metadata.origin,\n worker: { ...metadata.origin.worker, threadId: ordinary.threadId },\n },\n },\n }),\n ),\n );\n\n yield* ensure(\n takeover._tag === \"AdmissionPolicyError\" && takeover.reason === \"refused\",\n \"A worker cannot take over an ordinary lane before canonical materialization\",\n );\n\n const racing = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-lane-race\"),\n \"ordinary-race\",\n { text: \"race\" },\n );\n\n const raced = yield* Effect.forEach(\n [\n racing,\n AdmissionRequest.make({\n ...racing,\n idempotencyKey: decodeIdempotencyKey(\"worker-race\"),\n workerAdmission: {\n ...metadata,\n origin: {\n ...metadata.origin,\n worker: { ...metadata.origin.worker, threadId: racing.threadId },\n },\n },\n }),\n ],\n (request) => ledger.admit(request).pipe(Effect.result),\n { concurrency: 2 },\n );\n\n yield* ensure(\n raced.filter((result) => result._tag === \"Success\").length === 1 &&\n raced.filter(\n (result) => result._tag === \"Failure\" && result.failure._tag === \"AdmissionPolicyError\",\n ).length === 1,\n \"Concurrent ordinary/worker admissions must atomically choose exactly one lane identity\",\n );\n }),\n);\n\nconst messageAdmissionIdentity = conformanceCase(\n \"retains authenticated peer provenance and rejects same-key changes or omission\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const base = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-peer\"),\n \"peer-message\",\n { text: \"hello\" },\n );\n\n const metadata = Schema.decodeSync(MessageAdmission)({\n schemaVersion: 1,\n message: { ownerThreadId: \"peer-source\", messageId: \"peer-message\" },\n peerName: \"reviewer\",\n sender: { threadId: \"peer-source\", agentId: \"peer-agent\" },\n returnAddress: { threadId: \"peer-source\", agentId: \"peer-agent\" },\n });\n\n const admitted = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n const saved = yield* expectSome(\n \"peer admission lookup\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n saved.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(saved.messageAdmission, metadata),\n \"Peer sender and return address must survive lookup without becoming application input\",\n );\n const recovery = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n recovery.submission.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(recovery.submission.messageAdmission, metadata),\n \"Recovery must retain peer provenance\",\n );\n\n const replayed = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n yield* ensure(\n replayed.replayed && replayed.receiptId === admitted.receiptId,\n \"Identical peer metadata must replay its receipt\",\n );\n for (const changed of [\n undefined,\n MessageAdmission.make({ ...metadata, peerName: \"other\" }),\n MessageAdmission.make({ ...metadata, inReplyTo: metadata.message }),\n ]) {\n const conflict = yield* expectFailure(\n \"different or omitted peer metadata\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n ...(changed === undefined ? {} : { messageAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict),\n \"Peer provenance changes must produce AdmissionConflict\",\n );\n }\n }),\n);\n\nconst workerUpdateIdentity = conformanceCase(\n \"retains framework updates separately and rejects changed same-key metadata\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const base = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-update\"),\n \"update-message\",\n { text: \"original application input\" },\n );\n\n const metadata = Schema.decodeSync(WorkerUpdate)({\n _tag: \"WorkerUpdate\",\n schemaVersion: 1,\n worker: {\n schemaVersion: 1,\n delegationId: \"research\",\n targetAgentId: \"child\",\n threadId: \"child-thread\",\n },\n update: {\n schemaVersion: 1,\n agentId: \"child\",\n threadId: \"child-thread\",\n runId: \"child-run\",\n updateId: \"finding\",\n sequence: 1,\n value: { finding: \"partial\" },\n },\n });\n\n const admitted = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n const saved = yield* expectSome(\n \"update admission lookup\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n saved.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(saved.messageAdmission, metadata),\n \"Update identity and value must survive lookup\",\n );\n yield* ensure(\n Schema.toEquivalence(PersistedJson)(saved.inputPayload, base.inputPayload),\n \"Framework update must not replace application input\",\n );\n const recovery = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n recovery.submission.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(recovery.submission.messageAdmission, metadata),\n \"Recovery must retain update provenance\",\n );\n\n const replay = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n yield* ensure(\n replay.replayed && replay.receiptId === admitted.receiptId,\n \"Identical update retries must reuse the original receipt\",\n );\n for (const changed of [\n undefined,\n WorkerUpdate.make({ ...metadata, update: { ...metadata.update, sequence: 2 } }),\n WorkerUpdate.make({\n ...metadata,\n update: { ...metadata.update, value: { finding: \"changed\" } },\n }),\n ]) {\n const conflict = yield* expectFailure(\n \"changed update metadata\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n ...(changed === undefined ? {} : { messageAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict),\n \"Changed update identity or value must conflict\",\n );\n }\n }),\n);\n\nconst workerCompletionIdentity = conformanceCase(\n \"retains framework completions and rejects same-key changes or omission\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n const base = yield* admissionRequest(\n decodeThreadId(\"ledger-conformance-completion\"),\n \"completion-message\",\n { text: \"hello\" },\n );\n\n const metadata = Schema.decodeSync(WorkerCompletion)({\n _tag: \"WorkerCompletion\",\n schemaVersion: 1,\n budgetExhausted: false,\n report: {\n _tag: \"Settled\",\n worker: {\n schemaVersion: 1,\n delegationId: \"research\",\n targetAgentId: \"child\",\n threadId: \"child-thread\",\n },\n receipt: {\n threadId: \"child-thread\",\n submissionId: \"child-input\",\n receiptId: \"child-receipt\",\n queueSequence: 1,\n },\n runId: \"child-run\",\n settlementId: \"child-settlement\",\n outcome: \"completed\",\n result: { answer: \"done\" },\n },\n });\n\n const admitted = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n const saved = yield* expectSome(\n \"completion admission lookup\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n saved.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(saved.messageAdmission, metadata),\n \"Completion identity and projected result must survive lookup without becoming application input\",\n );\n const recovery = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n recovery.submission.messageAdmission !== undefined &&\n Schema.toEquivalence(InputMessage)(recovery.submission.messageAdmission, metadata),\n \"Recovery must retain completion provenance\",\n );\n\n const replayed = yield* ledger.admit(\n AdmissionRequest.make({ ...base, messageAdmission: metadata }),\n );\n\n yield* ensure(\n replayed.replayed && replayed.receiptId === admitted.receiptId,\n \"Identical completion metadata must replay its receipt\",\n );\n for (const changed of [\n undefined,\n WorkerCompletion.make({ ...metadata, budgetExhausted: true }),\n ]) {\n const conflict = yield* expectFailure(\n \"different or omitted completion metadata\",\n ledger.admit(\n AdmissionRequest.make({\n ...base,\n ...(changed === undefined ? {} : { messageAdmission: changed }),\n }),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(conflict),\n \"Completion metadata changes must produce AdmissionConflict\",\n );\n }\n }),\n);\n\nconst crossPrincipalAdmissionScoping = conformanceCase(\n \"scopes idempotency keys to their principal: a second principal reusing a key mints a distinct Submission\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n // SEC-002 (security-operations §2): \"Client idempotency keys are scoped so one principal\n // cannot discover or collide with another principal's submission.\" This is the COLLIDE\n // half — a second principal reusing an existing (thread, idempotency key) must not\n // replay, overwrite, or conflict with the first principal's Submission, and must not learn\n // its identity. (The DISCOVER half — scoped lookup/resolveAdmission — is covered by\n // `lookupByIdAndKey` and `resolveAdmissionAuthority`.)\n const threadId = decodeThreadId(\"ledger-conformance-cross-principal\");\n const ledger = yield* SubmissionLedger;\n const idempotencyKey = decodeIdempotencyKey(\"shared-key-1\");\n\n const mineRequest = yield* admissionRequest(threadId, \"shared-key-1\", {\n owner: \"mine\",\n });\n\n const mine = yield* ledger.admit(mineRequest);\n\n // A DIFFERENT principal admits the SAME (thread, key) with different canonical input.\n // It is neither a replay nor an AdmissionConflict: keys are principal-scoped, so this mints\n // a fresh, distinct Submission with its own identities and queue position.\n const theirsRequest = AdmissionRequest.make({\n threadId,\n principal: OTHER_PRINCIPAL,\n idempotencyKey,\n agentId: CONFORMANCE_AGENT,\n agentDigests: CONFORMANCE_DIGESTS,\n deploymentId: CONFORMANCE_DEPLOYMENT,\n inputPayload: { owner: \"theirs\" },\n inputDigest: yield* digestJson({ owner: \"theirs\" }),\n });\n\n const theirs = yield* ledger.admit(theirsRequest);\n\n yield* ensure(\n !theirs.replayed &&\n theirs.submissionId !== mine.submissionId &&\n theirs.receiptId !== mine.receiptId &&\n theirs.queueSequence !== mine.queueSequence,\n \"A second principal reusing a key must mint a fresh, distinct Submission — never a replay or collision\",\n );\n\n // The first principal's own replay is unaffected by the second principal's admission.\n const mineReplay = yield* ledger.admit(mineRequest);\n\n yield* ensure(\n mineReplay.replayed && mineReplay.submissionId === mine.submissionId,\n \"The original principal's replay must still resolve to its own Submission after the other principal admitted\",\n );\n\n // Each principal's scoped lookup resolves ONLY its own Submission — no cross-principal\n // discovery through the shared key.\n const mineByKey = yield* expectSome(\n \"the first principal's scoped lookup\",\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: CONFORMANCE_PRINCIPAL,\n idempotencyKey,\n }),\n ),\n );\n\n const theirsByKey = yield* expectSome(\n \"the second principal's scoped lookup\",\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: OTHER_PRINCIPAL,\n idempotencyKey,\n }),\n ),\n );\n\n yield* ensure(\n mineByKey.submissionId === mine.submissionId &&\n theirsByKey.submissionId === theirs.submissionId &&\n mineByKey.submissionId !== theirsByKey.submissionId,\n \"Each principal's scoped lookup must resolve only its own Submission under the shared key\",\n );\n }),\n);\n\nconst admissionTupleBoundaries = conformanceCase(\n \"preserves admission tuple boundaries when principal and key contain separators\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-admission-separators\");\n const ledger = yield* SubmissionLedger;\n const base = yield* admissionRequest(threadId, \"r\", { work: \"separators\" });\n\n const firstRequest = AdmissionRequest.make({\n ...base,\n principal: Schema.decodeSync(Principal)(\"p\\u001fq\"),\n });\n\n const secondRequest = AdmissionRequest.make({\n ...base,\n principal: Schema.decodeSync(Principal)(\"p\"),\n idempotencyKey: decodeIdempotencyKey(\"q\\u001fr\"),\n });\n\n const first = yield* ledger.admit(firstRequest);\n const second = yield* ledger.admit(secondRequest);\n\n yield* ensure(\n !second.replayed &&\n second.submissionId !== first.submissionId &&\n second.receiptId !== first.receiptId &&\n second.queueSequence === first.queueSequence + 1,\n \"Distinct admission tuples must allocate distinct identities and consecutive queue positions\",\n );\n\n for (const [request, admitted] of [\n [firstRequest, first],\n [secondRequest, second],\n ] as const) {\n const key = SubmissionLookupByKey.make({\n threadId,\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n });\n\n const found = yield* expectSome(\"the exact admission tuple\", yield* ledger.lookup(key));\n const resolved = yield* ledger.resolveAdmission(key);\n const replay = yield* ledger.admit(request);\n\n yield* ensure(\n found.submissionId === admitted.submissionId &&\n resolved._tag === \"Admitted\" &&\n resolved.submission.submissionId === admitted.submissionId &&\n replay.replayed &&\n replay.submissionId === admitted.submissionId &&\n replay.receiptId === admitted.receiptId &&\n replay.queueSequence === admitted.queueSequence,\n \"Lookup, authoritative resolution, and replay must preserve the exact admission tuple\",\n );\n }\n }),\n);\n\nconst concurrentAdmissionFifo = conformanceCase(\n \"allocates distinct FIFO queue sequences under concurrent admission and claims in order\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-fifo-concurrent\");\n const ledger = yield* SubmissionLedger;\n\n const requests = [\n yield* admissionRequest(threadId, \"fifo-key-0\", { step: 0 }),\n yield* admissionRequest(threadId, \"fifo-key-1\", { step: 1 }),\n yield* admissionRequest(threadId, \"fifo-key-2\", { step: 2 }),\n ];\n\n const admitted = yield* Effect.forEach(requests, (request) => ledger.admit(request), {\n concurrency: \"unbounded\",\n });\n\n const duplicate = yield* admissionRequest(threadId, \"fifo-key-dup\", { step: 3 });\n\n const duplicated = yield* Effect.all([ledger.admit(duplicate), ledger.admit(duplicate)], {\n concurrency: \"unbounded\",\n });\n\n yield* ensure(\n duplicated[0].submissionId === duplicated[1].submissionId &&\n duplicated[0].receiptId === duplicated[1].receiptId &&\n duplicated[0].queueSequence === duplicated[1].queueSequence,\n \"Concurrent duplicate admissions must resolve to one Submission and one Receipt\",\n );\n yield* ensure(\n duplicated.filter((result) => !result.replayed).length === 1,\n \"Exactly one of two concurrent duplicate admissions must create the Submission\",\n );\n\n const lane = [...admitted, duplicated[0]];\n\n yield* ensure(\n new Set(lane.map((result) => result.queueSequence)).size === lane.length,\n \"Concurrent admissions on one lane must allocate distinct queue sequences\",\n );\n yield* ensure(\n new Set(lane.map((result) => result.submissionId)).size === lane.length,\n \"Concurrent admissions on one lane must mint distinct Submission identities\",\n );\n\n yield* Effect.forEach(\n lane,\n (result) => ledger.markReady(MarkReadyRequest.make({ submissionId: result.submissionId })),\n { discard: true },\n );\n\n const expectedOrder = [...lane].sort((a, b) => a.queueSequence - b.queueSequence);\n\n for (const expected of expectedOrder) {\n const claim = yield* expectSome(\n `a claim while ${expected.submissionId} heads the lane`,\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n yield* ensure(\n claim.submissionId === expected.submissionId,\n \"Claims must deliver Submissions in ascending queue-sequence order\",\n );\n yield* settleClaimed(expected, claim.ownershipToken);\n }\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_A)),\n \"A fully settled lane must produce no claim\",\n );\n }),\n);\n\nconst fifoHeadClaim = conformanceCase(\n \"claims only the lowest unsettled head and fences the lane epoch forward\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const emptyLane = decodeThreadId(\"ledger-conformance-empty\");\n\n yield* ensure(\n Option.isNone(yield* claimLane(emptyLane, PRODUCER_A)),\n \"Claiming a lane with no admitted work must return none\",\n );\n\n const threadId = decodeThreadId(\"ledger-conformance-head\");\n const first = yield* admitReady(threadId, \"head-key-1\", { order: 1 });\n const second = yield* admitReady(threadId, \"head-key-2\", { order: 2 });\n\n yield* ensure(\n second.queueSequence > first.queueSequence,\n \"Sequential admissions must allocate increasing queue sequences\",\n );\n\n const headClaim = yield* expectSome(\n \"the first claim on the lane\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n yield* ensure(\n headClaim.submissionId === first.submissionId,\n \"A claim must take the lowest unsettled queue sequence, never later work\",\n );\n\n const running = yield* expectSome(\n \"lookup of the claimed head\",\n yield* lookupById(first.submissionId),\n );\n\n yield* ensure(\n running.state === \"running\",\n \"Claiming a ready head must transition it to running with strong read visibility\",\n );\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"A lane whose head lease is live under another owner must produce no claim\",\n );\n\n yield* settleClaimed(first, headClaim.ownershipToken);\n\n const nextClaim = yield* expectSome(\n \"the claim after the head settled\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n nextClaim.submissionId === second.submissionId,\n \"Settling the head must make exactly the next queue sequence claimable\",\n );\n yield* ensure(\n nextClaim.producerEpoch > headClaim.producerEpoch,\n \"Every successful claim must bump the Thread producer epoch\",\n );\n yield* settleClaimed(second, nextClaim.ownershipToken);\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_A)),\n \"A drained lane must produce no claim\",\n );\n }),\n);\n\nconst leaseExpiryReclaim = conformanceCase(\n \"reclaims an expired lease with a higher epoch and fences the stale token\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-lease\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"lease-key-1\", { work: \"lease\" });\n\n const firstClaim = yield* expectSome(\n \"the initial claim\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const renewal = yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n yield* ensure(\n DateTime.toEpochMillis(renewal.leaseExpiresAt) >=\n DateTime.toEpochMillis(firstClaim.leaseExpiresAt),\n \"Renewal must never shorten the ownership lease\",\n );\n const liveToken = renewal.ownershipToken;\n\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"A renewed live lease must keep the lane blocked for other owners\",\n );\n\n yield* advancePastLease(renewal.leaseExpiresAt);\n\n const reclaim = yield* expectSome(\n \"the reclaim after lease expiry\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === admitted.submissionId &&\n reclaim.attemptId !== firstClaim.attemptId &&\n reclaim.ownershipToken !== liveToken,\n \"Reclaiming an expired lease must start a fresh Attempt with a fresh token\",\n );\n yield* ensure(\n reclaim.producerEpoch > firstClaim.producerEpoch,\n \"Reclaiming an expired lease must bump the producer epoch past the stale Attempt\",\n );\n\n const staleRenew = yield* expectFailure(\n \"renewing with the superseded token\",\n ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: liveToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(staleRenew) && staleRenew.actualEpoch === reclaim.producerEpoch,\n \"A superseded token must fail renewal with the current epoch reported\",\n );\n\n const staleRelease = yield* expectFailure(\n \"releasing with the superseded token\",\n ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: liveToken,\n }),\n ),\n );\n\n yield* ensure(isOwnershipLost(staleRelease), \"A superseded token must not release the lane\");\n\n const staleMark = yield* expectFailure(\n \"marking input applied with the superseded token\",\n ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: liveToken,\n recordId: submissionInputRecordId(admitted.submissionId),\n sequence: decodeSequence(1),\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(staleMark),\n \"A superseded token must not mark canonical input applied\",\n );\n\n const staleReservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: liveToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n });\n\n const staleReserve = yield* expectFailure(\n \"reserving a settlement with the superseded token\",\n ledger.reserveSettlement(staleReservation),\n );\n\n yield* ensure(\n isOwnershipLost(staleReserve),\n \"A superseded token must not reserve a settlement\",\n );\n const afterStale = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n afterStale.reservation === undefined,\n \"A fenced settlement reservation must leave no reservation behind\",\n );\n\n yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: reclaim.ownershipToken,\n }),\n );\n\n const renewalLane = decodeThreadId(\"ledger-conformance-renewal\");\n const renewalWork = yield* admitReady(renewalLane, \"renewal-key-1\", { work: \"renewal\" });\n\n const renewalClaim = yield* expectSome(\n \"the claim on the renewal lane\",\n yield* claimLane(renewalLane, PRODUCER_A),\n );\n\n yield* advancePastLease(renewalClaim.leaseExpiresAt);\n\n const lateRenewal = yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: renewalWork.submissionId,\n ownershipToken: renewalClaim.ownershipToken,\n }),\n );\n\n yield* ensure(\n DateTime.toEpochMillis(lateRenewal.leaseExpiresAt) >\n DateTime.toEpochMillis(renewalClaim.leaseExpiresAt),\n \"Renewal after expiry must succeed and extend the lease when nobody claimed in between\",\n );\n }),\n);\n\nconst releaseMakesHeadClaimable = conformanceCase(\n \"releases ownership gracefully so the head is immediately claimable\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-release\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"release-key-1\", { work: \"release\" });\n\n const firstClaim = yield* expectSome(\n \"the initial claim\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n yield* ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n const releasedRenew = yield* expectFailure(\n \"renewing a released token\",\n ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(releasedRenew),\n \"A released token must no longer renew the lease\",\n );\n\n const reclaim = yield* expectSome(\n \"the claim immediately after release\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === admitted.submissionId &&\n reclaim.producerEpoch > firstClaim.producerEpoch,\n \"A released nonterminal head must be claimable immediately with a higher epoch\",\n );\n\n const doubleRelease = yield* expectFailure(\n \"releasing with the pre-release token after a new claim\",\n ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(doubleRelease),\n \"A superseded token must not release the new Attempt's ownership\",\n );\n yield* settleClaimed(admitted, reclaim.ownershipToken);\n }),\n);\n\nconst inputAppliedIdempotency = conformanceCase(\n \"marks canonical input applied idempotently under the owning token\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-input\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"input-key-1\", { work: \"input\" });\n\n const claim = yield* expectSome(\n \"the claim before input apply\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const marker = MarkInputAppliedRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n recordId: submissionInputRecordId(admitted.submissionId),\n sequence: decodeSequence(2),\n });\n\n yield* ledger.markInputApplied(marker);\n\n const applied = yield* expectSome(\n \"lookup after marking input applied\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n applied.state === \"input-applied\",\n \"Marking input applied must transition the Submission to input-applied\",\n );\n\n yield* ledger.markInputApplied(marker);\n for (const conflicting of [\n MarkInputAppliedRequest.make({\n ...marker,\n recordId: submissionInputRecordId(decodeSubmissionId(\"different-input-marker\")),\n }),\n MarkInputAppliedRequest.make({ ...marker, sequence: decodeSequence(3) }),\n ]) {\n const error = yield* expectFailure(\n \"a conflicting input-applied marker\",\n ledger.markInputApplied(conflicting),\n );\n\n yield* ensure(isLedgerError(error), \"Conflicting input markers must fail as LedgerError\");\n }\n const snapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n snapshot.inputApplied !== undefined &&\n snapshot.inputApplied.recordId === marker.recordId &&\n snapshot.inputApplied.sequence === marker.sequence &&\n snapshot.submission.state === \"input-applied\",\n \"Identical replays and rejected conflicts must retain the original input-applied marker\",\n );\n }),\n);\n\nconst settlementLifecycle = conformanceCase(\n \"reserves and finalizes exactly one settlement with idempotent replays\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-settle\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"settle-key-1\", { work: \"settle\" });\n\n const claim = yield* expectSome(\n \"the claim before terminalization\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const reservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n result: { answer: 42 },\n });\n\n const reserved = yield* ledger.reserveSettlement(reservation);\n\n yield* ensure(\n !reserved.replayed &&\n reserved.settlementId === reservation.settlementId &&\n reserved.outcome === \"completed\" &&\n reserved.recordDigest === reservation.recordDigest,\n \"The first reservation must commit the exact reserved record without replay\",\n );\n\n const terminalizing = yield* expectSome(\n \"lookup after reservation\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n terminalizing.state === \"terminalizing\",\n \"Reserving a settlement must transition the Submission to terminalizing\",\n );\n\n const replayedReservation = yield* ledger.reserveSettlement(reservation);\n\n yield* ensure(\n replayedReservation.replayed &&\n replayedReservation.recordDigest === reservation.recordDigest,\n \"An identical reservation must replay with the stored exact record\",\n );\n\n const finalization = SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: reservation.settlementId,\n });\n\n const settlement = yield* ledger.finalizeSettlement(finalization);\n\n yield* ensure(\n settlement.submissionId === admitted.submissionId &&\n settlement.settlementId === reservation.settlementId &&\n settlement.receiptId === admitted.receiptId &&\n settlement.outcome === \"completed\",\n \"Finalization must return the Settlement bound to the admission Receipt\",\n );\n\n const settled = yield* expectSome(\n \"lookup after finalization\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n settled.state === \"settled\" && settled.settledOutcome === \"completed\",\n \"Finalization must settle the Submission with its recorded outcome\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n const retried = yield* ledger.finalizeSettlement(finalization);\n\n yield* ensure(\n retried.settlementId === settlement.settlementId &&\n retried.receiptId === settlement.receiptId &&\n retried.outcome === settlement.outcome &&\n sameInstant(retried.settledAt, settlement.settledAt),\n \"Retrying finalization after a lost acknowledgment must return the same Settlement\",\n );\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"A settled lane with no further work must produce no claim\",\n );\n\n const failedDiagnostic = {\n errorTag: \"ConformanceFailure\",\n message: \"The conformance Submission failed\",\n } as const;\n\n const failedAdmission = yield* admitReady(threadId, \"settle-key-2\", {\n work: \"fail\",\n });\n\n const failedClaim = yield* expectSome(\n \"the claim before failed terminalization\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const failedReservation = yield* settlementReservation({\n submissionId: failedAdmission.submissionId,\n ownershipToken: failedClaim.ownershipToken,\n receiptId: failedAdmission.receiptId,\n outcome: \"failed\",\n result: failedDiagnostic,\n });\n\n yield* ledger.reserveSettlement(failedReservation);\n\n const failedSettlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: failedAdmission.submissionId,\n settlementId: failedReservation.settlementId,\n }),\n );\n\n yield* ensure(\n failedSettlement.outcome === \"failed\" &&\n failedSettlement.failure?.errorTag === failedDiagnostic.errorTag &&\n failedSettlement.failure.message === failedDiagnostic.message,\n \"A failed finalization must return the exact bounded canonical diagnostic\",\n );\n yield* TestClock.adjust(\"1 second\");\n\n const replayedFailedSettlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: failedAdmission.submissionId,\n settlementId: failedReservation.settlementId,\n }),\n );\n\n yield* ensure(\n replayedFailedSettlement.failure?.errorTag === failedDiagnostic.errorTag &&\n replayedFailedSettlement.failure.message === failedDiagnostic.message &&\n sameInstant(replayedFailedSettlement.settledAt, failedSettlement.settledAt),\n \"A replayed failed finalization must preserve its diagnostic and original settledAt\",\n );\n }),\n);\n\nconst settlementConflicts = conformanceCase(\n \"rejects conflicting settlement reservations and finalizations\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-settle-conflict\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"conflict-key-1\", { work: \"conflict\" });\n\n const claim = yield* expectSome(\n \"the claim before terminalization\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const reservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n result: { attempt: 1 },\n });\n\n yield* ledger.reserveSettlement(reservation);\n\n const conflictingOutcome = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"failed\",\n result: {\n errorTag: \"ConformanceFailure\",\n message: \"The conflicting conformance reservation failed\",\n },\n });\n\n const outcomeConflict = yield* expectFailure(\n \"reserving a different outcome for the same Submission\",\n ledger.reserveSettlement(conflictingOutcome),\n );\n\n yield* ensure(\n isSettlementConflict(outcomeConflict) && outcomeConflict.existingOutcome === \"completed\",\n \"A second reservation with a different outcome must conflict with the recorded outcome\",\n );\n\n const conflictingContent = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"completed\",\n result: { attempt: 2 },\n });\n\n const contentConflict = yield* expectFailure(\n \"reserving the same outcome with different canonical content\",\n ledger.reserveSettlement(conflictingContent),\n );\n\n yield* ensure(\n isSettlementConflict(contentConflict) && contentConflict.existingOutcome === \"completed\",\n \"A second reservation with different content must conflict even when outcomes match\",\n );\n\n const wrongFinalization = yield* expectFailure(\n \"finalizing with a settlement identity that was never reserved\",\n ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: submissionSettlementId(\n decodeSubmissionId(`${admitted.submissionId}-other`),\n ),\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(wrongFinalization) &&\n wrongFinalization.existingOutcome === \"completed\",\n \"Finalization disagreeing with the reserved settlement must conflict\",\n );\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: reservation.settlementId,\n }),\n );\n\n yield* ensure(\n settlement.outcome === \"completed\",\n \"The originally reserved outcome must remain the one that settles\",\n );\n }),\n);\n\nconst abortIdempotency = conformanceCase(\n \"records abort intent idempotently and refuses to abort settled work\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-abort\");\n const ledger = yield* SubmissionLedger;\n\n const admitted = yield* ledger.admit(\n yield* admissionRequest(threadId, \"abort-key-1\", { work: \"abort\" }),\n );\n\n const readRequest = AbortIntentRequest.make({ submissionId: admitted.submissionId });\n\n yield* ensure(\n (yield* ledger.readAbortIntent(readRequest)) === undefined,\n \"An admitted Submission without an abort intent must return undefined\",\n );\n\n const intent = yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: admitted.submissionId,\n author: \"conformance-operator\",\n reason: \"first abort request\",\n }),\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const repeated = yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: admitted.submissionId,\n author: \"conformance-operator\",\n reason: \"second abort request\",\n }),\n );\n\n yield* ensure(\n repeated.reason === intent.reason &&\n repeated.author === intent.author &&\n sameInstant(repeated.requestedAt, intent.requestedAt),\n \"Repeating an abort command must return the recorded intent unchanged\",\n );\n const snapshot = yield* recoverySnapshot(admitted.submissionId);\n const narrow = yield* ledger.readAbortIntent(readRequest);\n\n yield* ensure(\n snapshot.abortIntent !== undefined && snapshot.abortIntent.reason === intent.reason,\n \"The recovery snapshot must expose the recorded abort intent\",\n );\n yield* ensure(\n narrow !== undefined &&\n narrow.submissionId === intent.submissionId &&\n narrow.author === intent.author &&\n narrow.reason === intent.reason &&\n sameInstant(narrow.requestedAt, intent.requestedAt) &&\n narrow.canonicalRecordId === snapshot.abortIntent?.canonicalRecordId,\n \"The narrow read must preserve the recorded intent and canonical proof\",\n );\n\n const unknown = yield* expectFailure(\n \"reading an unknown Submission's abort intent\",\n ledger.readAbortIntent(\n AbortIntentRequest.make({ submissionId: decodeSubmissionId(\"unknown-abort-target\") }),\n ),\n );\n\n yield* ensure(unknown._tag === \"LedgerError\", \"Unknown abort targets must fail typed\");\n\n const settledLane = decodeThreadId(\"ledger-conformance-abort-settled\");\n const settledWork = yield* admitReady(settledLane, \"abort-key-2\", { work: \"settled\" });\n\n const claim = yield* expectSome(\n \"the claim on the settled lane\",\n yield* claimLane(settledLane, PRODUCER_A),\n );\n\n yield* settleClaimed(settledWork, claim.ownershipToken);\n\n const terminalAbort = yield* expectFailure(\n \"aborting a settled Submission\",\n ledger.requestAbort(\n AbortCommand.make({\n submissionId: settledWork.submissionId,\n author: \"conformance-operator\",\n reason: \"too late\",\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(terminalAbort) && terminalAbort.existingOutcome === \"completed\",\n \"Abort must never rewrite a terminal outcome\",\n );\n }),\n);\n\nconst scanNonterminalWorklist = conformanceCase(\n \"scans exactly the unsettled work in lane order\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const laneA = decodeThreadId(\"ledger-conformance-scan-a\");\n const laneB = decodeThreadId(\"ledger-conformance-scan-b\");\n const ledger = yield* SubmissionLedger;\n\n const first = yield* admitReady(laneA, \"scan-key-1\", { step: 1 });\n const second = yield* admitReady(laneA, \"scan-key-2\", { step: 2 });\n const third = yield* admitReady(laneA, \"scan-key-3\", { step: 3 });\n const settledElsewhere = yield* admitReady(laneB, \"scan-key-4\", { step: 4 });\n\n const firstClaim = yield* expectSome(\n \"the claim on the first head\",\n yield* claimLane(laneA, PRODUCER_A),\n );\n\n yield* settleClaimed(first, firstClaim.ownershipToken);\n yield* expectSome(\"the claim on the second head\", yield* claimLane(laneA, PRODUCER_A));\n\n const otherClaim = yield* expectSome(\n \"the claim on the other lane\",\n yield* claimLane(laneB, PRODUCER_A),\n );\n\n yield* settleClaimed(settledElsewhere, otherClaim.ownershipToken);\n\n const scanned = yield* ledger.scanNonterminal.pipe(Stream.runCollect);\n\n yield* ensure(\n scanned.every((snapshot) => snapshot.state !== \"settled\"),\n \"scanNonterminal must never emit settled Submissions\",\n );\n\n const mine = scanned.filter(\n (snapshot) => snapshot.threadId === laneA || snapshot.threadId === laneB,\n );\n\n yield* ensure(\n mine.length === 2 &&\n mine.at(0)?.submissionId === second.submissionId &&\n mine.at(1)?.submissionId === third.submissionId,\n \"scanNonterminal must emit exactly the unsettled Submissions in queue-sequence order\",\n );\n yield* ensure(\n mine.at(0)?.state === \"running\" && mine.at(1)?.state === \"ready\",\n \"scanNonterminal entries must carry the current Submission states\",\n );\n yield* ensure(\n mine.at(0)?.receiptId === second.receiptId &&\n mine.at(1)?.receiptId === third.receiptId &&\n mine.every(\n (entry) =>\n entry.principal === CONFORMANCE_PRINCIPAL &&\n !(\"inputPayload\" in entry) &&\n !(\"workerAdmission\" in entry) &&\n !(\"messageAdmission\" in entry),\n ),\n \"The worklist retains receipt and principal identity without execution payloads\",\n );\n const start = scanned.findIndex((snapshot) => snapshot.submissionId === second.submissionId);\n\n yield* ensure(\n start >= 0 && scanned.at(start + 1)?.submissionId === third.submissionId,\n \"One lane's unsettled Submissions must be contiguous in (thread, sequence) order\",\n );\n }),\n);\n\nconst lookupByIdAndKey = conformanceCase(\n \"looks up submissions by identity and scoped idempotency key with strong reads\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-lookup\");\n const ledger = yield* SubmissionLedger;\n const request = yield* admissionRequest(threadId, \"lookup-key-1\", { city: \"Kyoto\" });\n const admitted = yield* ledger.admit(request);\n\n const byId = yield* expectSome(\n \"lookup by Submission identity\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n byId.submissionId === admitted.submissionId &&\n byId.threadId === threadId &&\n byId.queueSequence === admitted.queueSequence &&\n byId.principal === request.principal &&\n byId.idempotencyKey === request.idempotencyKey &&\n byId.agentId === request.agentId &&\n byId.deploymentId === request.deploymentId &&\n byId.inputDigest === request.inputDigest &&\n byId.receiptId === admitted.receiptId &&\n byId.state === \"admitted\" &&\n byId.settledOutcome === undefined &&\n byId.readyAt === undefined,\n \"Lookup by identity must return the full admission snapshot\",\n );\n\n const byKey = yield* expectSome(\n \"lookup by scoped idempotency key\",\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n }),\n ),\n );\n\n yield* ensure(\n byKey.submissionId === admitted.submissionId,\n \"Lookup by key must resolve to the same Submission as lookup by identity\",\n );\n\n yield* ensure(\n Option.isNone(\n yield* lookupById(decodeSubmissionId(\"submission-ledger-conformance-missing\")),\n ),\n \"Lookup of an unknown Submission identity must return none\",\n );\n yield* ensure(\n Option.isNone(\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: request.principal,\n idempotencyKey: decodeIdempotencyKey(\"lookup-key-missing\"),\n }),\n ),\n ),\n \"Lookup of an unknown idempotency key must return none\",\n );\n yield* ensure(\n Option.isNone(\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: OTHER_PRINCIPAL,\n idempotencyKey: request.idempotencyKey,\n }),\n ),\n ),\n \"Idempotency keys must be scoped to their principal\",\n );\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n\n const readyByKey = yield* expectSome(\n \"lookup by key after readiness\",\n yield* ledger.lookup(\n SubmissionLookupByKey.make({\n threadId,\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n }),\n ),\n );\n\n yield* ensure(\n readyByKey.state === \"ready\" && readyByKey.readyAt !== undefined,\n \"Lookups must observe prior writes with strong consistency\",\n );\n }),\n);\n\nconst recoverySnapshotConsistency = conformanceCase(\n \"loads a strongly consistent recovery snapshot without exposing the live token\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-recovery\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"recovery-key-1\", { work: \"recovery\" });\n\n const initial = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n initial.submission.state === \"ready\" &&\n initial.ownership === undefined &&\n initial.inputApplied === undefined &&\n initial.reservation === undefined &&\n initial.abortIntent === undefined,\n \"A ready, unclaimed Submission must have no ownership, marker, reservation, or intent\",\n );\n\n const claim = yield* expectSome(\n \"the claim before snapshotting\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const owned = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n owned.ownership !== undefined &&\n owned.ownership.attemptId === claim.attemptId &&\n owned.ownership.producerEpoch === claim.producerEpoch &&\n owned.ownership.ownerProducerId === PRODUCER_A &&\n sameInstant(owned.ownership.leaseExpiresAt, claim.leaseExpiresAt),\n \"The recovery snapshot must expose the live Attempt's identity, owner, epoch, and lease\",\n );\n\n const marker = MarkInputAppliedRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n recordId: submissionInputRecordId(admitted.submissionId),\n sequence: decodeSequence(3),\n });\n\n yield* ledger.markInputApplied(marker);\n yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: admitted.submissionId,\n author: \"conformance-operator\",\n reason: \"abort during recovery case\",\n }),\n );\n\n const reservation = yield* settlementReservation({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n receiptId: admitted.receiptId,\n outcome: \"aborted\",\n });\n\n yield* ledger.reserveSettlement(reservation);\n\n const reserved = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n reserved.inputApplied !== undefined &&\n reserved.inputApplied.recordId === marker.recordId &&\n reserved.inputApplied.sequence === marker.sequence,\n \"The recovery snapshot must expose the applied-input marker\",\n );\n yield* ensure(\n reserved.abortIntent !== undefined &&\n reserved.abortIntent.reason === \"abort during recovery case\",\n \"The recovery snapshot must expose the abort intent\",\n );\n yield* ensure(\n reserved.reservation !== undefined &&\n !reserved.reservation.finalized &&\n reserved.reservation.settlementId === reservation.settlementId &&\n reserved.reservation.outcome === \"aborted\" &&\n reserved.reservation.recordDigest === reservation.recordDigest,\n \"The recovery snapshot must expose the unfinalized reservation with its exact record\",\n );\n\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: admitted.submissionId,\n settlementId: reservation.settlementId,\n }),\n );\n const settled = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n settled.submission.state === \"settled\" &&\n settled.submission.settledOutcome === \"aborted\" &&\n settled.reservation !== undefined &&\n settled.reservation.finalized,\n \"After finalization the snapshot must show the settled state and finalized reservation\",\n );\n }),\n);\n\nconst joiningPrefixClaim = conformanceCase(\n \"claims a contiguous joining prefix and stops at a gap\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-joining-prefix\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"join-prefix-host\", { work: \"host\" });\n const second = yield* admitReady(threadId, \"join-prefix-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"join-prefix-3\", { queued: 3 });\n\n // Admitted but never marked ready: the gap that breaks the contiguous prefix.\n const fourth = yield* ledger.admit(\n yield* admissionRequest(threadId, \"join-prefix-4\", { queued: 4 }),\n );\n\n const fifth = yield* admitReady(threadId, \"join-prefix-5\", { queued: 5 });\n\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n yield* ensure(\n hostClaim.submissionId === host.submissionId,\n \"The host must head the lane before joining later work\",\n );\n\n const foreign = yield* expectFailure(\n \"claiming joining work without owning the host lane\",\n ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: BOGUS_TOKEN,\n maxCount: 8,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(foreign),\n \"claimJoining must be fenced by the host's ownership token\",\n );\n\n const first = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 1,\n }),\n );\n\n yield* ensure(\n first.length === 1 &&\n first[0].submissionId === second.submissionId &&\n first[0].queueSequence === second.queueSequence &&\n persistedJsonEquivalent(first[0].inputPayload, { queued: 2 }),\n \"maxCount must bound the claim to exactly the next queued Submission with its input\",\n );\n\n const rest = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n rest.length === 1 && rest[0].submissionId === third.submissionId,\n \"A repeated claim must skip already-joining rows and stop at the admitted gap\",\n );\n\n const blocked = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n blocked.length === 0,\n \"An admitted-not-ready row must break the contiguous prefix and hide later ready work\",\n );\n\n const secondState = yield* expectSome(\n \"lookup of a claimed joining Submission\",\n yield* lookupById(second.submissionId),\n );\n\n const fourthState = yield* expectSome(\n \"lookup of the gap Submission\",\n yield* lookupById(fourth.submissionId),\n );\n\n const fifthState = yield* expectSome(\n \"lookup of the ready Submission after the gap\",\n yield* lookupById(fifth.submissionId),\n );\n\n yield* ensure(\n secondState.state === \"joining\" &&\n fourthState.state === \"admitted\" &&\n fifthState.state === \"ready\",\n \"Claiming must transition exactly the claimed prefix to joining\",\n );\n\n const hostSnapshot = yield* recoverySnapshot(host.submissionId);\n\n yield* ensure(\n hostSnapshot.joins.length === 2 &&\n hostSnapshot.joins[0].submissionId === second.submissionId &&\n hostSnapshot.joins[0].state === \"joining\" &&\n hostSnapshot.joins[0].hostSubmissionId === host.submissionId &&\n hostSnapshot.joins[1].submissionId === third.submissionId,\n \"The host recovery snapshot must expose the claimed prefix in queue order\",\n );\n const joinedSide = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n joinedSide.hostSubmissionId === host.submissionId,\n \"A joining Submission's recovery snapshot must expose its host linkage\",\n );\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: fourth.submissionId }));\n\n const afterGap = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n afterGap.length === 2 &&\n afterGap[0].submissionId === fourth.submissionId &&\n afterGap[1].submissionId === fifth.submissionId,\n \"Once the gap closes, the claim must extend past already-claimed rows in queue order\",\n );\n }),\n);\n\nconst revertJoiningReturnsToReady = conformanceCase(\n \"revertJoining returns exactly the pre-append claims to ready\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-revert-joining\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"revert-host\", { work: \"host\" });\n const second = yield* admitReady(threadId, \"revert-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"revert-3\", { queued: 3 });\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const claims = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(claims.length === 2, \"Both queued Submissions must join the host's prefix\");\n\n // third's canonical input is appended; second's never is.\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: third.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: submissionInputRecordId(third.submissionId),\n sequence: decodeSequence(7),\n }),\n );\n\n yield* ledger.revertJoining(RevertJoiningRequest.make({ submissionId: second.submissionId }));\n\n const reverted = yield* expectSome(\n \"lookup after revert\",\n yield* lookupById(second.submissionId),\n );\n\n yield* ensure(\n reverted.state === \"ready\",\n \"Reverting a pre-append joining Submission must return it to ready\",\n );\n const revertedSnapshot = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n revertedSnapshot.hostSubmissionId === undefined,\n \"Reverting must clear the host linkage\",\n );\n const hostSnapshot = yield* recoverySnapshot(host.submissionId);\n\n yield* ensure(\n hostSnapshot.joins.length === 1 &&\n hostSnapshot.joins[0].submissionId === third.submissionId &&\n hostSnapshot.joins[0].state === \"joined\",\n \"The reverted Submission must leave the host's join view\",\n );\n\n yield* ledger.revertJoining(RevertJoiningRequest.make({ submissionId: second.submissionId }));\n\n const stillReady = yield* expectSome(\n \"lookup after repeating the revert\",\n yield* lookupById(second.submissionId),\n );\n\n yield* ensure(stillReady.state === \"ready\", \"Repeating revertJoining must be a no-op\");\n\n // A post-append joined Submission must NOT revert (DUR-016: it reattaches instead).\n yield* ledger.revertJoining(RevertJoiningRequest.make({ submissionId: third.submissionId }));\n\n const joined = yield* expectSome(\n \"lookup of the joined Submission after an attempted revert\",\n yield* lookupById(third.submissionId),\n );\n\n yield* ensure(\n joined.state === \"joined\",\n \"revertJoining must be a no-op for an already-joined Submission\",\n );\n\n const reclaimed = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n reclaimed.length === 1 && reclaimed[0].submissionId === second.submissionId,\n \"A reverted Submission must be claimable again exactly once\",\n );\n }),\n);\n\nconst markJoinedIdempotency = conformanceCase(\n \"markJoined is idempotent and repairable from history\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-mark-joined\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"mark-joined-host\", { work: \"host\" });\n const second = yield* admitReady(threadId, \"mark-joined-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"mark-joined-3\", { queued: 3 });\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n const marker = MarkJoinedRequest.make({\n submissionId: second.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: submissionInputRecordId(second.submissionId),\n sequence: decodeSequence(4),\n });\n\n yield* ledger.markJoined(marker);\n\n const joined = yield* expectSome(\n \"lookup after marking joined\",\n yield* lookupById(second.submissionId),\n );\n\n yield* ensure(\n joined.state === \"joined\",\n \"Marking the canonical input position must transition joining to joined\",\n );\n\n yield* ledger.markJoined(marker);\n const snapshot = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n snapshot.submission.state === \"joined\" &&\n snapshot.hostSubmissionId === host.submissionId &&\n snapshot.inputApplied !== undefined &&\n snapshot.inputApplied.recordId === marker.recordId &&\n snapshot.inputApplied.sequence === marker.sequence,\n \"Repeating the identical join marker must be a no-op with the marker retained\",\n );\n\n const divergent = yield* expectFailure(\n \"re-marking with a different canonical position\",\n ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: second.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: marker.recordId,\n sequence: decodeSequence(5),\n }),\n ),\n );\n\n yield* ensure(\n !isOwnershipLost(divergent),\n \"A divergent join marker must fail as a ledger integrity error, not ownership loss\",\n );\n\n const stale = yield* expectFailure(\n \"marking joined without owning the host lane\",\n ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: third.submissionId,\n ownershipToken: BOGUS_TOKEN,\n recordId: submissionInputRecordId(third.submissionId),\n sequence: decodeSequence(6),\n }),\n ),\n );\n\n yield* ensure(isOwnershipLost(stale), \"markJoined must be fenced by the host's ownership\");\n\n // Repairable from history: the host Attempt dies and a later host Attempt repairs the\n // lost marker under its fresh ownership token (DUR-016).\n yield* ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n }),\n );\n\n const reclaim = yield* expectSome(\n \"the host reclaim after release\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === host.submissionId &&\n reclaim.producerEpoch > hostClaim.producerEpoch,\n \"The host must be reclaimable while its joined work is pending\",\n );\n\n const superseded = yield* expectFailure(\n \"repairing the marker with the superseded host token\",\n ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: third.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: submissionInputRecordId(third.submissionId),\n sequence: decodeSequence(6),\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(superseded),\n \"A superseded host token must not repair a join marker\",\n );\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: third.submissionId,\n ownershipToken: reclaim.ownershipToken,\n recordId: submissionInputRecordId(third.submissionId),\n sequence: decodeSequence(6),\n }),\n );\n\n const repaired = yield* expectSome(\n \"lookup after the repair\",\n yield* lookupById(third.submissionId),\n );\n\n yield* ensure(\n repaired.state === \"joined\",\n \"A later host Attempt must repair the lost join marker from history\",\n );\n }),\n);\n\nconst claimNeverGrantsBlockedHead = conformanceCase(\n \"claim never grants a suspended, unknown, joining, or joined head\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n // joining head: the host settled while a claimed-but-unappended join was pending.\n const joiningLane = decodeThreadId(\"ledger-conformance-head-joining\");\n const joiningHost = yield* admitReady(joiningLane, \"head-joining-host\", { work: \"host\" });\n const joiningSub = yield* admitReady(joiningLane, \"head-joining-2\", { queued: 2 });\n\n yield* admitReady(joiningLane, \"head-joining-3\", { queued: 3 });\n\n const joiningHostClaim = yield* expectSome(\n \"the joining lane's host claim\",\n yield* claimLane(joiningLane, PRODUCER_A),\n );\n\n yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: joiningLane,\n hostSubmissionId: joiningHost.submissionId,\n ownershipToken: joiningHostClaim.ownershipToken,\n maxCount: 1,\n }),\n );\n yield* settleClaimed(joiningHost, joiningHostClaim.ownershipToken);\n yield* ensure(\n Option.isNone(yield* claimLane(joiningLane, PRODUCER_B)),\n \"A joining head must block the lane; later ready work is never skipped past it\",\n );\n yield* ledger.revertJoining(\n RevertJoiningRequest.make({ submissionId: joiningSub.submissionId }),\n );\n\n const afterRevert = yield* expectSome(\n \"the claim after reverting the joining head\",\n yield* claimLane(joiningLane, PRODUCER_B),\n );\n\n yield* ensure(\n afterRevert.submissionId === joiningSub.submissionId,\n \"Reverting the joining head must make it claimable in FIFO order\",\n );\n\n // joined head: the host settled between its finalization and the joined settlement.\n const joinedLane = decodeThreadId(\"ledger-conformance-head-joined\");\n const joinedHost = yield* admitReady(joinedLane, \"head-joined-host\", { work: \"host\" });\n const joinedSub = yield* admitReady(joinedLane, \"head-joined-2\", { queued: 2 });\n\n const joinedHostClaim = yield* expectSome(\n \"the joined lane's host claim\",\n yield* claimLane(joinedLane, PRODUCER_A),\n );\n\n yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: joinedLane,\n hostSubmissionId: joinedHost.submissionId,\n ownershipToken: joinedHostClaim.ownershipToken,\n maxCount: 1,\n }),\n );\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: joinedSub.submissionId,\n ownershipToken: joinedHostClaim.ownershipToken,\n recordId: submissionInputRecordId(joinedSub.submissionId),\n sequence: decodeSequence(3),\n }),\n );\n\n const joinedAbort = yield* expectFailure(\n \"aborting a joined Submission\",\n ledger.requestAbort(\n AbortCommand.make({\n submissionId: joinedSub.submissionId,\n author: \"conformance-operator\",\n reason: \"joined abort target\",\n }),\n ),\n );\n\n yield* ensure(\n isJoinedToHost(joinedAbort) && joinedAbort.hostSubmissionId === joinedHost.submissionId,\n \"Abort of a joined Submission must fail with the host linkage — the abort target is the host\",\n );\n yield* settleClaimed(joinedHost, joinedHostClaim.ownershipToken);\n yield* ensure(\n Option.isNone(yield* claimLane(joinedLane, PRODUCER_B)),\n \"A joined head must block the lane; it settles with the host, never with a worker claim\",\n );\n\n // suspended head: durable approval waiting consumes no worker permit.\n const suspendedLane = decodeThreadId(\"ledger-conformance-head-suspended\");\n\n const suspendedHost = yield* admitReady(suspendedLane, \"head-suspended-host\", {\n work: \"host\",\n });\n\n const suspendedClaim = yield* expectSome(\n \"the suspended lane's claim\",\n yield* claimLane(suspendedLane, PRODUCER_A),\n );\n\n const gatedCall = decodeToolCallId(\"call-head-suspended\");\n\n const suspendOutcome = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: suspendedHost.submissionId,\n ownershipToken: suspendedClaim.ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [gatedCall] }),\n }),\n );\n\n yield* ensure(suspendOutcome === \"suspended\", \"An undecided approval must suspend durably\");\n yield* ensure(\n Option.isNone(yield* claimLane(suspendedLane, PRODUCER_B)),\n \"A suspended head must produce no claim\",\n );\n yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: suspendedHost.submissionId,\n toolCallId: gatedCall,\n decision: \"approved\",\n resolver: \"conformance-approver\",\n reason: \"unblock the suspended head\",\n }),\n );\n\n const wokenClaim = yield* expectSome(\n \"the claim after the covering decision\",\n yield* claimLane(suspendedLane, PRODUCER_B),\n );\n\n yield* ensure(\n wokenClaim.submissionId === suspendedHost.submissionId &&\n wokenClaim.producerEpoch > suspendedClaim.producerEpoch,\n \"A covering decision must wake the lane for a fresh fenced Attempt\",\n );\n\n // unknown head: the DUR-017 blocked lane outlives lease expiry.\n const unknownLane = decodeThreadId(\"ledger-conformance-head-unknown\");\n const unknownHost = yield* admitReady(unknownLane, \"head-unknown-host\", { work: \"host\" });\n\n const unknownClaim = yield* expectSome(\n \"the unknown lane's claim\",\n yield* claimLane(unknownLane, PRODUCER_A),\n );\n\n const unknownCall = decodeToolCallId(\"call-head-unknown\");\n\n yield* ledger.markUnknown(\n MarkUnknownRequest.make({\n submissionId: unknownHost.submissionId,\n toolCallIds: [unknownCall],\n reason: \"an ordinary call may have executed\",\n }),\n );\n yield* advancePastLease(unknownClaim.leaseExpiresAt);\n yield* ensure(\n Option.isNone(yield* claimLane(unknownLane, PRODUCER_B)),\n \"An unknown head must stay blocked even after the stale lease expires\",\n );\n yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: unknownHost.submissionId,\n toolCallId: unknownCall,\n author: \"conformance-operator\",\n reason: \"supplier store shows no effect\",\n resolution: ResolutionNeverHappened.make(),\n }),\n );\n\n const reopened = yield* expectSome(\n \"the claim after the covering resolution\",\n yield* claimLane(unknownLane, PRODUCER_B),\n );\n\n yield* ensure(\n reopened.submissionId === unknownHost.submissionId,\n \"A covering resolution must reopen the blocked lane\",\n );\n }),\n);\n\nconst approvalDecisionIdempotency = conformanceCase(\n \"approval decisions are idempotent and conflict on divergence\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-approval\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"approval-key-1\", { work: \"approve\" });\n\n const claim = yield* expectSome(\n \"the claim before decisions\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const callA = decodeToolCallId(\"call-approval-a\");\n const callB = decodeToolCallId(\"call-approval-b\");\n\n const first = yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callA,\n decision: \"approved\",\n resolver: \"conformance-approver\",\n reason: \"policy allows the booking\",\n }),\n );\n\n yield* ensure(\n first.decision === \"approved\" && first.toolCallId === callA,\n \"The first decision must record the intent\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const replayed = yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callA,\n decision: \"approved\",\n resolver: \"conformance-approver-second\",\n reason: \"a different reason text\",\n }),\n );\n\n yield* ensure(\n replayed.reason === first.reason &&\n replayed.resolver === first.resolver &&\n sameInstant(replayed.decidedAt, first.decidedAt),\n \"Repeating the same decision must replay the recorded intent unchanged\",\n );\n\n const conflict = yield* expectFailure(\n \"re-deciding the same call divergently\",\n ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callA,\n decision: \"denied\",\n resolver: \"conformance-approver\",\n reason: \"changed my mind\",\n }),\n ),\n );\n\n yield* ensure(\n isApprovalConflict(conflict) &&\n conflict.toolCallId === callA &&\n conflict.existingDecision === \"approved\",\n \"A divergent re-decision must conflict with the recorded decision\",\n );\n\n yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callB,\n decision: \"denied\",\n resolver: \"conformance-approver\",\n reason: \"policy denies the cancellation\",\n }),\n );\n const snapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n snapshot.approvalDecisions.length === 2 &&\n snapshot.approvalDecisions.some(\n (intent) => intent.toolCallId === callA && intent.decision === \"approved\",\n ) &&\n snapshot.approvalDecisions.some(\n (intent) => intent.toolCallId === callB && intent.decision === \"denied\",\n ),\n \"The recovery snapshot must expose every recorded decision intent\",\n );\n\n yield* settleClaimed(admitted, claim.ownershipToken);\n\n const late = yield* expectFailure(\n \"deciding an approval for a settled Submission\",\n ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: decodeToolCallId(\"call-approval-late\"),\n decision: \"approved\",\n resolver: \"conformance-approver\",\n reason: \"too late\",\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(late) && late.existingOutcome === \"completed\",\n \"A decision must never land on a settled Submission\",\n );\n }),\n);\n\nconst unknownAbortClaim = conformanceCase(\n \"a durable abort makes an unknown head claimable without resolving or replaying its calls\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const ledger = yield* SubmissionLedger;\n\n for (const abortFirst of [false, true]) {\n const threadId = decodeThreadId(`ledger-conformance-unknown-abort-${abortFirst}`);\n const head = yield* admitReady(threadId, \"head\", { work: \"uncertain\" });\n\n const original = yield* expectSome(\n \"original claim\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const follower = yield* admitReady(threadId, \"follower\", { work: \"later\" });\n\n const command = AbortCommand.make({\n submissionId: head.submissionId,\n author: \"first-operator\",\n reason: \"stop without asserting external rollback\",\n });\n\n if (abortFirst) yield* ledger.requestAbort(command);\n yield* ledger.markUnknown(\n MarkUnknownRequest.make({\n submissionId: head.submissionId,\n toolCallIds: [decodeToolCallId(\"uncertain-one\"), decodeToolCallId(\"uncertain-two\")],\n reason: \"external replies were lost\",\n }),\n );\n if (abortFirst) {\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"Abort must not bypass a still-live ownership lease\",\n );\n }\n yield* advancePastLease(original.leaseExpiresAt);\n if (!abortFirst) {\n const later = yield* expectSome(\n \"runnable follower behind unknown work\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n later.submissionId === follower.submissionId,\n \"Unknown work must preserve the queue order of runnable followers\",\n );\n yield* ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: later.submissionId,\n ownershipToken: later.ownershipToken,\n }),\n );\n }\n const intent = yield* ledger.requestAbort(command);\n\n const duplicate = yield* ledger.requestAbort(\n AbortCommand.make({\n ...command,\n author: \"later-operator\",\n reason: \"lost acknowledgement retry\",\n }),\n );\n\n yield* ensure(\n duplicate.author === intent.author &&\n duplicate.reason === intent.reason &&\n sameInstant(duplicate.requestedAt, intent.requestedAt),\n \"The first abort audit must win\",\n );\n\n const reclaimed = yield* expectSome(\n \"unknown head with durable abort\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaimed.submissionId === head.submissionId &&\n reclaimed.producerEpoch > original.producerEpoch,\n \"Abort must claim the head with a fresh fence, never skip to its follower\",\n );\n const snapshot = yield* recoverySnapshot(head.submissionId);\n\n yield* ensure(\n snapshot.submission.state === \"unknown\" && snapshot.unknownResolutions.length === 0,\n \"Claiming for abort must not erase uncertainty or manufacture tool resolutions\",\n );\n\n const stale = yield* expectFailure(\n \"stale owner\",\n ledger.reserveSettlement(\n yield* settlementReservation({\n ...head,\n ownershipToken: original.ownershipToken,\n outcome: \"completed\",\n }),\n ),\n );\n\n yield* ensure(isOwnershipLost(stale), \"The original owner must remain fenced\");\n\n const reservation = yield* settlementReservation({\n ...head,\n ownershipToken: reclaimed.ownershipToken,\n outcome: \"aborted\",\n });\n\n yield* ledger.reserveSettlement(reservation);\n yield* ledger.requestAbort(command);\n const settled = yield* ledger.finalizeSettlement(SettlementFinalization.make(reservation));\n\n yield* ensure(\n settled.outcome === \"aborted\",\n \"The abort reservation must survive a duplicate command\",\n );\n const late = yield* expectFailure(\"abort after settlement\", ledger.requestAbort(command));\n\n yield* ensure(\n isSettlementConflict(late) && late.existingOutcome === \"aborted\",\n \"A terminal outcome must not change\",\n );\n const next = yield* expectSome(\"follower claim\", yield* claimLane(threadId, PRODUCER_B));\n\n yield* ensure(\n next.submissionId === follower.submissionId,\n \"Settlement must release the follower\",\n );\n }\n }),\n);\n\nconst unknownResolutionLifecycle = conformanceCase(\n \"unknown resolutions reopen the lane only when no open call remains\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-unknown\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"unknown-key-1\", { work: \"unknown\" });\n\n const claim = yield* expectSome(\n \"the claim before the unknown marking\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const call1 = decodeToolCallId(\"call-unknown-1\");\n const call2 = decodeToolCallId(\"call-unknown-2\");\n const call3 = decodeToolCallId(\"call-unknown-3\");\n\n const marking = MarkUnknownRequest.make({\n submissionId: admitted.submissionId,\n toolCallIds: [call1, call2],\n reason: \"the worker died during two supplier calls\",\n });\n\n yield* ledger.markUnknown(marking);\n yield* ledger.markUnknown(marking);\n\n const marked = yield* expectSome(\n \"lookup after marking unknown\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n marked.state === \"unknown\",\n \"Marking unknown must be idempotent and block the lane\",\n );\n\n yield* advancePastLease(claim.leaseExpiresAt);\n yield* ensure(\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"An unknown lane must consume no worker permit\",\n );\n\n const first = yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call1,\n author: \"conformance-operator\",\n reason: \"supplier store shows no booking\",\n resolution: ResolutionNeverHappened.make(),\n }),\n );\n\n const partiallyResolved = yield* expectSome(\n \"lookup after a partial resolution\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n partiallyResolved.state === \"unknown\" &&\n Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"A partial resolution must keep the lane blocked while calls remain open\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const divergent = yield* expectFailure(\n \"re-resolving the same call divergently\",\n ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call1,\n author: \"conformance-operator\",\n reason: \"changed my mind\",\n resolution: ResolutionSafeToRetry.make(),\n }),\n ),\n );\n\n yield* ensure(\n isUnknownResolutionConflict(divergent) && divergent.toolCallId === call1,\n \"A divergent re-resolution must conflict\",\n );\n\n const replayed = yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call1,\n author: \"conformance-operator-second\",\n reason: \"a different reason text\",\n resolution: ResolutionNeverHappened.make(),\n }),\n );\n\n yield* ensure(\n sameInstant(replayed.resolvedAt, first.resolvedAt) && replayed.reason === first.reason,\n \"Repeating the same resolution must replay the recorded intent unchanged\",\n );\n\n // A later marking extends the open set; the lane must not reopen until it is covered too.\n yield* ledger.markUnknown(\n MarkUnknownRequest.make({\n submissionId: admitted.submissionId,\n toolCallIds: [call3],\n reason: \"a second wave of uncertainty\",\n }),\n );\n yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call2,\n author: \"conformance-operator\",\n reason: \"supplier confirmed the booking\",\n resolution: ResolutionCompletedWithResult.make({\n result: { bookingRef: \"booking-1\" },\n isFailure: false,\n }),\n }),\n );\n\n const stillBlocked = yield* expectSome(\n \"lookup while the extended set stays open\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n stillBlocked.state === \"unknown\" && Option.isNone(yield* claimLane(threadId, PRODUCER_B)),\n \"The lane must stay blocked while any marked call lacks a resolution\",\n );\n\n yield* ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: call3,\n author: \"conformance-operator\",\n reason: \"idempotency key covers a repeat\",\n resolution: ResolutionSafeToRetry.make(),\n }),\n );\n\n const reopenedState = yield* expectSome(\n \"lookup after the covering resolution\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n reopenedState.state === \"input-applied\",\n \"Covering every marked call must reopen the lane as input-applied\",\n );\n const snapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n snapshot.unknownResolutions.length === 3,\n \"The recovery snapshot must expose every recorded resolution intent\",\n );\n\n const reclaim = yield* expectSome(\n \"the claim after the lane reopened\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === admitted.submissionId &&\n reclaim.producerEpoch > claim.producerEpoch,\n \"The reopened lane must grant a fresh fenced Attempt\",\n );\n\n yield* settleClaimed(admitted, reclaim.ownershipToken);\n\n const late = yield* expectFailure(\n \"resolving an unknown call for a settled Submission\",\n ledger.recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: decodeToolCallId(\"call-unknown-late\"),\n author: \"conformance-operator\",\n reason: \"too late\",\n resolution: ResolutionNeverHappened.make(),\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(late),\n \"A resolution must never land on a settled Submission\",\n );\n }),\n);\n\nconst suspendResumesImmediatelyWhenDecided = conformanceCase(\n \"suspend with an already-present decision resumes immediately\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-suspend\");\n const ledger = yield* SubmissionLedger;\n const admitted = yield* admitReady(threadId, \"suspend-key-1\", { work: \"suspend\" });\n\n const claim = yield* expectSome(\n \"the claim before suspension\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const callA = decodeToolCallId(\"call-suspend-a\");\n const callB = decodeToolCallId(\"call-suspend-b\");\n\n const foreign = yield* expectFailure(\n \"suspending without owning the lane\",\n ledger.suspend(\n SuspendRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: BOGUS_TOKEN,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [callA] }),\n }),\n ),\n );\n\n yield* ensure(isOwnershipLost(foreign), \"suspend must be fenced by the owning token\");\n\n // The decision raced ahead of the suspend transaction (plan §2.6).\n yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callA,\n decision: \"approved\",\n resolver: \"conformance-approver\",\n reason: \"decided before the suspend committed\",\n }),\n );\n\n const immediate = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [callA] }),\n }),\n );\n\n yield* ensure(\n immediate === \"resume-immediately\",\n \"A fully-decided suspension reason must resume immediately\",\n );\n\n const notSuspended = yield* expectSome(\n \"lookup after the immediate resume\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n notSuspended.state === \"running\",\n \"An immediate resume must not transition the Submission to suspended\",\n );\n // The ownership period must survive an immediate resume: the caller keeps working.\n yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n );\n\n const suspended = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [callA, callB] }),\n }),\n );\n\n yield* ensure(\n suspended === \"suspended\",\n \"An undecided call in the reason must suspend durably\",\n );\n\n const suspendedState = yield* expectSome(\n \"lookup after the suspension\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(suspendedState.state === \"suspended\", \"The suspension must be durable\");\n const suspendedSnapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n suspendedSnapshot.suspension !== undefined &&\n suspendedSnapshot.suspension.reason._tag === \"ApprovalPending\" &&\n suspendedSnapshot.suspension.reason.toolCallIds.length === 2 &&\n suspendedSnapshot.approvalDecisions.length === 1,\n \"The recovery snapshot must expose the suspension reason and prior decisions\",\n );\n\n const ended = yield* expectFailure(\n \"renewing after the suspension ended the ownership period\",\n ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(ended),\n \"Suspension must end the ownership period without settling\",\n );\n\n yield* ledger.recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: admitted.submissionId,\n toolCallId: callB,\n decision: \"denied\",\n resolver: \"conformance-approver\",\n reason: \"the covering decision\",\n }),\n );\n\n const woken = yield* expectSome(\n \"lookup after the covering decision\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n woken.state === \"input-applied\",\n \"The covering decision must wake the suspended lane\",\n );\n const wokenSnapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n wokenSnapshot.suspension === undefined,\n \"Waking must clear the durable suspension\",\n );\n\n const reclaim = yield* expectSome(\n \"the claim after waking\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* settleClaimed(admitted, reclaim.ownershipToken);\n\n const terminal = yield* expectFailure(\n \"suspending a settled Submission\",\n ledger.suspend(\n SuspendRequest.make({\n submissionId: admitted.submissionId,\n ownershipToken: reclaim.ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [callA] }),\n }),\n ),\n );\n\n yield* ensure(\n isSettlementConflict(terminal) && terminal.existingOutcome === \"completed\",\n \"Suspension must never land on a settled Submission\",\n );\n }),\n);\n\nconst joinedSettlementLinkageAuthority = conformanceCase(\n \"a joined Submission's settlement reservation is authorized by host linkage\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-joined-settlement\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"joined-settle-host\", { work: \"host\" });\n const queued = yield* admitReady(threadId, \"joined-settle-2\", { queued: 2 });\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const claims = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 1,\n }),\n );\n\n yield* ensure(\n claims.length === 1 && claims[0]?.submissionId === queued.submissionId,\n \"The queued Submission must join the host's contiguous prefix\",\n );\n\n // A merely-`joining` Submission is still revertible: its reservation stays fenced by\n // lane ownership like any other row.\n const joiningReservation = yield* settlementReservation({\n submissionId: queued.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: queued.receiptId,\n outcome: \"completed\",\n });\n\n const fenced = yield* expectFailure(\n \"reserving a joining Submission's settlement without lane ownership\",\n ledger.reserveSettlement(joiningReservation),\n );\n\n yield* ensure(\n isOwnershipLost(fenced),\n \"A joining Submission's settlement reservation must stay ownership-fenced\",\n );\n\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: queued.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n recordId: submissionInputRecordId(queued.submissionId),\n sequence: decodeSequence(7),\n }),\n );\n\n // A `joined` lane is never worker-claimable, so no ownership token can exist for it:\n // the recorded host linkage authorizes the reservation and the presented token is not\n // consulted (plan §2.5 — the coordinator's joined-settlement loop and the\n // SettleJoinedWithHost recovery executor both rely on this).\n const joinedReservation = yield* settlementReservation({\n submissionId: queued.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: queued.receiptId,\n outcome: \"completed\",\n });\n\n yield* ledger.reserveSettlement(joinedReservation);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: queued.submissionId,\n settlementId: submissionSettlementId(queued.submissionId),\n }),\n );\n\n yield* ensure(\n settlement.outcome === \"completed\",\n \"The joined settlement must finalize with the reserved outcome\",\n );\n\n const settled = yield* expectSome(\n \"lookup after the joined settlement\",\n yield* lookupById(queued.submissionId),\n );\n\n yield* ensure(\n settled.state === \"settled\" && settled.settledOutcome === \"completed\",\n \"The joined Submission must settle terminally\",\n );\n }),\n);\n\nconst childReservationIdempotency = conformanceCase(\n \"replays an identical child reservation and rejects a divergent allocation digest\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-reserve\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-reserve-parent\", { work: \"parent\" });\n const claim = yield* expectSome(\"the parent claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const allocation = { turns: 4, toolCalls: 8 };\n const allocationDigest = yield* digestJson(allocation);\n\n const requestFields = {\n reservationId: decodeChildReservationId(\"child-reservation:run-reserve:call-1\"),\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-reserve\"),\n ownershipToken: claim.ownershipToken,\n allocation,\n allocationDigest,\n };\n\n const request = ChildBudgetReservationRequest.make(requestFields);\n const first = yield* ledger.reserveChildBudget(request);\n\n yield* ensure(\n !first.replayed &&\n first.reservation.status === \"reserved\" &&\n first.reservation.allocationDigest === allocationDigest &&\n first.reservation.childSubmissionId === undefined &&\n persistedJsonEquivalent(first.reservation.allocation, allocation),\n \"The first reservation must create a reserved row carrying the exact allocation\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const replayed = yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n allocation: { toolCalls: 8, turns: 4 },\n }),\n );\n\n yield* ensure(\n replayed.replayed &&\n replayed.reservation.status === \"reserved\" &&\n persistedJsonEquivalent(replayed.reservation.allocation, allocation) &&\n sameInstant(replayed.reservation.reservedAt, first.reservation.reservedAt),\n \"An identical reservation must replay the stored row unchanged\",\n );\n\n const divergentAllocation = { turns: 64, toolCalls: 8 };\n\n const divergent = yield* expectFailure(\n \"a divergent allocation for the same reservation id\",\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n allocation: divergentAllocation,\n allocationDigest: yield* digestJson(divergentAllocation),\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(divergent) && divergent.status === \"reserved\",\n \"A divergent allocation must conflict with the recorded reservation\",\n );\n\n const secondId = yield* expectFailure(\n \"a second reservation id for the same parent Tool Call\",\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n reservationId: decodeChildReservationId(\"child-reservation:run-reserve:call-1-other\"),\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(secondId),\n \"One parent Tool Call must never own two reservations\",\n );\n\n const snapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n snapshot.childReservations.length === 1 &&\n snapshot.childReservations[0].reservationId === request.reservationId &&\n snapshot.childReservations[0].status === \"reserved\" &&\n snapshot.childAttachments.length === 0,\n \"The parent recovery snapshot must expose the reservation before any attachment\",\n );\n }),\n);\n\nconst childReservationFencing = conformanceCase(\n \"a stale parent token cannot transition a child reservation\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-fence\");\n const childLane = decodeThreadId(\"ledger-conformance-child-fence-child\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-fence-parent\", { work: \"parent\" });\n const child = yield* admitReady(childLane, \"child-fence-child\", { work: \"child\" });\n\n const firstClaim = yield* expectSome(\n \"the first parent claim\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n const allocation = { turns: 2 };\n const allocationDigest = yield* digestJson(allocation);\n\n const requestFields = {\n reservationId: decodeChildReservationId(\"child-reservation:run-fence:call-1\"),\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-fence\"),\n ownershipToken: BOGUS_TOKEN,\n allocation,\n allocationDigest,\n };\n\n const request = ChildBudgetReservationRequest.make(requestFields);\n\n const foreign = yield* expectFailure(\n \"creating a reservation without owning the parent lane\",\n ledger.reserveChildBudget(request),\n );\n\n yield* ensure(\n isOwnershipLost(foreign),\n \"Reservation creation must be fenced by the parent's live ownership token\",\n );\n const afterForeign = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n afterForeign.childReservations.length === 0,\n \"A fenced reservation attempt must leave no row behind\",\n );\n\n yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n // The parent Attempt ends and a replacement claims the lane: the old token is fenced.\n yield* ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n const reclaim = yield* expectSome(\n \"the replacement parent claim\",\n yield* claimLane(threadId, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.producerEpoch > firstClaim.producerEpoch,\n \"The replacement claim must fence the stale parent Attempt\",\n );\n\n const staleAttach = yield* expectFailure(\n \"attaching a child with the superseded parent token\",\n ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: request.reservationId,\n ownershipToken: firstClaim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(staleAttach),\n \"A superseded parent token must not attach a child\",\n );\n\n const staleCreate = yield* expectFailure(\n \"creating a second-call reservation with the superseded parent token\",\n ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n reservationId: decodeChildReservationId(\"child-reservation:run-fence:call-2\"),\n parentToolCallId: decodeToolCallId(\"call-child-fence-second\"),\n ownershipToken: firstClaim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(staleCreate),\n \"A superseded parent token must not create new reservation state\",\n );\n\n // An identical replay creates nothing, so it short-circuits before the fence exactly\n // like reserveSettlement: a recovering caller reads the recorded row.\n const staleReplay = yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n ...requestFields,\n ownershipToken: firstClaim.ownershipToken,\n }),\n );\n\n yield* ensure(\n staleReplay.replayed && staleReplay.reservation.status === \"reserved\",\n \"An identical reservation replay must return the recorded row even from a stale caller\",\n );\n\n const attached = yield* ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: request.reservationId,\n ownershipToken: reclaim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n );\n\n yield* ensure(\n attached.childSubmissionId === child.submissionId,\n \"The live replacement token must attach the child\",\n );\n }),\n);\n\nconst attachChildIdempotency = conformanceCase(\n \"attachChildToReservation is idempotent and rejects a divergent child\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-attach\");\n const childLane = decodeThreadId(\"ledger-conformance-child-attach-child\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-attach-parent\", { work: \"parent\" });\n const child = yield* admitReady(childLane, \"child-attach-child\", { queued: 1 });\n const otherChild = yield* admitReady(childLane, \"child-attach-other\", { queued: 2 });\n const claim = yield* expectSome(\"the parent claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const allocation = { turns: 3 };\n const reservationId = decodeChildReservationId(\"child-reservation:run-attach:call-1\");\n\n yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n reservationId,\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-attach\"),\n ownershipToken: claim.ownershipToken,\n allocation,\n allocationDigest: yield* digestJson(allocation),\n }),\n );\n\n const unknownReservation = yield* expectFailure(\n \"attaching to a reservation that was never created\",\n ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: decodeChildReservationId(\"child-reservation:run-attach:missing\"),\n ownershipToken: claim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n ),\n );\n\n yield* ensure(\n isLedgerError(unknownReservation),\n \"Attaching to an unknown reservation must fail as a ledger error\",\n );\n\n const attached = yield* ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId,\n ownershipToken: claim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n );\n\n yield* ensure(\n attached.childSubmissionId === child.submissionId && attached.status === \"reserved\",\n \"Attaching must record the child on the reservation row\",\n );\n\n const replayed = yield* ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId,\n ownershipToken: claim.ownershipToken,\n childSubmissionId: child.submissionId,\n }),\n );\n\n yield* ensure(\n replayed.childSubmissionId === child.submissionId,\n \"Repeating the identical attachment must be a no-op\",\n );\n\n const divergent = yield* expectFailure(\n \"attaching a different child to the same reservation\",\n ledger.attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId,\n ownershipToken: claim.ownershipToken,\n childSubmissionId: otherChild.submissionId,\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(divergent),\n \"A divergent child attachment must conflict with the recorded child\",\n );\n\n const snapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n snapshot.childAttachments.length === 1 &&\n snapshot.childAttachments[0].childSubmissionId === child.submissionId &&\n snapshot.childAttachments[0].toolCallId === decodeToolCallId(\"call-child-attach\") &&\n snapshot.childAttachments[0].childState === \"ready\" &&\n snapshot.childAttachments[0].childOutcome === undefined,\n \"The parent recovery snapshot must expose the attachment with the child's lane state\",\n );\n }),\n);\n\nconst beginReleaseFreezesAccountingOnce = conformanceCase(\n \"beginRelease freezes the accounting decision exactly once\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-freeze\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-freeze-parent\", { work: \"parent\" });\n const claim = yield* expectSome(\"the parent claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const allocation = { turns: 4 };\n const reservationId = decodeChildReservationId(\"child-reservation:run-freeze:call-1\");\n\n yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n reservationId,\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-freeze\"),\n ownershipToken: claim.ownershipToken,\n allocation,\n allocationDigest: yield* digestJson(allocation),\n }),\n );\n\n const accounting = { consumed: { turns: 1 }, released: { turns: 3 } };\n\n const frozen = yield* ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({ reservationId, accounting }),\n );\n\n yield* ensure(\n frozen.status === \"releasePending\" &&\n frozen.accounting !== undefined &&\n persistedJsonEquivalent(frozen.accounting, accounting) &&\n frozen.releaseBeganAt !== undefined,\n \"The first beginRelease must freeze the accounting and move to releasePending\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const replayed = yield* ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: { released: { turns: 3 }, consumed: { turns: 1 } },\n }),\n );\n\n yield* ensure(\n replayed.status === \"releasePending\" &&\n replayed.releaseBeganAt !== undefined &&\n frozen.releaseBeganAt !== undefined &&\n sameInstant(replayed.releaseBeganAt, frozen.releaseBeganAt),\n \"Replaying the identical accounting must be a no-op with the frozen decision retained\",\n );\n\n const divergent = yield* expectFailure(\n \"freezing a different accounting decision\",\n ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: { consumed: { turns: 4 }, released: { turns: 0 } },\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(divergent) && divergent.status === \"releasePending\",\n \"A divergent accounting freeze must conflict with the frozen decision\",\n );\n\n yield* ledger.releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId }));\n\n const afterRelease = yield* ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({ reservationId, accounting }),\n );\n\n yield* ensure(\n afterRelease.status === \"released\" &&\n afterRelease.accounting !== undefined &&\n persistedJsonEquivalent(afterRelease.accounting, accounting),\n \"Replaying the identical accounting after release must return the released row\",\n );\n\n const divergentAfterRelease = yield* expectFailure(\n \"freezing a different accounting decision after release\",\n ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: { consumed: { turns: 2 }, released: { turns: 2 } },\n }),\n ),\n );\n\n yield* ensure(\n isChildReservationConflict(divergentAfterRelease) &&\n divergentAfterRelease.status === \"released\",\n \"The frozen decision must stay immutable after release\",\n );\n }),\n);\n\nconst releaseAppliedExactlyOnce = conformanceCase(\n \"release returns unused allocation exactly once\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-child-release\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(threadId, \"child-release-parent\", { work: \"parent\" });\n const claim = yield* expectSome(\"the parent claim\", yield* claimLane(threadId, PRODUCER_A));\n\n const allocation = { turns: 4 };\n const reservationId = decodeChildReservationId(\"child-reservation:run-release:call-1\");\n\n yield* ledger.reserveChildBudget(\n ChildBudgetReservationRequest.make({\n reservationId,\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-child-release\"),\n ownershipToken: claim.ownershipToken,\n allocation,\n allocationDigest: yield* digestJson(allocation),\n }),\n );\n\n const early = yield* expectFailure(\n \"releasing before the accounting decision is frozen\",\n ledger.releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId })),\n );\n\n yield* ensure(\n isChildReservationConflict(early) && early.status === \"reserved\",\n \"Release must never skip the releasePending freeze\",\n );\n\n yield* ledger.beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: { consumed: {}, released: { turns: 4 } },\n }),\n );\n\n const released = yield* ledger.releaseChildBudget(\n ReleaseChildBudgetRequest.make({ reservationId }),\n );\n\n yield* ensure(\n released.status === \"released\" && released.releasedAt !== undefined,\n \"Release must transition releasePending to released\",\n );\n\n yield* TestClock.adjust(\"1 second\");\n\n const replayed = yield* ledger.releaseChildBudget(\n ReleaseChildBudgetRequest.make({ reservationId }),\n );\n\n yield* ensure(\n replayed.status === \"released\" &&\n replayed.releasedAt !== undefined &&\n released.releasedAt !== undefined &&\n sameInstant(replayed.releasedAt, released.releasedAt),\n \"Replaying the release must return the stored row unchanged — never applied twice\",\n );\n\n const snapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n snapshot.childReservations.length === 1 &&\n snapshot.childReservations[0].status === \"released\",\n \"The recovery snapshot must expose the released reservation\",\n );\n }),\n);\n\nconst recordChildSettledWake = conformanceCase(\n \"recordChildSettled accepts canonical terminalizing prefixes and wakes only when all are covered\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const parentLane = decodeThreadId(\"ledger-conformance-child-wake\");\n const childLaneA = decodeThreadId(\"ledger-conformance-child-wake-a\");\n const childLaneB = decodeThreadId(\"ledger-conformance-child-wake-b\");\n const ledger = yield* SubmissionLedger;\n\n const parent = yield* admitReady(parentLane, \"child-wake-parent\", { work: \"parent\" });\n const childA = yield* admitReady(childLaneA, \"child-wake-a\", { child: \"a\" });\n const childB = yield* admitReady(childLaneB, \"child-wake-b\", { child: \"b\" });\n\n const parentClaim = yield* expectSome(\n \"the parent claim\",\n yield* claimLane(parentLane, PRODUCER_A),\n );\n\n const suspended = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n reason: WaitingForChildSuspension.make({\n children: [\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-wake-a\"),\n childSubmissionId: childA.submissionId,\n }),\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-wake-b\"),\n childSubmissionId: childB.submissionId,\n }),\n ],\n }),\n }),\n );\n\n yield* ensure(\n suspended === \"suspended\",\n \"Unsettled children must suspend the parent durably\",\n );\n\n const ended = yield* expectFailure(\n \"renewing after the waitingForChild suspension ended the ownership period\",\n ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n }),\n ),\n );\n\n yield* ensure(\n isOwnershipLost(ended),\n \"waitingForChild must end the ownership period without settling (SUB-030)\",\n );\n yield* ensure(\n Option.isNone(yield* claimLane(parentLane, PRODUCER_B)),\n \"A waitingForChild head must produce no claim and consume no worker permit\",\n );\n\n const childClaimA = yield* expectSome(\n \"the first child claim\",\n yield* claimLane(childLaneA, PRODUCER_A),\n );\n\n const childReservationA = yield* settlementReservation({\n submissionId: childA.submissionId,\n ownershipToken: childClaimA.ownershipToken,\n receiptId: childA.receiptId,\n outcome: \"completed\",\n });\n\n yield* ledger.reserveSettlement(childReservationA);\n\n const partial = yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: parent.submissionId,\n childSubmissionId: childA.submissionId,\n }),\n );\n\n yield* ensure(\n partial === \"still-waiting\",\n \"A settlement notification must not wake the parent while a listed child is unsettled\",\n );\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: childA.submissionId,\n settlementId: childReservationA.settlementId,\n }),\n );\n\n const stillSuspended = yield* expectSome(\n \"lookup while one child is outstanding\",\n yield* lookupById(parent.submissionId),\n );\n\n yield* ensure(\n stillSuspended.state === \"suspended\" &&\n Option.isNone(yield* claimLane(parentLane, PRODUCER_B)),\n \"The parent lane must stay suspended until every listed child settled\",\n );\n\n const childClaimB = yield* expectSome(\n \"the second child claim\",\n yield* claimLane(childLaneB, PRODUCER_A),\n );\n\n const childReservationB = yield* settlementReservation({\n submissionId: childB.submissionId,\n ownershipToken: childClaimB.ownershipToken,\n receiptId: childB.receiptId,\n outcome: \"completed\",\n });\n\n yield* ledger.reserveSettlement(childReservationB);\n\n const woken = yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: parent.submissionId,\n childSubmissionId: childB.submissionId,\n }),\n );\n\n yield* ensure(\n woken === \"woken\",\n \"The covering canonical settlement prefix must wake the parent before child finalization\",\n );\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: childB.submissionId,\n settlementId: childReservationB.settlementId,\n }),\n );\n\n const awake = yield* expectSome(\n \"lookup after the covering settlement\",\n yield* lookupById(parent.submissionId),\n );\n\n yield* ensure(\n awake.state === \"input-applied\",\n \"The woken parent must transition suspended(WaitingForChild) to input-applied\",\n );\n const wokenSnapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n wokenSnapshot.suspension === undefined,\n \"Waking must clear the durable suspension\",\n );\n\n const replayedNotification = yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: parent.submissionId,\n childSubmissionId: childA.submissionId,\n }),\n );\n\n yield* ensure(\n replayedNotification === \"not-waiting\",\n \"Replaying a notification after the wake must be an idempotent no-op\",\n );\n\n const reclaim = yield* expectSome(\n \"the parent claim after waking\",\n yield* claimLane(parentLane, PRODUCER_B),\n );\n\n yield* ensure(\n reclaim.submissionId === parent.submissionId &&\n reclaim.producerEpoch > parentClaim.producerEpoch,\n \"The woken lane must grant a fresh fenced Attempt\",\n );\n yield* settleClaimed(parent, reclaim.ownershipToken);\n\n const afterSettlement = yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: parent.submissionId,\n childSubmissionId: childB.submissionId,\n }),\n );\n\n yield* ensure(\n afterSettlement === \"not-waiting\",\n \"A notification for a settled parent must answer not-waiting\",\n );\n }),\n);\n\nconst suspendResumesImmediatelyForSettledChildren = conformanceCase(\n \"suspend returns resume-immediately when children already settled\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const parentLane = decodeThreadId(\"ledger-conformance-child-raced\");\n const childLaneA = decodeThreadId(\"ledger-conformance-child-raced-a\");\n const childLaneB = decodeThreadId(\"ledger-conformance-child-raced-b\");\n const ledger = yield* SubmissionLedger;\n\n // The child settles BEFORE the parent's suspend transaction commits (spec §12 step 10\n // race): the suspend must observe the settlement and resume immediately.\n const settledChild = yield* admitReady(childLaneA, \"child-raced-a\", { child: \"a\" });\n\n const settledClaim = yield* expectSome(\n \"the settled child's claim\",\n yield* claimLane(childLaneA, PRODUCER_A),\n );\n\n yield* settleClaimed(settledChild, settledClaim.ownershipToken);\n const pendingChild = yield* admitReady(childLaneB, \"child-raced-b\", { child: \"b\" });\n\n const parent = yield* admitReady(parentLane, \"child-raced-parent\", { work: \"parent\" });\n\n const parentClaim = yield* expectSome(\n \"the parent claim\",\n yield* claimLane(parentLane, PRODUCER_A),\n );\n\n const immediate = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n reason: WaitingForChildSuspension.make({\n children: [\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-raced-a\"),\n childSubmissionId: settledChild.submissionId,\n }),\n ],\n }),\n }),\n );\n\n yield* ensure(\n immediate === \"resume-immediately\",\n \"A suspend listing only settled children must resume immediately\",\n );\n\n const stillRunning = yield* expectSome(\n \"lookup after the immediate resume\",\n yield* lookupById(parent.submissionId),\n );\n\n yield* ensure(\n stillRunning.state === \"running\",\n \"An immediate resume must not transition the parent to suspended\",\n );\n // The ownership period must survive an immediate resume: the caller keeps working.\n yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n }),\n );\n\n const suspended = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: parent.submissionId,\n ownershipToken: parentClaim.ownershipToken,\n reason: WaitingForChildSuspension.make({\n children: [\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-raced-a\"),\n childSubmissionId: settledChild.submissionId,\n }),\n WaitingChild.make({\n toolCallId: decodeToolCallId(\"call-raced-b\"),\n childSubmissionId: pendingChild.submissionId,\n }),\n ],\n }),\n }),\n );\n\n yield* ensure(\n suspended === \"suspended\",\n \"One unsettled listed child must suspend the parent durably\",\n );\n const snapshot = yield* recoverySnapshot(parent.submissionId);\n\n yield* ensure(\n snapshot.suspension !== undefined &&\n snapshot.suspension.reason._tag === \"WaitingForChild\" &&\n snapshot.suspension.reason.children.length === 2,\n \"The recovery snapshot must expose the WaitingForChild reason with its children\",\n );\n }),\n);\n\nconst admissionParentLinkage = conformanceCase(\n \"admit records and replays parent linkage\",\n ({ ensure, expectFailure, expectSome }) =>\n Effect.gen(function* () {\n const parentLane = decodeThreadId(\"ledger-conformance-linkage\");\n const childLane = decodeThreadId(\"ledger-conformance-linkage-child\");\n const ledger = yield* SubmissionLedger;\n const parent = yield* admitReady(parentLane, \"linkage-parent\", { work: \"parent\" });\n\n const linkage = ParentLinkage.make({\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-linkage\"),\n });\n\n const request = yield* admissionRequest(\n childLane,\n \"linkage-child-key\",\n { task: \"research\" },\n linkage,\n );\n\n const admitted = yield* ledger.admit(request);\n\n yield* ensure(!admitted.replayed, \"The first linked admission must create the child\");\n\n const byId = yield* expectSome(\n \"lookup of the linked child\",\n yield* lookupById(admitted.submissionId),\n );\n\n yield* ensure(\n byId.parentLinkage !== undefined &&\n byId.parentLinkage.parentSubmissionId === parent.submissionId &&\n byId.parentLinkage.parentToolCallId === linkage.parentToolCallId,\n \"The child snapshot must expose its immutable parent linkage\",\n );\n const childSnapshot = yield* recoverySnapshot(admitted.submissionId);\n\n yield* ensure(\n childSnapshot.parentLinkage !== undefined &&\n childSnapshot.parentLinkage.parentSubmissionId === parent.submissionId,\n \"The child recovery snapshot must expose its parent linkage\",\n );\n\n const replayed = yield* ledger.admit(request);\n\n yield* ensure(\n replayed.replayed &&\n replayed.submissionId === admitted.submissionId &&\n replayed.receiptId === admitted.receiptId,\n \"An identical linked admission must replay the original identities (SUB-016)\",\n );\n\n const divergentLinkage = yield* expectFailure(\n \"replaying the admission with a different parent Tool Call\",\n ledger.admit(\n yield* admissionRequest(\n childLane,\n \"linkage-child-key\",\n { task: \"research\" },\n ParentLinkage.make({\n parentSubmissionId: parent.submissionId,\n parentToolCallId: decodeToolCallId(\"call-linkage-other\"),\n }),\n ),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(divergentLinkage),\n \"A divergent parent linkage must conflict even when the input digest matches\",\n );\n\n const droppedLinkage = yield* expectFailure(\n \"replaying the admission without its parent linkage\",\n ledger.admit(yield* admissionRequest(childLane, \"linkage-child-key\", { task: \"research\" })),\n );\n\n yield* ensure(\n isAdmissionConflict(droppedLinkage),\n \"Dropping the recorded linkage on replay must conflict\",\n );\n\n const plain = yield* ledger.admit(\n yield* admissionRequest(childLane, \"linkage-plain-key\", { task: \"plain\" }),\n );\n\n const addedLinkage = yield* expectFailure(\n \"replaying an unlinked admission with a parent linkage\",\n ledger.admit(\n yield* admissionRequest(childLane, \"linkage-plain-key\", { task: \"plain\" }, linkage),\n ),\n );\n\n yield* ensure(\n isAdmissionConflict(addedLinkage),\n \"Adding a linkage to an unlinked admission on replay must conflict\",\n );\n\n const plainSnapshot = yield* expectSome(\n \"lookup of the unlinked Submission\",\n yield* lookupById(plain.submissionId),\n );\n\n yield* ensure(\n plainSnapshot.parentLinkage === undefined,\n \"An unlinked Submission must expose no parent linkage\",\n );\n }),\n);\n\nconst resolveAdmissionAuthority = conformanceCase(\n \"resolveAdmission distinguishes notAdmitted from admitted authoritatively\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n const threadId = decodeThreadId(\"ledger-conformance-resolve\");\n const ledger = yield* SubmissionLedger;\n\n const key = SubmissionLookupByKey.make({\n threadId,\n principal: CONFORMANCE_PRINCIPAL,\n idempotencyKey: decodeIdempotencyKey(\"resolve-key-1\"),\n });\n\n const before = yield* ledger.resolveAdmission(key);\n\n yield* ensure(\n before._tag === \"NotAdmitted\",\n \"The authoritative store must prove absence before admission (SUB-031)\",\n );\n\n const admitted = yield* ledger.admit(\n yield* admissionRequest(threadId, \"resolve-key-1\", { work: \"resolve\" }),\n );\n\n const after = yield* ledger.resolveAdmission(key);\n\n yield* ensure(\n after._tag === \"Admitted\" &&\n after.submission.submissionId === admitted.submissionId &&\n after.submission.receiptId === admitted.receiptId &&\n after.submission.state === \"admitted\",\n \"An admitted key must resolve to the full authoritative snapshot\",\n );\n\n const foreign = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId,\n principal: OTHER_PRINCIPAL,\n idempotencyKey: decodeIdempotencyKey(\"resolve-key-1\"),\n }),\n );\n\n yield* ensure(\n foreign._tag === \"NotAdmitted\",\n \"Admission resolution must stay scoped to the requesting principal\",\n );\n\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n\n const claim = yield* expectSome(\n \"the claim before terminal resolution\",\n yield* claimLane(threadId, PRODUCER_A),\n );\n\n yield* settleClaimed(admitted, claim.ownershipToken);\n const settled = yield* ledger.resolveAdmission(key);\n\n yield* ensure(\n settled._tag === \"Admitted\" &&\n settled.submission.state === \"settled\" &&\n settled.submission.settledOutcome === \"completed\",\n \"A settled Submission still resolves as admitted — terminality never becomes absence\",\n );\n }),\n);\n\nconst queuedAbortSettlementAuthority = conformanceCase(\n \"reserveSettlement authorizes an aborted, unowned queued settlement by its durable intent\",\n ({ ensure, expectFailure }) =>\n Effect.gen(function* () {\n // P7 §7(c): an aborted, never-claimed, still-queued `ready` Submission has no live\n // ownership to fence against, so its durable abort intent authorizes exactly its\n // ABORTED settlement — recovery settles it without waiting for it to head the lane.\n // The authorization is outcome- and state-narrow and stays fail-closed otherwise.\n const threadId = decodeThreadId(\"ledger-conformance-queued-abort\");\n const ledger = yield* SubmissionLedger;\n\n const head = yield* admitReady(threadId, \"queued-abort-head\", { work: \"head\" });\n const second = yield* admitReady(threadId, \"queued-abort-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"queued-abort-3\", { queued: 3 });\n\n yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: second.submissionId,\n author: \"operator\",\n reason: \"cancelled while queued\",\n }),\n );\n\n // Fail-closed control: a queued row WITHOUT an abort intent never accepts an unowned\n // reservation, aborted or not.\n const unaborted = yield* expectFailure(\n \"reserving an aborted settlement for a queued row without an abort intent\",\n settlementReservation({\n submissionId: third.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: third.receiptId,\n outcome: \"aborted\",\n }).pipe(Effect.flatMap((reservation) => ledger.reserveSettlement(reservation))),\n );\n\n yield* ensure(\n isOwnershipLost(unaborted),\n \"A queued reservation without a durable abort intent must stay fenced (OwnershipLost)\",\n );\n\n // Fail-closed control: the durable intent authorizes ONLY the aborted outcome.\n const wrongOutcome = yield* expectFailure(\n \"reserving a completed settlement for the aborted queued row\",\n settlementReservation({\n submissionId: second.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: second.receiptId,\n outcome: \"completed\",\n result: { fabricated: true },\n }).pipe(Effect.flatMap((reservation) => ledger.reserveSettlement(reservation))),\n );\n\n yield* ensure(\n isOwnershipLost(wrongOutcome),\n \"An abort intent must never authorize a non-aborted settlement outcome\",\n );\n\n const reservation = yield* settlementReservation({\n submissionId: second.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: second.receiptId,\n outcome: \"aborted\",\n });\n\n const reserved = yield* ledger.reserveSettlement(reservation);\n\n yield* ensure(\n reserved.replayed === false && reserved.outcome === \"aborted\",\n \"The abort intent must authorize the aborted reservation without lane ownership\",\n );\n // The crash replay (`terminalizing` + committed reservation) is equally authorized.\n const replayed = yield* ledger.reserveSettlement(reservation);\n\n yield* ensure(\n replayed.replayed === true,\n \"Replaying the identical aborted reservation must short-circuit idempotently\",\n );\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: second.submissionId,\n settlementId: submissionSettlementId(second.submissionId),\n }),\n );\n\n const settled = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n settled.submission.state === \"settled\" && settled.submission.settledOutcome === \"aborted\",\n \"The aborted queued Submission must settle while the head is still unsettled\",\n );\n const headState = yield* recoverySnapshot(head.submissionId);\n\n yield* ensure(\n headState.submission.state === \"ready\",\n \"Settling the aborted queued row must not disturb the unclaimed head\",\n );\n }),\n);\n\nconst abortedSettledRowIsNotAJoiningGap = conformanceCase(\n \"claimJoining treats an aborted-settled row as a non-gap\",\n ({ ensure, expectSome }) =>\n Effect.gen(function* () {\n // P7 §7(c): an aborted-settled row is a CLOSED obligation — the contiguous joining\n // prefix walks over it so later ready work still joins the host (the pre-P7 rule\n // treated every settled row as a conservative gap).\n const threadId = decodeThreadId(\"ledger-conformance-aborted-non-gap\");\n const ledger = yield* SubmissionLedger;\n\n const host = yield* admitReady(threadId, \"aborted-gap-host\", { work: \"host\" });\n const second = yield* admitReady(threadId, \"aborted-gap-2\", { queued: 2 });\n const third = yield* admitReady(threadId, \"aborted-gap-3\", { queued: 3 });\n\n yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: second.submissionId,\n author: \"operator\",\n reason: \"cancelled while queued\",\n }),\n );\n\n const reservation = yield* settlementReservation({\n submissionId: second.submissionId,\n ownershipToken: BOGUS_TOKEN,\n receiptId: second.receiptId,\n outcome: \"aborted\",\n });\n\n yield* ledger.reserveSettlement(reservation);\n yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: second.submissionId,\n settlementId: submissionSettlementId(second.submissionId),\n }),\n );\n\n const hostClaim = yield* expectSome(\"the host claim\", yield* claimLane(threadId, PRODUCER_A));\n\n yield* ensure(\n hostClaim.submissionId === host.submissionId,\n \"The host must head the lane (the aborted-settled row is out of the queue)\",\n );\n\n const claims = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId,\n hostSubmissionId: host.submissionId,\n ownershipToken: hostClaim.ownershipToken,\n maxCount: 8,\n }),\n );\n\n yield* ensure(\n claims.length === 1 && claims[0].submissionId === third.submissionId,\n \"The joining prefix must skip the aborted-settled row and claim the later ready work\",\n );\n const settled = yield* recoverySnapshot(second.submissionId);\n\n yield* ensure(\n settled.submission.state === \"settled\" && settled.submission.settledOutcome === \"aborted\",\n \"Walking the prefix must never disturb the aborted-settled row\",\n );\n }),\n);\n\n/**\n * The shared, adapter-parameterized SubmissionLedger contract suite (STORE-010). Every durable\n * ledger adapter test suite must execute each case against its own ledger provisioning, inside\n * the `@effect/vitest` test environment (TestClock) and with `Crypto.Crypto` provided.\n */\nexport const submissionLedgerConformanceCases: ReadonlyArray<SubmissionLedgerConformanceCase> = [\n admissionIdempotency,\n workerAdmissionIdentity,\n messageAdmissionIdentity,\n workerCompletionIdentity,\n workerUpdateIdentity,\n admissionGroupRace,\n admissionGroupSettlement,\n crossPrincipalAdmissionScoping,\n admissionTupleBoundaries,\n concurrentAdmissionFifo,\n fifoHeadClaim,\n leaseExpiryReclaim,\n releaseMakesHeadClaimable,\n inputAppliedIdempotency,\n settlementLifecycle,\n settlementConflicts,\n abortIdempotency,\n scanNonterminalWorklist,\n lookupByIdAndKey,\n recoverySnapshotConsistency,\n joiningPrefixClaim,\n revertJoiningReturnsToReady,\n markJoinedIdempotency,\n claimNeverGrantsBlockedHead,\n approvalDecisionIdempotency,\n unknownResolutionLifecycle,\n unknownAbortClaim,\n suspendResumesImmediatelyWhenDecided,\n joinedSettlementLinkageAuthority,\n childReservationIdempotency,\n childReservationFencing,\n attachChildIdempotency,\n beginReleaseFreezesAccountingOnce,\n releaseAppliedExactlyOnce,\n recordChildSettledWake,\n suspendResumesImmediatelyForSettledChildren,\n admissionParentLinkage,\n resolveAdmissionAuthority,\n queuedAbortSettlementAuthority,\n abortedSettledRowIsNotAJoiningGap,\n];\n"],"mappings":";;;;;;;;;;;;;AAmFA,IAAa,uCAAb,cAA0D,OAAO,YAAkD,CAAC,CAClH,wCACA;CACE,UAAU,OAAO;CACjB,SAAS,OAAO;AAClB,CACF,CAAC,CAAC,CAAC;AAuBH,MAAM,iBAAiB,OAAO,WAAW,QAAQ;AACjD,MAAM,qBAAqB,OAAO,WAAW,YAAY;AACzD,MAAM,uBAAuB,OAAO,WAAW,cAAc;AAC7D,MAAM,iBAAiB,OAAO,WAAW,iBAAiB;AAC1D,MAAM,mBAAmB,OAAO,WAAW,UAAU;AACrD,MAAM,2BAA2B,OAAO,WAAW,kBAAkB;;AAGrE,MAAM,cAAc,OAAO,WAAW,cAAc,CAAC,CAAC,oCAAoC;AAE1F,MAAM,0BAA0B,OAAO,cAAc,aAAa;AAClE,MAAM,sBAAsB,OAAO,GAAG,iBAAiB;AACvD,MAAM,qBAAqB,OAAO,GAAG,gBAAgB;AACrD,MAAM,6BAA6B,OAAO,GAAG,wBAAwB;AACrE,MAAM,iBAAiB,OAAO,GAAG,YAAY;AAC7C,MAAM,gBAAgB,OAAO,GAAG,WAAW;AAC3C,MAAM,kBAAkB,OAAO,GAAG,aAAa;AAC/C,MAAM,uBAAuB,OAAO,GAAG,kBAAkB;AACzD,MAAM,8BAA8B,OAAO,GAAG,yBAAyB;AAEvE,MAAM,wBAAwB,OAAO,WAAW,SAAS,CAAC,CAAC,8BAA8B;AACzF,MAAM,kBAAkB,OAAO,WAAW,SAAS,CAAC,CAAC,oCAAoC;AACzF,MAAM,oBAAoB,OAAO,WAAW,OAAO,CAAC,CAAC,0BAA0B;AAC/E,MAAM,yBAAyB,OAAO,WAAW,YAAY,CAAC,CAAC,+BAA+B;AAC9F,MAAM,gCAAgC,OAAO,WAAW,MAAM,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AAE9E,MAAM,sBAAsB,kBAAkB,KAAK;CACjD,OAAO;CACP,OAAO;CACP,OAAO;AACT,CAAC;AAED,MAAM,yBAAyB,SAAS,MAAM,SAAS,WAAW,CAAC,CAAC;AACpE,MAAM,aAAa,OAAO,WAAW,UAAU,CAAC,CAAC,+BAA+B;AAChF,MAAM,aAAa,OAAO,WAAW,UAAU,CAAC,CAAC,+BAA+B;AAEhF,MAAM,eAAe,MAAoB,UACvC,SAAS,cAAc,IAAI,MAAM,SAAS,cAAc,KAAK;AAE/D,MAAM,mBAAmB,OAAO,GAAG,8CAA8C,CAAC,CAAC,WACjF,UACA,gBACA,OACA,eACA;CACA,MAAM,cAAc,OAAO,WAAW,KAAK;CAE3C,OAAO,iBAAiB,KAAK;EAC3B;EACA,WAAW;EACX,gBAAgB,qBAAqB,cAAc;EACnD,SAAS;EACT,cAAc;EACd,cAAc;EACd,cAAc;EACd;EACA,GAAI,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc;CACzD,CAAC;AACH,CAAC;AAED,MAAM,aAAa,OAAO,GAAG,wCAAwC,CAAC,CAAC,WACrE,UACA,gBACA,OACA;CACA,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,OAAO,OAAO,MAAM,OAAO,iBAAiB,UAAU,gBAAgB,KAAK,CAAC;CAE7F,OAAO,OAAO,UAAU,iBAAiB,KAAK,EAAE,cAAc,SAAS,aAAa,CAAC,CAAC;CAEtF,OAAO;AACT,CAAC;AAED,MAAM,YAAY,OAAO,GAAG,uCAAuC,CAAC,CAAC,WACnE,UACA,YACA;CAGA,OAAO,QAAO,OAFQ,iBAAA,CAED,MAAM,aAAa,KAAK;EAAE;EAAU;CAAW,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,aAAa,OAAO,GAAG,wCAAwC,CAAC,CAAC,WACrE,cACA;CAGA,OAAO,QAAO,OAFQ,iBAAA,CAED,OAAO,qBAAqB,KAAK,EAAE,aAAa,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,mBAAmB,OAAO,GAAG,8CAA8C,CAAC,CAAC,WACjF,cACA;CAGA,OAAO,QAAO,OAFQ,iBAAA,CAED,qBAAqB,wBAAwB,KAAK,EAAE,aAAa,CAAC,CAAC;AAC1F,CAAC;;;;;;AA6BD,MAAM,wBAAwB,OAAO,GAAG,mDAAmD,CAAC,CAC1F,WAAW,SAA6B;CACtC,MAAM,eAAe,uBAAuB,QAAQ,YAAY;CAEhE,MAAM,UAAU,OAAO,OAAO,aAAa,uBAAuB,CAAC,CACjE,kBAAkB,KAAK;EACrB,cAAc,QAAQ;EACtB;EACA,WAAW,QAAQ;EACnB,SAAS,QAAQ;EACjB,GAAI,QAAQ,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,QAAQ,OAAO;CACnE,CAAC,CACH,CAAC,CAAC,KAAK,OAAO,KAAK;CAEnB,MAAM,SAAS,eAAe,KAAK;EACjC,UAAU,6BAA6B,QAAQ,YAAY;EAC3D,QAAQ;EACR,eAAe;EACf,WAAW;EACX,cAAc;EACd;CACF,CAAC;CAED,MAAM,UAAU,OAAO,OAAO,aAAa,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,OAAO,KAAK;CACpF,MAAM,eAAe,OAAO,WAAW,OAAO;CAE9C,OAAO,sBAAsB,KAAK;EAChC,cAAc,QAAQ;EACtB,gBAAgB,QAAQ;EACxB;EACA,SAAS,QAAQ;EACjB;EACA;CACF,CAAC;AACH,CACF;AAEA,MAAM,gBAAgB,OAAO,GAAG,2CAA2C,CAAC,CAAC,WAC3E,UACA,gBACA;CACA,MAAM,SAAS,OAAO;CAEtB,MAAM,cAAc,OAAO,sBAAsB;EAC/C,cAAc,SAAS;EACvB;EACA,WAAW,SAAS;EACpB,SAAS;CACX,CAAC;CAED,OAAO,OAAO,kBAAkB,WAAW;CAE3C,OAAO,OAAO,OAAO,mBACnB,uBAAuB,KAAK;EAC1B,cAAc,SAAS;EACvB,cAAc,uBAAuB,SAAS,YAAY;CAC5D,CAAC,CACH;AACF,CAAC;;AAGD,MAAM,mBAAmB,OAAO,GAAG,8CAA8C,CAAC,CAAC,WACjF,gBACA;CACA,MAAM,YAAY,OAAO,MAAM;CAC/B,MAAM,aAAa,KAAK,IAAI,GAAG,SAAS,cAAc,cAAc,IAAI,SAAS,IAAI;CAErF,OAAO,UAAU,OAAO,SAAS,OAAO,UAAU,CAAC;AACrD,CAAC;AAED,MAAM,mBACJ,MACA,WAcqC;CACrC;CACA,KAAK,MAAM;EACT,SAAS,WAAW,YAClB,YACI,OAAO,OACP,OAAO,KAAK,qCAAqC,KAAK;GAAE,UAAU;GAAM;EAAQ,CAAC,CAAC;EACxF,gBAAgB,aAAa,WAC3B,OAAO,KAAK,MAAM,CAAC,CAAC,KAClB,OAAO,eACL,qCAAqC,KAAK;GACxC,UAAU;GACV,SAAS,iDAAiD;EAC5D,CAAC,CACH,CACF;EACF,aAAa,aAAa,WACxB,OAAO,WAAW,cAChB,qCAAqC,KAAK;GACxC,UAAU;GACV,SAAS,oCAAoC;EAC/C,CAAC,CACH;CACJ,CAAC,CAAC,CAAC,KAAK,OAAO,SAAS,+BAA+B,MAAM,CAAC;AAChE;AAEA,MAAM,qBAAqB,gBACzB,+EACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CAEtB,MAAM,WAAW,OAAO,OAAO,QAAQ,CAAC,SAAS,QAAQ,IAAI,QAC3D,iBAAiB,eAAe,mBAAmB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAC7D,OAAO,KAAK,YAAY,iBAAiB,KAAK;EAAE,GAAG;EAAS,gBAAgB;CAAS,CAAC,CAAC,CACzF,CACF;CAEA,MAAM,WAAW,OAAO,OAAO,QAC7B,WACC,YAAY,OAAO,MAAM,OAAO,CAAC,CAAC,KAAK,OAAO,MAAM,GACrD,EAAE,aAAa,EAAE,CACnB;CAEA,OAAO,OACL,SAAS,OAAO,OAAO,SAAS,CAAC,CAAC,WAAW,GAC7C,uDACF;CACA,OAAO,OACL,SAAS,MACN,YACC,OAAO,UAAU,OAAO,KACxB,OAAO,GAAG,oBAAoB,CAAC,CAAC,QAAQ,OAAO,KAC/C,QAAQ,QAAQ,WAAW,UAC/B,GACA,gDACF;CACA,KAAK,MAAM,CAAC,OAAO,YAAY,SAAS,QAAQ,GAAG;EACjD,IAAI,OAAO,UAAU,OAAO,GAAG;EAC/B,MAAM,UAAU,SAAS;EAEzB,IAAI,YAAY,KAAA,GAAW,OAAO,OAAO,OAAO,IAAI,4BAA4B;EAOhF,OAAO,QACL,OANsB,WACtB,kBACA,OAAO,WAAW,QAAQ,QAAQ,YAAY,CAChD,EAAA,CAGW,mBAAmB,UAC5B,6DACF;EACA,OAAO,OACL,oBACE,OAAO,cACL,0BACA,OAAO,MAAM,iBAAiB,KAAK;GAAE,GAAG;GAAS,gBAAgB;EAAQ,CAAC,CAAC,CAC7E,CACF,GACA,2DACF;CACF;AACF,CAAC,CACL;AAEA,MAAM,2BAA2B,gBAC/B,0EACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,eAAe,0BAA0B;CAE1D,MAAM,WAAW,iBAAiB,KAAK;EACrC,GAAI,OAAO,iBAAiB,UAAU,eAAe,EAAE,GAAG,EAAE,CAAC;EAC7D,gBAAgB;CAClB,CAAC;CAED,MAAM,YAAY,iBAAiB,KAAK;EACtC,GAAI,OAAO,iBAAiB,UAAU,gBAAgB,EAAE,GAAG,EAAE,CAAC;EAC9D,gBAAgB;CAClB,CAAC;CAED,MAAM,QAAQ,OAAO,OAAO,MAAM,QAAQ;CAE1C,OAAO,cAAc,kBAAkB,OAAO,MAAM,SAAS,CAAC;CAC9D,OAAO,QACJ,OAAO,OAAO,MAAM,QAAQ,EAAA,CAAG,iBAAiB,MAAM,cACvD,uDACF;CACA,OAAO,OAAO,UAAU,iBAAiB,KAAK,EAAE,cAAc,MAAM,aAAa,CAAC,CAAC;CACnF,MAAM,QAAQ,OAAO,WAAW,sBAAsB,OAAO,UAAU,UAAU,UAAU,CAAC;CAE5F,OAAO,OAAO,kBACZ,OAAO,sBAAsB;EAC3B,cAAc,MAAM;EACpB,WAAW,MAAM;EACjB,gBAAgB,MAAM;EACtB,SAAS;CACX,CAAC,CACH;CACA,OAAO,cAAc,uBAAuB,OAAO,MAAM,SAAS,CAAC;CACnE,OAAO,OAAO,mBACZ,uBAAuB,KAAK;EAC1B,cAAc,MAAM;EACpB,cAAc,uBAAuB,MAAM,YAAY;CACzD,CAAC,CACH;CACA,OAAO,OACL,EAAE,OAAO,OAAO,MAAM,SAAS,EAAA,CAAG,UAClC,mDACF;AACF,CAAC,CACL;AAEA,MAAM,uBAAuB,gBAC3B,uEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,8BAA8B;CAC9D,MAAM,SAAS,OAAO;CAEtB,MAAM,UAAU,OAAO,iBAAiB,UAAU,mBAAmB,EACnE,MAAM,SACR,CAAC;CAED,MAAM,QAAQ,OAAO,OAAO,MAAM,OAAO;CAEzC,OAAO,OAAO,CAAC,MAAM,UAAU,uDAAuD;CACtF,OAAO,OAAO,MAAM,UAAU,YAAY,gDAAgD;CAE1F,MAAM,aAAa,OAAO,WACxB,sCACA,OAAO,WAAW,MAAM,YAAY,CACtC;CAEA,OAAO,OACL,WAAW,gBAAgB,QAAQ,eAAe,WAAW,UAAU,YACvE,gFACF;CAEA,MAAM,WAAW,OAAO,OAAO,MAAM,OAAO;CAE5C,OAAO,OACL,SAAS,YACP,SAAS,iBAAiB,MAAM,gBAChC,SAAS,cAAc,MAAM,aAC7B,SAAS,kBAAkB,MAAM,eACnC,8EACF;CAEA,MAAM,cAAc,OAAO,iBAAiB,UAAU,mBAAmB,EACvE,MAAM,QACR,CAAC;CAED,MAAM,WAAW,OAAO,cACtB,+DACA,OAAO,MAAM,WAAW,CAC1B;CAEA,OAAO,OACL,oBAAoB,QAAQ,KAC1B,SAAS,wBAAwB,QAAQ,eACzC,SAAS,yBAAyB,YAAY,aAChD,mFACF;CAEA,OAAO,OAAO,UAAU,iBAAiB,KAAK,EAAE,cAAc,MAAM,aAAa,CAAC,CAAC;CACnF,OAAO,OAAO,UAAU,iBAAiB,KAAK,EAAE,cAAc,MAAM,aAAa,CAAC,CAAC;CAEnF,MAAM,QAAQ,OAAO,WACnB,0BACA,OAAO,WAAW,MAAM,YAAY,CACtC;CAEA,OAAO,OACL,MAAM,UAAU,WAAW,MAAM,YAAY,KAAA,GAC7C,gEACF;CAEA,MAAM,kBAAkB,OAAO,OAAO,MAAM,OAAO;CAEnD,OAAO,OACL,gBAAgB,YAAY,gBAAgB,cAAc,MAAM,WAChE,iEACF;CAEA,MAAM,SAAS,OAAO,OAAO,MAC3B,OAAO,iBAAiB,UAAU,mBAAmB,EAAE,MAAM,OAAO,CAAC,CACvE;CAEA,OAAO,OACL,OAAO,iBAAiB,MAAM,gBAAgB,OAAO,kBAAkB,MAAM,eAC7E,wFACF;AACF,CAAC,CACL;AAEA,MAAM,0BAA0B,gBAC9B,yFACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CAEtB,MAAM,OAAO,OAAO,iBAClB,eAAe,2BAA2B,GAC1C,kBACA,EAAE,MAAM,QAAQ,CAClB;CAEA,MAAM,WAAW,gBAAgB,KAAK;EACpC,WAAW,KAAK;EAChB,oBAAoB,OAAO,WAAW,YAAY,CAAC,CAAC,cAAc;EAClE,mBAAmB,KAAK;EACxB,YAAY,EAAE,QAAQ,iCAAiC;EACvD,iBAAiB;EACjB,QAAQ;GACN,QAAQ;IACN,eAAe;IACf,UAAU,KAAK;IACf,eAAe;IACf,cAAc,OAAO,WAAW,YAAY,CAAC,CAAC,iBAAiB;GACjE;GACA,QAAQ;IACN,MAAM;IACN,UAAU,eAAe,eAAe;IACxC,SAAS;GACX;GACA,eAAe;GACf,QAAQ,YAAY,QAAQ;GAC5B,QAAQ;IACN,MAAM,uBAAuB,KAAK;KAChC,uBAAuB;KACvB,0BAA0B;IAC5B,CAAC;IACD,YAAY,2BAA2B,KAAK;KAC1C,OAAO;KACP,WAAW;KACX,gBAAgB;KAChB,aAAa;KACb,cAAc;KACd,cAAc;KACd,aAAa;IACf,CAAC;GACH;GACA,OAAO,cAAc,KAAK;IAAE,UAAU;IAAG,kBAAkB,CAAC;GAAE,CAAC;GAC/D,OAAO;GACP,gBAAgB,KAAK;GACrB,iBAAiB;GACjB,iBAAiB;EACnB;CACF,CAAC;CAED,MAAM,WAAW,OAAO,OAAO,MAC7B,iBAAiB,KAAK;EAAE,GAAG;EAAM,iBAAiB;CAAS,CAAC,CAC9D;CAEA,MAAM,QAAQ,OAAO,WACnB,2BACA,OAAO,WAAW,SAAS,YAAY,CACzC;CAEA,OAAO,OACL,MAAM,oBAAoB,KAAA,KACxB,OAAO,cAAc,eAAe,CAAC,CAAC,MAAM,iBAAiB,QAAQ,GACvE,sEACF;CACA,OAAO,OACL,MAAM,kBAAkB,KAAA,GACxB,4DACF;CACA,MAAM,WAAW,OAAO,iBAAiB,SAAS,YAAY;CAE9D,OAAO,OACL,SAAS,WAAW,oBAAoB,KAAA,KACtC,OAAO,cAAc,eAAe,CAAC,CAAC,SAAS,WAAW,iBAAiB,QAAQ,GACrF,gDACF;CAEA,MAAM,WAAW,OAAO,OAAO,MAC7B,iBAAiB,KAAK;EAAE,GAAG;EAAM,iBAAiB;CAAS,CAAC,CAC9D;CAEA,OAAO,OACL,SAAS,YAAY,SAAS,cAAc,SAAS,WACrD,qDACF;CACA,KAAK,MAAM,WAAW;EACpB,KAAA;EACA,gBAAgB,KAAK;GAAE,GAAG;GAAU,YAAY,EAAE,QAAQ,UAAU;EAAE,CAAC;EACvE,gBAAgB,KAAK;GACnB,GAAG;GACH,oBAAoB,OAAO,WAAW,YAAY,CAAC,CAAC,oBAAoB;EAC1E,CAAC;EACD,gBAAgB,KAAK;GACnB,GAAG;GACH,QAAQ;IAAE,GAAG,SAAS;IAAQ,iBAAiB;GAAU;EAC3D,CAAC;CACH,GAAG;EACD,MAAM,WAAW,OAAO,cACtB,wCACA,OAAO,MACL,iBAAiB,KAAK;GACpB,GAAG;GACH,GAAI,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,QAAQ;EAC9D,CAAC,CACH,CACF;EAEA,OAAO,OACL,oBAAoB,QAAQ,GAC5B,qFACF;CACF;CAEA,MAAM,UAAU,qBAAqB,kBAAkB;CAEvD,MAAM,OAAO,iBAAiB,KAAK;EACjC,GAAG;EACH,gBAAgB;EAChB,iBAAiB;GAAE,GAAG;GAAU,WAAW;GAAS,YAAY,EAAE,QAAQ,OAAO;EAAE;CACrF,CAAC;CAID,OAAO,QACL,OAHsB,OAAO,MAAM,IAAI,EAAA,CAG9B,gBAAgB,SAAS,eAClC,iDACF;CACA,KAAK,MAAM,WAAW,CACpB,KAAA,GACA,gBAAgB,KAAK;EACnB,GAAG;EACH,QAAQ;GAAE,GAAG,SAAS;GAAQ,iBAAiB;EAAU;CAC3D,CAAC,CACH,GAAG;EACD,MAAM,WAAW,OAAO,cACtB,kCACA,OAAO,MACL,iBAAiB,KAAK;GACpB,GAAG;GACH,gBAAgB,qBAAqB,yBAAyB;GAC9D,GAAI,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,QAAQ;EAC9D,CAAC,CACH,CACF;EAEA,OAAO,OACL,SAAS,SAAS,0BAA0B,SAAS,WAAW,WAChE,gEACF;CACF;CAEA,MAAM,WAAW,OAAO,iBACtB,eAAe,kCAAkC,GACjD,YACA,EAAE,MAAM,WAAW,CACrB;CAEA,OAAO,OAAO,MAAM,QAAQ;CAE5B,MAAM,WAAW,OAAO,cACtB,0BACA,OAAO,MACL,iBAAiB,KAAK;EACpB,GAAG;EACH,gBAAgB,qBAAqB,UAAU;EAC/C,iBAAiB;GACf,GAAG;GACH,QAAQ;IACN,GAAG,SAAS;IACZ,QAAQ;KAAE,GAAG,SAAS,OAAO;KAAQ,UAAU,SAAS;IAAS;GACnE;EACF;CACF,CAAC,CACH,CACF;CAEA,OAAO,OACL,SAAS,SAAS,0BAA0B,SAAS,WAAW,WAChE,6EACF;CAEA,MAAM,SAAS,OAAO,iBACpB,eAAe,8BAA8B,GAC7C,iBACA,EAAE,MAAM,OAAO,CACjB;CAEA,MAAM,QAAQ,OAAO,OAAO,QAC1B,CACE,QACA,iBAAiB,KAAK;EACpB,GAAG;EACH,gBAAgB,qBAAqB,aAAa;EAClD,iBAAiB;GACf,GAAG;GACH,QAAQ;IACN,GAAG,SAAS;IACZ,QAAQ;KAAE,GAAG,SAAS,OAAO;KAAQ,UAAU,OAAO;IAAS;GACjE;EACF;CACF,CAAC,CACH,IACC,YAAY,OAAO,MAAM,OAAO,CAAC,CAAC,KAAK,OAAO,MAAM,GACrD,EAAE,aAAa,EAAE,CACnB;CAEA,OAAO,OACL,MAAM,QAAQ,WAAW,OAAO,SAAS,SAAS,CAAC,CAAC,WAAW,KAC7D,MAAM,QACH,WAAW,OAAO,SAAS,aAAa,OAAO,QAAQ,SAAS,sBACnE,CAAC,CAAC,WAAW,GACf,wFACF;AACF,CAAC,CACL;AAEA,MAAM,2BAA2B,gBAC/B,mFACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CAEtB,MAAM,OAAO,OAAO,iBAClB,eAAe,yBAAyB,GACxC,gBACA,EAAE,MAAM,QAAQ,CAClB;CAEA,MAAM,WAAW,OAAO,WAAW,gBAAgB,CAAC,CAAC;EACnD,eAAe;EACf,SAAS;GAAE,eAAe;GAAe,WAAW;EAAe;EACnE,UAAU;EACV,QAAQ;GAAE,UAAU;GAAe,SAAS;EAAa;EACzD,eAAe;GAAE,UAAU;GAAe,SAAS;EAAa;CAClE,CAAC;CAED,MAAM,WAAW,OAAO,OAAO,MAC7B,iBAAiB,KAAK;EAAE,GAAG;EAAM,kBAAkB;CAAS,CAAC,CAC/D;CAEA,MAAM,QAAQ,OAAO,WACnB,yBACA,OAAO,WAAW,SAAS,YAAY,CACzC;CAEA,OAAO,OACL,MAAM,qBAAqB,KAAA,KACzB,OAAO,cAAc,YAAY,CAAC,CAAC,MAAM,kBAAkB,QAAQ,GACrE,uFACF;CACA,MAAM,WAAW,OAAO,iBAAiB,SAAS,YAAY;CAE9D,OAAO,OACL,SAAS,WAAW,qBAAqB,KAAA,KACvC,OAAO,cAAc,YAAY,CAAC,CAAC,SAAS,WAAW,kBAAkB,QAAQ,GACnF,sCACF;CAEA,MAAM,WAAW,OAAO,OAAO,MAC7B,iBAAiB,KAAK;EAAE,GAAG;EAAM,kBAAkB;CAAS,CAAC,CAC/D;CAEA,OAAO,OACL,SAAS,YAAY,SAAS,cAAc,SAAS,WACrD,iDACF;CACA,KAAK,MAAM,WAAW;EACpB,KAAA;EACA,iBAAiB,KAAK;GAAE,GAAG;GAAU,UAAU;EAAQ,CAAC;EACxD,iBAAiB,KAAK;GAAE,GAAG;GAAU,WAAW,SAAS;EAAQ,CAAC;CACpE,GAAG;EACD,MAAM,WAAW,OAAO,cACtB,sCACA,OAAO,MACL,iBAAiB,KAAK;GACpB,GAAG;GACH,GAAI,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,kBAAkB,QAAQ;EAC/D,CAAC,CACH,CACF;EAEA,OAAO,OACL,oBAAoB,QAAQ,GAC5B,wDACF;CACF;AACF,CAAC,CACL;AAEA,MAAM,uBAAuB,gBAC3B,+EACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CAEtB,MAAM,OAAO,OAAO,iBAClB,eAAe,2BAA2B,GAC1C,kBACA,EAAE,MAAM,6BAA6B,CACvC;CAEA,MAAM,WAAW,OAAO,WAAW,YAAY,CAAC,CAAC;EAC/C,MAAM;EACN,eAAe;EACf,QAAQ;GACN,eAAe;GACf,cAAc;GACd,eAAe;GACf,UAAU;EACZ;EACA,QAAQ;GACN,eAAe;GACf,SAAS;GACT,UAAU;GACV,OAAO;GACP,UAAU;GACV,UAAU;GACV,OAAO,EAAE,SAAS,UAAU;EAC9B;CACF,CAAC;CAED,MAAM,WAAW,OAAO,OAAO,MAC7B,iBAAiB,KAAK;EAAE,GAAG;EAAM,kBAAkB;CAAS,CAAC,CAC/D;CAEA,MAAM,QAAQ,OAAO,WACnB,2BACA,OAAO,WAAW,SAAS,YAAY,CACzC;CAEA,OAAO,OACL,MAAM,qBAAqB,KAAA,KACzB,OAAO,cAAc,YAAY,CAAC,CAAC,MAAM,kBAAkB,QAAQ,GACrE,+CACF;CACA,OAAO,OACL,OAAO,cAAc,aAAa,CAAC,CAAC,MAAM,cAAc,KAAK,YAAY,GACzE,qDACF;CACA,MAAM,WAAW,OAAO,iBAAiB,SAAS,YAAY;CAE9D,OAAO,OACL,SAAS,WAAW,qBAAqB,KAAA,KACvC,OAAO,cAAc,YAAY,CAAC,CAAC,SAAS,WAAW,kBAAkB,QAAQ,GACnF,wCACF;CAEA,MAAM,SAAS,OAAO,OAAO,MAC3B,iBAAiB,KAAK;EAAE,GAAG;EAAM,kBAAkB;CAAS,CAAC,CAC/D;CAEA,OAAO,OACL,OAAO,YAAY,OAAO,cAAc,SAAS,WACjD,0DACF;CACA,KAAK,MAAM,WAAW;EACpB,KAAA;EACA,aAAa,KAAK;GAAE,GAAG;GAAU,QAAQ;IAAE,GAAG,SAAS;IAAQ,UAAU;GAAE;EAAE,CAAC;EAC9E,aAAa,KAAK;GAChB,GAAG;GACH,QAAQ;IAAE,GAAG,SAAS;IAAQ,OAAO,EAAE,SAAS,UAAU;GAAE;EAC9D,CAAC;CACH,GAAG;EACD,MAAM,WAAW,OAAO,cACtB,2BACA,OAAO,MACL,iBAAiB,KAAK;GACpB,GAAG;GACH,GAAI,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,kBAAkB,QAAQ;EAC/D,CAAC,CACH,CACF;EAEA,OAAO,OACL,oBAAoB,QAAQ,GAC5B,gDACF;CACF;AACF,CAAC,CACL;AAEA,MAAM,2BAA2B,gBAC/B,2EACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CAEtB,MAAM,OAAO,OAAO,iBAClB,eAAe,+BAA+B,GAC9C,sBACA,EAAE,MAAM,QAAQ,CAClB;CAEA,MAAM,WAAW,OAAO,WAAW,gBAAgB,CAAC,CAAC;EACnD,MAAM;EACN,eAAe;EACf,iBAAiB;EACjB,QAAQ;GACN,MAAM;GACN,QAAQ;IACN,eAAe;IACf,cAAc;IACd,eAAe;IACf,UAAU;GACZ;GACA,SAAS;IACP,UAAU;IACV,cAAc;IACd,WAAW;IACX,eAAe;GACjB;GACA,OAAO;GACP,cAAc;GACd,SAAS;GACT,QAAQ,EAAE,QAAQ,OAAO;EAC3B;CACF,CAAC;CAED,MAAM,WAAW,OAAO,OAAO,MAC7B,iBAAiB,KAAK;EAAE,GAAG;EAAM,kBAAkB;CAAS,CAAC,CAC/D;CAEA,MAAM,QAAQ,OAAO,WACnB,+BACA,OAAO,WAAW,SAAS,YAAY,CACzC;CAEA,OAAO,OACL,MAAM,qBAAqB,KAAA,KACzB,OAAO,cAAc,YAAY,CAAC,CAAC,MAAM,kBAAkB,QAAQ,GACrE,iGACF;CACA,MAAM,WAAW,OAAO,iBAAiB,SAAS,YAAY;CAE9D,OAAO,OACL,SAAS,WAAW,qBAAqB,KAAA,KACvC,OAAO,cAAc,YAAY,CAAC,CAAC,SAAS,WAAW,kBAAkB,QAAQ,GACnF,4CACF;CAEA,MAAM,WAAW,OAAO,OAAO,MAC7B,iBAAiB,KAAK;EAAE,GAAG;EAAM,kBAAkB;CAAS,CAAC,CAC/D;CAEA,OAAO,OACL,SAAS,YAAY,SAAS,cAAc,SAAS,WACrD,uDACF;CACA,KAAK,MAAM,WAAW,CACpB,KAAA,GACA,iBAAiB,KAAK;EAAE,GAAG;EAAU,iBAAiB;CAAK,CAAC,CAC9D,GAAG;EACD,MAAM,WAAW,OAAO,cACtB,4CACA,OAAO,MACL,iBAAiB,KAAK;GACpB,GAAG;GACH,GAAI,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,kBAAkB,QAAQ;EAC/D,CAAC,CACH,CACF;EAEA,OAAO,OACL,oBAAoB,QAAQ,GAC5B,4DACF;CACF;AACF,CAAC,CACL;AAEA,MAAM,iCAAiC,gBACrC,6GACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;CAOtB,MAAM,WAAW,eAAe,oCAAoC;CACpE,MAAM,SAAS,OAAO;CACtB,MAAM,iBAAiB,qBAAqB,cAAc;CAE1D,MAAM,cAAc,OAAO,iBAAiB,UAAU,gBAAgB,EACpE,OAAO,OACT,CAAC;CAED,MAAM,OAAO,OAAO,OAAO,MAAM,WAAW;CAK5C,MAAM,gBAAgB,iBAAiB,KAAK;EAC1C;EACA,WAAW;EACX;EACA,SAAS;EACT,cAAc;EACd,cAAc;EACd,cAAc,EAAE,OAAO,SAAS;EAChC,aAAa,OAAO,WAAW,EAAE,OAAO,SAAS,CAAC;CACpD,CAAC;CAED,MAAM,SAAS,OAAO,OAAO,MAAM,aAAa;CAEhD,OAAO,OACL,CAAC,OAAO,YACN,OAAO,iBAAiB,KAAK,gBAC7B,OAAO,cAAc,KAAK,aAC1B,OAAO,kBAAkB,KAAK,eAChC,uGACF;CAGA,MAAM,aAAa,OAAO,OAAO,MAAM,WAAW;CAElD,OAAO,OACL,WAAW,YAAY,WAAW,iBAAiB,KAAK,cACxD,6GACF;CAIA,MAAM,YAAY,OAAO,WACvB,uCACA,OAAO,OAAO,OACZ,sBAAsB,KAAK;EACzB;EACA,WAAW;EACX;CACF,CAAC,CACH,CACF;CAEA,MAAM,cAAc,OAAO,WACzB,wCACA,OAAO,OAAO,OACZ,sBAAsB,KAAK;EACzB;EACA,WAAW;EACX;CACF,CAAC,CACH,CACF;CAEA,OAAO,OACL,UAAU,iBAAiB,KAAK,gBAC9B,YAAY,iBAAiB,OAAO,gBACpC,UAAU,iBAAiB,YAAY,cACzC,0FACF;AACF,CAAC,CACL;AAEA,MAAM,2BAA2B,gBAC/B,mFACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,yCAAyC;CACzE,MAAM,SAAS,OAAO;CACtB,MAAM,OAAO,OAAO,iBAAiB,UAAU,KAAK,EAAE,MAAM,aAAa,CAAC;CAE1E,MAAM,eAAe,iBAAiB,KAAK;EACzC,GAAG;EACH,WAAW,OAAO,WAAW,SAAS,CAAC,CAAC,KAAU;CACpD,CAAC;CAED,MAAM,gBAAgB,iBAAiB,KAAK;EAC1C,GAAG;EACH,WAAW,OAAO,WAAW,SAAS,CAAC,CAAC,GAAG;EAC3C,gBAAgB,qBAAqB,KAAU;CACjD,CAAC;CAED,MAAM,QAAQ,OAAO,OAAO,MAAM,YAAY;CAC9C,MAAM,SAAS,OAAO,OAAO,MAAM,aAAa;CAEhD,OAAO,OACL,CAAC,OAAO,YACN,OAAO,iBAAiB,MAAM,gBAC9B,OAAO,cAAc,MAAM,aAC3B,OAAO,kBAAkB,MAAM,gBAAgB,GACjD,6FACF;CAEA,KAAK,MAAM,CAAC,SAAS,aAAa,CAChC,CAAC,cAAc,KAAK,GACpB,CAAC,eAAe,MAAM,CACxB,GAAY;EACV,MAAM,MAAM,sBAAsB,KAAK;GACrC;GACA,WAAW,QAAQ;GACnB,gBAAgB,QAAQ;EAC1B,CAAC;EAED,MAAM,QAAQ,OAAO,WAAW,6BAA6B,OAAO,OAAO,OAAO,GAAG,CAAC;EACtF,MAAM,WAAW,OAAO,OAAO,iBAAiB,GAAG;EACnD,MAAM,SAAS,OAAO,OAAO,MAAM,OAAO;EAE1C,OAAO,OACL,MAAM,iBAAiB,SAAS,gBAC9B,SAAS,SAAS,cAClB,SAAS,WAAW,iBAAiB,SAAS,gBAC9C,OAAO,YACP,OAAO,iBAAiB,SAAS,gBACjC,OAAO,cAAc,SAAS,aAC9B,OAAO,kBAAkB,SAAS,eACpC,sFACF;CACF;AACF,CAAC,CACL;AAEA,MAAM,0BAA0B,gBAC9B,2FACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,oCAAoC;CACpE,MAAM,SAAS,OAAO;CAEtB,MAAM,WAAW;EACf,OAAO,iBAAiB,UAAU,cAAc,EAAE,MAAM,EAAE,CAAC;EAC3D,OAAO,iBAAiB,UAAU,cAAc,EAAE,MAAM,EAAE,CAAC;EAC3D,OAAO,iBAAiB,UAAU,cAAc,EAAE,MAAM,EAAE,CAAC;CAC7D;CAEA,MAAM,WAAW,OAAO,OAAO,QAAQ,WAAW,YAAY,OAAO,MAAM,OAAO,GAAG,EACnF,aAAa,YACf,CAAC;CAED,MAAM,YAAY,OAAO,iBAAiB,UAAU,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAE/E,MAAM,aAAa,OAAO,OAAO,IAAI,CAAC,OAAO,MAAM,SAAS,GAAG,OAAO,MAAM,SAAS,CAAC,GAAG,EACvF,aAAa,YACf,CAAC;CAED,OAAO,OACL,WAAW,EAAE,CAAC,iBAAiB,WAAW,EAAE,CAAC,gBAC3C,WAAW,EAAE,CAAC,cAAc,WAAW,EAAE,CAAC,aAC1C,WAAW,EAAE,CAAC,kBAAkB,WAAW,EAAE,CAAC,eAChD,gFACF;CACA,OAAO,OACL,WAAW,QAAQ,WAAW,CAAC,OAAO,QAAQ,CAAC,CAAC,WAAW,GAC3D,+EACF;CAEA,MAAM,OAAO,CAAC,GAAG,UAAU,WAAW,EAAE;CAExC,OAAO,OACL,IAAI,IAAI,KAAK,KAAK,WAAW,OAAO,aAAa,CAAC,CAAC,CAAC,SAAS,KAAK,QAClE,0EACF;CACA,OAAO,OACL,IAAI,IAAI,KAAK,KAAK,WAAW,OAAO,YAAY,CAAC,CAAC,CAAC,SAAS,KAAK,QACjE,4EACF;CAEA,OAAO,OAAO,QACZ,OACC,WAAW,OAAO,UAAU,iBAAiB,KAAK,EAAE,cAAc,OAAO,aAAa,CAAC,CAAC,GACzF,EAAE,SAAS,KAAK,CAClB;CAEA,MAAM,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,gBAAgB,EAAE,aAAa;CAEhF,KAAK,MAAM,YAAY,eAAe;EACpC,MAAM,QAAQ,OAAO,WACnB,iBAAiB,SAAS,aAAa,kBACvC,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,OAAO,OACL,MAAM,iBAAiB,SAAS,cAChC,mEACF;EACA,OAAO,cAAc,UAAU,MAAM,cAAc;CACrD;CACA,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,UAAU,UAAU,CAAC,GACpD,4CACF;AACF,CAAC,CACL;AAEA,MAAM,gBAAgB,gBACpB,4EACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;CACtB,MAAM,YAAY,eAAe,0BAA0B;CAE3D,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,WAAW,UAAU,CAAC,GACrD,wDACF;CAEA,MAAM,WAAW,eAAe,yBAAyB;CACzD,MAAM,QAAQ,OAAO,WAAW,UAAU,cAAc,EAAE,OAAO,EAAE,CAAC;CACpE,MAAM,SAAS,OAAO,WAAW,UAAU,cAAc,EAAE,OAAO,EAAE,CAAC;CAErE,OAAO,OACL,OAAO,gBAAgB,MAAM,eAC7B,gEACF;CAEA,MAAM,YAAY,OAAO,WACvB,+BACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,OAAO,OACL,UAAU,iBAAiB,MAAM,cACjC,yEACF;CAOA,OAAO,QACL,OANqB,WACrB,8BACA,OAAO,WAAW,MAAM,YAAY,CACtC,EAAA,CAGU,UAAU,WAClB,iFACF;CACA,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,UAAU,UAAU,CAAC,GACpD,2EACF;CAEA,OAAO,cAAc,OAAO,UAAU,cAAc;CAEpD,MAAM,YAAY,OAAO,WACvB,oCACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,OAAO,OACL,UAAU,iBAAiB,OAAO,cAClC,uEACF;CACA,OAAO,OACL,UAAU,gBAAgB,UAAU,eACpC,4DACF;CACA,OAAO,cAAc,QAAQ,UAAU,cAAc;CACrD,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,UAAU,UAAU,CAAC,GACpD,sCACF;AACF,CAAC,CACL;AAEA,MAAM,qBAAqB,gBACzB,6EACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,0BAA0B;CAC1D,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,OAAO,WAAW,UAAU,eAAe,EAAE,MAAM,QAAQ,CAAC;CAE7E,MAAM,aAAa,OAAO,WACxB,qBACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,MAAM,UAAU,OAAO,OAAO,eAC5B,sBAAsB,KAAK;EACzB,cAAc,SAAS;EACvB,gBAAgB,WAAW;CAC7B,CAAC,CACH;CAEA,OAAO,OACL,SAAS,cAAc,QAAQ,cAAc,KAC3C,SAAS,cAAc,WAAW,cAAc,GAClD,gDACF;CACA,MAAM,YAAY,QAAQ;CAE1B,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,UAAU,UAAU,CAAC,GACpD,kEACF;CAEA,OAAO,iBAAiB,QAAQ,cAAc;CAE9C,MAAM,UAAU,OAAO,WACrB,kCACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,OAAO,OACL,QAAQ,iBAAiB,SAAS,gBAChC,QAAQ,cAAc,WAAW,aACjC,QAAQ,mBAAmB,WAC7B,2EACF;CACA,OAAO,OACL,QAAQ,gBAAgB,WAAW,eACnC,iFACF;CAEA,MAAM,aAAa,OAAO,cACxB,sCACA,OAAO,eACL,sBAAsB,KAAK;EACzB,cAAc,SAAS;EACvB,gBAAgB;CAClB,CAAC,CACH,CACF;CAEA,OAAO,OACL,gBAAgB,UAAU,KAAK,WAAW,gBAAgB,QAAQ,eAClE,sEACF;CAEA,MAAM,eAAe,OAAO,cAC1B,uCACA,OAAO,iBACL,wBAAwB,KAAK;EAC3B,cAAc,SAAS;EACvB,gBAAgB;CAClB,CAAC,CACH,CACF;CAEA,OAAO,OAAO,gBAAgB,YAAY,GAAG,8CAA8C;CAE3F,MAAM,YAAY,OAAO,cACvB,mDACA,OAAO,iBACL,wBAAwB,KAAK;EAC3B,cAAc,SAAS;EACvB,gBAAgB;EAChB,UAAU,wBAAwB,SAAS,YAAY;EACvD,UAAU,eAAe,CAAC;CAC5B,CAAC,CACH,CACF;CAEA,OAAO,OACL,gBAAgB,SAAS,GACzB,0DACF;CAEA,MAAM,mBAAmB,OAAO,sBAAsB;EACpD,cAAc,SAAS;EACvB,gBAAgB;EAChB,WAAW,SAAS;EACpB,SAAS;CACX,CAAC;CAED,MAAM,eAAe,OAAO,cAC1B,oDACA,OAAO,kBAAkB,gBAAgB,CAC3C;CAEA,OAAO,OACL,gBAAgB,YAAY,GAC5B,kDACF;CAGA,OAAO,QACL,OAHwB,iBAAiB,SAAS,YAAY,EAAA,CAGnD,gBAAgB,KAAA,GAC3B,kEACF;CAEA,OAAO,OAAO,eACZ,sBAAsB,KAAK;EACzB,cAAc,SAAS;EACvB,gBAAgB,QAAQ;CAC1B,CAAC,CACH;CAEA,MAAM,cAAc,eAAe,4BAA4B;CAC/D,MAAM,cAAc,OAAO,WAAW,aAAa,iBAAiB,EAAE,MAAM,UAAU,CAAC;CAEvF,MAAM,eAAe,OAAO,WAC1B,iCACA,OAAO,UAAU,aAAa,UAAU,CAC1C;CAEA,OAAO,iBAAiB,aAAa,cAAc;CAEnD,MAAM,cAAc,OAAO,OAAO,eAChC,sBAAsB,KAAK;EACzB,cAAc,YAAY;EAC1B,gBAAgB,aAAa;CAC/B,CAAC,CACH;CAEA,OAAO,OACL,SAAS,cAAc,YAAY,cAAc,IAC/C,SAAS,cAAc,aAAa,cAAc,GACpD,uFACF;AACF,CAAC,CACL;AAEA,MAAM,4BAA4B,gBAChC,uEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,4BAA4B;CAC5D,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,OAAO,WAAW,UAAU,iBAAiB,EAAE,MAAM,UAAU,CAAC;CAEjF,MAAM,aAAa,OAAO,WACxB,qBACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,OAAO,OAAO,iBACZ,wBAAwB,KAAK;EAC3B,cAAc,SAAS;EACvB,gBAAgB,WAAW;CAC7B,CAAC,CACH;CAEA,MAAM,gBAAgB,OAAO,cAC3B,6BACA,OAAO,eACL,sBAAsB,KAAK;EACzB,cAAc,SAAS;EACvB,gBAAgB,WAAW;CAC7B,CAAC,CACH,CACF;CAEA,OAAO,OACL,gBAAgB,aAAa,GAC7B,iDACF;CAEA,MAAM,UAAU,OAAO,WACrB,uCACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,OAAO,OACL,QAAQ,iBAAiB,SAAS,gBAChC,QAAQ,gBAAgB,WAAW,eACrC,+EACF;CAEA,MAAM,gBAAgB,OAAO,cAC3B,0DACA,OAAO,iBACL,wBAAwB,KAAK;EAC3B,cAAc,SAAS;EACvB,gBAAgB,WAAW;CAC7B,CAAC,CACH,CACF;CAEA,OAAO,OACL,gBAAgB,aAAa,GAC7B,iEACF;CACA,OAAO,cAAc,UAAU,QAAQ,cAAc;AACvD,CAAC,CACL;AAEA,MAAM,0BAA0B,gBAC9B,sEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,0BAA0B;CAC1D,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,OAAO,WAAW,UAAU,eAAe,EAAE,MAAM,QAAQ,CAAC;CAE7E,MAAM,QAAQ,OAAO,WACnB,gCACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,MAAM,SAAS,wBAAwB,KAAK;EAC1C,cAAc,SAAS;EACvB,gBAAgB,MAAM;EACtB,UAAU,wBAAwB,SAAS,YAAY;EACvD,UAAU,eAAe,CAAC;CAC5B,CAAC;CAED,OAAO,OAAO,iBAAiB,MAAM;CAOrC,OAAO,QACL,OANqB,WACrB,sCACA,OAAO,WAAW,SAAS,YAAY,CACzC,EAAA,CAGU,UAAU,iBAClB,uEACF;CAEA,OAAO,OAAO,iBAAiB,MAAM;CACrC,KAAK,MAAM,eAAe,CACxB,wBAAwB,KAAK;EAC3B,GAAG;EACH,UAAU,wBAAwB,mBAAmB,wBAAwB,CAAC;CAChF,CAAC,GACD,wBAAwB,KAAK;EAAE,GAAG;EAAQ,UAAU,eAAe,CAAC;CAAE,CAAC,CACzE,GAAG;EACD,MAAM,QAAQ,OAAO,cACnB,sCACA,OAAO,iBAAiB,WAAW,CACrC;EAEA,OAAO,OAAO,cAAc,KAAK,GAAG,oDAAoD;CAC1F;CACA,MAAM,WAAW,OAAO,iBAAiB,SAAS,YAAY;CAE9D,OAAO,OACL,SAAS,iBAAiB,KAAA,KACxB,SAAS,aAAa,aAAa,OAAO,YAC1C,SAAS,aAAa,aAAa,OAAO,YAC1C,SAAS,WAAW,UAAU,iBAChC,wFACF;AACF,CAAC,CACL;AAEA,MAAM,sBAAsB,gBAC1B,0EACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,2BAA2B;CAC3D,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,OAAO,WAAW,UAAU,gBAAgB,EAAE,MAAM,SAAS,CAAC;CAE/E,MAAM,QAAQ,OAAO,WACnB,oCACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,MAAM,cAAc,OAAO,sBAAsB;EAC/C,cAAc,SAAS;EACvB,gBAAgB,MAAM;EACtB,WAAW,SAAS;EACpB,SAAS;EACT,QAAQ,EAAE,QAAQ,GAAG;CACvB,CAAC;CAED,MAAM,WAAW,OAAO,OAAO,kBAAkB,WAAW;CAE5D,OAAO,OACL,CAAC,SAAS,YACR,SAAS,iBAAiB,YAAY,gBACtC,SAAS,YAAY,eACrB,SAAS,iBAAiB,YAAY,cACxC,4EACF;CAOA,OAAO,QACL,OAN2B,WAC3B,4BACA,OAAO,WAAW,SAAS,YAAY,CACzC,EAAA,CAGgB,UAAU,iBACxB,wEACF;CAEA,MAAM,sBAAsB,OAAO,OAAO,kBAAkB,WAAW;CAEvE,OAAO,OACL,oBAAoB,YAClB,oBAAoB,iBAAiB,YAAY,cACnD,mEACF;CAEA,MAAM,eAAe,uBAAuB,KAAK;EAC/C,cAAc,SAAS;EACvB,cAAc,YAAY;CAC5B,CAAC;CAED,MAAM,aAAa,OAAO,OAAO,mBAAmB,YAAY;CAEhE,OAAO,OACL,WAAW,iBAAiB,SAAS,gBACnC,WAAW,iBAAiB,YAAY,gBACxC,WAAW,cAAc,SAAS,aAClC,WAAW,YAAY,aACzB,wEACF;CAEA,MAAM,UAAU,OAAO,WACrB,6BACA,OAAO,WAAW,SAAS,YAAY,CACzC;CAEA,OAAO,OACL,QAAQ,UAAU,aAAa,QAAQ,mBAAmB,aAC1D,mEACF;CAEA,OAAO,UAAU,OAAO,UAAU;CAClC,MAAM,UAAU,OAAO,OAAO,mBAAmB,YAAY;CAE7D,OAAO,OACL,QAAQ,iBAAiB,WAAW,gBAClC,QAAQ,cAAc,WAAW,aACjC,QAAQ,YAAY,WAAW,WAC/B,YAAY,QAAQ,WAAW,WAAW,SAAS,GACrD,mFACF;CACA,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,UAAU,UAAU,CAAC,GACpD,2DACF;CAEA,MAAM,mBAAmB;EACvB,UAAU;EACV,SAAS;CACX;CAEA,MAAM,kBAAkB,OAAO,WAAW,UAAU,gBAAgB,EAClE,MAAM,OACR,CAAC;CAED,MAAM,cAAc,OAAO,WACzB,2CACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,MAAM,oBAAoB,OAAO,sBAAsB;EACrD,cAAc,gBAAgB;EAC9B,gBAAgB,YAAY;EAC5B,WAAW,gBAAgB;EAC3B,SAAS;EACT,QAAQ;CACV,CAAC;CAED,OAAO,OAAO,kBAAkB,iBAAiB;CAEjD,MAAM,mBAAmB,OAAO,OAAO,mBACrC,uBAAuB,KAAK;EAC1B,cAAc,gBAAgB;EAC9B,cAAc,kBAAkB;CAClC,CAAC,CACH;CAEA,OAAO,OACL,iBAAiB,YAAY,YAC3B,iBAAiB,SAAS,aAAa,iBAAiB,YACxD,iBAAiB,QAAQ,YAAY,iBAAiB,SACxD,0EACF;CACA,OAAO,UAAU,OAAO,UAAU;CAElC,MAAM,2BAA2B,OAAO,OAAO,mBAC7C,uBAAuB,KAAK;EAC1B,cAAc,gBAAgB;EAC9B,cAAc,kBAAkB;CAClC,CAAC,CACH;CAEA,OAAO,OACL,yBAAyB,SAAS,aAAa,iBAAiB,YAC9D,yBAAyB,QAAQ,YAAY,iBAAiB,WAC9D,YAAY,yBAAyB,WAAW,iBAAiB,SAAS,GAC5E,oFACF;AACF,CAAC,CACL;AAEA,MAAM,sBAAsB,gBAC1B,kEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,oCAAoC;CACpE,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,OAAO,WAAW,UAAU,kBAAkB,EAAE,MAAM,WAAW,CAAC;CAEnF,MAAM,QAAQ,OAAO,WACnB,oCACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,MAAM,cAAc,OAAO,sBAAsB;EAC/C,cAAc,SAAS;EACvB,gBAAgB,MAAM;EACtB,WAAW,SAAS;EACpB,SAAS;EACT,QAAQ,EAAE,SAAS,EAAE;CACvB,CAAC;CAED,OAAO,OAAO,kBAAkB,WAAW;CAE3C,MAAM,qBAAqB,OAAO,sBAAsB;EACtD,cAAc,SAAS;EACvB,gBAAgB,MAAM;EACtB,WAAW,SAAS;EACpB,SAAS;EACT,QAAQ;GACN,UAAU;GACV,SAAS;EACX;CACF,CAAC;CAED,MAAM,kBAAkB,OAAO,cAC7B,yDACA,OAAO,kBAAkB,kBAAkB,CAC7C;CAEA,OAAO,OACL,qBAAqB,eAAe,KAAK,gBAAgB,oBAAoB,aAC7E,uFACF;CAEA,MAAM,qBAAqB,OAAO,sBAAsB;EACtD,cAAc,SAAS;EACvB,gBAAgB,MAAM;EACtB,WAAW,SAAS;EACpB,SAAS;EACT,QAAQ,EAAE,SAAS,EAAE;CACvB,CAAC;CAED,MAAM,kBAAkB,OAAO,cAC7B,+DACA,OAAO,kBAAkB,kBAAkB,CAC7C;CAEA,OAAO,OACL,qBAAqB,eAAe,KAAK,gBAAgB,oBAAoB,aAC7E,oFACF;CAEA,MAAM,oBAAoB,OAAO,cAC/B,iEACA,OAAO,mBACL,uBAAuB,KAAK;EAC1B,cAAc,SAAS;EACvB,cAAc,uBACZ,mBAAmB,GAAG,SAAS,aAAa,OAAO,CACrD;CACF,CAAC,CACH,CACF;CAEA,OAAO,OACL,qBAAqB,iBAAiB,KACpC,kBAAkB,oBAAoB,aACxC,qEACF;CASA,OAAO,QACL,OARwB,OAAO,mBAC/B,uBAAuB,KAAK;EAC1B,cAAc,SAAS;EACvB,cAAc,YAAY;CAC5B,CAAC,CACH,EAAA,CAGa,YAAY,aACvB,kEACF;AACF,CAAC,CACL;AAEA,MAAM,mBAAmB,gBACvB,wEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,0BAA0B;CAC1D,MAAM,SAAS,OAAO;CAEtB,MAAM,WAAW,OAAO,OAAO,MAC7B,OAAO,iBAAiB,UAAU,eAAe,EAAE,MAAM,QAAQ,CAAC,CACpE;CAEA,MAAM,cAAc,mBAAmB,KAAK,EAAE,cAAc,SAAS,aAAa,CAAC;CAEnF,OAAO,QACJ,OAAO,OAAO,gBAAgB,WAAW,OAAO,KAAA,GACjD,sEACF;CAEA,MAAM,SAAS,OAAO,OAAO,aAC3B,aAAa,KAAK;EAChB,cAAc,SAAS;EACvB,QAAQ;EACR,QAAQ;CACV,CAAC,CACH;CAEA,OAAO,UAAU,OAAO,UAAU;CAElC,MAAM,WAAW,OAAO,OAAO,aAC7B,aAAa,KAAK;EAChB,cAAc,SAAS;EACvB,QAAQ;EACR,QAAQ;CACV,CAAC,CACH;CAEA,OAAO,OACL,SAAS,WAAW,OAAO,UACzB,SAAS,WAAW,OAAO,UAC3B,YAAY,SAAS,aAAa,OAAO,WAAW,GACtD,sEACF;CACA,MAAM,WAAW,OAAO,iBAAiB,SAAS,YAAY;CAC9D,MAAM,SAAS,OAAO,OAAO,gBAAgB,WAAW;CAExD,OAAO,OACL,SAAS,gBAAgB,KAAA,KAAa,SAAS,YAAY,WAAW,OAAO,QAC7E,6DACF;CACA,OAAO,OACL,WAAW,KAAA,KACT,OAAO,iBAAiB,OAAO,gBAC/B,OAAO,WAAW,OAAO,UACzB,OAAO,WAAW,OAAO,UACzB,YAAY,OAAO,aAAa,OAAO,WAAW,KAClD,OAAO,sBAAsB,SAAS,aAAa,mBACrD,uEACF;CASA,OAAO,QAAO,OAPS,cACrB,gDACA,OAAO,gBACL,mBAAmB,KAAK,EAAE,cAAc,mBAAmB,sBAAsB,EAAE,CAAC,CACtF,CACF,EAAA,CAEsB,SAAS,eAAe,uCAAuC;CAErF,MAAM,cAAc,eAAe,kCAAkC;CACrE,MAAM,cAAc,OAAO,WAAW,aAAa,eAAe,EAAE,MAAM,UAAU,CAAC;CAErF,MAAM,QAAQ,OAAO,WACnB,iCACA,OAAO,UAAU,aAAa,UAAU,CAC1C;CAEA,OAAO,cAAc,aAAa,MAAM,cAAc;CAEtD,MAAM,gBAAgB,OAAO,cAC3B,iCACA,OAAO,aACL,aAAa,KAAK;EAChB,cAAc,YAAY;EAC1B,QAAQ;EACR,QAAQ;CACV,CAAC,CACH,CACF;CAEA,OAAO,OACL,qBAAqB,aAAa,KAAK,cAAc,oBAAoB,aACzE,6CACF;AACF,CAAC,CACL;AAEA,MAAM,0BAA0B,gBAC9B,mDACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;CACtB,MAAM,QAAQ,eAAe,2BAA2B;CACxD,MAAM,QAAQ,eAAe,2BAA2B;CACxD,MAAM,SAAS,OAAO;CAEtB,MAAM,QAAQ,OAAO,WAAW,OAAO,cAAc,EAAE,MAAM,EAAE,CAAC;CAChE,MAAM,SAAS,OAAO,WAAW,OAAO,cAAc,EAAE,MAAM,EAAE,CAAC;CACjE,MAAM,QAAQ,OAAO,WAAW,OAAO,cAAc,EAAE,MAAM,EAAE,CAAC;CAChE,MAAM,mBAAmB,OAAO,WAAW,OAAO,cAAc,EAAE,MAAM,EAAE,CAAC;CAE3E,MAAM,aAAa,OAAO,WACxB,+BACA,OAAO,UAAU,OAAO,UAAU,CACpC;CAEA,OAAO,cAAc,OAAO,WAAW,cAAc;CACrD,OAAO,WAAW,gCAAgC,OAAO,UAAU,OAAO,UAAU,CAAC;CAErF,MAAM,aAAa,OAAO,WACxB,+BACA,OAAO,UAAU,OAAO,UAAU,CACpC;CAEA,OAAO,cAAc,kBAAkB,WAAW,cAAc;CAEhE,MAAM,UAAU,OAAO,OAAO,gBAAgB,KAAK,OAAO,UAAU;CAEpE,OAAO,OACL,QAAQ,OAAO,aAAa,SAAS,UAAU,SAAS,GACxD,qDACF;CAEA,MAAM,OAAO,QAAQ,QAClB,aAAa,SAAS,aAAa,SAAS,SAAS,aAAa,KACrE;CAEA,OAAO,OACL,KAAK,WAAW,KACd,KAAK,GAAG,CAAC,CAAC,EAAE,iBAAiB,OAAO,gBACpC,KAAK,GAAG,CAAC,CAAC,EAAE,iBAAiB,MAAM,cACrC,qFACF;CACA,OAAO,OACL,KAAK,GAAG,CAAC,CAAC,EAAE,UAAU,aAAa,KAAK,GAAG,CAAC,CAAC,EAAE,UAAU,SACzD,kEACF;CACA,OAAO,OACL,KAAK,GAAG,CAAC,CAAC,EAAE,cAAc,OAAO,aAC/B,KAAK,GAAG,CAAC,CAAC,EAAE,cAAc,MAAM,aAChC,KAAK,OACF,UACC,MAAM,cAAc,yBACpB,EAAE,kBAAkB,UACpB,EAAE,qBAAqB,UACvB,EAAE,sBAAsB,MAC5B,GACF,gFACF;CACA,MAAM,QAAQ,QAAQ,WAAW,aAAa,SAAS,iBAAiB,OAAO,YAAY;CAE3F,OAAO,OACL,SAAS,KAAK,QAAQ,GAAG,QAAQ,CAAC,CAAC,EAAE,iBAAiB,MAAM,cAC5D,iFACF;AACF,CAAC,CACL;AAEA,MAAM,mBAAmB,gBACvB,kFACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,2BAA2B;CAC3D,MAAM,SAAS,OAAO;CACtB,MAAM,UAAU,OAAO,iBAAiB,UAAU,gBAAgB,EAAE,MAAM,QAAQ,CAAC;CACnF,MAAM,WAAW,OAAO,OAAO,MAAM,OAAO;CAE5C,MAAM,OAAO,OAAO,WAClB,iCACA,OAAO,WAAW,SAAS,YAAY,CACzC;CAEA,OAAO,OACL,KAAK,iBAAiB,SAAS,gBAC7B,KAAK,aAAa,YAClB,KAAK,kBAAkB,SAAS,iBAChC,KAAK,cAAc,QAAQ,aAC3B,KAAK,mBAAmB,QAAQ,kBAChC,KAAK,YAAY,QAAQ,WACzB,KAAK,iBAAiB,QAAQ,gBAC9B,KAAK,gBAAgB,QAAQ,eAC7B,KAAK,cAAc,SAAS,aAC5B,KAAK,UAAU,cACf,KAAK,mBAAmB,KAAA,KACxB,KAAK,YAAY,KAAA,GACnB,4DACF;CAaA,OAAO,QACL,OAZmB,WACnB,oCACA,OAAO,OAAO,OACZ,sBAAsB,KAAK;EACzB;EACA,WAAW,QAAQ;EACnB,gBAAgB,QAAQ;CAC1B,CAAC,CACH,CACF,EAAA,CAGQ,iBAAiB,SAAS,cAChC,yEACF;CAEA,OAAO,OACL,OAAO,OACL,OAAO,WAAW,mBAAmB,uCAAuC,CAAC,CAC/E,GACA,2DACF;CACA,OAAO,OACL,OAAO,OACL,OAAO,OAAO,OACZ,sBAAsB,KAAK;EACzB;EACA,WAAW,QAAQ;EACnB,gBAAgB,qBAAqB,oBAAoB;CAC3D,CAAC,CACH,CACF,GACA,uDACF;CACA,OAAO,OACL,OAAO,OACL,OAAO,OAAO,OACZ,sBAAsB,KAAK;EACzB;EACA,WAAW;EACX,gBAAgB,QAAQ;CAC1B,CAAC,CACH,CACF,GACA,oDACF;CAEA,OAAO,OAAO,UAAU,iBAAiB,KAAK,EAAE,cAAc,SAAS,aAAa,CAAC,CAAC;CAEtF,MAAM,aAAa,OAAO,WACxB,iCACA,OAAO,OAAO,OACZ,sBAAsB,KAAK;EACzB;EACA,WAAW,QAAQ;EACnB,gBAAgB,QAAQ;CAC1B,CAAC,CACH,CACF;CAEA,OAAO,OACL,WAAW,UAAU,WAAW,WAAW,YAAY,KAAA,GACvD,2DACF;AACF,CAAC,CACL;AAEA,MAAM,8BAA8B,gBAClC,kFACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,6BAA6B;CAC7D,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,OAAO,WAAW,UAAU,kBAAkB,EAAE,MAAM,WAAW,CAAC;CAEnF,MAAM,UAAU,OAAO,iBAAiB,SAAS,YAAY;CAE7D,OAAO,OACL,QAAQ,WAAW,UAAU,WAC3B,QAAQ,cAAc,KAAA,KACtB,QAAQ,iBAAiB,KAAA,KACzB,QAAQ,gBAAgB,KAAA,KACxB,QAAQ,gBAAgB,KAAA,GAC1B,sFACF;CAEA,MAAM,QAAQ,OAAO,WACnB,iCACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,MAAM,QAAQ,OAAO,iBAAiB,SAAS,YAAY;CAE3D,OAAO,OACL,MAAM,cAAc,KAAA,KAClB,MAAM,UAAU,cAAc,MAAM,aACpC,MAAM,UAAU,kBAAkB,MAAM,iBACxC,MAAM,UAAU,oBAAoB,cACpC,YAAY,MAAM,UAAU,gBAAgB,MAAM,cAAc,GAClE,wFACF;CAEA,MAAM,SAAS,wBAAwB,KAAK;EAC1C,cAAc,SAAS;EACvB,gBAAgB,MAAM;EACtB,UAAU,wBAAwB,SAAS,YAAY;EACvD,UAAU,eAAe,CAAC;CAC5B,CAAC;CAED,OAAO,OAAO,iBAAiB,MAAM;CACrC,OAAO,OAAO,aACZ,aAAa,KAAK;EAChB,cAAc,SAAS;EACvB,QAAQ;EACR,QAAQ;CACV,CAAC,CACH;CAEA,MAAM,cAAc,OAAO,sBAAsB;EAC/C,cAAc,SAAS;EACvB,gBAAgB,MAAM;EACtB,WAAW,SAAS;EACpB,SAAS;CACX,CAAC;CAED,OAAO,OAAO,kBAAkB,WAAW;CAE3C,MAAM,WAAW,OAAO,iBAAiB,SAAS,YAAY;CAE9D,OAAO,OACL,SAAS,iBAAiB,KAAA,KACxB,SAAS,aAAa,aAAa,OAAO,YAC1C,SAAS,aAAa,aAAa,OAAO,UAC5C,4DACF;CACA,OAAO,OACL,SAAS,gBAAgB,KAAA,KACvB,SAAS,YAAY,WAAW,8BAClC,oDACF;CACA,OAAO,OACL,SAAS,gBAAgB,KAAA,KACvB,CAAC,SAAS,YAAY,aACtB,SAAS,YAAY,iBAAiB,YAAY,gBAClD,SAAS,YAAY,YAAY,aACjC,SAAS,YAAY,iBAAiB,YAAY,cACpD,qFACF;CAEA,OAAO,OAAO,mBACZ,uBAAuB,KAAK;EAC1B,cAAc,SAAS;EACvB,cAAc,YAAY;CAC5B,CAAC,CACH;CACA,MAAM,UAAU,OAAO,iBAAiB,SAAS,YAAY;CAE7D,OAAO,OACL,QAAQ,WAAW,UAAU,aAC3B,QAAQ,WAAW,mBAAmB,aACtC,QAAQ,gBAAgB,KAAA,KACxB,QAAQ,YAAY,WACtB,uFACF;AACF,CAAC,CACL;AAEA,MAAM,qBAAqB,gBACzB,0DACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,mCAAmC;CACnE,MAAM,SAAS,OAAO;CAEtB,MAAM,OAAO,OAAO,WAAW,UAAU,oBAAoB,EAAE,MAAM,OAAO,CAAC;CAC7E,MAAM,SAAS,OAAO,WAAW,UAAU,iBAAiB,EAAE,QAAQ,EAAE,CAAC;CACzE,MAAM,QAAQ,OAAO,WAAW,UAAU,iBAAiB,EAAE,QAAQ,EAAE,CAAC;CAGxE,MAAM,SAAS,OAAO,OAAO,MAC3B,OAAO,iBAAiB,UAAU,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAClE;CAEA,MAAM,QAAQ,OAAO,WAAW,UAAU,iBAAiB,EAAE,QAAQ,EAAE,CAAC;CAExE,MAAM,YAAY,OAAO,WAAW,kBAAkB,OAAO,UAAU,UAAU,UAAU,CAAC;CAE5F,OAAO,OACL,UAAU,iBAAiB,KAAK,cAChC,uDACF;CAEA,MAAM,UAAU,OAAO,cACrB,sDACA,OAAO,aACL,oBAAoB,KAAK;EACvB;EACA,kBAAkB,KAAK;EACvB,gBAAgB;EAChB,UAAU;CACZ,CAAC,CACH,CACF;CAEA,OAAO,OACL,gBAAgB,OAAO,GACvB,2DACF;CAEA,MAAM,QAAQ,OAAO,OAAO,aAC1B,oBAAoB,KAAK;EACvB;EACA,kBAAkB,KAAK;EACvB,gBAAgB,UAAU;EAC1B,UAAU;CACZ,CAAC,CACH;CAEA,OAAO,OACL,MAAM,WAAW,KACf,MAAM,EAAE,CAAC,iBAAiB,OAAO,gBACjC,MAAM,EAAE,CAAC,kBAAkB,OAAO,iBAClC,wBAAwB,MAAM,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,GAC9D,oFACF;CAEA,MAAM,OAAO,OAAO,OAAO,aACzB,oBAAoB,KAAK;EACvB;EACA,kBAAkB,KAAK;EACvB,gBAAgB,UAAU;EAC1B,UAAU;CACZ,CAAC,CACH;CAEA,OAAO,OACL,KAAK,WAAW,KAAK,KAAK,EAAE,CAAC,iBAAiB,MAAM,cACpD,8EACF;CAWA,OAAO,QACL,OAVqB,OAAO,aAC5B,oBAAoB,KAAK;EACvB;EACA,kBAAkB,KAAK;EACvB,gBAAgB,UAAU;EAC1B,UAAU;CACZ,CAAC,CACH,EAAA,CAGU,WAAW,GACnB,sFACF;CAEA,MAAM,cAAc,OAAO,WACzB,0CACA,OAAO,WAAW,OAAO,YAAY,CACvC;CAEA,MAAM,cAAc,OAAO,WACzB,gCACA,OAAO,WAAW,OAAO,YAAY,CACvC;CAEA,MAAM,aAAa,OAAO,WACxB,gDACA,OAAO,WAAW,MAAM,YAAY,CACtC;CAEA,OAAO,OACL,YAAY,UAAU,aACpB,YAAY,UAAU,cACtB,WAAW,UAAU,SACvB,gEACF;CAEA,MAAM,eAAe,OAAO,iBAAiB,KAAK,YAAY;CAE9D,OAAO,OACL,aAAa,MAAM,WAAW,KAC5B,aAAa,MAAM,EAAE,CAAC,iBAAiB,OAAO,gBAC9C,aAAa,MAAM,EAAE,CAAC,UAAU,aAChC,aAAa,MAAM,EAAE,CAAC,qBAAqB,KAAK,gBAChD,aAAa,MAAM,EAAE,CAAC,iBAAiB,MAAM,cAC/C,0EACF;CAGA,OAAO,QACL,OAHwB,iBAAiB,OAAO,YAAY,EAAA,CAGjD,qBAAqB,KAAK,cACrC,uEACF;CAEA,OAAO,OAAO,UAAU,iBAAiB,KAAK,EAAE,cAAc,OAAO,aAAa,CAAC,CAAC;CAEpF,MAAM,WAAW,OAAO,OAAO,aAC7B,oBAAoB,KAAK;EACvB;EACA,kBAAkB,KAAK;EACvB,gBAAgB,UAAU;EAC1B,UAAU;CACZ,CAAC,CACH;CAEA,OAAO,OACL,SAAS,WAAW,KAClB,SAAS,EAAE,CAAC,iBAAiB,OAAO,gBACpC,SAAS,EAAE,CAAC,iBAAiB,MAAM,cACrC,qFACF;AACF,CAAC,CACL;AAEA,MAAM,8BAA8B,gBAClC,iEACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,mCAAmC;CACnE,MAAM,SAAS,OAAO;CAEtB,MAAM,OAAO,OAAO,WAAW,UAAU,eAAe,EAAE,MAAM,OAAO,CAAC;CACxE,MAAM,SAAS,OAAO,WAAW,UAAU,YAAY,EAAE,QAAQ,EAAE,CAAC;CACpE,MAAM,QAAQ,OAAO,WAAW,UAAU,YAAY,EAAE,QAAQ,EAAE,CAAC;CACnE,MAAM,YAAY,OAAO,WAAW,kBAAkB,OAAO,UAAU,UAAU,UAAU,CAAC;CAW5F,OAAO,QAAO,OATQ,OAAO,aAC3B,oBAAoB,KAAK;EACvB;EACA,kBAAkB,KAAK;EACvB,gBAAgB,UAAU;EAC1B,UAAU;CACZ,CAAC,CACH,EAAA,CAEqB,WAAW,GAAG,qDAAqD;CAGxF,OAAO,OAAO,WACZ,kBAAkB,KAAK;EACrB,cAAc,MAAM;EACpB,gBAAgB,UAAU;EAC1B,UAAU,wBAAwB,MAAM,YAAY;EACpD,UAAU,eAAe,CAAC;CAC5B,CAAC,CACH;CAEA,OAAO,OAAO,cAAc,qBAAqB,KAAK,EAAE,cAAc,OAAO,aAAa,CAAC,CAAC;CAO5F,OAAO,QACL,OANsB,WACtB,uBACA,OAAO,WAAW,OAAO,YAAY,CACvC,EAAA,CAGW,UAAU,SACnB,mEACF;CAGA,OAAO,QACL,OAH8B,iBAAiB,OAAO,YAAY,EAAA,CAGjD,qBAAqB,KAAA,GACtC,uCACF;CACA,MAAM,eAAe,OAAO,iBAAiB,KAAK,YAAY;CAE9D,OAAO,OACL,aAAa,MAAM,WAAW,KAC5B,aAAa,MAAM,EAAE,CAAC,iBAAiB,MAAM,gBAC7C,aAAa,MAAM,EAAE,CAAC,UAAU,UAClC,yDACF;CAEA,OAAO,OAAO,cAAc,qBAAqB,KAAK,EAAE,cAAc,OAAO,aAAa,CAAC,CAAC;CAO5F,OAAO,QAAO,OALY,WACxB,qCACA,OAAO,WAAW,OAAO,YAAY,CACvC,EAAA,CAEyB,UAAU,SAAS,yCAAyC;CAGrF,OAAO,OAAO,cAAc,qBAAqB,KAAK,EAAE,cAAc,MAAM,aAAa,CAAC,CAAC;CAO3F,OAAO,QACL,OANoB,WACpB,6DACA,OAAO,WAAW,MAAM,YAAY,CACtC,EAAA,CAGS,UAAU,UACjB,gEACF;CAEA,MAAM,YAAY,OAAO,OAAO,aAC9B,oBAAoB,KAAK;EACvB;EACA,kBAAkB,KAAK;EACvB,gBAAgB,UAAU;EAC1B,UAAU;CACZ,CAAC,CACH;CAEA,OAAO,OACL,UAAU,WAAW,KAAK,UAAU,EAAE,CAAC,iBAAiB,OAAO,cAC/D,4DACF;AACF,CAAC,CACL;AAEA,MAAM,wBAAwB,gBAC5B,yDACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,gCAAgC;CAChE,MAAM,SAAS,OAAO;CAEtB,MAAM,OAAO,OAAO,WAAW,UAAU,oBAAoB,EAAE,MAAM,OAAO,CAAC;CAC7E,MAAM,SAAS,OAAO,WAAW,UAAU,iBAAiB,EAAE,QAAQ,EAAE,CAAC;CACzE,MAAM,QAAQ,OAAO,WAAW,UAAU,iBAAiB,EAAE,QAAQ,EAAE,CAAC;CACxE,MAAM,YAAY,OAAO,WAAW,kBAAkB,OAAO,UAAU,UAAU,UAAU,CAAC;CAE5F,OAAO,OAAO,aACZ,oBAAoB,KAAK;EACvB;EACA,kBAAkB,KAAK;EACvB,gBAAgB,UAAU;EAC1B,UAAU;CACZ,CAAC,CACH;CAEA,MAAM,SAAS,kBAAkB,KAAK;EACpC,cAAc,OAAO;EACrB,gBAAgB,UAAU;EAC1B,UAAU,wBAAwB,OAAO,YAAY;EACrD,UAAU,eAAe,CAAC;CAC5B,CAAC;CAED,OAAO,OAAO,WAAW,MAAM;CAO/B,OAAO,QACL,OANoB,WACpB,+BACA,OAAO,WAAW,OAAO,YAAY,CACvC,EAAA,CAGS,UAAU,UACjB,wEACF;CAEA,OAAO,OAAO,WAAW,MAAM;CAC/B,MAAM,WAAW,OAAO,iBAAiB,OAAO,YAAY;CAE5D,OAAO,OACL,SAAS,WAAW,UAAU,YAC5B,SAAS,qBAAqB,KAAK,gBACnC,SAAS,iBAAiB,KAAA,KAC1B,SAAS,aAAa,aAAa,OAAO,YAC1C,SAAS,aAAa,aAAa,OAAO,UAC5C,8EACF;CAEA,MAAM,YAAY,OAAO,cACvB,kDACA,OAAO,WACL,kBAAkB,KAAK;EACrB,cAAc,OAAO;EACrB,gBAAgB,UAAU;EAC1B,UAAU,OAAO;EACjB,UAAU,eAAe,CAAC;CAC5B,CAAC,CACH,CACF;CAEA,OAAO,OACL,CAAC,gBAAgB,SAAS,GAC1B,mFACF;CAEA,MAAM,QAAQ,OAAO,cACnB,+CACA,OAAO,WACL,kBAAkB,KAAK;EACrB,cAAc,MAAM;EACpB,gBAAgB;EAChB,UAAU,wBAAwB,MAAM,YAAY;EACpD,UAAU,eAAe,CAAC;CAC5B,CAAC,CACH,CACF;CAEA,OAAO,OAAO,gBAAgB,KAAK,GAAG,mDAAmD;CAIzF,OAAO,OAAO,iBACZ,wBAAwB,KAAK;EAC3B,cAAc,KAAK;EACnB,gBAAgB,UAAU;CAC5B,CAAC,CACH;CAEA,MAAM,UAAU,OAAO,WACrB,kCACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,OAAO,OACL,QAAQ,iBAAiB,KAAK,gBAC5B,QAAQ,gBAAgB,UAAU,eACpC,+DACF;CAEA,MAAM,aAAa,OAAO,cACxB,uDACA,OAAO,WACL,kBAAkB,KAAK;EACrB,cAAc,MAAM;EACpB,gBAAgB,UAAU;EAC1B,UAAU,wBAAwB,MAAM,YAAY;EACpD,UAAU,eAAe,CAAC;CAC5B,CAAC,CACH,CACF;CAEA,OAAO,OACL,gBAAgB,UAAU,GAC1B,uDACF;CACA,OAAO,OAAO,WACZ,kBAAkB,KAAK;EACrB,cAAc,MAAM;EACpB,gBAAgB,QAAQ;EACxB,UAAU,wBAAwB,MAAM,YAAY;EACpD,UAAU,eAAe,CAAC;CAC5B,CAAC,CACH;CAOA,OAAO,QACL,OANsB,WACtB,2BACA,OAAO,WAAW,MAAM,YAAY,CACtC,EAAA,CAGW,UAAU,UACnB,oEACF;AACF,CAAC,CACL;AAEA,MAAM,8BAA8B,gBAClC,qEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CAGtB,MAAM,cAAc,eAAe,iCAAiC;CACpE,MAAM,cAAc,OAAO,WAAW,aAAa,qBAAqB,EAAE,MAAM,OAAO,CAAC;CACxF,MAAM,aAAa,OAAO,WAAW,aAAa,kBAAkB,EAAE,QAAQ,EAAE,CAAC;CAEjF,OAAO,WAAW,aAAa,kBAAkB,EAAE,QAAQ,EAAE,CAAC;CAE9D,MAAM,mBAAmB,OAAO,WAC9B,iCACA,OAAO,UAAU,aAAa,UAAU,CAC1C;CAEA,OAAO,OAAO,aACZ,oBAAoB,KAAK;EACvB,UAAU;EACV,kBAAkB,YAAY;EAC9B,gBAAgB,iBAAiB;EACjC,UAAU;CACZ,CAAC,CACH;CACA,OAAO,cAAc,aAAa,iBAAiB,cAAc;CACjE,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,aAAa,UAAU,CAAC,GACvD,+EACF;CACA,OAAO,OAAO,cACZ,qBAAqB,KAAK,EAAE,cAAc,WAAW,aAAa,CAAC,CACrE;CAOA,OAAO,QACL,OANyB,WACzB,8CACA,OAAO,UAAU,aAAa,UAAU,CAC1C,EAAA,CAGc,iBAAiB,WAAW,cACxC,iEACF;CAGA,MAAM,aAAa,eAAe,gCAAgC;CAClE,MAAM,aAAa,OAAO,WAAW,YAAY,oBAAoB,EAAE,MAAM,OAAO,CAAC;CACrF,MAAM,YAAY,OAAO,WAAW,YAAY,iBAAiB,EAAE,QAAQ,EAAE,CAAC;CAE9E,MAAM,kBAAkB,OAAO,WAC7B,gCACA,OAAO,UAAU,YAAY,UAAU,CACzC;CAEA,OAAO,OAAO,aACZ,oBAAoB,KAAK;EACvB,UAAU;EACV,kBAAkB,WAAW;EAC7B,gBAAgB,gBAAgB;EAChC,UAAU;CACZ,CAAC,CACH;CACA,OAAO,OAAO,WACZ,kBAAkB,KAAK;EACrB,cAAc,UAAU;EACxB,gBAAgB,gBAAgB;EAChC,UAAU,wBAAwB,UAAU,YAAY;EACxD,UAAU,eAAe,CAAC;CAC5B,CAAC,CACH;CAEA,MAAM,cAAc,OAAO,cACzB,gCACA,OAAO,aACL,aAAa,KAAK;EAChB,cAAc,UAAU;EACxB,QAAQ;EACR,QAAQ;CACV,CAAC,CACH,CACF;CAEA,OAAO,OACL,eAAe,WAAW,KAAK,YAAY,qBAAqB,WAAW,cAC3E,6FACF;CACA,OAAO,cAAc,YAAY,gBAAgB,cAAc;CAC/D,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,YAAY,UAAU,CAAC,GACtD,wFACF;CAGA,MAAM,gBAAgB,eAAe,mCAAmC;CAExE,MAAM,gBAAgB,OAAO,WAAW,eAAe,uBAAuB,EAC5E,MAAM,OACR,CAAC;CAED,MAAM,iBAAiB,OAAO,WAC5B,8BACA,OAAO,UAAU,eAAe,UAAU,CAC5C;CAEA,MAAM,YAAY,iBAAiB,qBAAqB;CAUxD,OAAO,QAAO,OARgB,OAAO,QACnC,eAAe,KAAK;EAClB,cAAc,cAAc;EAC5B,gBAAgB,eAAe;EAC/B,QAAQ,0BAA0B,KAAK,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC;CACrE,CAAC,CACH,OAEiC,aAAa,4CAA4C;CAC1F,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,eAAe,UAAU,CAAC,GACzD,wCACF;CACA,OAAO,OAAO,uBACZ,wBAAwB,KAAK;EAC3B,cAAc,cAAc;EAC5B,YAAY;EACZ,UAAU;EACV,UAAU;EACV,QAAQ;CACV,CAAC,CACH;CAEA,MAAM,aAAa,OAAO,WACxB,yCACA,OAAO,UAAU,eAAe,UAAU,CAC5C;CAEA,OAAO,OACL,WAAW,iBAAiB,cAAc,gBACxC,WAAW,gBAAgB,eAAe,eAC5C,mEACF;CAGA,MAAM,cAAc,eAAe,iCAAiC;CACpE,MAAM,cAAc,OAAO,WAAW,aAAa,qBAAqB,EAAE,MAAM,OAAO,CAAC;CAExF,MAAM,eAAe,OAAO,WAC1B,4BACA,OAAO,UAAU,aAAa,UAAU,CAC1C;CAEA,MAAM,cAAc,iBAAiB,mBAAmB;CAExD,OAAO,OAAO,YACZ,mBAAmB,KAAK;EACtB,cAAc,YAAY;EAC1B,aAAa,CAAC,WAAW;EACzB,QAAQ;CACV,CAAC,CACH;CACA,OAAO,iBAAiB,aAAa,cAAc;CACnD,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,aAAa,UAAU,CAAC,GACvD,sEACF;CACA,OAAO,OAAO,wBACZ,yBAAyB,KAAK;EAC5B,cAAc,YAAY;EAC1B,YAAY;EACZ,QAAQ;EACR,QAAQ;EACR,YAAY,wBAAwB,KAAK;CAC3C,CAAC,CACH;CAOA,OAAO,QACL,OANsB,WACtB,2CACA,OAAO,UAAU,aAAa,UAAU,CAC1C,EAAA,CAGW,iBAAiB,YAAY,cACtC,oDACF;AACF,CAAC,CACL;AAEA,MAAM,8BAA8B,gBAClC,iEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,WAAW,eAAe,6BAA6B;CAC7D,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,OAAO,WAAW,UAAU,kBAAkB,EAAE,MAAM,UAAU,CAAC;CAElF,MAAM,QAAQ,OAAO,WACnB,8BACA,OAAO,UAAU,UAAU,UAAU,CACvC;CAEA,MAAM,QAAQ,iBAAiB,iBAAiB;CAChD,MAAM,QAAQ,iBAAiB,iBAAiB;CAEhD,MAAM,QAAQ,OAAO,OAAO,uBAC1B,wBAAwB,KAAK;EAC3B,cAAc,SAAS;EACvB,YAAY;EACZ,UAAU;EACV,UAAU;EACV,QAAQ;CACV,CAAC,CACH;CAEA,OAAO,OACL,MAAM,aAAa,cAAc,MAAM,eAAe,OACtD,2CACF;CAEA,OAAO,UAAU,OAAO,UAAU;CAElC,MAAM,WAAW,OAAO,OAAO,uBAC7B,wBAAwB,KAAK;EAC3B,cAAc,SAAS;EACvB,YAAY;EACZ,UAAU;EACV,UAAU;EACV,QAAQ;CACV,CAAC,CACH;CAEA,OAAO,OACL,SAAS,WAAW,MAAM,UACxB,SAAS,aAAa,MAAM,YAC5B,YAAY,SAAS,WAAW,MAAM,SAAS,GACjD,uEACF;CAEA,MAAM,WAAW,OAAO,cACtB,yCACA,OAAO,uBACL,wBAAwB,KAAK;EAC3B,cAAc,SAAS;EACvB,YAAY;EACZ,UAAU;EACV,UAAU;EACV,QAAQ;CACV,CAAC,CACH,CACF;CAEA,OAAO,OACL,mBAAmB,QAAQ,KACzB,SAAS,eAAe,SACxB,SAAS,qBAAqB,YAChC,kEACF;CAEA,OAAO,OAAO,uBACZ,wBAAwB,KAAK;EAC3B,cAAc,SAAS;EACvB,YAAY;EACZ,UAAU;EACV,UAAU;EACV,QAAQ;CACV,CAAC,CACH;CACA,MAAM,WAAW,OAAO,iBAAiB,SAAS,YAAY;CAE9D,OAAO,OACL,SAAS,kBAAkB,WAAW,KACpC,SAAS,kBAAkB,MACxB,WAAW,OAAO,eAAe,SAAS,OAAO,aAAa,UACjE,KACA,SAAS,kBAAkB,MACxB,WAAW,OAAO,eAAe,SAAS,OAAO,aAAa,QACjE,GACF,kEACF;CAEA,OAAO,cAAc,UAAU,MAAM,cAAc;CAEnD,MAAM,OAAO,OAAO,cAClB,iDACA,OAAO,uBACL,wBAAwB,KAAK;EAC3B,cAAc,SAAS;EACvB,YAAY,iBAAiB,oBAAoB;EACjD,UAAU;EACV,UAAU;EACV,QAAQ;CACV,CAAC,CACH,CACF;CAEA,OAAO,OACL,qBAAqB,IAAI,KAAK,KAAK,oBAAoB,aACvD,oDACF;AACF,CAAC,CACL;AAEA,MAAM,oBAAoB,gBACxB,6FACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CAEtB,KAAK,MAAM,cAAc,CAAC,OAAO,IAAI,GAAG;EACtC,MAAM,WAAW,eAAe,oCAAoC,YAAY;EAChF,MAAM,OAAO,OAAO,WAAW,UAAU,QAAQ,EAAE,MAAM,YAAY,CAAC;EAEtE,MAAM,WAAW,OAAO,WACtB,kBACA,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,MAAM,WAAW,OAAO,WAAW,UAAU,YAAY,EAAE,MAAM,QAAQ,CAAC;EAE1E,MAAM,UAAU,aAAa,KAAK;GAChC,cAAc,KAAK;GACnB,QAAQ;GACR,QAAQ;EACV,CAAC;EAED,IAAI,YAAY,OAAO,OAAO,aAAa,OAAO;EAClD,OAAO,OAAO,YACZ,mBAAmB,KAAK;GACtB,cAAc,KAAK;GACnB,aAAa,CAAC,iBAAiB,eAAe,GAAG,iBAAiB,eAAe,CAAC;GAClF,QAAQ;EACV,CAAC,CACH;EACA,IAAI,YACF,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,UAAU,UAAU,CAAC,GACpD,oDACF;EAEF,OAAO,iBAAiB,SAAS,cAAc;EAC/C,IAAI,CAAC,YAAY;GACf,MAAM,QAAQ,OAAO,WACnB,yCACA,OAAO,UAAU,UAAU,UAAU,CACvC;GAEA,OAAO,OACL,MAAM,iBAAiB,SAAS,cAChC,kEACF;GACA,OAAO,OAAO,iBACZ,wBAAwB,KAAK;IAC3B,cAAc,MAAM;IACpB,gBAAgB,MAAM;GACxB,CAAC,CACH;EACF;EACA,MAAM,SAAS,OAAO,OAAO,aAAa,OAAO;EAEjD,MAAM,YAAY,OAAO,OAAO,aAC9B,aAAa,KAAK;GAChB,GAAG;GACH,QAAQ;GACR,QAAQ;EACV,CAAC,CACH;EAEA,OAAO,OACL,UAAU,WAAW,OAAO,UAC1B,UAAU,WAAW,OAAO,UAC5B,YAAY,UAAU,aAAa,OAAO,WAAW,GACvD,gCACF;EAEA,MAAM,YAAY,OAAO,WACvB,mCACA,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,OAAO,OACL,UAAU,iBAAiB,KAAK,gBAC9B,UAAU,gBAAgB,SAAS,eACrC,0EACF;EACA,MAAM,WAAW,OAAO,iBAAiB,KAAK,YAAY;EAE1D,OAAO,OACL,SAAS,WAAW,UAAU,aAAa,SAAS,mBAAmB,WAAW,GAClF,+EACF;EAEA,MAAM,QAAQ,OAAO,cACnB,eACA,OAAO,kBACL,OAAO,sBAAsB;GAC3B,GAAG;GACH,gBAAgB,SAAS;GACzB,SAAS;EACX,CAAC,CACH,CACF;EAEA,OAAO,OAAO,gBAAgB,KAAK,GAAG,uCAAuC;EAE7E,MAAM,cAAc,OAAO,sBAAsB;GAC/C,GAAG;GACH,gBAAgB,UAAU;GAC1B,SAAS;EACX,CAAC;EAED,OAAO,OAAO,kBAAkB,WAAW;EAC3C,OAAO,OAAO,aAAa,OAAO;EAGlC,OAAO,QACL,OAHqB,OAAO,mBAAmB,uBAAuB,KAAK,WAAW,CAAC,EAAA,CAG/E,YAAY,WACpB,wDACF;EACA,MAAM,OAAO,OAAO,cAAc,0BAA0B,OAAO,aAAa,OAAO,CAAC;EAExF,OAAO,OACL,qBAAqB,IAAI,KAAK,KAAK,oBAAoB,WACvD,oCACF;EAGA,OAAO,QACL,OAHkB,WAAW,kBAAkB,OAAO,UAAU,UAAU,UAAU,CAAC,EAAA,CAGhF,iBAAiB,SAAS,cAC/B,sCACF;CACF;AACF,CAAC,CACL;;;;;;AA0iDA,MAAa,mCAAmF;CAC9F;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAjkDiC,gBACjC,uEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,eAAe,4BAA4B;EAC5D,MAAM,SAAS,OAAO;EACtB,MAAM,WAAW,OAAO,WAAW,UAAU,iBAAiB,EAAE,MAAM,UAAU,CAAC;EAEjF,MAAM,QAAQ,OAAO,WACnB,wCACA,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,MAAM,QAAQ,iBAAiB,gBAAgB;EAC/C,MAAM,QAAQ,iBAAiB,gBAAgB;EAC/C,MAAM,QAAQ,iBAAiB,gBAAgB;EAE/C,MAAM,UAAU,mBAAmB,KAAK;GACtC,cAAc,SAAS;GACvB,aAAa,CAAC,OAAO,KAAK;GAC1B,QAAQ;EACV,CAAC;EAED,OAAO,OAAO,YAAY,OAAO;EACjC,OAAO,OAAO,YAAY,OAAO;EAOjC,OAAO,QACL,OANoB,WACpB,gCACA,OAAO,WAAW,SAAS,YAAY,CACzC,EAAA,CAGS,UAAU,WACjB,uDACF;EAEA,OAAO,iBAAiB,MAAM,cAAc;EAC5C,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,UAAU,UAAU,CAAC,GACpD,+CACF;EAEA,MAAM,QAAQ,OAAO,OAAO,wBAC1B,yBAAyB,KAAK;GAC5B,cAAc,SAAS;GACvB,YAAY;GACZ,QAAQ;GACR,QAAQ;GACR,YAAY,wBAAwB,KAAK;EAC3C,CAAC,CACH;EAOA,OAAO,QACL,OAN+B,WAC/B,qCACA,OAAO,WAAW,SAAS,YAAY,CACzC,EAAA,CAGoB,UAAU,aAC1B,OAAO,OAAO,OAAO,UAAU,UAAU,UAAU,CAAC,GACtD,yEACF;EAEA,OAAO,UAAU,OAAO,UAAU;EAElC,MAAM,YAAY,OAAO,cACvB,0CACA,OAAO,wBACL,yBAAyB,KAAK;GAC5B,cAAc,SAAS;GACvB,YAAY;GACZ,QAAQ;GACR,QAAQ;GACR,YAAY,sBAAsB,KAAK;EACzC,CAAC,CACH,CACF;EAEA,OAAO,OACL,4BAA4B,SAAS,KAAK,UAAU,eAAe,OACnE,yCACF;EAEA,MAAM,WAAW,OAAO,OAAO,wBAC7B,yBAAyB,KAAK;GAC5B,cAAc,SAAS;GACvB,YAAY;GACZ,QAAQ;GACR,QAAQ;GACR,YAAY,wBAAwB,KAAK;EAC3C,CAAC,CACH;EAEA,OAAO,OACL,YAAY,SAAS,YAAY,MAAM,UAAU,KAAK,SAAS,WAAW,MAAM,QAChF,yEACF;EAGA,OAAO,OAAO,YACZ,mBAAmB,KAAK;GACtB,cAAc,SAAS;GACvB,aAAa,CAAC,KAAK;GACnB,QAAQ;EACV,CAAC,CACH;EACA,OAAO,OAAO,wBACZ,yBAAyB,KAAK;GAC5B,cAAc,SAAS;GACvB,YAAY;GACZ,QAAQ;GACR,QAAQ;GACR,YAAY,8BAA8B,KAAK;IAC7C,QAAQ,EAAE,YAAY,YAAY;IAClC,WAAW;GACb,CAAC;EACH,CAAC,CACH;EAOA,OAAO,QACL,OAN0B,WAC1B,4CACA,OAAO,WAAW,SAAS,YAAY,CACzC,EAAA,CAGe,UAAU,aAAa,OAAO,OAAO,OAAO,UAAU,UAAU,UAAU,CAAC,GACxF,qEACF;EAEA,OAAO,OAAO,wBACZ,yBAAyB,KAAK;GAC5B,cAAc,SAAS;GACvB,YAAY;GACZ,QAAQ;GACR,QAAQ;GACR,YAAY,sBAAsB,KAAK;EACzC,CAAC,CACH;EAOA,OAAO,QACL,OAN2B,WAC3B,wCACA,OAAO,WAAW,SAAS,YAAY,CACzC,EAAA,CAGgB,UAAU,iBACxB,kEACF;EAGA,OAAO,QACL,OAHsB,iBAAiB,SAAS,YAAY,EAAA,CAGnD,mBAAmB,WAAW,GACvC,oEACF;EAEA,MAAM,UAAU,OAAO,WACrB,qCACA,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,OAAO,OACL,QAAQ,iBAAiB,SAAS,gBAChC,QAAQ,gBAAgB,MAAM,eAChC,qDACF;EAEA,OAAO,cAAc,UAAU,QAAQ,cAAc;EAErD,MAAM,OAAO,OAAO,cAClB,sDACA,OAAO,wBACL,yBAAyB,KAAK;GAC5B,cAAc,SAAS;GACvB,YAAY,iBAAiB,mBAAmB;GAChD,QAAQ;GACR,QAAQ;GACR,YAAY,wBAAwB,KAAK;EAC3C,CAAC,CACH,CACF;EAEA,OAAO,OACL,qBAAqB,IAAI,GACzB,sDACF;CACF,CAAC,CAy4CH;CACA;CAv4C2C,gBAC3C,iEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,eAAe,4BAA4B;EAC5D,MAAM,SAAS,OAAO;EACtB,MAAM,WAAW,OAAO,WAAW,UAAU,iBAAiB,EAAE,MAAM,UAAU,CAAC;EAEjF,MAAM,QAAQ,OAAO,WACnB,+BACA,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,MAAM,QAAQ,iBAAiB,gBAAgB;EAC/C,MAAM,QAAQ,iBAAiB,gBAAgB;EAE/C,MAAM,UAAU,OAAO,cACrB,sCACA,OAAO,QACL,eAAe,KAAK;GAClB,cAAc,SAAS;GACvB,gBAAgB;GAChB,QAAQ,0BAA0B,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;EACjE,CAAC,CACH,CACF;EAEA,OAAO,OAAO,gBAAgB,OAAO,GAAG,4CAA4C;EAGpF,OAAO,OAAO,uBACZ,wBAAwB,KAAK;GAC3B,cAAc,SAAS;GACvB,YAAY;GACZ,UAAU;GACV,UAAU;GACV,QAAQ;EACV,CAAC,CACH;EAUA,OAAO,QACL,OATuB,OAAO,QAC9B,eAAe,KAAK;GAClB,cAAc,SAAS;GACvB,gBAAgB,MAAM;GACtB,QAAQ,0BAA0B,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;EACjE,CAAC,CACH,OAGgB,sBACd,2DACF;EAOA,OAAO,QACL,OAN0B,WAC1B,qCACA,OAAO,WAAW,SAAS,YAAY,CACzC,EAAA,CAGe,UAAU,WACvB,qEACF;EAEA,OAAO,OAAO,eACZ,sBAAsB,KAAK;GACzB,cAAc,SAAS;GACvB,gBAAgB,MAAM;EACxB,CAAC,CACH;EAUA,OAAO,QACL,OATuB,OAAO,QAC9B,eAAe,KAAK;GAClB,cAAc,SAAS;GACvB,gBAAgB,MAAM;GACtB,QAAQ,0BAA0B,KAAK,EAAE,aAAa,CAAC,OAAO,KAAK,EAAE,CAAC;EACxE,CAAC,CACH,OAGgB,aACd,sDACF;EAOA,OAAO,QAAO,OALgB,WAC5B,+BACA,OAAO,WAAW,SAAS,YAAY,CACzC,EAAA,CAE6B,UAAU,aAAa,gCAAgC;EACpF,MAAM,oBAAoB,OAAO,iBAAiB,SAAS,YAAY;EAEvE,OAAO,OACL,kBAAkB,eAAe,KAAA,KAC/B,kBAAkB,WAAW,OAAO,SAAS,qBAC7C,kBAAkB,WAAW,OAAO,YAAY,WAAW,KAC3D,kBAAkB,kBAAkB,WAAW,GACjD,6EACF;EAEA,MAAM,QAAQ,OAAO,cACnB,4DACA,OAAO,eACL,sBAAsB,KAAK;GACzB,cAAc,SAAS;GACvB,gBAAgB,MAAM;EACxB,CAAC,CACH,CACF;EAEA,OAAO,OACL,gBAAgB,KAAK,GACrB,2DACF;EAEA,OAAO,OAAO,uBACZ,wBAAwB,KAAK;GAC3B,cAAc,SAAS;GACvB,YAAY;GACZ,UAAU;GACV,UAAU;GACV,QAAQ;EACV,CAAC,CACH;EAOA,OAAO,QACL,OANmB,WACnB,sCACA,OAAO,WAAW,SAAS,YAAY,CACzC,EAAA,CAGQ,UAAU,iBAChB,oDACF;EAGA,OAAO,QACL,OAH2B,iBAAiB,SAAS,YAAY,EAAA,CAGnD,eAAe,KAAA,GAC7B,0CACF;EAEA,MAAM,UAAU,OAAO,WACrB,0BACA,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,OAAO,cAAc,UAAU,QAAQ,cAAc;EAErD,MAAM,WAAW,OAAO,cACtB,mCACA,OAAO,QACL,eAAe,KAAK;GAClB,cAAc,SAAS;GACvB,gBAAgB,QAAQ;GACxB,QAAQ,0BAA0B,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;EACjE,CAAC,CACH,CACF;EAEA,OAAO,OACL,qBAAqB,QAAQ,KAAK,SAAS,oBAAoB,aAC/D,oDACF;CACF,CAAC,CAsuCH;CAnuCuC,gBACvC,+EACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,eAAe,sCAAsC;EACtE,MAAM,SAAS,OAAO;EAEtB,MAAM,OAAO,OAAO,WAAW,UAAU,sBAAsB,EAAE,MAAM,OAAO,CAAC;EAC/E,MAAM,SAAS,OAAO,WAAW,UAAU,mBAAmB,EAAE,QAAQ,EAAE,CAAC;EAC3E,MAAM,YAAY,OAAO,WAAW,kBAAkB,OAAO,UAAU,UAAU,UAAU,CAAC;EAE5F,MAAM,SAAS,OAAO,OAAO,aAC3B,oBAAoB,KAAK;GACvB;GACA,kBAAkB,KAAK;GACvB,gBAAgB,UAAU;GAC1B,UAAU;EACZ,CAAC,CACH;EAEA,OAAO,OACL,OAAO,WAAW,KAAK,OAAO,EAAE,EAAE,iBAAiB,OAAO,cAC1D,8DACF;EAIA,MAAM,qBAAqB,OAAO,sBAAsB;GACtD,cAAc,OAAO;GACrB,gBAAgB;GAChB,WAAW,OAAO;GAClB,SAAS;EACX,CAAC;EAED,MAAM,SAAS,OAAO,cACpB,sEACA,OAAO,kBAAkB,kBAAkB,CAC7C;EAEA,OAAO,OACL,gBAAgB,MAAM,GACtB,0EACF;EAEA,OAAO,OAAO,WACZ,kBAAkB,KAAK;GACrB,cAAc,OAAO;GACrB,gBAAgB,UAAU;GAC1B,UAAU,wBAAwB,OAAO,YAAY;GACrD,UAAU,eAAe,CAAC;EAC5B,CAAC,CACH;EAMA,MAAM,oBAAoB,OAAO,sBAAsB;GACrD,cAAc,OAAO;GACrB,gBAAgB;GAChB,WAAW,OAAO;GAClB,SAAS;EACX,CAAC;EAED,OAAO,OAAO,kBAAkB,iBAAiB;EASjD,OAAO,QACL,OARwB,OAAO,mBAC/B,uBAAuB,KAAK;GAC1B,cAAc,OAAO;GACrB,cAAc,uBAAuB,OAAO,YAAY;EAC1D,CAAC,CACH,EAAA,CAGa,YAAY,aACvB,+DACF;EAEA,MAAM,UAAU,OAAO,WACrB,sCACA,OAAO,WAAW,OAAO,YAAY,CACvC;EAEA,OAAO,OACL,QAAQ,UAAU,aAAa,QAAQ,mBAAmB,aAC1D,8CACF;CACF,CAAC,CA6oCH;CA1oCkC,gBAClC,qFACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,eAAe,kCAAkC;EAClE,MAAM,SAAS,OAAO;EACtB,MAAM,SAAS,OAAO,WAAW,UAAU,wBAAwB,EAAE,MAAM,SAAS,CAAC;EACrF,MAAM,QAAQ,OAAO,WAAW,oBAAoB,OAAO,UAAU,UAAU,UAAU,CAAC;EAE1F,MAAM,aAAa;GAAE,OAAO;GAAG,WAAW;EAAE;EAC5C,MAAM,mBAAmB,OAAO,WAAW,UAAU;EAErD,MAAM,gBAAgB;GACpB,eAAe,yBAAyB,sCAAsC;GAC9E,oBAAoB,OAAO;GAC3B,kBAAkB,iBAAiB,oBAAoB;GACvD,gBAAgB,MAAM;GACtB;GACA;EACF;EAEA,MAAM,UAAU,8BAA8B,KAAK,aAAa;EAChE,MAAM,QAAQ,OAAO,OAAO,mBAAmB,OAAO;EAEtD,OAAO,OACL,CAAC,MAAM,YACL,MAAM,YAAY,WAAW,cAC7B,MAAM,YAAY,qBAAqB,oBACvC,MAAM,YAAY,sBAAsB,KAAA,KACxC,wBAAwB,MAAM,YAAY,YAAY,UAAU,GAClE,gFACF;EAEA,OAAO,UAAU,OAAO,UAAU;EAElC,MAAM,WAAW,OAAO,OAAO,mBAC7B,8BAA8B,KAAK;GACjC,GAAG;GACH,YAAY;IAAE,WAAW;IAAG,OAAO;GAAE;EACvC,CAAC,CACH;EAEA,OAAO,OACL,SAAS,YACP,SAAS,YAAY,WAAW,cAChC,wBAAwB,SAAS,YAAY,YAAY,UAAU,KACnE,YAAY,SAAS,YAAY,YAAY,MAAM,YAAY,UAAU,GAC3E,+DACF;EAEA,MAAM,sBAAsB;GAAE,OAAO;GAAI,WAAW;EAAE;EAEtD,MAAM,YAAY,OAAO,cACvB,sDACA,OAAO,mBACL,8BAA8B,KAAK;GACjC,GAAG;GACH,YAAY;GACZ,kBAAkB,OAAO,WAAW,mBAAmB;EACzD,CAAC,CACH,CACF;EAEA,OAAO,OACL,2BAA2B,SAAS,KAAK,UAAU,WAAW,YAC9D,oEACF;EAEA,MAAM,WAAW,OAAO,cACtB,yDACA,OAAO,mBACL,8BAA8B,KAAK;GACjC,GAAG;GACH,eAAe,yBAAyB,4CAA4C;EACtF,CAAC,CACH,CACF;EAEA,OAAO,OACL,2BAA2B,QAAQ,GACnC,sDACF;EAEA,MAAM,WAAW,OAAO,iBAAiB,OAAO,YAAY;EAE5D,OAAO,OACL,SAAS,kBAAkB,WAAW,KACpC,SAAS,kBAAkB,EAAE,CAAC,kBAAkB,QAAQ,iBACxD,SAAS,kBAAkB,EAAE,CAAC,WAAW,cACzC,SAAS,iBAAiB,WAAW,GACvC,gFACF;CACF,CAAC,CA+iCH;CA5iC8B,gBAC9B,+DACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,eAAe,gCAAgC;EAChE,MAAM,YAAY,eAAe,sCAAsC;EACvE,MAAM,SAAS,OAAO;EACtB,MAAM,SAAS,OAAO,WAAW,UAAU,sBAAsB,EAAE,MAAM,SAAS,CAAC;EACnF,MAAM,QAAQ,OAAO,WAAW,WAAW,qBAAqB,EAAE,MAAM,QAAQ,CAAC;EAEjF,MAAM,aAAa,OAAO,WACxB,0BACA,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,MAAM,aAAa,EAAE,OAAO,EAAE;EAC9B,MAAM,mBAAmB,OAAO,WAAW,UAAU;EAErD,MAAM,gBAAgB;GACpB,eAAe,yBAAyB,oCAAoC;GAC5E,oBAAoB,OAAO;GAC3B,kBAAkB,iBAAiB,kBAAkB;GACrD,gBAAgB;GAChB;GACA;EACF;EAEA,MAAM,UAAU,8BAA8B,KAAK,aAAa;EAEhE,MAAM,UAAU,OAAO,cACrB,yDACA,OAAO,mBAAmB,OAAO,CACnC;EAEA,OAAO,OACL,gBAAgB,OAAO,GACvB,0EACF;EAGA,OAAO,QACL,OAH0B,iBAAiB,OAAO,YAAY,EAAA,CAGjD,kBAAkB,WAAW,GAC1C,uDACF;EAEA,OAAO,OAAO,mBACZ,8BAA8B,KAAK;GACjC,GAAG;GACH,gBAAgB,WAAW;EAC7B,CAAC,CACH;EAGA,OAAO,OAAO,iBACZ,wBAAwB,KAAK;GAC3B,cAAc,OAAO;GACrB,gBAAgB,WAAW;EAC7B,CAAC,CACH;EAEA,MAAM,UAAU,OAAO,WACrB,gCACA,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,OAAO,OACL,QAAQ,gBAAgB,WAAW,eACnC,2DACF;EAEA,MAAM,cAAc,OAAO,cACzB,sDACA,OAAO,yBACL,gCAAgC,KAAK;GACnC,eAAe,QAAQ;GACvB,gBAAgB,WAAW;GAC3B,mBAAmB,MAAM;EAC3B,CAAC,CACH,CACF;EAEA,OAAO,OACL,gBAAgB,WAAW,GAC3B,mDACF;EAEA,MAAM,cAAc,OAAO,cACzB,uEACA,OAAO,mBACL,8BAA8B,KAAK;GACjC,GAAG;GACH,eAAe,yBAAyB,oCAAoC;GAC5E,kBAAkB,iBAAiB,yBAAyB;GAC5D,gBAAgB,WAAW;EAC7B,CAAC,CACH,CACF;EAEA,OAAO,OACL,gBAAgB,WAAW,GAC3B,iEACF;EAIA,MAAM,cAAc,OAAO,OAAO,mBAChC,8BAA8B,KAAK;GACjC,GAAG;GACH,gBAAgB,WAAW;EAC7B,CAAC,CACH;EAEA,OAAO,OACL,YAAY,YAAY,YAAY,YAAY,WAAW,YAC3D,uFACF;EAUA,OAAO,QACL,OATsB,OAAO,yBAC7B,gCAAgC,KAAK;GACnC,eAAe,QAAQ;GACvB,gBAAgB,QAAQ;GACxB,mBAAmB,MAAM;EAC3B,CAAC,CACH,EAAA,CAGW,sBAAsB,MAAM,cACrC,kDACF;CACF,CAAC,CA46BH;CAz6B6B,gBAC7B,yEACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,eAAe,iCAAiC;EACjE,MAAM,YAAY,eAAe,uCAAuC;EACxE,MAAM,SAAS,OAAO;EACtB,MAAM,SAAS,OAAO,WAAW,UAAU,uBAAuB,EAAE,MAAM,SAAS,CAAC;EACpF,MAAM,QAAQ,OAAO,WAAW,WAAW,sBAAsB,EAAE,QAAQ,EAAE,CAAC;EAC9E,MAAM,aAAa,OAAO,WAAW,WAAW,sBAAsB,EAAE,QAAQ,EAAE,CAAC;EACnF,MAAM,QAAQ,OAAO,WAAW,oBAAoB,OAAO,UAAU,UAAU,UAAU,CAAC;EAE1F,MAAM,aAAa,EAAE,OAAO,EAAE;EAC9B,MAAM,gBAAgB,yBAAyB,qCAAqC;EAEpF,OAAO,OAAO,mBACZ,8BAA8B,KAAK;GACjC;GACA,oBAAoB,OAAO;GAC3B,kBAAkB,iBAAiB,mBAAmB;GACtD,gBAAgB,MAAM;GACtB;GACA,kBAAkB,OAAO,WAAW,UAAU;EAChD,CAAC,CACH;EAEA,MAAM,qBAAqB,OAAO,cAChC,qDACA,OAAO,yBACL,gCAAgC,KAAK;GACnC,eAAe,yBAAyB,sCAAsC;GAC9E,gBAAgB,MAAM;GACtB,mBAAmB,MAAM;EAC3B,CAAC,CACH,CACF;EAEA,OAAO,OACL,cAAc,kBAAkB,GAChC,iEACF;EAEA,MAAM,WAAW,OAAO,OAAO,yBAC7B,gCAAgC,KAAK;GACnC;GACA,gBAAgB,MAAM;GACtB,mBAAmB,MAAM;EAC3B,CAAC,CACH;EAEA,OAAO,OACL,SAAS,sBAAsB,MAAM,gBAAgB,SAAS,WAAW,YACzE,wDACF;EAUA,OAAO,QACL,OATsB,OAAO,yBAC7B,gCAAgC,KAAK;GACnC;GACA,gBAAgB,MAAM;GACtB,mBAAmB,MAAM;EAC3B,CAAC,CACH,EAAA,CAGW,sBAAsB,MAAM,cACrC,oDACF;EAEA,MAAM,YAAY,OAAO,cACvB,uDACA,OAAO,yBACL,gCAAgC,KAAK;GACnC;GACA,gBAAgB,MAAM;GACtB,mBAAmB,WAAW;EAChC,CAAC,CACH,CACF;EAEA,OAAO,OACL,2BAA2B,SAAS,GACpC,oEACF;EAEA,MAAM,WAAW,OAAO,iBAAiB,OAAO,YAAY;EAE5D,OAAO,OACL,SAAS,iBAAiB,WAAW,KACnC,SAAS,iBAAiB,EAAE,CAAC,sBAAsB,MAAM,gBACzD,SAAS,iBAAiB,EAAE,CAAC,eAAe,iBAAiB,mBAAmB,KAChF,SAAS,iBAAiB,EAAE,CAAC,eAAe,WAC5C,SAAS,iBAAiB,EAAE,CAAC,iBAAiB,KAAA,GAChD,qFACF;CACF,CAAC,CA40BH;CAz0BwC,gBACxC,8DACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,eAAe,iCAAiC;EACjE,MAAM,SAAS,OAAO;EACtB,MAAM,SAAS,OAAO,WAAW,UAAU,uBAAuB,EAAE,MAAM,SAAS,CAAC;EACpF,MAAM,QAAQ,OAAO,WAAW,oBAAoB,OAAO,UAAU,UAAU,UAAU,CAAC;EAE1F,MAAM,aAAa,EAAE,OAAO,EAAE;EAC9B,MAAM,gBAAgB,yBAAyB,qCAAqC;EAEpF,OAAO,OAAO,mBACZ,8BAA8B,KAAK;GACjC;GACA,oBAAoB,OAAO;GAC3B,kBAAkB,iBAAiB,mBAAmB;GACtD,gBAAgB,MAAM;GACtB;GACA,kBAAkB,OAAO,WAAW,UAAU;EAChD,CAAC,CACH;EAEA,MAAM,aAAa;GAAE,UAAU,EAAE,OAAO,EAAE;GAAG,UAAU,EAAE,OAAO,EAAE;EAAE;EAEpE,MAAM,SAAS,OAAO,OAAO,wBAC3B,+BAA+B,KAAK;GAAE;GAAe;EAAW,CAAC,CACnE;EAEA,OAAO,OACL,OAAO,WAAW,oBAChB,OAAO,eAAe,KAAA,KACtB,wBAAwB,OAAO,YAAY,UAAU,KACrD,OAAO,mBAAmB,KAAA,GAC5B,8EACF;EAEA,OAAO,UAAU,OAAO,UAAU;EAElC,MAAM,WAAW,OAAO,OAAO,wBAC7B,+BAA+B,KAAK;GAClC;GACA,YAAY;IAAE,UAAU,EAAE,OAAO,EAAE;IAAG,UAAU,EAAE,OAAO,EAAE;GAAE;EAC/D,CAAC,CACH;EAEA,OAAO,OACL,SAAS,WAAW,oBAClB,SAAS,mBAAmB,KAAA,KAC5B,OAAO,mBAAmB,KAAA,KAC1B,YAAY,SAAS,gBAAgB,OAAO,cAAc,GAC5D,sFACF;EAEA,MAAM,YAAY,OAAO,cACvB,4CACA,OAAO,wBACL,+BAA+B,KAAK;GAClC;GACA,YAAY;IAAE,UAAU,EAAE,OAAO,EAAE;IAAG,UAAU,EAAE,OAAO,EAAE;GAAE;EAC/D,CAAC,CACH,CACF;EAEA,OAAO,OACL,2BAA2B,SAAS,KAAK,UAAU,WAAW,kBAC9D,sEACF;EAEA,OAAO,OAAO,mBAAmB,0BAA0B,KAAK,EAAE,cAAc,CAAC,CAAC;EAElF,MAAM,eAAe,OAAO,OAAO,wBACjC,+BAA+B,KAAK;GAAE;GAAe;EAAW,CAAC,CACnE;EAEA,OAAO,OACL,aAAa,WAAW,cACtB,aAAa,eAAe,KAAA,KAC5B,wBAAwB,aAAa,YAAY,UAAU,GAC7D,+EACF;EAEA,MAAM,wBAAwB,OAAO,cACnC,0DACA,OAAO,wBACL,+BAA+B,KAAK;GAClC;GACA,YAAY;IAAE,UAAU,EAAE,OAAO,EAAE;IAAG,UAAU,EAAE,OAAO,EAAE;GAAE;EAC/D,CAAC,CACH,CACF;EAEA,OAAO,OACL,2BAA2B,qBAAqB,KAC9C,sBAAsB,WAAW,YACnC,uDACF;CACF,CAAC,CAyuBH;CAtuBgC,gBAChC,mDACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,eAAe,kCAAkC;EAClE,MAAM,SAAS,OAAO;EACtB,MAAM,SAAS,OAAO,WAAW,UAAU,wBAAwB,EAAE,MAAM,SAAS,CAAC;EACrF,MAAM,QAAQ,OAAO,WAAW,oBAAoB,OAAO,UAAU,UAAU,UAAU,CAAC;EAE1F,MAAM,aAAa,EAAE,OAAO,EAAE;EAC9B,MAAM,gBAAgB,yBAAyB,sCAAsC;EAErF,OAAO,OAAO,mBACZ,8BAA8B,KAAK;GACjC;GACA,oBAAoB,OAAO;GAC3B,kBAAkB,iBAAiB,oBAAoB;GACvD,gBAAgB,MAAM;GACtB;GACA,kBAAkB,OAAO,WAAW,UAAU;EAChD,CAAC,CACH;EAEA,MAAM,QAAQ,OAAO,cACnB,sDACA,OAAO,mBAAmB,0BAA0B,KAAK,EAAE,cAAc,CAAC,CAAC,CAC7E;EAEA,OAAO,OACL,2BAA2B,KAAK,KAAK,MAAM,WAAW,YACtD,mDACF;EAEA,OAAO,OAAO,wBACZ,+BAA+B,KAAK;GAClC;GACA,YAAY;IAAE,UAAU,CAAC;IAAG,UAAU,EAAE,OAAO,EAAE;GAAE;EACrD,CAAC,CACH;EAEA,MAAM,WAAW,OAAO,OAAO,mBAC7B,0BAA0B,KAAK,EAAE,cAAc,CAAC,CAClD;EAEA,OAAO,OACL,SAAS,WAAW,cAAc,SAAS,eAAe,KAAA,GAC1D,oDACF;EAEA,OAAO,UAAU,OAAO,UAAU;EAElC,MAAM,WAAW,OAAO,OAAO,mBAC7B,0BAA0B,KAAK,EAAE,cAAc,CAAC,CAClD;EAEA,OAAO,OACL,SAAS,WAAW,cAClB,SAAS,eAAe,KAAA,KACxB,SAAS,eAAe,KAAA,KACxB,YAAY,SAAS,YAAY,SAAS,UAAU,GACtD,kFACF;EAEA,MAAM,WAAW,OAAO,iBAAiB,OAAO,YAAY;EAE5D,OAAO,OACL,SAAS,kBAAkB,WAAW,KACpC,SAAS,kBAAkB,EAAE,CAAC,WAAW,YAC3C,4DACF;CACF,CAAC,CAiqBH;CA9pB6B,gBAC7B,oGACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,aAAa,eAAe,+BAA+B;EACjE,MAAM,aAAa,eAAe,iCAAiC;EACnE,MAAM,aAAa,eAAe,iCAAiC;EACnE,MAAM,SAAS,OAAO;EAEtB,MAAM,SAAS,OAAO,WAAW,YAAY,qBAAqB,EAAE,MAAM,SAAS,CAAC;EACpF,MAAM,SAAS,OAAO,WAAW,YAAY,gBAAgB,EAAE,OAAO,IAAI,CAAC;EAC3E,MAAM,SAAS,OAAO,WAAW,YAAY,gBAAgB,EAAE,OAAO,IAAI,CAAC;EAE3E,MAAM,cAAc,OAAO,WACzB,oBACA,OAAO,UAAU,YAAY,UAAU,CACzC;EAqBA,OAAO,QACL,OApBuB,OAAO,QAC9B,eAAe,KAAK;GAClB,cAAc,OAAO;GACrB,gBAAgB,YAAY;GAC5B,QAAQ,0BAA0B,KAAK,EACrC,UAAU,CACR,aAAa,KAAK;IAChB,YAAY,iBAAiB,aAAa;IAC1C,mBAAmB,OAAO;GAC5B,CAAC,GACD,aAAa,KAAK;IAChB,YAAY,iBAAiB,aAAa;IAC1C,mBAAmB,OAAO;GAC5B,CAAC,CACH,EACF,CAAC;EACH,CAAC,CACH,OAGgB,aACd,oDACF;EAEA,MAAM,QAAQ,OAAO,cACnB,4EACA,OAAO,eACL,sBAAsB,KAAK;GACzB,cAAc,OAAO;GACrB,gBAAgB,YAAY;EAC9B,CAAC,CACH,CACF;EAEA,OAAO,OACL,gBAAgB,KAAK,GACrB,0EACF;EACA,OAAO,OACL,OAAO,OAAO,OAAO,UAAU,YAAY,UAAU,CAAC,GACtD,2EACF;EAEA,MAAM,cAAc,OAAO,WACzB,yBACA,OAAO,UAAU,YAAY,UAAU,CACzC;EAEA,MAAM,oBAAoB,OAAO,sBAAsB;GACrD,cAAc,OAAO;GACrB,gBAAgB,YAAY;GAC5B,WAAW,OAAO;GAClB,SAAS;EACX,CAAC;EAED,OAAO,OAAO,kBAAkB,iBAAiB;EASjD,OAAO,QACL,OARqB,OAAO,mBAC5B,yBAAyB,KAAK;GAC5B,oBAAoB,OAAO;GAC3B,mBAAmB,OAAO;EAC5B,CAAC,CACH,OAGc,iBACZ,sFACF;EACA,OAAO,OAAO,mBACZ,uBAAuB,KAAK;GAC1B,cAAc,OAAO;GACrB,cAAc,kBAAkB;EAClC,CAAC,CACH;EAOA,OAAO,QACL,OAN4B,WAC5B,yCACA,OAAO,WAAW,OAAO,YAAY,CACvC,EAAA,CAGiB,UAAU,eACvB,OAAO,OAAO,OAAO,UAAU,YAAY,UAAU,CAAC,GACxD,sEACF;EAEA,MAAM,cAAc,OAAO,WACzB,0BACA,OAAO,UAAU,YAAY,UAAU,CACzC;EAEA,MAAM,oBAAoB,OAAO,sBAAsB;GACrD,cAAc,OAAO;GACrB,gBAAgB,YAAY;GAC5B,WAAW,OAAO;GAClB,SAAS;EACX,CAAC;EAED,OAAO,OAAO,kBAAkB,iBAAiB;EASjD,OAAO,QACL,OARmB,OAAO,mBAC1B,yBAAyB,KAAK;GAC5B,oBAAoB,OAAO;GAC3B,mBAAmB,OAAO;EAC5B,CAAC,CACH,OAGY,SACV,yFACF;EACA,OAAO,OAAO,mBACZ,uBAAuB,KAAK;GAC1B,cAAc,OAAO;GACrB,cAAc,kBAAkB;EAClC,CAAC,CACH;EAOA,OAAO,QACL,OANmB,WACnB,wCACA,OAAO,WAAW,OAAO,YAAY,CACvC,EAAA,CAGQ,UAAU,iBAChB,8EACF;EAGA,OAAO,QACL,OAH2B,iBAAiB,OAAO,YAAY,EAAA,CAGjD,eAAe,KAAA,GAC7B,0CACF;EASA,OAAO,QACL,OARkC,OAAO,mBACzC,yBAAyB,KAAK;GAC5B,oBAAoB,OAAO;GAC3B,mBAAmB,OAAO;EAC5B,CAAC,CACH,OAG2B,eACzB,qEACF;EAEA,MAAM,UAAU,OAAO,WACrB,iCACA,OAAO,UAAU,YAAY,UAAU,CACzC;EAEA,OAAO,OACL,QAAQ,iBAAiB,OAAO,gBAC9B,QAAQ,gBAAgB,YAAY,eACtC,kDACF;EACA,OAAO,cAAc,QAAQ,QAAQ,cAAc;EASnD,OAAO,QACL,OAR6B,OAAO,mBACpC,yBAAyB,KAAK;GAC5B,oBAAoB,OAAO;GAC3B,mBAAmB,OAAO;EAC5B,CAAC,CACH,OAGsB,eACpB,6DACF;CACF,CAAC,CAoeH;CAjekD,gBAClD,qEACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;EACtB,MAAM,aAAa,eAAe,gCAAgC;EAClE,MAAM,aAAa,eAAe,kCAAkC;EACpE,MAAM,aAAa,eAAe,kCAAkC;EACpE,MAAM,SAAS,OAAO;EAItB,MAAM,eAAe,OAAO,WAAW,YAAY,iBAAiB,EAAE,OAAO,IAAI,CAAC;EAElF,MAAM,eAAe,OAAO,WAC1B,6BACA,OAAO,UAAU,YAAY,UAAU,CACzC;EAEA,OAAO,cAAc,cAAc,aAAa,cAAc;EAC9D,MAAM,eAAe,OAAO,WAAW,YAAY,iBAAiB,EAAE,OAAO,IAAI,CAAC;EAElF,MAAM,SAAS,OAAO,WAAW,YAAY,sBAAsB,EAAE,MAAM,SAAS,CAAC;EAErF,MAAM,cAAc,OAAO,WACzB,oBACA,OAAO,UAAU,YAAY,UAAU,CACzC;EAiBA,OAAO,QACL,OAhBuB,OAAO,QAC9B,eAAe,KAAK;GAClB,cAAc,OAAO;GACrB,gBAAgB,YAAY;GAC5B,QAAQ,0BAA0B,KAAK,EACrC,UAAU,CACR,aAAa,KAAK;IAChB,YAAY,iBAAiB,cAAc;IAC3C,mBAAmB,aAAa;GAClC,CAAC,CACH,EACF,CAAC;EACH,CAAC,CACH,OAGgB,sBACd,iEACF;EAOA,OAAO,QACL,OAN0B,WAC1B,qCACA,OAAO,WAAW,OAAO,YAAY,CACvC,EAAA,CAGe,UAAU,WACvB,iEACF;EAEA,OAAO,OAAO,eACZ,sBAAsB,KAAK;GACzB,cAAc,OAAO;GACrB,gBAAgB,YAAY;EAC9B,CAAC,CACH;EAqBA,OAAO,QACL,OApBuB,OAAO,QAC9B,eAAe,KAAK;GAClB,cAAc,OAAO;GACrB,gBAAgB,YAAY;GAC5B,QAAQ,0BAA0B,KAAK,EACrC,UAAU,CACR,aAAa,KAAK;IAChB,YAAY,iBAAiB,cAAc;IAC3C,mBAAmB,aAAa;GAClC,CAAC,GACD,aAAa,KAAK;IAChB,YAAY,iBAAiB,cAAc;IAC3C,mBAAmB,aAAa;GAClC,CAAC,CACH,EACF,CAAC;EACH,CAAC,CACH,OAGgB,aACd,4DACF;EACA,MAAM,WAAW,OAAO,iBAAiB,OAAO,YAAY;EAE5D,OAAO,OACL,SAAS,eAAe,KAAA,KACtB,SAAS,WAAW,OAAO,SAAS,qBACpC,SAAS,WAAW,OAAO,SAAS,WAAW,GACjD,gFACF;CACF,CAAC,CAkYH;CA/X6B,gBAC7B,6CACC,EAAE,QAAQ,eAAe,iBACxB,OAAO,IAAI,aAAa;EACtB,MAAM,aAAa,eAAe,4BAA4B;EAC9D,MAAM,YAAY,eAAe,kCAAkC;EACnE,MAAM,SAAS,OAAO;EACtB,MAAM,SAAS,OAAO,WAAW,YAAY,kBAAkB,EAAE,MAAM,SAAS,CAAC;EAEjF,MAAM,UAAU,cAAc,KAAK;GACjC,oBAAoB,OAAO;GAC3B,kBAAkB,iBAAiB,cAAc;EACnD,CAAC;EAED,MAAM,UAAU,OAAO,iBACrB,WACA,qBACA,EAAE,MAAM,WAAW,GACnB,OACF;EAEA,MAAM,WAAW,OAAO,OAAO,MAAM,OAAO;EAE5C,OAAO,OAAO,CAAC,SAAS,UAAU,kDAAkD;EAEpF,MAAM,OAAO,OAAO,WAClB,8BACA,OAAO,WAAW,SAAS,YAAY,CACzC;EAEA,OAAO,OACL,KAAK,kBAAkB,KAAA,KACrB,KAAK,cAAc,uBAAuB,OAAO,gBACjD,KAAK,cAAc,qBAAqB,QAAQ,kBAClD,6DACF;EACA,MAAM,gBAAgB,OAAO,iBAAiB,SAAS,YAAY;EAEnE,OAAO,OACL,cAAc,kBAAkB,KAAA,KAC9B,cAAc,cAAc,uBAAuB,OAAO,cAC5D,4DACF;EAEA,MAAM,WAAW,OAAO,OAAO,MAAM,OAAO;EAE5C,OAAO,OACL,SAAS,YACP,SAAS,iBAAiB,SAAS,gBACnC,SAAS,cAAc,SAAS,WAClC,6EACF;EAEA,MAAM,mBAAmB,OAAO,cAC9B,6DACA,OAAO,MACL,OAAO,iBACL,WACA,qBACA,EAAE,MAAM,WAAW,GACnB,cAAc,KAAK;GACjB,oBAAoB,OAAO;GAC3B,kBAAkB,iBAAiB,oBAAoB;EACzD,CAAC,CACH,CACF,CACF;EAEA,OAAO,OACL,oBAAoB,gBAAgB,GACpC,6EACF;EAEA,MAAM,iBAAiB,OAAO,cAC5B,sDACA,OAAO,MAAM,OAAO,iBAAiB,WAAW,qBAAqB,EAAE,MAAM,WAAW,CAAC,CAAC,CAC5F;EAEA,OAAO,OACL,oBAAoB,cAAc,GAClC,uDACF;EAEA,MAAM,QAAQ,OAAO,OAAO,MAC1B,OAAO,iBAAiB,WAAW,qBAAqB,EAAE,MAAM,QAAQ,CAAC,CAC3E;EAEA,MAAM,eAAe,OAAO,cAC1B,yDACA,OAAO,MACL,OAAO,iBAAiB,WAAW,qBAAqB,EAAE,MAAM,QAAQ,GAAG,OAAO,CACpF,CACF;EAEA,OAAO,OACL,oBAAoB,YAAY,GAChC,mEACF;EAOA,OAAO,QACL,OAN2B,WAC3B,qCACA,OAAO,WAAW,MAAM,YAAY,CACtC,EAAA,CAGgB,kBAAkB,KAAA,GAChC,sDACF;CACF,CAAC,CAoRH;CAjRgC,gBAChC,6EACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;EACtB,MAAM,WAAW,eAAe,4BAA4B;EAC5D,MAAM,SAAS,OAAO;EAEtB,MAAM,MAAM,sBAAsB,KAAK;GACrC;GACA,WAAW;GACX,gBAAgB,qBAAqB,eAAe;EACtD,CAAC;EAID,OAAO,QACL,OAHoB,OAAO,iBAAiB,GAAG,EAAA,CAGxC,SAAS,eAChB,uEACF;EAEA,MAAM,WAAW,OAAO,OAAO,MAC7B,OAAO,iBAAiB,UAAU,iBAAiB,EAAE,MAAM,UAAU,CAAC,CACxE;EAEA,MAAM,QAAQ,OAAO,OAAO,iBAAiB,GAAG;EAEhD,OAAO,OACL,MAAM,SAAS,cACb,MAAM,WAAW,iBAAiB,SAAS,gBAC3C,MAAM,WAAW,cAAc,SAAS,aACxC,MAAM,WAAW,UAAU,YAC7B,iEACF;EAUA,OAAO,QACL,OATqB,OAAO,iBAC5B,sBAAsB,KAAK;GACzB;GACA,WAAW;GACX,gBAAgB,qBAAqB,eAAe;EACtD,CAAC,CACH,EAAA,CAGU,SAAS,eACjB,mEACF;EAEA,OAAO,OAAO,UAAU,iBAAiB,KAAK,EAAE,cAAc,SAAS,aAAa,CAAC,CAAC;EAEtF,MAAM,QAAQ,OAAO,WACnB,wCACA,OAAO,UAAU,UAAU,UAAU,CACvC;EAEA,OAAO,cAAc,UAAU,MAAM,cAAc;EACnD,MAAM,UAAU,OAAO,OAAO,iBAAiB,GAAG;EAElD,OAAO,OACL,QAAQ,SAAS,cACf,QAAQ,WAAW,UAAU,aAC7B,QAAQ,WAAW,mBAAmB,aACxC,qFACF;CACF,CAAC,CAmNH;CAhNqC,gBACrC,6FACC,EAAE,QAAQ,oBACT,OAAO,IAAI,aAAa;EAKtB,MAAM,WAAW,eAAe,iCAAiC;EACjE,MAAM,SAAS,OAAO;EAEtB,MAAM,OAAO,OAAO,WAAW,UAAU,qBAAqB,EAAE,MAAM,OAAO,CAAC;EAC9E,MAAM,SAAS,OAAO,WAAW,UAAU,kBAAkB,EAAE,QAAQ,EAAE,CAAC;EAC1E,MAAM,QAAQ,OAAO,WAAW,UAAU,kBAAkB,EAAE,QAAQ,EAAE,CAAC;EAEzE,OAAO,OAAO,aACZ,aAAa,KAAK;GAChB,cAAc,OAAO;GACrB,QAAQ;GACR,QAAQ;EACV,CAAC,CACH;EAIA,MAAM,YAAY,OAAO,cACvB,4EACA,sBAAsB;GACpB,cAAc,MAAM;GACpB,gBAAgB;GAChB,WAAW,MAAM;GACjB,SAAS;EACX,CAAC,CAAC,CAAC,KAAK,OAAO,SAAS,gBAAgB,OAAO,kBAAkB,WAAW,CAAC,CAAC,CAChF;EAEA,OAAO,OACL,gBAAgB,SAAS,GACzB,sFACF;EAGA,MAAM,eAAe,OAAO,cAC1B,+DACA,sBAAsB;GACpB,cAAc,OAAO;GACrB,gBAAgB;GAChB,WAAW,OAAO;GAClB,SAAS;GACT,QAAQ,EAAE,YAAY,KAAK;EAC7B,CAAC,CAAC,CAAC,KAAK,OAAO,SAAS,gBAAgB,OAAO,kBAAkB,WAAW,CAAC,CAAC,CAChF;EAEA,OAAO,OACL,gBAAgB,YAAY,GAC5B,uEACF;EAEA,MAAM,cAAc,OAAO,sBAAsB;GAC/C,cAAc,OAAO;GACrB,gBAAgB;GAChB,WAAW,OAAO;GAClB,SAAS;EACX,CAAC;EAED,MAAM,WAAW,OAAO,OAAO,kBAAkB,WAAW;EAE5D,OAAO,OACL,SAAS,aAAa,SAAS,SAAS,YAAY,WACpD,gFACF;EAIA,OAAO,QACL,OAHsB,OAAO,kBAAkB,WAAW,EAAA,CAGjD,aAAa,MACtB,6EACF;EACA,OAAO,OAAO,mBACZ,uBAAuB,KAAK;GAC1B,cAAc,OAAO;GACrB,cAAc,uBAAuB,OAAO,YAAY;EAC1D,CAAC,CACH;EAEA,MAAM,UAAU,OAAO,iBAAiB,OAAO,YAAY;EAE3D,OAAO,OACL,QAAQ,WAAW,UAAU,aAAa,QAAQ,WAAW,mBAAmB,WAChF,6EACF;EAGA,OAAO,QACL,OAHuB,iBAAiB,KAAK,YAAY,EAAA,CAG/C,WAAW,UAAU,SAC/B,qEACF;CACF,CAAC,CAiHH;CA9GwC,gBACxC,4DACC,EAAE,QAAQ,iBACT,OAAO,IAAI,aAAa;EAItB,MAAM,WAAW,eAAe,oCAAoC;EACpE,MAAM,SAAS,OAAO;EAEtB,MAAM,OAAO,OAAO,WAAW,UAAU,oBAAoB,EAAE,MAAM,OAAO,CAAC;EAC7E,MAAM,SAAS,OAAO,WAAW,UAAU,iBAAiB,EAAE,QAAQ,EAAE,CAAC;EACzE,MAAM,QAAQ,OAAO,WAAW,UAAU,iBAAiB,EAAE,QAAQ,EAAE,CAAC;EAExE,OAAO,OAAO,aACZ,aAAa,KAAK;GAChB,cAAc,OAAO;GACrB,QAAQ;GACR,QAAQ;EACV,CAAC,CACH;EAEA,MAAM,cAAc,OAAO,sBAAsB;GAC/C,cAAc,OAAO;GACrB,gBAAgB;GAChB,WAAW,OAAO;GAClB,SAAS;EACX,CAAC;EAED,OAAO,OAAO,kBAAkB,WAAW;EAC3C,OAAO,OAAO,mBACZ,uBAAuB,KAAK;GAC1B,cAAc,OAAO;GACrB,cAAc,uBAAuB,OAAO,YAAY;EAC1D,CAAC,CACH;EAEA,MAAM,YAAY,OAAO,WAAW,kBAAkB,OAAO,UAAU,UAAU,UAAU,CAAC;EAE5F,OAAO,OACL,UAAU,iBAAiB,KAAK,cAChC,2EACF;EAEA,MAAM,SAAS,OAAO,OAAO,aAC3B,oBAAoB,KAAK;GACvB;GACA,kBAAkB,KAAK;GACvB,gBAAgB,UAAU;GAC1B,UAAU;EACZ,CAAC,CACH;EAEA,OAAO,OACL,OAAO,WAAW,KAAK,OAAO,EAAE,CAAC,iBAAiB,MAAM,cACxD,qFACF;EACA,MAAM,UAAU,OAAO,iBAAiB,OAAO,YAAY;EAE3D,OAAO,OACL,QAAQ,WAAW,UAAU,aAAa,QAAQ,WAAW,mBAAmB,WAChF,+DACF;CACF,CAAC,CAgDH;AACF"}
|