@yielded/agent-storage-memory 0.1.0-beta.172 → 0.1.0-beta.174
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/MemoryMessageDeliveryStore.mjs +1 -1
- package/dist/MemoryMessageDeliveryStore.mjs.map +1 -1
- package/dist/MemorySubmissionLedger.mjs +1179 -1177
- package/dist/MemorySubmissionLedger.mjs.map +1 -1
- package/dist/MemoryThreadStore.mjs +14 -14
- package/dist/MemoryThreadStore.mjs.map +1 -1
- package/package.json +1 -1
- package/src/MemoryMessageDeliveryStore.ts +24 -25
- package/src/MemorySubmissionLedger.ts +49 -49
- package/src/MemoryThreadStore.ts +42 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemorySubmissionLedger.mjs","names":[],"sources":["../src/MemorySubmissionLedger.ts"],"sourcesContent":["import { canonicalJson, utf8ByteLength } from \"@yielded/agent/digest\";\nimport {\n type ToolCallId,\n AttemptId,\n ReceiptId,\n SubmissionId,\n type AgentId,\n type ThreadId,\n type SettlementId,\n} from \"@yielded/agent/identifiers\";\nimport { InputMessage } from \"@yielded/agent/messaging\";\nimport {\n PersistedJson,\n MAX_RUN_EVIDENCE_RECORDS,\n MAX_RUN_EVIDENCE_BYTES,\n WorkerAdmission,\n type DefinitionDigests,\n type DeploymentId,\n type Digest,\n type RecordEnvelope,\n type SettlementOutcome,\n} from \"@yielded/agent/records\";\nimport { runIdForSubmission } from \"@yielded/agent/run-journal\";\nimport {\n SettlementPublisher,\n SettlementPublicationResult,\n validatePublication,\n validateCanonicalSettlement,\n validateJoinedSettlement,\n} from \"@yielded/agent/settlement-publisher\";\nimport {\n FundingOwnerRequest,\n FundingOwner,\n type ParentLinkage,\n AbortCommand,\n WorkerStopCommand,\n WorkerLedgerState,\n workerTerminalFromRecord,\n AdmissionAdmitted,\n AdmissionConflict,\n AdmissionPolicyError,\n AdmissionIndeterminate,\n AdmissionNotAdmitted,\n AdmissionRequest,\n SubmissionAdmissionFence,\n AdmissionResult,\n ApprovalConflict,\n ApprovalDecisionCommand,\n ApprovalDecisionIntent,\n approvalDecisionsCover,\n AttachChildToReservationRequest,\n BeginChildBudgetReleaseRequest,\n ChildAttachmentSnapshot,\n ChildBudgetReservationRequest,\n ChildBudgetReservationSnapshot,\n ChildReservationConflict,\n ChildSettledNotification,\n Claim,\n ClaimJoiningRequest,\n ClaimRequest,\n InputAppliedMarker,\n JoinSnapshot,\n JoinedToHost,\n JoiningClaim,\n LedgerCapabilities,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n MarkReadyRequest,\n MarkUnknownRequest,\n OwnershipLost,\n QueueSequence,\n RecoverySnapshot,\n RecoverySnapshotRequest,\n ReleaseChildBudgetRequest,\n ReservedChildBudget,\n RevertJoiningRequest,\n Settlement,\n SettlementConflict,\n SettlementFinalization,\n settlementFailureFromRecord,\n submissionSettlementRecordId,\n AbortIntent,\n AbortIntentRequest,\n SubmissionLedger,\n SubmissionLookup,\n SubmissionLookupByKey,\n SubmissionSnapshot,\n SubmissionWorkItem,\n SuspendRequest,\n SuspensionSnapshot,\n UnknownResolution,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n UnknownResolutionIntent,\n unknownResolutionKind,\n unknownResolutionMatchesResult,\n type ChildReservationId,\n type ChildReservationStatus,\n type ChildSettledOutcome,\n type IdempotencyKey,\n type Principal,\n type SubmissionState,\n type SuspensionOutcome,\n type SuspensionReason,\n} from \"@yielded/agent/submission-ledger\";\nimport {\n rebuildClosedSubmission,\n invalidThreadArchive,\n RebuiltSubmission,\n ThreadImportRejected,\n} from \"@yielded/agent/thread-import\";\nimport {\n ThreadAdmission,\n ThreadStoreError,\n ThreadAbortFact,\n ThreadApprovalFact,\n ThreadResolutionFact,\n makeTransferFactCheck,\n transferPageFits,\n} from \"@yielded/agent/thread-store\";\nimport { admissionWork } from \"@yielded/agent/thread-work\";\nimport {\n Clock,\n Context,\n Cause,\n Crypto,\n Exit,\n Fiber,\n DateTime,\n Effect,\n Layer,\n MutableRef,\n Option,\n Ref,\n Result,\n Schema,\n Stream,\n} from \"effect\";\n\nimport { MemoryThreadStoreKernel } from \"./internal/MemoryThreadStoreKernel.ts\";\nimport { boundedWorkSelection } from \"./internal/WorkSelection.ts\";\n\n/**\n * Lifecycle ordering used to advance-but-never-regress the operational state marker: a reclaimed\n * Attempt must not erase progress markers (input-applied) that an earlier Attempt\n * already committed.\n */\nconst STATE_RANK: Record<SubmissionState, number> = {\n admitted: 0,\n ready: 1,\n joining: 2,\n joined: 3,\n \"input-applied\": 5,\n suspended: 6,\n unknown: 7,\n settled: 8,\n};\n\ninterface SubmissionRow {\n readonly submissionId: SubmissionId;\n readonly threadId: ThreadId;\n readonly queueSequence: QueueSequence;\n readonly principal: Principal;\n readonly idempotencyKey: IdempotencyKey;\n readonly agentId: AgentId;\n readonly agentDigests: DefinitionDigests;\n readonly deploymentId: DeploymentId;\n readonly inputPayload: PersistedJson;\n readonly inputDigest: Digest;\n readonly receiptId: ReceiptId;\n readonly state: SubmissionState;\n readonly settledOutcome: SettlementOutcome | undefined;\n readonly createdAtMillis: number;\n readonly readyAtMillis: number | undefined;\n /** Immutable child-side lineage recorded at admission (spec §12 step 5). */\n readonly parentLinkage: ParentLinkage | undefined;\n readonly admissionGroup?: string;\n readonly admissionFence?: AdmissionRequest[\"admissionFence\"];\n readonly workerAdmissionJson?: string;\n readonly messageAdmissionJson?: string;\n}\n\ninterface StoredFinalization {\n readonly settlementId: SettlementId;\n readonly finalizedAtMillis: number;\n readonly recordId: RecordEnvelope[\"recordId\"];\n}\n\ninterface StoredSuspension {\n readonly reason: SuspensionReason;\n readonly suspendedAtMillis: number;\n}\n\ninterface StoredUnknownMark {\n readonly reason: MarkUnknownRequest[\"reason\"];\n readonly toolCallIds: ReadonlyArray<ToolCallId>;\n}\n\ninterface StoredUnknownResolution {\n readonly intent: UnknownResolutionIntent;\n}\n\ninterface StoredSubmission {\n readonly row: SubmissionRow;\n readonly inputApplied: InputAppliedMarker | undefined;\n readonly finalization: StoredFinalization | undefined;\n readonly abortIntent: AbortIntent | undefined;\n /** Host linkage recorded at `claimJoining` time; cleared by `revertJoining` (DUR-016). */\n readonly joinedHostSubmissionId: SubmissionId | undefined;\n readonly suspension: StoredSuspension | undefined;\n readonly unknownMark: StoredUnknownMark | undefined;\n readonly approvalDecisions: ReadonlyMap<ToolCallId, ApprovalDecisionIntent>;\n readonly unknownResolutions: ReadonlyMap<string, StoredUnknownResolution>;\n}\n\n/**\n * States in which `claim` never grants the head: the lane is host-owned (`joining`/`joined`)\n * or durably suspended rather than worker-claimable. Unknown heads are checked against abort\n * intent separately: abort authorizes cleanup and settlement, never ordinary Tool replay.\n */\nconst BLOCKED_HEAD_STATES: ReadonlySet<SubmissionState> = new Set([\n \"joining\",\n \"joined\",\n \"suspended\",\n]);\n\ninterface LaneState {\n readonly nextQueueSequence: number;\n}\n\n/** One parent-owned child budget reservation row (spec §12 steps 2 and 6). */\ninterface StoredChildReservation {\n readonly reservationId: ChildReservationId;\n readonly parentSubmissionId: SubmissionId;\n readonly parentToolCallId: ToolCallId;\n readonly childSubmissionId: SubmissionId | undefined;\n readonly status: ChildReservationStatus;\n readonly allocation: PersistedJson;\n readonly allocationDigest: Digest;\n readonly accounting: PersistedJson | undefined;\n readonly reservedAtMillis: number;\n readonly releaseBeganAtMillis: number | undefined;\n readonly releasedAtMillis: number | undefined;\n}\n\ninterface ThreadDirectory {\n readonly ordered: Array<SubmissionId>;\n readonly commands: {\n readonly aborts: Array<CommandLocator>;\n readonly approvals: Array<CommandLocator>;\n readonly resolutions: Array<CommandLocator>;\n };\n children: number;\n workers: number;\n reservations: number;\n}\ninterface CommandLocator {\n readonly key: string;\n readonly submissionId: SubmissionId;\n readonly toolCallId?: ToolCallId;\n readonly resolutionKey?: string;\n}\n\nconst commandPosition = (entries: ReadonlyArray<CommandLocator>, key: string) => {\n let low = 0;\n let high = entries.length;\n\n while (low < high) {\n const middle = Math.floor((low + high) / 2);\n\n if (entries[middle].key < key) low = middle + 1;\n else high = middle;\n }\n\n return low;\n};\n\nconst retainCommand = (\n entries: Array<CommandLocator>,\n submissionId: SubmissionId,\n toolCallId?: ToolCallId,\n resolutionKey?: string,\n) => {\n // Acceptance order is native, stable and append-only; publishing a command never shifts history.\n const key = String(entries.length + 1).padStart(16, \"0\");\n\n entries.push({\n key,\n submissionId,\n ...(toolCallId === undefined ? {} : { toolCallId }),\n ...(resolutionKey === undefined ? {} : { resolutionKey }),\n });\n};\n\ninterface LedgerState {\n readonly byThread: Map<ThreadId, ThreadDirectory>;\n readonly receipts: Map<ReceiptId, SubmissionId>;\n readonly joinsByHost: Map<SubmissionId, Set<SubmissionId>>;\n readonly childrenByParent: Map<SubmissionId, Set<ChildReservationId>>;\n readonly submissions: Map<SubmissionId, StoredSubmission>;\n readonly admissionIndex: Map<string, SubmissionId>;\n readonly lanes: Map<ThreadId, LaneState>;\n readonly childReservations: Map<ChildReservationId, StoredChildReservation>;\n /** Bounded local ordering for fresh work identities; imported facts never seed it. */\n readonly freshAdmissionSequence: number;\n readonly latestByThread: Map<ThreadId, SubmissionId>;\n readonly activeByThread: Map<ThreadId, Set<SubmissionId>>;\n readonly stoppedWorkers: Map<ThreadId, WorkerLedgerState[\"terminal\"]>;\n}\n\ntype Decision<A, E> =\n | { readonly _tag: \"failure\"; readonly error: E }\n | { readonly _tag: \"success\"; readonly value: A };\n\nconst failure = <E>(error: E): Decision<never, E> => ({ _tag: \"failure\", error });\nconst success = <A>(value: A): Decision<A, never> => ({ _tag: \"success\", value });\n\nconst ledgerError = (operation: string, message: string, cause?: unknown): LedgerError =>\n cause === undefined\n ? LedgerError.make({ operation, message })\n : LedgerError.make({ operation, message, cause });\n\nconst validate = <A, I>(\n schema: Schema.Codec<A, I>,\n operation: string,\n value: unknown,\n): Effect.Effect<A, LedgerError> =>\n Schema.encodeUnknownEffect(schema)(value).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(schema)),\n Effect.mapError((error) => ledgerError(operation, `Invalid ${operation} request`, error)),\n );\n\nconst decodeSubmissionId = Schema.decodeSync(SubmissionId);\nconst decodeReceiptId = Schema.decodeSync(ReceiptId);\nconst decodeAttemptId = Schema.decodeSync(AttemptId);\n// Imported identities are opaque facts and never influence fresh identity sizes.\nconst MemoryIdentityNonce = Schema.String.check(Schema.isUUID(4));\nconst decodeQueueSequence = Schema.decodeSync(QueueSequence);\nconst equivalentPersistedJson = Schema.toEquivalence(PersistedJson);\nconst equivalentUnknownResolution = Schema.toEquivalence(UnknownResolution);\nconst admissionFitsTransfer = makeTransferFactCheck(ThreadAdmission);\nconst abortFitsTransfer = makeTransferFactCheck(ThreadAbortFact);\nconst approvalFitsTransfer = makeTransferFactCheck(ThreadApprovalFact);\nconst resolutionFitsTransfer = makeTransferFactCheck(ThreadResolutionFact);\n\nconst transferCapacityError = (operation: string) =>\n ledgerError(operation, \"Accepted fact exceeds its bounded transfer representation\");\n\nconst utc = (millis: number): DateTime.Utc => DateTime.toUtc(DateTime.makeUnsafe(millis));\n\nconst admissionKey = (\n threadId: ThreadId,\n principal: Principal,\n idempotencyKey: IdempotencyKey,\n): string => JSON.stringify([threadId, principal, idempotencyKey]);\n\nconst toSnapshot = (row: SubmissionRow): SubmissionSnapshot =>\n SubmissionSnapshot.make({\n submissionId: row.submissionId,\n threadId: row.threadId,\n queueSequence: row.queueSequence,\n principal: row.principal,\n idempotencyKey: row.idempotencyKey,\n agentId: row.agentId,\n agentDigests: row.agentDigests,\n deploymentId: row.deploymentId,\n inputPayload: row.inputPayload,\n inputDigest: row.inputDigest,\n receiptId: row.receiptId,\n state: row.state,\n createdAt: utc(row.createdAtMillis),\n ...(row.admissionGroup === undefined ? {} : { admissionGroup: row.admissionGroup }),\n ...(row.admissionFence === undefined ? {} : { admissionFence: row.admissionFence }),\n ...(row.workerAdmissionJson === undefined\n ? {}\n : {\n workerAdmission: Schema.decodeSync(Schema.fromJsonString(WorkerAdmission))(\n row.workerAdmissionJson,\n ),\n }),\n ...(row.messageAdmissionJson === undefined\n ? {}\n : {\n messageAdmission: Schema.decodeSync(Schema.fromJsonString(InputMessage))(\n row.messageAdmissionJson,\n ),\n }),\n ...(row.settledOutcome === undefined ? {} : { settledOutcome: row.settledOutcome }),\n ...(row.readyAtMillis === undefined ? {} : { readyAt: utc(row.readyAtMillis) }),\n ...(row.parentLinkage === undefined ? {} : { parentLinkage: row.parentLinkage }),\n });\n\nconst toReservationSnapshot = (row: StoredChildReservation): ChildBudgetReservationSnapshot =>\n ChildBudgetReservationSnapshot.make({\n reservationId: row.reservationId,\n parentSubmissionId: row.parentSubmissionId,\n parentToolCallId: row.parentToolCallId,\n status: row.status,\n allocation: row.allocation,\n allocationDigest: row.allocationDigest,\n reservedAt: utc(row.reservedAtMillis),\n ...(row.childSubmissionId === undefined ? {} : { childSubmissionId: row.childSubmissionId }),\n ...(row.accounting === undefined ? {} : { accounting: row.accounting }),\n ...(row.releaseBeganAtMillis === undefined\n ? {}\n : { releaseBeganAt: utc(row.releaseBeganAtMillis) }),\n ...(row.releasedAtMillis === undefined ? {} : { releasedAt: utc(row.releasedAtMillis) }),\n });\n\nconst fromRebuilt = (rebuilt: RebuiltSubmission): StoredSubmission => {\n const admission = rebuilt.admission;\n const threadId = admission.threadId;\n const canonicalSettlement = rebuilt.settlement?.payload;\n\n const settlement =\n canonicalSettlement?._tag === \"SubmissionSettled\" ? canonicalSettlement : undefined;\n\n return {\n row: {\n submissionId: admission.submissionId,\n threadId,\n queueSequence: admission.queueSequence,\n principal: admission.principal,\n idempotencyKey: admission.idempotencyKey,\n agentId: admission.agentId,\n agentDigests: admission.agentDigests,\n deploymentId: admission.deploymentId,\n inputPayload: admission.inputPayload,\n inputDigest: admission.inputDigest,\n receiptId: admission.receiptId,\n state: rebuilt.state,\n settledOutcome: settlement?.outcome,\n createdAtMillis: DateTime.toEpochMillis(admission.createdAt),\n readyAtMillis:\n rebuilt.state === \"ready\" ? DateTime.toEpochMillis(admission.createdAt) : undefined,\n parentLinkage: admission.parentLinkage,\n ...(admission.workerAdmission === undefined\n ? {}\n : {\n workerAdmissionJson: Schema.encodeSync(Schema.fromJsonString(WorkerAdmission))(\n admission.workerAdmission,\n ),\n }),\n ...(admission.messageAdmission === undefined\n ? {}\n : {\n messageAdmissionJson: Schema.encodeSync(Schema.fromJsonString(InputMessage))(\n admission.messageAdmission,\n ),\n }),\n ...(admission.admissionGroup === undefined\n ? {}\n : { admissionGroup: admission.admissionGroup }),\n ...(admission.admissionFence === undefined\n ? {}\n : { admissionFence: admission.admissionFence }),\n },\n inputApplied: rebuilt.inputApplied,\n finalization:\n settlement === undefined ||\n rebuilt.settlement === undefined ||\n admission.settledAt === undefined\n ? undefined\n : {\n settlementId: settlement.settlementId,\n recordId: rebuilt.settlement.recordId,\n finalizedAtMillis: DateTime.toEpochMillis(admission.settledAt),\n },\n abortIntent: rebuilt.abort,\n joinedHostSubmissionId: rebuilt.joinedHostSubmissionId,\n suspension:\n rebuilt.suspension === undefined\n ? undefined\n : {\n reason: rebuilt.suspension.reason,\n suspendedAtMillis: DateTime.toEpochMillis(rebuilt.suspension.suspendedAt),\n },\n unknownMark:\n rebuilt.unknownToolCallIds.length === 0\n ? undefined\n : {\n reason: \"Unresolved Tool execution recovered from the canonical log\",\n toolCallIds: rebuilt.unknownToolCallIds,\n },\n approvalDecisions: new Map(rebuilt.approvals.map((intent) => [intent.toolCallId, intent])),\n unknownResolutions: new Map(\n rebuilt.resolutions.map((intent) => [\n JSON.stringify([intent.toolCallId, unknownResolutionKind(intent.resolution)]),\n { intent },\n ]),\n ),\n };\n};\n\n/** Linkage equality: both absent, or both present naming the same parent Tool Call. */\nconst sameParentLinkage = (\n left: ParentLinkage | undefined,\n right: ParentLinkage | undefined,\n): boolean =>\n left === undefined\n ? right === undefined\n : right !== undefined &&\n left.parentSubmissionId === right.parentSubmissionId &&\n left.parentToolCallId === right.parentToolCallId;\n\nconst ownershipLost = (stored: StoredSubmission): OwnershipLost =>\n OwnershipLost.make({ submissionId: stored.row.submissionId });\n\nconst withSubmission = (state: LedgerState, stored: StoredSubmission): LedgerState => {\n const row = stored.row;\n const previous = state.submissions.get(row.submissionId);\n let directory = state.byThread.get(row.threadId);\n\n if (directory === undefined) {\n directory = {\n ordered: [],\n commands: { aborts: [], approvals: [], resolutions: [] },\n children: 0,\n workers: 0,\n reservations: 0,\n };\n state.byThread.set(row.threadId, directory);\n }\n if (previous === undefined) {\n let low = 0;\n let high = directory.ordered.length;\n\n while (low < high) {\n const middle = Math.floor((low + high) / 2);\n const candidate = state.submissions.get(directory.ordered[middle]);\n\n if (candidate !== undefined && candidate.row.queueSequence < row.queueSequence)\n low = middle + 1;\n else high = middle;\n }\n directory.ordered.splice(low, 0, row.submissionId);\n state.receipts.set(row.receiptId, row.submissionId);\n state.admissionIndex.set(\n admissionKey(row.threadId, row.principal, row.idempotencyKey),\n row.submissionId,\n );\n const latest = state.latestByThread.get(row.threadId);\n\n if (\n latest === undefined ||\n (state.submissions.get(latest)?.row.queueSequence ?? -1) < row.queueSequence\n )\n state.latestByThread.set(row.threadId, row.submissionId);\n }\n directory.children +=\n Number(row.state !== \"settled\" && row.parentLinkage !== undefined) -\n Number(\n previous !== undefined &&\n previous.row.state !== \"settled\" &&\n previous.row.parentLinkage !== undefined,\n );\n directory.workers +=\n Number(row.state !== \"settled\" && row.workerAdmissionJson !== undefined) -\n Number(\n previous !== undefined &&\n previous.row.state !== \"settled\" &&\n previous.row.workerAdmissionJson !== undefined,\n );\n if (stored.abortIntent !== undefined && previous?.abortIntent === undefined)\n retainCommand(directory.commands.aborts, row.submissionId);\n if (stored.approvalDecisions !== previous?.approvalDecisions)\n for (const id of stored.approvalDecisions.keys())\n if (!previous?.approvalDecisions.has(id))\n retainCommand(directory.commands.approvals, row.submissionId, id);\n if (stored.unknownResolutions !== previous?.unknownResolutions)\n for (const [id, value] of stored.unknownResolutions)\n if (!previous?.unknownResolutions.has(id))\n retainCommand(\n directory.commands.resolutions,\n row.submissionId,\n value.intent.toolCallId,\n id,\n );\n if (\n previous?.joinedHostSubmissionId !== undefined &&\n previous.joinedHostSubmissionId !== stored.joinedHostSubmissionId\n )\n state.joinsByHost.get(previous.joinedHostSubmissionId)?.delete(row.submissionId);\n if (stored.joinedHostSubmissionId !== undefined) {\n let joins = state.joinsByHost.get(stored.joinedHostSubmissionId);\n\n if (joins === undefined)\n state.joinsByHost.set(stored.joinedHostSubmissionId, (joins = new Set()));\n joins.add(row.submissionId);\n }\n let active = state.activeByThread.get(row.threadId);\n\n if (active === undefined) state.activeByThread.set(row.threadId, (active = new Set()));\n if (row.state === \"settled\") active.delete(row.submissionId);\n else active.add(row.submissionId);\n state.submissions.set(row.submissionId, stored);\n\n return state;\n};\n\nconst withChildReservation = (\n state: LedgerState,\n reservation: StoredChildReservation,\n): LedgerState => {\n const previous = state.childReservations.get(reservation.reservationId);\n\n state.childReservations.set(reservation.reservationId, reservation);\n let children = state.childrenByParent.get(reservation.parentSubmissionId);\n\n if (children === undefined)\n state.childrenByParent.set(reservation.parentSubmissionId, (children = new Set()));\n children.add(reservation.reservationId);\n const parent = state.submissions.get(reservation.parentSubmissionId);\n\n if (parent !== undefined) {\n const directory = state.byThread.get(parent.row.threadId);\n\n if (directory !== undefined) {\n directory.reservations +=\n Number(reservation.status !== \"released\") -\n Number(previous !== undefined && previous.status !== \"released\");\n }\n }\n\n return state;\n};\n\nconst findHead = (state: LedgerState, threadId: ThreadId): StoredSubmission | undefined => {\n let head: StoredSubmission | undefined;\n\n for (const id of state.activeByThread.get(threadId) ?? []) {\n const stored = state.submissions.get(id);\n\n if (\n stored === undefined ||\n (stored.row.state === \"unknown\" && stored.abortIntent === undefined)\n )\n continue;\n if (head === undefined || stored.row.queueSequence < head.row.queueSequence) head = stored;\n }\n\n return head;\n};\n\nfunction* threadRows(state: LedgerState, threadId: ThreadId, after = -1) {\n const ordered = state.byThread.get(threadId)?.ordered ?? [];\n let low = 0;\n let high = ordered.length;\n\n while (low < high) {\n const middle = Math.floor((low + high) / 2);\n\n if ((state.submissions.get(ordered[middle])?.row.queueSequence ?? -1) <= after)\n low = middle + 1;\n else high = middle;\n }\n for (let index = low; index < ordered.length; index++) {\n const stored = state.submissions.get(ordered[index]);\n\n if (stored !== undefined) yield stored;\n }\n}\n\n/**\n * Reference in-memory SubmissionLedger. Admission, ordered selection and canonical settlement\n * share the Memory kernel's mutation gate. The kernel Scope owns local Run capabilities;\n * selecting work does not write execution ownership into the ledger.\n *\n * Joining retains the contiguous ready prefix and exact host linkage. Canonical settlement\n * authorizes finalization and child wake repair, while bound sessions reject late commands.\n * Child wake checks read the child rows directly, without a separate notification marker.\n * Admission resolution is strongly consistent; resolveAdmissionFault injects the\n * Indeterminate outcome for existing caller conformance workflows.\n */\nconst makeSubmissionLedger = (options: MemorySubmissionLedgerOptions = {}) =>\n Effect.gen(function* () {\n const journal = yield* MemoryThreadStoreKernel;\n const crypto = yield* Crypto.Crypto;\n\n const mintIdentity = (operation: string) =>\n crypto.randomUUIDv4().pipe(\n Effect.flatMap(Schema.decodeEffect(MemoryIdentityNonce)),\n Effect.mapError((cause) => ledgerError(operation, \"Cannot mint a Memory identity\", cause)),\n );\n\n const state = yield* Ref.make<LedgerState>({\n byThread: new Map(),\n receipts: new Map(),\n joinsByHost: new Map(),\n childrenByParent: new Map(),\n submissions: new Map(),\n admissionIndex: new Map(),\n lanes: new Map(),\n childReservations: new Map(),\n freshAdmissionSequence: 0,\n stoppedWorkers: new Map(),\n latestByThread: new Map(),\n activeByThread: new Map(),\n });\n\n yield* journal.registerWorkOwner(\"admissions\", {\n threads: (request) =>\n Ref.get(state).pipe(\n Effect.map((current) => {\n const candidates = boundedWorkSelection<ThreadId>(\n request.limit,\n (id) => id,\n request.afterThreadId,\n );\n\n for (const [threadId, ids] of current.activeByThread)\n if (ids.size > 0) candidates.add(threadId);\n const threadIds = candidates.values;\n\n const afterThreadId = threadIds.length === request.limit ? threadIds.at(-1) : undefined;\n\n return {\n threadIds,\n ...(afterThreadId === undefined ? {} : { afterThreadId }),\n };\n }),\n ),\n page: (threadId, after, limit) =>\n Effect.gen(function* () {\n const current = yield* Ref.get(state);\n\n const candidates = boundedWorkSelection<SubmissionId>(limit + 1, (id) => id, after);\n\n for (const id of current.activeByThread.get(threadId) ?? []) candidates.add(id);\n const ids = candidates.values;\n\n const entries = [];\n\n for (const id of ids.slice(0, limit)) {\n const stored = current.submissions.get(id);\n\n if (\n stored === undefined ||\n stored.row.threadId !== threadId ||\n stored.row.state === \"settled\"\n )\n return yield* ThreadStoreError.make({\n operation: \"admission work\",\n message: \"Active admission index is incomplete or corrupt\",\n });\n const entry = admissionWork(stored.row);\n\n entries.push(\n stored.suspension === undefined\n ? entry\n : {\n ...entry,\n wait:\n stored.suspension.reason._tag === \"WaitingForChild\"\n ? (\"child\" as const)\n : (\"approval\" as const),\n },\n );\n }\n const next = ids.length > limit ? ids[limit - 1] : undefined;\n\n return { entries, ...(next === undefined ? {} : { after: next }) };\n }),\n });\n\n const admissionFence = yield* SubmissionAdmissionFence;\n\n const capabilities = Effect.succeed(LedgerCapabilities.make({ durability: \"non-durable\" }));\n\n const admit: SubmissionLedger[\"Service\"][\"admit\"] = Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(AdmissionRequest, \"admit\", unvalidated);\n\n const workerAdmissionJson =\n request.workerAdmission === undefined\n ? undefined\n : yield* Schema.encodeEffect(Schema.fromJsonString(WorkerAdmission))(\n request.workerAdmission,\n ).pipe(\n Effect.mapError(() => ledgerError(\"admit\", \"Invalid worker admission metadata\")),\n );\n\n const messageAdmissionJson =\n request.messageAdmission === undefined\n ? undefined\n : yield* Schema.encodeEffect(Schema.fromJsonString(InputMessage))(\n request.messageAdmission,\n ).pipe(\n Effect.mapError(() => ledgerError(\"admit\", \"Invalid message admission metadata\")),\n );\n\n yield* journal\n .checkThreadCapacity(request.threadId)\n .pipe(Effect.mapError((cause) => ledgerError(\"admit\", cause.message, cause)));\n const nowMillis = yield* Clock.currentTimeMillis;\n const retained = yield* Ref.get(state);\n\n const identity = retained.admissionIndex.has(\n admissionKey(request.threadId, request.principal, request.idempotencyKey),\n )\n ? Result.fail(ledgerError(\"admit\", \"Retained admission disappeared\"))\n : yield* Effect.result(mintIdentity(\"admit\"));\n\n const services = yield* Effect.context<never>();\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n (\n | Decision<AdmissionResult, AdmissionConflict | AdmissionPolicyError | LedgerError>\n | { readonly _tag: \"cause\"; readonly cause: Cause.Cause<AdmissionPolicyError> }\n ),\n LedgerState,\n ] => {\n const key = admissionKey(request.threadId, request.principal, request.idempotencyKey);\n const existingId = current.admissionIndex.get(key);\n\n if (existingId !== undefined) {\n const existing = current.submissions.get(existingId);\n\n if (existing === undefined) {\n return [\n failure(ledgerError(\"admit\", \"Admission index references a missing Submission\")),\n current,\n ];\n }\n // A replay must repeat the exact canonical input AND the exact parent linkage\n // (or its absence): linkage is immutable lineage (spec §12 step 5, SUB-016).\n if (\n existing.row.inputDigest !== request.inputDigest ||\n !sameParentLinkage(existing.row.parentLinkage, request.parentLinkage) ||\n existing.row.admissionGroup !== request.admissionGroup ||\n !Schema.toEquivalence(Schema.optional(WorkerAdmission))(\n existing.row.workerAdmissionJson === undefined\n ? undefined\n : Schema.decodeSync(Schema.fromJsonString(WorkerAdmission))(\n existing.row.workerAdmissionJson,\n ),\n request.workerAdmission,\n ) ||\n !Schema.toEquivalence(Schema.optional(InputMessage))(\n existing.row.messageAdmissionJson === undefined\n ? undefined\n : Schema.decodeSync(Schema.fromJsonString(InputMessage))(\n existing.row.messageAdmissionJson,\n ),\n request.messageAdmission,\n ) ||\n !Schema.toEquivalence(Schema.optional(Schema.Json))(\n existing.row.admissionFence,\n request.admissionFence,\n )\n ) {\n return [\n failure(\n AdmissionConflict.make({\n threadId: request.threadId,\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n existingInputDigest: existing.row.inputDigest,\n attemptedInputDigest: request.inputDigest,\n }),\n ),\n current,\n ];\n }\n\n return [\n success(\n AdmissionResult.make({\n submissionId: existing.row.submissionId,\n receiptId: existing.row.receiptId,\n queueSequence: existing.row.queueSequence,\n state: existing.row.state,\n replayed: true,\n }),\n ),\n current,\n ];\n }\n\n if (current.stoppedWorkers.has(request.threadId))\n return [\n failure(AdmissionPolicyError.make({ reason: \"refused\", code: \"worker-stopped\" })),\n current,\n ];\n\n // A Thread's first admission fixes its worker origin before canonical materialization.\n const first = threadRows(current, request.threadId).next().value;\n\n if (first !== undefined) {\n const previous =\n first.row.workerAdmissionJson === undefined\n ? undefined\n : Schema.decodeSync(Schema.fromJsonString(WorkerAdmission))(\n first.row.workerAdmissionJson,\n );\n\n if (\n !Schema.toEquivalence(Schema.optional(WorkerAdmission.fields.origin))(\n previous?.origin,\n request.workerAdmission?.origin,\n )\n )\n return [\n failure(\n AdmissionPolicyError.make({\n reason: \"refused\",\n code: \"worker-origin-conflict\",\n }),\n ),\n current,\n ];\n }\n // A memory policy and the ledger mutation share one synchronous critical section.\n // An asynchronous policy cannot fence this Ref and therefore fails closed.\n const checked = Effect.runSyncExitWith(services)(admissionFence.check(request));\n\n if (Exit.isFailure(checked)) {\n return [{ _tag: \"cause\", cause: checked.cause }, current];\n }\n if (\n request.admissionGroup !== undefined &&\n Array.from(current.activeByThread.get(request.threadId) ?? []).some(\n (id) => current.submissions.get(id)?.row.admissionGroup === request.admissionGroup,\n )\n )\n return [\n failure(AdmissionPolicyError.make({ reason: \"occupied\", code: \"admission-group\" })),\n current,\n ];\n\n // A concurrent matching acceptance still wins over a failed fresh allocation.\n if (Result.isFailure(identity)) return [failure(identity.failure), current];\n\n const lane = current.lanes.get(request.threadId) ?? {\n nextQueueSequence: 1,\n };\n\n const freshAdmissionSequence = current.freshAdmissionSequence + 1;\n\n if (!Number.isSafeInteger(freshAdmissionSequence))\n return [\n failure(ledgerError(\"admit\", \"Fresh admission sequence is exhausted\")),\n current,\n ];\n\n // Native work scans compare Submission identities lexically.\n const orderedIdentity = `${String(freshAdmissionSequence).padStart(16, \"0\")}-${identity.success}`;\n const submissionId = decodeSubmissionId(`submission-memory-${orderedIdentity}`);\n const receiptId = decodeReceiptId(`receipt-memory-${orderedIdentity}`);\n\n if (current.submissions.has(submissionId) || current.receipts.has(receiptId))\n return [\n failure(ledgerError(\"admit\", \"Fresh admission identity already exists\")),\n current,\n ];\n\n const row: SubmissionRow = {\n submissionId,\n threadId: request.threadId,\n queueSequence: decodeQueueSequence(lane.nextQueueSequence),\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n agentId: request.agentId,\n agentDigests: request.agentDigests,\n deploymentId: request.deploymentId,\n inputPayload: request.inputPayload,\n inputDigest: request.inputDigest,\n receiptId,\n state: \"admitted\",\n settledOutcome: undefined,\n createdAtMillis: nowMillis,\n readyAtMillis: undefined,\n parentLinkage: request.parentLinkage,\n ...(workerAdmissionJson === undefined ? {} : { workerAdmissionJson }),\n ...(messageAdmissionJson === undefined ? {} : { messageAdmissionJson }),\n ...(request.admissionGroup === undefined\n ? {}\n : { admissionGroup: request.admissionGroup }),\n ...(request.admissionFence === undefined\n ? {}\n : { admissionFence: request.admissionFence }),\n };\n\n const stored: StoredSubmission = {\n row,\n inputApplied: undefined,\n finalization: undefined,\n abortIntent: undefined,\n joinedHostSubmissionId: undefined,\n suspension: undefined,\n unknownMark: undefined,\n approvalDecisions: new Map<ToolCallId, ApprovalDecisionIntent>(),\n unknownResolutions: new Map<string, StoredUnknownResolution>(),\n };\n\n if (!admissionFitsTransfer(request.threadId, toAdmission(row)))\n return [failure(transferCapacityError(\"admit\")), current];\n\n journal.initializeWork(request.threadId);\n const admissionIndex = current.admissionIndex;\n\n const lanes = current.lanes.set(request.threadId, {\n nextQueueSequence: lane.nextQueueSequence + 1,\n });\n\n return [\n success(\n AdmissionResult.make({\n submissionId: row.submissionId,\n receiptId: row.receiptId,\n queueSequence: row.queueSequence,\n state: row.state,\n replayed: false,\n }),\n ),\n {\n ...withSubmission(current, stored),\n admissionIndex,\n lanes,\n freshAdmissionSequence,\n },\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n if (decision._tag === \"cause\") {\n for (const reason of decision.cause.reasons) {\n if (Cause.isDieReason(reason) && Cause.isAsyncFiberError(reason.defect)) {\n yield* Fiber.interrupt(reason.defect.fiber);\n\n return yield* AdmissionPolicyError.make({\n reason: \"unavailable\",\n code: \"synchronous-memory-policy-required\",\n });\n }\n }\n\n return yield* Effect.failCause(decision.cause);\n }\n\n return decision.value;\n }, Effect.uninterruptible);\n\n const markReady: SubmissionLedger[\"Service\"][\"markReady\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(MarkReadyRequest, \"markReady\", unvalidated);\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"markReady\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n if (stored.row.state !== \"admitted\") return [success(undefined), current];\n\n return [\n success(undefined),\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"ready\", readyAtMillis: nowMillis },\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const lookup: SubmissionLedger[\"Service\"][\"lookup\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(SubmissionLookup, \"lookup\", unvalidated);\n const current = yield* Ref.get(state);\n\n const submissionId =\n request._tag === \"SubmissionLookupById\"\n ? request.submissionId\n : current.admissionIndex.get(\n admissionKey(request.threadId, request.principal, request.idempotencyKey),\n );\n\n const stored =\n submissionId === undefined ? undefined : current.submissions.get(submissionId);\n\n return stored === undefined ? Option.none() : Option.some(toSnapshot(stored.row));\n },\n );\n\n const resolveAdmission: SubmissionLedger[\"Service\"][\"resolveAdmission\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(SubmissionLookupByKey, \"resolveAdmission\", unvalidated);\n\n // Test-only fault seam: lets suites exercise the Indeterminate classification that a\n // single strongly consistent store never produces on its own (SUB-031, P6 honesty).\n if (options.resolveAdmissionFault !== undefined) {\n const fault = yield* options.resolveAdmissionFault;\n\n if (Option.isSome(fault)) {\n return AdmissionIndeterminate.make({ reason: fault.value });\n }\n }\n const current = yield* Ref.get(state);\n\n const submissionId = current.admissionIndex.get(\n admissionKey(request.threadId, request.principal, request.idempotencyKey),\n );\n\n const stored =\n submissionId === undefined ? undefined : current.submissions.get(submissionId);\n\n return stored === undefined\n ? AdmissionNotAdmitted.make()\n : AdmissionAdmitted.make({ submission: toSnapshot(stored.row) });\n },\n );\n\n const selectHead: SubmissionLedger[\"Service\"][\"selectHead\"] = Effect.fn(\n \"MemorySubmissionLedger.selectHead\",\n )((unvalidated) =>\n Effect.gen(function* () {\n const request = yield* validate(ClaimRequest, \"claim\", unvalidated);\n const identity = yield* mintIdentity(\"claim\");\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<Option.Option<Claim>, LedgerError>, LedgerState] => {\n if (journal.owner.hasOwner(request.threadId)) return [success(Option.none()), current];\n let head = findHead(current, request.threadId);\n\n if (request.handoff !== undefined) {\n const handoff = request.handoff;\n\n const candidates = Array.from(\n current.activeByThread.get(request.threadId) ?? [],\n (id) => current.submissions.get(id),\n )\n .filter(\n (entry): entry is StoredSubmission =>\n entry !== undefined &&\n !(entry.row.state === \"unknown\" && entry.abortIntent === undefined),\n )\n .sort((a, b) => a.row.queueSequence - b.row.queueSequence);\n\n for (const candidate of candidates) {\n if (candidate.row.submissionId === handoff.submissionId) {\n head = candidate;\n break;\n }\n if (\n !handoff.deferredSubmissionIds.includes(candidate.row.submissionId) ||\n candidate.row.state !== \"input-applied\" ||\n candidate.abortIntent !== undefined\n )\n return [success(Option.none()), current];\n }\n if (\n head?.row.submissionId !== handoff.submissionId ||\n (head.row.state !== \"ready\" && head.row.state !== \"input-applied\")\n )\n return [success(Option.none()), current];\n }\n\n if (head === undefined) return [success(Option.none()), current];\n if (BLOCKED_HEAD_STATES.has(head.row.state)) return [success(Option.none()), current];\n\n return [\n success(\n Option.some(\n Claim.make({\n submissionId: head.row.submissionId,\n attemptId: decodeAttemptId(`attempt-memory-${identity}`),\n inputPayload: head.row.inputPayload,\n }),\n ),\n ),\n current,\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n }),\n );\n\n const markInputApplied: SubmissionLedger[\"Service\"][\"markInputApplied\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(MarkInputAppliedRequest, \"markInputApplied\", unvalidated);\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, OwnershipLost | LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(\n ledgerError(\"markInputApplied\", `Unknown Submission ${request.submissionId}`),\n ),\n current,\n ];\n }\n if (!journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId)) {\n return [failure(ownershipLost(stored)), current];\n }\n\n if (stored.inputApplied !== undefined) {\n if (\n stored.inputApplied.recordId === request.recordId &&\n stored.inputApplied.sequence === request.sequence\n ) {\n return [success(undefined), current];\n }\n\n return [\n failure(\n ledgerError(\n \"markInputApplied\",\n `A different canonical input marker is already recorded for Submission ${request.submissionId}`,\n ),\n ),\n current,\n ];\n }\n\n const marker = InputAppliedMarker.make({\n recordId: request.recordId,\n sequence: request.sequence,\n });\n\n const row: SubmissionRow =\n STATE_RANK[stored.row.state] < STATE_RANK[\"input-applied\"]\n ? { ...stored.row, state: \"input-applied\" }\n : stored.row;\n\n return [\n success(undefined),\n withSubmission(current, { ...stored, row, inputApplied: marker }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const canonicalSettlement = Effect.fnUntraced(function* (submission: SubmissionRow) {\n const record = yield* journal.record(\n submission.threadId,\n submissionSettlementRecordId(submission.submissionId),\n );\n\n if (record === undefined) return undefined;\n const settlement = yield* validateCanonicalSettlement(record, submission);\n\n return { record, settlement };\n });\n\n const publish: SettlementPublisher[\"Service\"][\"publish\"] = Effect.fn(\n \"MemorySettlementPublisher.publish\",\n )(function* (input) {\n const { request, record, settlement } = yield* validatePublication(input);\n const prepared = yield* journal.prepareAppend(request.append);\n\n return yield* journal.owner.withProgress(\n request.append.threadId,\n journal.withMutation(\n Effect.gen(function* () {\n const current = yield* Ref.get(state);\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined)\n return yield* ledgerError(\"publish settlement\", \"Unknown Submission\");\n if (stored.row.threadId !== prepared.request.threadId)\n return yield* ledgerError(\"publish settlement\", \"Publication targets another Thread\");\n yield* validateCanonicalSettlement(record, stored.row);\n const existing = yield* canonicalSettlement(stored.row);\n const tail = yield* journal.tail(stored.row.threadId);\n\n // Replay still requires authority: finalization releases Owned tokens, while\n // retained host linkage or abort intent can authorize tokenless settled replay.\n switch (request.authority._tag) {\n case \"Owned\":\n if (!journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId))\n return yield* ownershipLost(stored);\n yield* validateCanonicalSettlement(record, {\n submissionId: request.submissionId,\n receiptId: stored.row.receiptId,\n ...(settlement.outcome === \"aborted\" && settlement.runId === undefined\n ? {}\n : { runId: runIdForSubmission(request.submissionId) }),\n });\n break;\n case \"Joined\": {\n if (\n (stored.row.state !== \"joined\" &&\n !(stored.row.state === \"settled\" && existing !== undefined)) ||\n stored.joinedHostSubmissionId !== request.authority.hostSubmissionId\n )\n return yield* ledgerError(\n \"publish settlement\",\n \"Submission is not joined to this host\",\n );\n const host = current.submissions.get(request.authority.hostSubmissionId);\n\n const canonicalHost =\n host === undefined || host.row.threadId !== stored.row.threadId\n ? undefined\n : yield* canonicalSettlement(host.row);\n\n if (canonicalHost === undefined)\n return yield* ledgerError(\n \"publish settlement\",\n \"Joined host has no canonical settlement\",\n );\n yield* validateJoinedSettlement(settlement, canonicalHost.settlement);\n break;\n }\n case \"QueuedAbort\":\n if (\n (stored.row.state !== \"ready\" &&\n !(stored.row.state === \"settled\" && existing !== undefined)) ||\n stored.abortIntent === undefined ||\n journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId) ||\n settlement.outcome !== \"aborted\"\n )\n return yield* ledgerError(\n \"publish settlement\",\n \"Submission is not an unclaimed queued abort\",\n );\n yield* validateCanonicalSettlement(record, {\n submissionId: request.submissionId,\n receiptId: stored.row.receiptId,\n runId: undefined,\n });\n break;\n }\n if (existing !== undefined)\n return SettlementPublicationResult.make({\n record: existing.record,\n tailSequence: tail.tailSequence,\n replayed: true,\n });\n if (stored.row.state === \"settled\")\n return yield* ledgerError(\n \"publish settlement\",\n \"Finalized Submission has no canonical settlement\",\n );\n const appended = yield* journal.appendPrepared(prepared);\n\n return SettlementPublicationResult.make({\n record,\n tailSequence: appended.lastSequence,\n replayed: false,\n });\n }),\n ),\n );\n });\n\n const finalizeSettlement: SubmissionLedger[\"Service\"][\"finalizeSettlement\"] = Effect.fn(\n \"MemorySubmissionLedger.finalizeSettlement\",\n )((unvalidated) =>\n Effect.gen(function* () {\n const request = yield* validate(SettlementFinalization, \"finalizeSettlement\", unvalidated);\n const before = (yield* Ref.get(state)).submissions.get(request.submissionId);\n const canonical = before === undefined ? undefined : yield* canonicalSettlement(before.row);\n\n if (canonical === undefined)\n return yield* ledgerError(\"finalizeSettlement\", \"Submission has no canonical settlement\");\n const { record, settlement } = canonical;\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [Decision<Settlement, SettlementConflict | LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(\n ledgerError(\"finalizeSettlement\", `Unknown Submission ${request.submissionId}`),\n ),\n current,\n ];\n }\n const settlementFailure = settlementFailureFromRecord(record);\n\n if (settlement.settlementId !== request.settlementId) {\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: settlement.outcome,\n }),\n ),\n current,\n ];\n }\n if (stored.finalization !== undefined) {\n if (\n stored.row.state !== \"settled\" ||\n stored.row.settledOutcome !== settlement.outcome ||\n stored.finalization.settlementId !== request.settlementId ||\n stored.finalization.recordId !== record.recordId\n )\n return [\n failure(\n ledgerError(\n \"finalizeSettlement\",\n \"Finalized identity disagrees with canonical settlement\",\n ),\n ),\n current,\n ];\n\n return [\n success(\n Settlement.make({\n submissionId: stored.row.submissionId,\n settlementId: settlement.settlementId,\n receiptId: stored.row.receiptId,\n outcome: settlement.outcome,\n ...(settlementFailure === undefined ? {} : { failure: settlementFailure }),\n settledAt: utc(stored.finalization.finalizedAtMillis),\n }),\n ),\n current,\n ];\n }\n if (stored.row.state === \"settled\")\n return [\n failure(ledgerError(\"finalizeSettlement\", \"Finalized timestamp is missing\")),\n current,\n ];\n\n const terminal =\n stored.row.workerAdmissionJson === undefined\n ? undefined\n : workerTerminalFromRecord(toSnapshot(stored.row), record);\n\n const latestId = current.latestByThread.get(stored.row.threadId);\n const latest = latestId === undefined ? undefined : current.submissions.get(latestId);\n\n const pendingNewer =\n terminal === \"completed\" &&\n latest !== undefined &&\n latest.row.queueSequence > stored.row.queueSequence &&\n !(\n latest.joinedHostSubmissionId === stored.row.submissionId &&\n latest.inputApplied !== undefined\n );\n\n let sealed = current;\n\n if (\n terminal !== undefined &&\n !pendingNewer &&\n !current.stoppedWorkers.has(stored.row.threadId)\n ) {\n const submissions = current.submissions;\n\n if (!transferPageFits(stored.row.threadId))\n return [failure(transferCapacityError(\"finalizeSettlement\")), current];\n\n // Validate every fresh fact before mutating, without retaining a second active set.\n for (const apply of [false, true]) {\n for (const id of current.activeByThread.get(stored.row.threadId) ?? []) {\n const other = submissions.get(id);\n\n if (other === undefined) continue;\n if (\n id !== stored.row.submissionId &&\n !(\n other.joinedHostSubmissionId === stored.row.submissionId &&\n other.inputApplied !== undefined\n ) &&\n other.abortIntent === undefined\n ) {\n const abortIntent = AbortIntent.make({\n submissionId: id,\n author: stored.row.principal,\n reason: `Worker assignment ${terminal}`,\n requestedAt: utc(nowMillis),\n });\n\n if (!apply && !abortFitsTransfer(other.row.threadId, abortIntent))\n return [failure(transferCapacityError(\"finalizeSettlement\")), current];\n if (apply)\n withSubmission(current, {\n ...other,\n abortIntent,\n });\n }\n }\n }\n sealed = {\n ...current,\n submissions,\n stoppedWorkers: current.stoppedWorkers.set(stored.row.threadId, terminal),\n };\n }\n\n const next = withSubmission(sealed, {\n ...stored,\n row: { ...stored.row, state: \"settled\", settledOutcome: settlement.outcome },\n finalization: {\n settlementId: settlement.settlementId,\n recordId: record.recordId,\n finalizedAtMillis: nowMillis,\n },\n });\n\n return [\n success(\n Settlement.make({\n submissionId: stored.row.submissionId,\n settlementId: settlement.settlementId,\n receiptId: stored.row.receiptId,\n outcome: settlement.outcome,\n ...(settlementFailure === undefined ? {} : { failure: settlementFailure }),\n settledAt: utc(nowMillis),\n }),\n ),\n next,\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n if (before !== undefined)\n journal.owner.closeSubmission(before.row.threadId, request.submissionId);\n\n return decision.value;\n }),\n );\n\n const inspectWorker = Effect.fnUntraced(function* (threadId: ThreadId) {\n const current = yield* Ref.get(state);\n const latestId = current.latestByThread.get(threadId);\n const latest = latestId === undefined ? undefined : current.submissions.get(latestId);\n\n const active = [...(current.activeByThread.get(threadId) ?? [])]\n .flatMap((id) => {\n const row = current.submissions.get(id);\n\n return row === undefined ? [] : [row];\n })\n .sort((a, b) => a.row.queueSequence - b.row.queueSequence)[0];\n\n const terminal = current.stoppedWorkers.get(threadId);\n\n return WorkerLedgerState.make({\n latest: latest === undefined ? null : toSnapshot(latest.row),\n active: active === undefined ? null : toSnapshot(active.row),\n stopped: current.stoppedWorkers.has(threadId),\n ...(terminal === undefined ? {} : { terminal }),\n });\n });\n\n const stopWorker = Effect.fnUntraced(function* (unvalidated: WorkerStopCommand) {\n const request = yield* validate(WorkerStopCommand, \"stopWorker\", unvalidated);\n const now = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<number, LedgerError>, LedgerState] => {\n const submissions = current.submissions;\n let owned = 0;\n\n if (!current.stoppedWorkers.has(request.threadId) && !transferPageFits(request.threadId))\n return [failure(transferCapacityError(\"stopWorker\")), current];\n\n // Both passes run in this Ref.modify; no mutation precedes complete validation.\n for (const apply of [false, true]) {\n for (const id of current.activeByThread.get(request.threadId) ?? []) {\n const stored = submissions.get(id);\n\n if (stored === undefined) continue;\n if (!apply && journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId))\n owned++;\n if (stored.abortIntent === undefined) {\n const abortIntent = AbortIntent.make({\n submissionId: id,\n author: request.author,\n reason: \"Worker owner stopped the worker\",\n requestedAt: utc(now),\n });\n\n if (!apply && !abortFitsTransfer(stored.row.threadId, abortIntent))\n return [failure(transferCapacityError(\"stopWorker\")), current];\n if (apply) withSubmission(current, { ...stored, abortIntent });\n }\n }\n }\n\n return [\n success(owned),\n {\n ...current,\n submissions,\n stoppedWorkers: current.stoppedWorkers.has(request.threadId)\n ? current.stoppedWorkers\n : current.stoppedWorkers.set(request.threadId, undefined),\n },\n ] as const;\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const requestAbort: SubmissionLedger[\"Service\"][\"requestAbort\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(AbortCommand, \"requestAbort\", unvalidated);\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<AbortIntent, SettlementConflict | JoinedToHost | LedgerError>,\n LedgerState,\n ] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"requestAbort\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n // A joined Submission settles WITH its host; the abort target is the host (plan\n // §2.5). A joining Submission still records the intent: it is honored only if the\n // host has not consumed the input (revert-then-abort).\n if (stored.row.state === \"joined\") {\n if (stored.joinedHostSubmissionId === undefined) {\n return [\n failure(\n ledgerError(\n \"requestAbort\",\n `Joined Submission ${request.submissionId} is missing its host linkage`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n JoinedToHost.make({\n submissionId: request.submissionId,\n hostSubmissionId: stored.joinedHostSubmissionId,\n }),\n ),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"requestAbort\",\n `Settled Submission ${request.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n if (stored.abortIntent !== undefined) return [success(stored.abortIntent), current];\n\n const intent = AbortIntent.make({\n submissionId: request.submissionId,\n author: request.author,\n reason: request.reason,\n requestedAt: utc(nowMillis),\n });\n\n if (!abortFitsTransfer(stored.row.threadId, intent))\n return [failure(transferCapacityError(\"requestAbort\")), current];\n\n return [success(intent), withSubmission(current, { ...stored, abortIntent: intent })];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const claimJoining: SubmissionLedger[\"Service\"][\"claimJoining\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(ClaimJoiningRequest, \"claimJoining\", unvalidated);\n const published = new Map<SubmissionId, Settlement[\"outcome\"]>();\n\n const before = yield* Ref.get(state);\n\n for (const id of before.activeByThread.get(request.threadId) ?? []) {\n const stored = before.submissions.get(id);\n\n if (stored === undefined || stored.row.state !== \"ready\") continue;\n const canonical = yield* canonicalSettlement(stored.row);\n\n if (canonical !== undefined)\n published.set(stored.row.submissionId, canonical.settlement.outcome);\n }\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ReadonlyArray<JoiningClaim>, OwnershipLost | LedgerError>,\n LedgerState,\n ] => {\n if (current.stoppedWorkers.has(request.threadId)) return [success([]), current];\n\n const host = current.submissions.get(request.hostSubmissionId);\n\n if (host === undefined) {\n return [\n failure(\n ledgerError(\"claimJoining\", `Unknown Submission ${request.hostSubmissionId}`),\n ),\n current,\n ];\n }\n if (host.row.threadId !== request.threadId) {\n return [\n failure(\n ledgerError(\n \"claimJoining\",\n `Host Submission ${request.hostSubmissionId} does not belong to Thread ${request.threadId}`,\n ),\n ),\n current,\n ];\n }\n if (!journal.owner.hasOwner(host.row.threadId, host.row.submissionId)) {\n return [failure(ownershipLost(host)), current];\n }\n\n const later = threadRows(current, request.threadId, host.row.queueSequence);\n\n const claims: Array<JoiningClaim> = [];\n const submissions = current.submissions;\n\n for (const stored of later) {\n if (claims.length >= request.maxCount) break;\n // Rows already claimed by THIS host extend its contiguous prefix and are skipped;\n // the coordinator re-delivers already-joined input through the coverage rule.\n if (\n (stored.row.state === \"joining\" || stored.row.state === \"joined\") &&\n stored.joinedHostSubmissionId === request.hostSubmissionId\n ) {\n continue;\n }\n // P7 §7(c): an aborted-settled row is a CLOSED obligation, not a gap — recovery\n // settles aborted never-claimed queued work immediately, and settlement order of\n // never-run work is not execution order (DUR-004 bounds execution).\n if (stored.row.state === \"settled\" && stored.row.settledOutcome === \"aborted\") {\n continue;\n }\n // Any other non-ready row — an admitted-not-ready gap in particular — breaks the\n // contiguous ready prefix (plan §2.5); later ready work stays queued (DUR-004).\n if (stored.row.state !== \"ready\") break;\n const terminal = published.get(stored.row.submissionId);\n\n if (terminal === \"aborted\") continue;\n if (terminal !== undefined) break;\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"joining\" },\n joinedHostSubmissionId: request.hostSubmissionId,\n });\n claims.push(\n JoiningClaim.make({\n submissionId: stored.row.submissionId,\n queueSequence: stored.row.queueSequence,\n inputPayload: stored.row.inputPayload,\n }),\n );\n }\n\n return [success(claims), { ...current, submissions }];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const markJoined: SubmissionLedger[\"Service\"][\"markJoined\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(MarkJoinedRequest, \"markJoined\", unvalidated);\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, OwnershipLost | LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"markJoined\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n if (stored.joinedHostSubmissionId === undefined) {\n return [\n failure(\n ledgerError(\n \"markJoined\",\n `Submission ${request.submissionId} was never claimed for joining`,\n ),\n ),\n current,\n ];\n }\n const host = current.submissions.get(stored.joinedHostSubmissionId);\n\n if (host === undefined) {\n return [\n failure(\n ledgerError(\n \"markJoined\",\n `Host Submission ${stored.joinedHostSubmissionId} is missing`,\n ),\n ),\n current,\n ];\n }\n // The lane is host-owned: the presented token must own the HOST's ownership period,\n // which also lets a later host Attempt repair a lost marker from history (DUR-016).\n if (!journal.owner.hasOwner(host.row.threadId, host.row.submissionId)) {\n return [failure(ownershipLost(host)), current];\n }\n if (stored.inputApplied !== undefined) {\n if (\n stored.inputApplied.recordId === request.recordId &&\n stored.inputApplied.sequence === request.sequence\n ) {\n return [success(undefined), current];\n }\n\n return [\n failure(\n ledgerError(\n \"markJoined\",\n `A different join marker is already recorded for Submission ${request.submissionId}`,\n ),\n ),\n current,\n ];\n }\n if (stored.row.state !== \"joining\" && stored.row.state !== \"joined\") {\n return [\n failure(\n ledgerError(\n \"markJoined\",\n `Cannot mark Submission ${request.submissionId} joined from state ${stored.row.state}`,\n ),\n ),\n current,\n ];\n }\n\n const marker = InputAppliedMarker.make({\n recordId: request.recordId,\n sequence: request.sequence,\n });\n\n return [\n success(undefined),\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"joined\" },\n inputApplied: marker,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const revertJoining: SubmissionLedger[\"Service\"][\"revertJoining\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(RevertJoiningRequest, \"revertJoining\", unvalidated);\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"revertJoining\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n // Idempotent and recovery-only: only a still-`joining` Submission reverts; an\n // already-joined (or already-reverted) Submission is a no-op (DUR-016).\n if (stored.row.state !== \"joining\") return [success(undefined), current];\n\n const guard = request.guard;\n\n if (guard !== undefined) {\n if (stored.joinedHostSubmissionId !== guard.hostSubmissionId)\n return [success(undefined), current];\n const host = current.submissions.get(guard.hostSubmissionId);\n\n if (host === undefined || host.row.threadId !== stored.row.threadId) {\n return [\n failure(\n ledgerError(\n \"revertJoining\",\n `Host Submission ${guard.hostSubmissionId} is missing or belongs to another Thread`,\n ),\n ),\n current,\n ];\n }\n if (\n host.row.state !== \"settled\" &&\n !journal.owner.hasOwner(host.row.threadId, host.row.submissionId)\n )\n return [\n failure(\n ledgerError(\"revertJoining\", \"The linked host has no active local session\"),\n ),\n current,\n ];\n }\n\n return [\n success(undefined),\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"ready\" },\n joinedHostSubmissionId: undefined,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const suspend: SubmissionLedger[\"Service\"][\"suspend\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(SuspendRequest, \"suspend\", unvalidated);\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const target = (yield* Ref.get(state)).submissions.get(request.submissionId);\n const canonical = target === undefined ? undefined : yield* canonicalSettlement(target.row);\n const announcedChildren = new Set<SubmissionId>();\n\n if (request.reason._tag === \"WaitingForChild\") {\n const current = yield* Ref.get(state);\n\n for (const { childSubmissionId } of request.reason.children) {\n const child = current.submissions.get(childSubmissionId);\n\n if (child !== undefined && (yield* canonicalSettlement(child.row)) !== undefined)\n announcedChildren.add(childSubmissionId);\n }\n }\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<SuspensionOutcome, OwnershipLost | SettlementConflict | LedgerError>,\n LedgerState,\n ] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"suspend\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"suspend\",\n `Settled Submission ${request.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n // Canonical publication wins over a late parking transition.\n if (canonical !== undefined) {\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: canonical.settlement.outcome,\n }),\n ),\n current,\n ];\n }\n if (!journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId)) {\n return [failure(ownershipLost(stored)), current];\n }\n\n // A covering event that raced ahead of the suspend transaction (an approval decision,\n // or a child settlement observed directly from the child's row in this single store)\n // resumes the caller immediately WITHOUT releasing the lane (plan §2.6, spec §12).\n const alreadyCovered =\n request.reason._tag === \"ApprovalPending\"\n ? approvalDecisionsCover(\n request.reason.toolCallIds,\n (toolCallId) => stored.approvalDecisions.get(toolCallId)?.decision,\n )\n : request.reason.children.every((child) =>\n announcedChildren.has(child.childSubmissionId),\n );\n\n if (alreadyCovered) {\n return [success(\"resume-immediately\" as const), current];\n }\n\n return [\n success(\"suspended\" as const),\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"suspended\" },\n suspension: { reason: request.reason, suspendedAtMillis: nowMillis },\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n if (decision.value === \"suspended\" && target !== undefined)\n journal.owner.closeSubmission(target.row.threadId, request.submissionId);\n\n return decision.value;\n },\n );\n\n const recordApprovalDecision: SubmissionLedger[\"Service\"][\"recordApprovalDecision\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const command = yield* validate(\n ApprovalDecisionCommand,\n \"recordApprovalDecision\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ApprovalDecisionIntent, ApprovalConflict | SettlementConflict | LedgerError>,\n LedgerState,\n ] => {\n const stored = current.submissions.get(command.submissionId);\n\n if (stored === undefined) {\n return [\n failure(\n ledgerError(\n \"recordApprovalDecision\",\n `Unknown Submission ${command.submissionId}`,\n ),\n ),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"recordApprovalDecision\",\n `Settled Submission ${command.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n SettlementConflict.make({\n submissionId: command.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n const existing = stored.approvalDecisions.get(command.toolCallId);\n\n if (existing !== undefined) {\n if (existing.decision !== command.decision) {\n return [\n failure(\n ApprovalConflict.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n existingDecision: existing.decision,\n }),\n ),\n current,\n ];\n }\n\n return [success(existing), current];\n }\n\n const intent = ApprovalDecisionIntent.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n decision: command.decision,\n resolver: command.resolver,\n reason: command.reason,\n decidedAt: utc(nowMillis),\n });\n\n if (!approvalFitsTransfer(stored.row.threadId, intent))\n return [failure(transferCapacityError(\"recordApprovalDecision\")), current];\n\n const approvalDecisions = new Map(stored.approvalDecisions).set(\n command.toolCallId,\n intent,\n );\n\n // A denial or decisions for every pending call wake an ApprovalPending lane:\n // suspended → input-applied. A WaitingForChild suspension wakes\n // only through recordChildSettled.\n const wakes =\n stored.row.state === \"suspended\" &&\n stored.suspension !== undefined &&\n stored.suspension.reason._tag === \"ApprovalPending\" &&\n approvalDecisionsCover(\n stored.suspension.reason.toolCallIds,\n (toolCallId) => approvalDecisions.get(toolCallId)?.decision,\n );\n\n return [\n success(intent),\n withSubmission(current, {\n ...stored,\n row: wakes ? { ...stored.row, state: \"input-applied\" } : stored.row,\n suspension: wakes ? undefined : stored.suspension,\n approvalDecisions,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const markUnknown: SubmissionLedger[\"Service\"][\"markUnknown\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(MarkUnknownRequest, \"markUnknown\", unvalidated);\n\n const target = (yield* Ref.get(state)).submissions.get(request.submissionId);\n const canonical = target === undefined ? undefined : yield* canonicalSettlement(target.row);\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, SettlementConflict | LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"markUnknown\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"markUnknown\",\n `Settled Submission ${request.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n // Canonical publication wins over a late Unknown marking.\n if (canonical !== undefined) {\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: canonical.settlement.outcome,\n }),\n ),\n current,\n ];\n }\n // Idempotent merge: repeating is a no-op; additional open calls extend the marked\n // set while the first recorded reason is kept.\n const existing = stored.unknownMark;\n const known = new Set(existing?.toolCallIds ?? []);\n\n const merged = [\n ...(existing?.toolCallIds ?? []),\n ...request.toolCallIds.filter((toolCallId) => !known.has(toolCallId)),\n ];\n\n return [\n success(undefined),\n withSubmission(current, {\n ...stored,\n row:\n stored.row.state === \"unknown\" ? stored.row : { ...stored.row, state: \"unknown\" },\n unknownMark: { reason: existing?.reason ?? request.reason, toolCallIds: merged },\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const recordUnknownResolution: SubmissionLedger[\"Service\"][\"recordUnknownResolution\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const command = yield* validate(\n UnknownResolutionCommand,\n \"recordUnknownResolution\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const before = (yield* Ref.get(state)).submissions.get(command.submissionId);\n const kind = unknownResolutionKind(command.resolution);\n\n if (\n before !== undefined &&\n kind === \"factual\" &&\n !before.unknownResolutions.has(JSON.stringify([command.toolCallId, kind]))\n ) {\n const runId = runIdForSubmission(before.row.submissionId);\n\n const outcomes = yield* journal.toolCallResults(\n before.row.threadId,\n runId,\n command.toolCallId,\n );\n\n const result = outcomes[0]?.payload;\n\n if (\n outcomes.length > 1 ||\n (result !== undefined &&\n (result._tag !== \"ToolCallSettled\" ||\n result.runId !== runId ||\n result.toolCallId !== command.toolCallId))\n )\n return yield* ledgerError(\n \"recordUnknownResolution\",\n \"Canonical Tool result identity is inconsistent\",\n );\n\n if (\n result?._tag === \"ToolCallSettled\" &&\n !unknownResolutionMatchesResult(command.resolution, result)\n )\n return yield* UnknownResolutionConflict.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n });\n }\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<\n UnknownResolutionIntent,\n UnknownResolutionConflict | SettlementConflict | LedgerError\n >,\n LedgerState,\n ] => {\n const stored = current.submissions.get(command.submissionId);\n\n if (stored === undefined) {\n return [\n failure(\n ledgerError(\n \"recordUnknownResolution\",\n `Unknown Submission ${command.submissionId}`,\n ),\n ),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"recordUnknownResolution\",\n `Settled Submission ${command.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n // Factual closure may outlive settlement; it never restores execution authority.\n if (\n command.resolution._tag !== \"CompletedWithResult\" &&\n command.resolution._tag !== \"NeverHappened\"\n )\n return [\n failure(\n SettlementConflict.make({\n submissionId: command.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n const key = JSON.stringify([command.toolCallId, kind]);\n const existing = stored.unknownResolutions.get(key);\n\n if (\n (existing !== undefined &&\n !equivalentUnknownResolution(existing.intent.resolution, command.resolution)) ||\n (existing === undefined &&\n kind === \"execution\" &&\n stored.unknownResolutions.has(JSON.stringify([command.toolCallId, \"factual\"])))\n ) {\n return [\n failure(\n UnknownResolutionConflict.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n }),\n ),\n current,\n ];\n }\n\n const intent =\n existing?.intent ??\n UnknownResolutionIntent.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n author: command.author,\n reason: command.reason,\n resolution: command.resolution,\n resolvedAt: utc(nowMillis),\n });\n\n if (existing === undefined && !resolutionFitsTransfer(stored.row.threadId, intent))\n return [failure(transferCapacityError(\"recordUnknownResolution\")), current];\n\n const unknownResolutions =\n existing !== undefined\n ? stored.unknownResolutions\n : new Map(stored.unknownResolutions).set(key, {\n intent,\n });\n\n // The lane reopens only when EVERY marked open call has a durable resolution\n // intent: unknown → input-applied (DUR-017). Replays re-run the coverage check so\n // a recovering caller can wake the lane idempotently.\n const wakes =\n stored.row.state === \"unknown\" &&\n stored.unknownMark !== undefined &&\n stored.unknownMark.toolCallIds.every(\n (toolCallId) =>\n unknownResolutions.has(JSON.stringify([toolCallId, \"execution\"])) ||\n unknownResolutions.has(JSON.stringify([toolCallId, \"factual\"])),\n );\n\n return [\n success(intent),\n withSubmission(current, {\n ...stored,\n row: wakes ? { ...stored.row, state: \"input-applied\" } : stored.row,\n unknownMark: wakes ? undefined : stored.unknownMark,\n unknownResolutions,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const recordChildSettled: SubmissionLedger[\"Service\"][\"recordChildSettled\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(\n ChildSettledNotification,\n \"recordChildSettled\",\n unvalidated,\n );\n\n const before = yield* Ref.get(state);\n const waiting = before.submissions.get(request.parentSubmissionId)?.suspension?.reason;\n\n const ids = new Set([\n request.childSubmissionId,\n ...(waiting?._tag === \"WaitingForChild\"\n ? waiting.children.map((child) => child.childSubmissionId)\n : []),\n ]);\n\n const announcedChildren = new Set<SubmissionId>();\n\n for (const id of ids) {\n const child = before.submissions.get(id);\n\n if (child !== undefined && (yield* canonicalSettlement(child.row)) !== undefined)\n announcedChildren.add(id);\n }\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<ChildSettledOutcome, LedgerError>, LedgerState] => {\n const parent = current.submissions.get(request.parentSubmissionId);\n\n if (parent === undefined) {\n return [\n failure(\n ledgerError(\n \"recordChildSettled\",\n `Unknown Submission ${request.parentSubmissionId}`,\n ),\n ),\n current,\n ];\n }\n // Canonical publication is visible before child ledger finalization.\n const announced = announcedChildren.has(request.childSubmissionId);\n\n if (!announced) {\n return [\n failure(\n ledgerError(\n \"recordChildSettled\",\n `Child Submission ${request.childSubmissionId} has no recorded settlement`,\n ),\n ),\n current,\n ];\n }\n if (\n parent.row.state !== \"suspended\" ||\n parent.suspension === undefined ||\n parent.suspension.reason._tag !== \"WaitingForChild\"\n ) {\n return [success(\"not-waiting\" as const), current];\n }\n const children = parent.suspension.reason.children;\n\n if (!children.some((entry) => entry.childSubmissionId === request.childSubmissionId)) {\n return [success(\"not-waiting\" as const), current];\n }\n\n const allSettled = children.every((entry) =>\n announcedChildren.has(entry.childSubmissionId),\n );\n\n if (!allSettled) return [success(\"still-waiting\" as const), current];\n\n return [\n success(\"woken\" as const),\n withSubmission(current, {\n ...parent,\n row: { ...parent.row, state: \"input-applied\" },\n suspension: undefined,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const reserveChildBudget: SubmissionLedger[\"Service\"][\"reserveChildBudget\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(\n ChildBudgetReservationRequest,\n \"reserveChildBudget\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ReservedChildBudget, ChildReservationConflict | OwnershipLost | LedgerError>,\n LedgerState,\n ] => {\n const existing = current.childReservations.get(request.reservationId);\n\n if (existing !== undefined) {\n // Identical replays short-circuit before the fence, retaining the first committed allocation:\n // a replay creates nothing, so a recovering caller resumes rather than duplicates.\n const identical =\n existing.parentSubmissionId === request.parentSubmissionId &&\n existing.parentToolCallId === request.parentToolCallId &&\n existing.allocationDigest === request.allocationDigest &&\n equivalentPersistedJson(existing.allocation, request.allocation);\n\n if (!identical) {\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: existing.status,\n message:\n \"A reservation with this identity exists with a different parent Tool Call or allocation.\",\n }),\n ),\n current,\n ];\n }\n\n return [\n success(\n ReservedChildBudget.make({\n reservation: toReservationSnapshot(existing),\n replayed: true,\n }),\n ),\n current,\n ];\n }\n for (const id of current.childrenByParent.get(request.parentSubmissionId) ?? []) {\n const reservation = current.childReservations.get(id);\n\n if (reservation === undefined) continue;\n if (\n reservation.parentSubmissionId === request.parentSubmissionId &&\n reservation.parentToolCallId === request.parentToolCallId\n ) {\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message: `Parent Tool Call ${request.parentToolCallId} already owns reservation ${reservation.reservationId}.`,\n }),\n ),\n current,\n ];\n }\n }\n const parent = current.submissions.get(request.parentSubmissionId);\n\n if (parent === undefined) {\n return [\n failure(\n ledgerError(\n \"reserveChildBudget\",\n `Unknown Submission ${request.parentSubmissionId}`,\n ),\n ),\n current,\n ];\n }\n // Creation is fenced by the parent lane's live ownership (spec §12 step 2): a stale\n // parent Attempt can never create new reservation state.\n if (!journal.owner.hasOwner(parent.row.threadId, parent.row.submissionId)) {\n return [failure(ownershipLost(parent)), current];\n }\n\n const reservation: StoredChildReservation = {\n reservationId: request.reservationId,\n parentSubmissionId: request.parentSubmissionId,\n parentToolCallId: request.parentToolCallId,\n childSubmissionId: undefined,\n status: \"reserved\",\n allocation: request.allocation,\n allocationDigest: request.allocationDigest,\n accounting: undefined,\n reservedAtMillis: nowMillis,\n releaseBeganAtMillis: undefined,\n releasedAtMillis: undefined,\n };\n\n return [\n success(\n ReservedChildBudget.make({\n reservation: toReservationSnapshot(reservation),\n replayed: false,\n }),\n ),\n withChildReservation(current, reservation),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const attachChildToReservation: SubmissionLedger[\"Service\"][\"attachChildToReservation\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(\n AttachChildToReservationRequest,\n \"attachChildToReservation\",\n unvalidated,\n );\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<\n ChildBudgetReservationSnapshot,\n ChildReservationConflict | OwnershipLost | LedgerError\n >,\n LedgerState,\n ] => {\n const reservation = current.childReservations.get(request.reservationId);\n\n if (reservation === undefined) {\n return [\n failure(\n ledgerError(\n \"attachChildToReservation\",\n `Unknown child reservation ${request.reservationId}`,\n ),\n ),\n current,\n ];\n }\n if (reservation.childSubmissionId !== undefined) {\n // Idempotent replay of the recorded attachment (unfenced — it mutates nothing).\n if (reservation.childSubmissionId === request.childSubmissionId) {\n return [success(toReservationSnapshot(reservation)), current];\n }\n\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message: `Reservation ${request.reservationId} already records child ${reservation.childSubmissionId}.`,\n }),\n ),\n current,\n ];\n }\n const parent = current.submissions.get(reservation.parentSubmissionId);\n\n if (parent === undefined) {\n return [\n failure(\n ledgerError(\n \"attachChildToReservation\",\n `Unknown Submission ${reservation.parentSubmissionId}`,\n ),\n ),\n current,\n ];\n }\n if (!journal.owner.hasOwner(parent.row.threadId, parent.row.submissionId)) {\n return [failure(ownershipLost(parent)), current];\n }\n if (reservation.status !== \"reserved\") {\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message: `Cannot attach a child to a ${reservation.status} reservation.`,\n }),\n ),\n current,\n ];\n }\n // Single-store latitude: the admitted child must exist here, so a dangling\n // attachment can never enter the recovery view.\n if (!current.submissions.has(request.childSubmissionId)) {\n return [\n failure(\n ledgerError(\n \"attachChildToReservation\",\n `Unknown child Submission ${request.childSubmissionId}`,\n ),\n ),\n current,\n ];\n }\n\n const attached: StoredChildReservation = {\n ...reservation,\n childSubmissionId: request.childSubmissionId,\n };\n\n return [\n success(toReservationSnapshot(attached)),\n withChildReservation(current, attached),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const beginChildBudgetRelease: SubmissionLedger[\"Service\"][\"beginChildBudgetRelease\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(\n BeginChildBudgetReleaseRequest,\n \"beginChildBudgetRelease\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ChildBudgetReservationSnapshot, ChildReservationConflict | LedgerError>,\n LedgerState,\n ] => {\n const reservation = current.childReservations.get(request.reservationId);\n\n if (reservation === undefined) {\n return [\n failure(\n ledgerError(\n \"beginChildBudgetRelease\",\n `Unknown child reservation ${request.reservationId}`,\n ),\n ),\n current,\n ];\n }\n if (reservation.status !== \"reserved\") {\n // The accounting decision was already frozen exactly once; an identical replay is\n // a no-op and a divergent decision conflicts (spec §12 join step 6).\n if (\n reservation.accounting !== undefined &&\n equivalentPersistedJson(reservation.accounting, request.accounting)\n ) {\n return [success(toReservationSnapshot(reservation)), current];\n }\n\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message:\n \"A different accounting decision is already frozen for this reservation.\",\n }),\n ),\n current,\n ];\n }\n\n const frozen: StoredChildReservation = {\n ...reservation,\n status: \"releasePending\",\n accounting: request.accounting,\n releaseBeganAtMillis: nowMillis,\n };\n\n return [success(toReservationSnapshot(frozen)), withChildReservation(current, frozen)];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const releaseChildBudget: SubmissionLedger[\"Service\"][\"releaseChildBudget\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(\n ReleaseChildBudgetRequest,\n \"releaseChildBudget\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ChildBudgetReservationSnapshot, ChildReservationConflict | LedgerError>,\n LedgerState,\n ] => {\n const reservation = current.childReservations.get(request.reservationId);\n\n if (reservation === undefined) {\n return [\n failure(\n ledgerError(\n \"releaseChildBudget\",\n `Unknown child reservation ${request.reservationId}`,\n ),\n ),\n current,\n ];\n }\n // Applied exactly once: replaying a released reservation returns the stored row\n // unchanged (spec §12: \"never available twice\").\n if (reservation.status === \"released\") {\n return [success(toReservationSnapshot(reservation)), current];\n }\n if (reservation.status !== \"releasePending\") {\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message:\n \"Cannot release a reservation whose accounting decision is not frozen.\",\n }),\n ),\n current,\n ];\n }\n\n const released: StoredChildReservation = {\n ...reservation,\n status: \"released\",\n releasedAtMillis: nowMillis,\n };\n\n return [\n success(toReservationSnapshot(released)),\n withChildReservation(current, released),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const scanNonterminal: SubmissionLedger[\"Service\"][\"scanNonterminal\"] = Stream.paginate<\n string | undefined,\n SubmissionWorkItem,\n never\n >(undefined, (after) =>\n Effect.sync(() => {\n const current = MutableRef.get(state.ref);\n\n const candidates = boundedWorkSelection<StoredSubmission>(\n 8,\n (stored) =>\n `${stored.row.threadId}\\u0000${String(stored.row.queueSequence).padStart(16, \"0\")}`,\n after,\n );\n\n for (const ids of current.activeByThread.values())\n for (const id of ids) {\n const stored = current.submissions.get(id);\n\n if (stored !== undefined) candidates.add(stored);\n }\n const items = candidates.values.map(({ row }) => SubmissionWorkItem.make(row));\n const last = candidates.values.at(-1)?.row;\n\n return [\n items,\n last === undefined\n ? Option.none<string | undefined>()\n : Option.some(`${last.threadId}\\u0000${String(last.queueSequence).padStart(16, \"0\")}`),\n ] as const;\n }),\n );\n\n const readAbortIntent: SubmissionLedger[\"Service\"][\"readAbortIntent\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(AbortIntentRequest, \"readAbortIntent\", unvalidated);\n const stored = (yield* Ref.get(state)).submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return yield* ledgerError(\n \"readAbortIntent\",\n `Unknown Submission ${request.submissionId}`,\n );\n }\n\n return stored.abortIntent;\n },\n );\n\n const loadRecoverySnapshot: SubmissionLedger[\"Service\"][\"loadRecoverySnapshot\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(\n RecoverySnapshotRequest,\n \"loadRecoverySnapshot\",\n unvalidated,\n );\n\n const current = yield* Ref.get(state);\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return yield* ledgerError(\n \"loadRecoverySnapshot\",\n `Unknown Submission ${request.submissionId}`,\n );\n }\n\n const joins = Array.from(current.joinsByHost.get(request.submissionId) ?? [], (id) =>\n current.submissions.get(id),\n )\n .filter((candidate): candidate is StoredSubmission => candidate !== undefined)\n .sort((left, right) => left.row.queueSequence - right.row.queueSequence)\n .map((candidate) =>\n JoinSnapshot.make({\n submissionId: candidate.row.submissionId,\n state: candidate.row.state,\n hostSubmissionId: request.submissionId,\n }),\n );\n\n const byToolCallId = <A extends { readonly toolCallId: ToolCallId }>(\n left: A,\n right: A,\n ): number =>\n left.toolCallId < right.toolCallId ? -1 : left.toolCallId > right.toolCallId ? 1 : 0;\n\n // Parent-side subagent view: this Submission's child budget reservations in parent Tool\n // Call order, plus each attached child's current lane state (a disposable derived view;\n // the canonical records stay the recovery truth, DUR-015).\n const childReservations = Array.from(\n current.childrenByParent.get(request.submissionId) ?? [],\n (id) => current.childReservations.get(id),\n )\n .filter((reservation): reservation is StoredChildReservation => reservation !== undefined)\n .sort((left, right) =>\n left.parentToolCallId < right.parentToolCallId\n ? -1\n : left.parentToolCallId > right.parentToolCallId\n ? 1\n : 0,\n );\n\n const childAttachments: Array<ChildAttachmentSnapshot> = [];\n\n for (const reservation of childReservations) {\n if (reservation.childSubmissionId === undefined) continue;\n const child = current.submissions.get(reservation.childSubmissionId);\n\n if (child === undefined) continue;\n childAttachments.push(\n ChildAttachmentSnapshot.make({\n toolCallId: reservation.parentToolCallId,\n childSubmissionId: reservation.childSubmissionId,\n childState: child.row.state,\n ...(child.row.settledOutcome === undefined\n ? {}\n : { childOutcome: child.row.settledOutcome }),\n }),\n );\n }\n\n return RecoverySnapshot.make({\n submission: toSnapshot(stored.row),\n joins,\n approvalDecisions: [...stored.approvalDecisions.values()].sort(byToolCallId),\n unknownResolutions: [...stored.unknownResolutions.values()]\n .map((resolution) => resolution.intent)\n .sort(byToolCallId),\n childReservations: childReservations.map(toReservationSnapshot),\n childAttachments,\n ...(stored.row.parentLinkage === undefined\n ? {}\n : { parentLinkage: stored.row.parentLinkage }),\n ...(stored.joinedHostSubmissionId === undefined\n ? {}\n : { hostSubmissionId: stored.joinedHostSubmissionId }),\n ...(stored.suspension === undefined\n ? {}\n : {\n suspension: SuspensionSnapshot.make({\n reason: stored.suspension.reason,\n suspendedAt: utc(stored.suspension.suspendedAtMillis),\n }),\n }),\n hasOwner: journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId),\n ...(stored.inputApplied === undefined ? {} : { inputApplied: stored.inputApplied }),\n ...(stored.abortIntent === undefined ? {} : { abortIntent: stored.abortIntent }),\n });\n });\n\n const ledger = SubmissionLedger.of({\n capabilities,\n resolveFundingOwner: Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(FundingOwnerRequest, \"funding owner\", unvalidated);\n const current = MutableRef.get(state.ref);\n const selected = current.submissions.get(request.submissionId);\n\n if (selected === undefined || selected.row.threadId !== request.threadId)\n return yield* ledgerError(\n \"funding owner\",\n \"Selected admission belongs to another Thread or is missing\",\n );\n if (\n selected.row.state === \"joining\" ||\n (selected.joinedHostSubmissionId !== undefined && selected.inputApplied === undefined)\n )\n return yield* ledgerError(\n \"funding owner\",\n \"Joining funding owner is not yet frozen by exact applied input evidence\",\n );\n\n const owner =\n selected.joinedHostSubmissionId === undefined\n ? selected\n : current.submissions.get(selected.joinedHostSubmissionId);\n\n if (\n owner === undefined ||\n owner.row.threadId !== request.threadId ||\n (owner !== selected && owner.row.queueSequence >= selected.row.queueSequence)\n )\n return yield* ledgerError(\n \"funding owner\",\n \"Exact joined funding owner is missing or inconsistent\",\n );\n\n return FundingOwner.make({\n selected: toSnapshot(selected.row),\n owner: toSnapshot(owner.row),\n });\n }),\n admit: (request) => journal.withMutation(admit(request)),\n markReady: (request) => journal.withMutation(markReady(request)),\n lookup,\n resolveAdmission,\n selectHead: (request) => journal.withMutation(selectHead(request)),\n markInputApplied: (request) => journal.withMutation(markInputApplied(request)),\n finalizeSettlement: (request) => journal.withMutation(finalizeSettlement(request)),\n requestAbort: (request) => journal.withMutation(requestAbort(request)),\n stopWorker: (request) => journal.withMutation(stopWorker(request)),\n inspectWorker,\n claimJoining: (request) => journal.withMutation(claimJoining(request)),\n markJoined: (request) => journal.withMutation(markJoined(request)),\n revertJoining: (request) => journal.withMutation(revertJoining(request)),\n suspend: (request) => journal.withMutation(suspend(request)),\n recordApprovalDecision: (request) => journal.withMutation(recordApprovalDecision(request)),\n markUnknown: (request) => journal.withMutation(markUnknown(request)),\n recordUnknownResolution: (request) => journal.withMutation(recordUnknownResolution(request)),\n recordChildSettled: (request) => journal.withMutation(recordChildSettled(request)),\n reserveChildBudget: (request) => journal.withMutation(reserveChildBudget(request)),\n attachChildToReservation: (request) =>\n journal.withMutation(attachChildToReservation(request)),\n beginChildBudgetRelease: (request) => journal.withMutation(beginChildBudgetRelease(request)),\n releaseChildBudget: (request) => journal.withMutation(releaseChildBudget(request)),\n scanNonterminal,\n loadRecoverySnapshot,\n readAbortIntent,\n });\n\n const toAdmission = (row: SubmissionRow, settledAtMillis?: number) =>\n ThreadAdmission.make({\n ...toSnapshot(row),\n ...(settledAtMillis === undefined ? {} : { settledAt: utc(settledAtMillis) }),\n });\n\n const cleanCommand = <A extends { readonly canonicalRecordId?: RecordEnvelope[\"recordId\"] }>(\n value: A,\n ) => {\n const { canonicalRecordId: _, ...fact } = value;\n\n return fact;\n };\n\n const commands = (stored: StoredSubmission | undefined) => {\n return {\n aborts: stored?.abortIntent === undefined ? [] : [cleanCommand(stored.abortIntent)],\n approvals: Array.from(stored?.approvalDecisions.values() ?? [], cleanCommand),\n resolutions: Array.from(stored?.unknownResolutions.values() ?? [], ({ intent }) =>\n cleanCommand(intent),\n ),\n };\n };\n\n const readCommands = Effect.fnUntraced(function* (stored: StoredSubmission | undefined) {\n if (\n (stored?.approvalDecisions.size ?? 0) > MAX_RUN_EVIDENCE_RECORDS ||\n (stored?.unknownResolutions.size ?? 0) > MAX_RUN_EVIDENCE_RECORDS\n )\n return yield* ThreadStoreError.make({\n operation: \"read commands\",\n message: \"Accepted commands exceed Run record bounds\",\n });\n let bytes = 0;\n\n const add = <A, I>(schema: Schema.Codec<A, I>, value: A) =>\n Schema.encodeEffect(Schema.toCodecJson(schema))(value).pipe(\n Effect.mapError(() =>\n ThreadStoreError.make({\n operation: \"read commands\",\n message: \"Invalid accepted command wire\",\n }),\n ),\n Effect.flatMap((wire) => {\n bytes += utf8ByteLength(canonicalJson(wire));\n\n return bytes > MAX_RUN_EVIDENCE_BYTES\n ? Effect.fail(\n ThreadStoreError.make({\n operation: \"read commands\",\n message: \"Accepted commands exceed Run byte bounds\",\n }),\n )\n : Effect.void;\n }),\n );\n\n if (stored?.abortIntent !== undefined) yield* add(AbortIntent, stored.abortIntent);\n for (const value of stored?.approvalDecisions.values() ?? [])\n yield* add(ApprovalDecisionIntent, value);\n for (const { intent } of stored?.unknownResolutions.values() ?? [])\n yield* add(UnknownResolutionIntent, intent);\n\n return commands(stored);\n });\n\n const lookupAdmission = (threadId: ThreadId, submissionId: SubmissionId) =>\n Effect.sync(() => {\n const stored = MutableRef.get(state.ref).submissions.get(submissionId);\n\n return stored?.row.threadId === threadId\n ? toAdmission(stored.row, stored.finalization?.finalizedAtMillis)\n : undefined;\n });\n\n yield* journal.registerLedgerTransfer({\n admission: lookupAdmission,\n commands: (id) => readCommands(MutableRef.get(state.ref).submissions.get(id)),\n snapshot: (threadId) =>\n Effect.sync(() => {\n const current = MutableRef.get(state.ref);\n const directory = current.byThread.get(threadId);\n\n return {\n idle:\n (current.activeByThread.get(threadId)?.size ?? 0) === 0 &&\n (directory?.reservations ?? 0) === 0,\n admissions: directory?.ordered.length ?? 0,\n aborts: directory?.commands.aborts.length ?? 0,\n approvals: directory?.commands.approvals.length ?? 0,\n resolutions: directory?.commands.resolutions.length ?? 0,\n ...(current.stoppedWorkers.has(threadId)\n ? {\n workerSeal:\n current.stoppedWorkers.get(threadId) === undefined\n ? {}\n : { terminal: current.stoppedWorkers.get(threadId) },\n }\n : {}),\n };\n }),\n facts: (threadId, section, after) =>\n Effect.sync(() => {\n const current = MutableRef.get(state.ref);\n\n const facts = {\n admissions: new Array<ThreadAdmission>(),\n commands: commands(undefined),\n deliveries: [],\n };\n\n let next = after ?? \"\";\n\n if (section === \"admissions\") {\n const stored = threadRows(\n current,\n threadId,\n after === undefined ? -1 : Number(after),\n ).next().value;\n\n if (stored !== undefined) {\n facts.admissions.push(\n toAdmission(stored.row, stored.finalization?.finalizedAtMillis),\n );\n next = String(stored.row.queueSequence);\n }\n } else {\n const entries = current.byThread.get(threadId)?.commands[section] ?? [];\n const at = after === undefined ? 0 : commandPosition(entries, after);\n const choice = entries[at + Number(after !== undefined && entries[at]?.key === after)];\n\n if (choice !== undefined) {\n next = choice.key;\n const stored = current.submissions.get(choice.submissionId);\n\n if (section === \"aborts\" && stored?.abortIntent !== undefined)\n facts.commands.aborts.push(cleanCommand(stored.abortIntent));\n else if (section === \"approvals\" && choice.toolCallId !== undefined) {\n const value = stored?.approvalDecisions.get(choice.toolCallId);\n\n if (value !== undefined) facts.commands.approvals.push(cleanCommand(value));\n } else if (section === \"resolutions\" && choice.resolutionKey !== undefined) {\n const value = stored?.unknownResolutions.get(choice.resolutionKey);\n\n if (value !== undefined)\n facts.commands.resolutions.push(cleanCommand(value.intent));\n }\n }\n }\n\n return { facts, after: next };\n }),\n submissions: (threadId) =>\n Stream.paginate(-1, (after) =>\n Effect.sync(() => {\n const stored = threadRows(MutableRef.get(state.ref), threadId, after).next().value;\n\n return [\n stored === undefined ? [] : [toSnapshot(stored.row)],\n stored === undefined ? Option.none<number>() : Option.some(stored.row.queueSequence),\n ] as const;\n }),\n ),\n startImport: Effect.fnUntraced(function* (threadId) {\n const current = yield* Ref.get(state);\n\n if (\n current.lanes.has(threadId) ||\n current.byThread.has(threadId) ||\n current.stoppedWorkers.has(threadId)\n )\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"target-not-empty\",\n message: \"Destination ledger contains Thread data\",\n });\n\n const staged: LedgerState = {\n submissions: new Map(),\n admissionIndex: new Map(),\n lanes: new Map(),\n childReservations: new Map(),\n freshAdmissionSequence: current.freshAdmissionSequence,\n stoppedWorkers: new Map(),\n latestByThread: new Map(),\n activeByThread: new Map(),\n byThread: new Map(),\n receipts: new Map(),\n joinsByHost: new Map(),\n childrenByParent: new Map(),\n };\n\n const commandBytes = new Map<SubmissionId, number>();\n const settledTimes = new Map<SubmissionId, number>();\n\n const retainCommandBytes = Effect.fnUntraced(function* <A, I>(\n schema: Schema.Codec<A, I>,\n value: A,\n id: SubmissionId,\n ) {\n const wire = yield* Schema.encodeEffect(Schema.toCodecJson(schema))(value).pipe(\n Effect.mapError(() => invalidThreadArchive(\"Invalid accepted command wire\", threadId)),\n );\n\n const bytes = (commandBytes.get(id) ?? 0) + utf8ByteLength(canonicalJson(wire));\n\n if (bytes > MAX_RUN_EVIDENCE_BYTES)\n return yield* invalidThreadArchive(\n \"Accepted commands exceed Run byte bounds\",\n threadId,\n );\n commandBytes.set(id, bytes);\n });\n\n const reader = {\n admission: (id: SubmissionId) =>\n Effect.sync(() => {\n const stored = staged.submissions.get(id);\n\n return stored === undefined\n ? undefined\n : toAdmission(stored.row, settledTimes.get(id));\n }),\n runOwner: (runId: import(\"@yielded/agent/identifiers\").RunId) =>\n Effect.sync(() => {\n if (!runId.startsWith(\"run:\")) return undefined;\n const id = Schema.decodeSync(SubmissionId)(runId.slice(4));\n const stored = staged.submissions.get(id);\n\n return stored === undefined\n ? undefined\n : toAdmission(stored.row, settledTimes.get(id));\n }),\n commands: (id: SubmissionId) => readCommands(staged.submissions.get(id)),\n };\n\n return {\n reader,\n stage: Effect.fnUntraced(function* (page) {\n for (const a of page.archive.admissions) {\n const key = admissionKey(threadId, a.principal, a.idempotencyKey);\n\n if (\n current.submissions.has(a.submissionId) ||\n staged.submissions.has(a.submissionId) ||\n current.receipts.has(a.receiptId) ||\n staged.receipts.has(a.receiptId) ||\n current.admissionIndex.has(key) ||\n staged.admissionIndex.has(key)\n )\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"destination-conflict\",\n message: \"Admission, receipt, or immutable admission key already exists\",\n });\n const previous = threadRows(staged, threadId, a.queueSequence - 1).next().value;\n\n if (previous?.row.queueSequence === a.queueSequence)\n return yield* invalidThreadArchive(\"Duplicate admission queue position\", threadId);\n if (a.settledAt !== undefined)\n settledTimes.set(a.submissionId, DateTime.toEpochMillis(a.settledAt));\n withSubmission(\n staged,\n fromRebuilt(\n RebuiltSubmission.make({\n admission: a,\n state: \"admitted\",\n unknownToolCallIds: [],\n approvals: [],\n resolutions: [],\n }),\n ),\n );\n }\n for (const fact of page.archive.commands.aborts) {\n const stored = staged.submissions.get(fact.submissionId);\n\n if (stored === undefined || stored.abortIntent !== undefined)\n return yield* invalidThreadArchive(\n \"Missing admission or duplicate abort\",\n threadId,\n );\n const intent = AbortIntent.make(fact);\n\n yield* retainCommandBytes(AbortIntent, intent, fact.submissionId);\n withSubmission(staged, { ...stored, abortIntent: intent });\n }\n for (const fact of page.archive.commands.approvals) {\n const stored = staged.submissions.get(fact.submissionId);\n\n if (stored === undefined || stored.approvalDecisions.has(fact.toolCallId))\n return yield* invalidThreadArchive(\n \"Missing admission or duplicate approval\",\n threadId,\n );\n if (stored.approvalDecisions.size >= MAX_RUN_EVIDENCE_RECORDS)\n return yield* invalidThreadArchive(\n \"Accepted approvals exceed Run record bounds\",\n threadId,\n );\n const intent = ApprovalDecisionIntent.make(fact);\n\n yield* retainCommandBytes(ApprovalDecisionIntent, intent, fact.submissionId);\n\n const approvals = new Map(stored.approvalDecisions).set(fact.toolCallId, intent);\n\n withSubmission(staged, { ...stored, approvalDecisions: approvals });\n }\n for (const fact of page.archive.commands.resolutions) {\n const stored = staged.submissions.get(fact.submissionId);\n const key = JSON.stringify([fact.toolCallId, unknownResolutionKind(fact.resolution)]);\n\n if (stored === undefined || stored.unknownResolutions.has(key))\n return yield* invalidThreadArchive(\n \"Missing admission or duplicate resolution\",\n threadId,\n );\n if (stored.unknownResolutions.size >= MAX_RUN_EVIDENCE_RECORDS)\n return yield* invalidThreadArchive(\n \"Accepted resolutions exceed Run record bounds\",\n threadId,\n );\n const intent = UnknownResolutionIntent.make(fact);\n\n yield* retainCommandBytes(UnknownResolutionIntent, intent, fact.submissionId);\n\n const resolutions = new Map(stored.unknownResolutions).set(key, { intent });\n\n withSubmission(staged, { ...stored, unknownResolutions: resolutions });\n }\n }),\n prepareCommit: Effect.fnUntraced(function* (workerSeal) {\n let lastQueue = 0;\n let terminalEvidence = workerSeal?.terminal === undefined;\n\n for (const stored of threadRows(staged, threadId)) {\n const a = toAdmission(stored.row, settledTimes.get(stored.row.submissionId));\n const rebuilt = yield* rebuildClosedSubmission(a);\n\n if (\n rebuilt.settlement !== undefined &&\n workerTerminalFromRecord(toSnapshot(stored.row), rebuilt.settlement) ===\n workerSeal?.terminal\n )\n terminalEvidence = true;\n withSubmission(staged, fromRebuilt(rebuilt));\n lastQueue = Math.max(lastQueue, a.queueSequence);\n }\n if (!terminalEvidence)\n return yield* invalidThreadArchive(\n \"Worker seal terminal has no exact completed input evidence\",\n threadId,\n );\n if (!Number.isSafeInteger(lastQueue + 1))\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-capacity\",\n message: \"Admission queue sequence is exhausted\",\n });\n\n return () => {\n for (const stored of staged.submissions.values()) withSubmission(current, stored);\n current.lanes.set(threadId, { nextQueueSequence: lastQueue + 1 });\n if (workerSeal !== undefined)\n current.stoppedWorkers.set(threadId, workerSeal.terminal);\n };\n }),\n };\n }),\n });\n\n return Context.make(SubmissionLedger, ledger).pipe(\n Context.add(SettlementPublisher, { publish }),\n );\n });\n\n/** Construction options for the in-memory reference SubmissionLedger. */\nexport interface MemorySubmissionLedgerOptions {\n /**\n * Test-only fault seam for `resolveAdmission` (SUB-031): when the effect yields a reason,\n * the resolution answers `Indeterminate` with it instead of consulting the store — modelling\n * an authoritative child owner that is temporarily unreachable. `Option.none()` restores the\n * store-derived answer. Ledger state is never mutated by the fault.\n */\n readonly resolveAdmissionFault?: Effect.Effect<Option.Option<string>>;\n}\n\n/**\n * In-memory reference SubmissionLedger Layer (durability `non-durable`). All state lives in one\n * `Ref` owned by the Layer's Scope. Fresh identities use the supplied `Crypto` service;\n * imported identities remain unchanged. No daemon fibers are spawned and no wall clock is consulted.\n */\nexport const memorySubmissionLedgerLayer = (\n options: MemorySubmissionLedgerOptions = {},\n): Layer.Layer<\n SubmissionLedger | SettlementPublisher,\n never,\n MemoryThreadStoreKernel | Crypto.Crypto\n> => Layer.effectContext(makeSubmissionLedger(options));\n\nexport const MemorySubmissionLedgerLive: Layer.Layer<\n SubmissionLedger | SettlementPublisher,\n never,\n MemoryThreadStoreKernel | Crypto.Crypto\n> = memorySubmissionLedgerLayer();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoJA,MAAM,aAA8C;CAClD,UAAU;CACV,OAAO;CACP,SAAS;CACT,QAAQ;CACR,iBAAiB;CACjB,WAAW;CACX,SAAS;CACT,SAAS;AACX;;;;;;AAgEA,MAAM,sCAAoD,IAAI,IAAI;CAChE;CACA;CACA;AACF,CAAC;AAuCD,MAAM,mBAAmB,SAAwC,QAAgB;CAC/E,IAAI,MAAM;CACV,IAAI,OAAO,QAAQ;CAEnB,OAAO,MAAM,MAAM;EACjB,MAAM,SAAS,KAAK,OAAO,MAAM,QAAQ,CAAC;EAE1C,IAAI,QAAQ,OAAO,CAAC,MAAM,KAAK,MAAM,SAAS;OACzC,OAAO;CACd;CAEA,OAAO;AACT;AAEA,MAAM,iBACJ,SACA,cACA,YACA,kBACG;CAEH,MAAM,MAAM,OAAO,QAAQ,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG;CAEvD,QAAQ,KAAK;EACX;EACA;EACA,GAAI,eAAe,KAAA,IAAY,CAAC,IAAI,EAAE,WAAW;EACjD,GAAI,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc;CACzD,CAAC;AACH;AAsBA,MAAM,WAAc,WAAkC;CAAE,MAAM;CAAW;AAAM;AAC/E,MAAM,WAAc,WAAkC;CAAE,MAAM;CAAW;AAAM;AAE/E,MAAM,eAAe,WAAmB,SAAiB,UACvD,UAAU,KAAA,IACN,YAAY,KAAK;CAAE;CAAW;AAAQ,CAAC,IACvC,YAAY,KAAK;CAAE;CAAW;CAAS;AAAM,CAAC;AAEpD,MAAM,YACJ,QACA,WACA,UAEA,OAAO,oBAAoB,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KACxC,OAAO,QAAQ,OAAO,oBAAoB,MAAM,CAAC,GACjD,OAAO,UAAU,UAAU,YAAY,WAAW,WAAW,UAAU,WAAW,KAAK,CAAC,CAC1F;AAEF,MAAM,qBAAqB,OAAO,WAAW,YAAY;AACzD,MAAM,kBAAkB,OAAO,WAAW,SAAS;AACnD,MAAM,kBAAkB,OAAO,WAAW,SAAS;AAEnD,MAAM,sBAAsB,OAAO,OAAO,MAAM,OAAO,OAAO,CAAC,CAAC;AAChE,MAAM,sBAAsB,OAAO,WAAW,aAAa;AAC3D,MAAM,0BAA0B,OAAO,cAAc,aAAa;AAClE,MAAM,8BAA8B,OAAO,cAAc,iBAAiB;AAC1E,MAAM,wBAAwB,sBAAsB,eAAe;AACnE,MAAM,oBAAoB,sBAAsB,eAAe;AAC/D,MAAM,uBAAuB,sBAAsB,kBAAkB;AACrE,MAAM,yBAAyB,sBAAsB,oBAAoB;AAEzE,MAAM,yBAAyB,cAC7B,YAAY,WAAW,2DAA2D;AAEpF,MAAM,OAAO,WAAiC,SAAS,MAAM,SAAS,WAAW,MAAM,CAAC;AAExF,MAAM,gBACJ,UACA,WACA,mBACW,KAAK,UAAU;CAAC;CAAU;CAAW;AAAc,CAAC;AAEjE,MAAM,cAAc,QAClB,mBAAmB,KAAK;CACtB,cAAc,IAAI;CAClB,UAAU,IAAI;CACd,eAAe,IAAI;CACnB,WAAW,IAAI;CACf,gBAAgB,IAAI;CACpB,SAAS,IAAI;CACb,cAAc,IAAI;CAClB,cAAc,IAAI;CAClB,cAAc,IAAI;CAClB,aAAa,IAAI;CACjB,WAAW,IAAI;CACf,OAAO,IAAI;CACX,WAAW,IAAI,IAAI,eAAe;CAClC,GAAI,IAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB,IAAI,eAAe;CACjF,GAAI,IAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB,IAAI,eAAe;CACjF,GAAI,IAAI,wBAAwB,KAAA,IAC5B,CAAC,IACD,EACE,iBAAiB,OAAO,WAAW,OAAO,eAAe,eAAe,CAAC,CAAC,CACxE,IAAI,mBACN,EACF;CACJ,GAAI,IAAI,yBAAyB,KAAA,IAC7B,CAAC,IACD,EACE,kBAAkB,OAAO,WAAW,OAAO,eAAe,YAAY,CAAC,CAAC,CACtE,IAAI,oBACN,EACF;CACJ,GAAI,IAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB,IAAI,eAAe;CACjF,GAAI,IAAI,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,aAAa,EAAE;CAC7E,GAAI,IAAI,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe,IAAI,cAAc;AAChF,CAAC;AAEH,MAAM,yBAAyB,QAC7B,+BAA+B,KAAK;CAClC,eAAe,IAAI;CACnB,oBAAoB,IAAI;CACxB,kBAAkB,IAAI;CACtB,QAAQ,IAAI;CACZ,YAAY,IAAI;CAChB,kBAAkB,IAAI;CACtB,YAAY,IAAI,IAAI,gBAAgB;CACpC,GAAI,IAAI,sBAAsB,KAAA,IAAY,CAAC,IAAI,EAAE,mBAAmB,IAAI,kBAAkB;CAC1F,GAAI,IAAI,eAAe,KAAA,IAAY,CAAC,IAAI,EAAE,YAAY,IAAI,WAAW;CACrE,GAAI,IAAI,yBAAyB,KAAA,IAC7B,CAAC,IACD,EAAE,gBAAgB,IAAI,IAAI,oBAAoB,EAAE;CACpD,GAAI,IAAI,qBAAqB,KAAA,IAAY,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI,gBAAgB,EAAE;AACxF,CAAC;AAEH,MAAM,eAAe,YAAiD;CACpE,MAAM,YAAY,QAAQ;CAC1B,MAAM,WAAW,UAAU;CAC3B,MAAM,sBAAsB,QAAQ,YAAY;CAEhD,MAAM,aACJ,qBAAqB,SAAS,sBAAsB,sBAAsB,KAAA;CAE5E,OAAO;EACL,KAAK;GACH,cAAc,UAAU;GACxB;GACA,eAAe,UAAU;GACzB,WAAW,UAAU;GACrB,gBAAgB,UAAU;GAC1B,SAAS,UAAU;GACnB,cAAc,UAAU;GACxB,cAAc,UAAU;GACxB,cAAc,UAAU;GACxB,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB,OAAO,QAAQ;GACf,gBAAgB,YAAY;GAC5B,iBAAiB,SAAS,cAAc,UAAU,SAAS;GAC3D,eACE,QAAQ,UAAU,UAAU,SAAS,cAAc,UAAU,SAAS,IAAI,KAAA;GAC5E,eAAe,UAAU;GACzB,GAAI,UAAU,oBAAoB,KAAA,IAC9B,CAAC,IACD,EACE,qBAAqB,OAAO,WAAW,OAAO,eAAe,eAAe,CAAC,CAAC,CAC5E,UAAU,eACZ,EACF;GACJ,GAAI,UAAU,qBAAqB,KAAA,IAC/B,CAAC,IACD,EACE,sBAAsB,OAAO,WAAW,OAAO,eAAe,YAAY,CAAC,CAAC,CAC1E,UAAU,gBACZ,EACF;GACJ,GAAI,UAAU,mBAAmB,KAAA,IAC7B,CAAC,IACD,EAAE,gBAAgB,UAAU,eAAe;GAC/C,GAAI,UAAU,mBAAmB,KAAA,IAC7B,CAAC,IACD,EAAE,gBAAgB,UAAU,eAAe;EACjD;EACA,cAAc,QAAQ;EACtB,cACE,eAAe,KAAA,KACf,QAAQ,eAAe,KAAA,KACvB,UAAU,cAAc,KAAA,IACpB,KAAA,IACA;GACE,cAAc,WAAW;GACzB,UAAU,QAAQ,WAAW;GAC7B,mBAAmB,SAAS,cAAc,UAAU,SAAS;EAC/D;EACN,aAAa,QAAQ;EACrB,wBAAwB,QAAQ;EAChC,YACE,QAAQ,eAAe,KAAA,IACnB,KAAA,IACA;GACE,QAAQ,QAAQ,WAAW;GAC3B,mBAAmB,SAAS,cAAc,QAAQ,WAAW,WAAW;EAC1E;EACN,aACE,QAAQ,mBAAmB,WAAW,IAClC,KAAA,IACA;GACE,QAAQ;GACR,aAAa,QAAQ;EACvB;EACN,mBAAmB,IAAI,IAAI,QAAQ,UAAU,KAAK,WAAW,CAAC,OAAO,YAAY,MAAM,CAAC,CAAC;EACzF,oBAAoB,IAAI,IACtB,QAAQ,YAAY,KAAK,WAAW,CAClC,KAAK,UAAU,CAAC,OAAO,YAAY,sBAAsB,OAAO,UAAU,CAAC,CAAC,GAC5E,EAAE,OAAO,CACX,CAAC,CACH;CACF;AACF;;AAGA,MAAM,qBACJ,MACA,UAEA,SAAS,KAAA,IACL,UAAU,KAAA,IACV,UAAU,KAAA,KACV,KAAK,uBAAuB,MAAM,sBAClC,KAAK,qBAAqB,MAAM;AAEtC,MAAM,iBAAiB,WACrB,cAAc,KAAK,EAAE,cAAc,OAAO,IAAI,aAAa,CAAC;AAE9D,MAAM,kBAAkB,OAAoB,WAA0C;CACpF,MAAM,MAAM,OAAO;CACnB,MAAM,WAAW,MAAM,YAAY,IAAI,IAAI,YAAY;CACvD,IAAI,YAAY,MAAM,SAAS,IAAI,IAAI,QAAQ;CAE/C,IAAI,cAAc,KAAA,GAAW;EAC3B,YAAY;GACV,SAAS,CAAC;GACV,UAAU;IAAE,QAAQ,CAAC;IAAG,WAAW,CAAC;IAAG,aAAa,CAAC;GAAE;GACvD,UAAU;GACV,SAAS;GACT,cAAc;EAChB;EACA,MAAM,SAAS,IAAI,IAAI,UAAU,SAAS;CAC5C;CACA,IAAI,aAAa,KAAA,GAAW;EAC1B,IAAI,MAAM;EACV,IAAI,OAAO,UAAU,QAAQ;EAE7B,OAAO,MAAM,MAAM;GACjB,MAAM,SAAS,KAAK,OAAO,MAAM,QAAQ,CAAC;GAC1C,MAAM,YAAY,MAAM,YAAY,IAAI,UAAU,QAAQ,OAAO;GAEjE,IAAI,cAAc,KAAA,KAAa,UAAU,IAAI,gBAAgB,IAAI,eAC/D,MAAM,SAAS;QACZ,OAAO;EACd;EACA,UAAU,QAAQ,OAAO,KAAK,GAAG,IAAI,YAAY;EACjD,MAAM,SAAS,IAAI,IAAI,WAAW,IAAI,YAAY;EAClD,MAAM,eAAe,IACnB,aAAa,IAAI,UAAU,IAAI,WAAW,IAAI,cAAc,GAC5D,IAAI,YACN;EACA,MAAM,SAAS,MAAM,eAAe,IAAI,IAAI,QAAQ;EAEpD,IACE,WAAW,KAAA,MACV,MAAM,YAAY,IAAI,MAAM,CAAC,EAAE,IAAI,iBAAiB,MAAM,IAAI,eAE/D,MAAM,eAAe,IAAI,IAAI,UAAU,IAAI,YAAY;CAC3D;CACA,UAAU,YACR,OAAO,IAAI,UAAU,aAAa,IAAI,kBAAkB,KAAA,CAAS,IACjE,OACE,aAAa,KAAA,KACX,SAAS,IAAI,UAAU,aACvB,SAAS,IAAI,kBAAkB,KAAA,CACnC;CACF,UAAU,WACR,OAAO,IAAI,UAAU,aAAa,IAAI,wBAAwB,KAAA,CAAS,IACvE,OACE,aAAa,KAAA,KACX,SAAS,IAAI,UAAU,aACvB,SAAS,IAAI,wBAAwB,KAAA,CACzC;CACF,IAAI,OAAO,gBAAgB,KAAA,KAAa,UAAU,gBAAgB,KAAA,GAChE,cAAc,UAAU,SAAS,QAAQ,IAAI,YAAY;CAC3D,IAAI,OAAO,sBAAsB,UAAU,mBACpC;OAAA,MAAM,MAAM,OAAO,kBAAkB,KAAK,GAC7C,IAAI,CAAC,UAAU,kBAAkB,IAAI,EAAE,GACrC,cAAc,UAAU,SAAS,WAAW,IAAI,cAAc,EAAE;CAAA;CACtE,IAAI,OAAO,uBAAuB,UAAU,oBACrC;OAAA,MAAM,CAAC,IAAI,UAAU,OAAO,oBAC/B,IAAI,CAAC,UAAU,mBAAmB,IAAI,EAAE,GACtC,cACE,UAAU,SAAS,aACnB,IAAI,cACJ,MAAM,OAAO,YACb,EACF;CAAA;CACN,IACE,UAAU,2BAA2B,KAAA,KACrC,SAAS,2BAA2B,OAAO,wBAE3C,MAAM,YAAY,IAAI,SAAS,sBAAsB,CAAC,EAAE,OAAO,IAAI,YAAY;CACjF,IAAI,OAAO,2BAA2B,KAAA,GAAW;EAC/C,IAAI,QAAQ,MAAM,YAAY,IAAI,OAAO,sBAAsB;EAE/D,IAAI,UAAU,KAAA,GACZ,MAAM,YAAY,IAAI,OAAO,wBAAyB,wBAAQ,IAAI,IAAI,CAAE;EAC1E,MAAM,IAAI,IAAI,YAAY;CAC5B;CACA,IAAI,SAAS,MAAM,eAAe,IAAI,IAAI,QAAQ;CAElD,IAAI,WAAW,KAAA,GAAW,MAAM,eAAe,IAAI,IAAI,UAAW,yBAAS,IAAI,IAAI,CAAE;CACrF,IAAI,IAAI,UAAU,WAAW,OAAO,OAAO,IAAI,YAAY;MACtD,OAAO,IAAI,IAAI,YAAY;CAChC,MAAM,YAAY,IAAI,IAAI,cAAc,MAAM;CAE9C,OAAO;AACT;AAEA,MAAM,wBACJ,OACA,gBACgB;CAChB,MAAM,WAAW,MAAM,kBAAkB,IAAI,YAAY,aAAa;CAEtE,MAAM,kBAAkB,IAAI,YAAY,eAAe,WAAW;CAClE,IAAI,WAAW,MAAM,iBAAiB,IAAI,YAAY,kBAAkB;CAExE,IAAI,aAAa,KAAA,GACf,MAAM,iBAAiB,IAAI,YAAY,oBAAqB,2BAAW,IAAI,IAAI,CAAE;CACnF,SAAS,IAAI,YAAY,aAAa;CACtC,MAAM,SAAS,MAAM,YAAY,IAAI,YAAY,kBAAkB;CAEnE,IAAI,WAAW,KAAA,GAAW;EACxB,MAAM,YAAY,MAAM,SAAS,IAAI,OAAO,IAAI,QAAQ;EAExD,IAAI,cAAc,KAAA,GAChB,UAAU,gBACR,OAAO,YAAY,WAAW,UAAU,IACxC,OAAO,aAAa,KAAA,KAAa,SAAS,WAAW,UAAU;CAErE;CAEA,OAAO;AACT;AAEA,MAAM,YAAY,OAAoB,aAAqD;CACzF,IAAI;CAEJ,KAAK,MAAM,MAAM,MAAM,eAAe,IAAI,QAAQ,KAAK,CAAC,GAAG;EACzD,MAAM,SAAS,MAAM,YAAY,IAAI,EAAE;EAEvC,IACE,WAAW,KAAA,KACV,OAAO,IAAI,UAAU,aAAa,OAAO,gBAAgB,KAAA,GAE1D;EACF,IAAI,SAAS,KAAA,KAAa,OAAO,IAAI,gBAAgB,KAAK,IAAI,eAAe,OAAO;CACtF;CAEA,OAAO;AACT;AAEA,UAAU,WAAW,OAAoB,UAAoB,QAAQ,IAAI;CACvE,MAAM,UAAU,MAAM,SAAS,IAAI,QAAQ,CAAC,EAAE,WAAW,CAAC;CAC1D,IAAI,MAAM;CACV,IAAI,OAAO,QAAQ;CAEnB,OAAO,MAAM,MAAM;EACjB,MAAM,SAAS,KAAK,OAAO,MAAM,QAAQ,CAAC;EAE1C,KAAK,MAAM,YAAY,IAAI,QAAQ,OAAO,CAAC,EAAE,IAAI,iBAAiB,OAAO,OACvE,MAAM,SAAS;OACZ,OAAO;CACd;CACA,KAAK,IAAI,QAAQ,KAAK,QAAQ,QAAQ,QAAQ,SAAS;EACrD,MAAM,SAAS,MAAM,YAAY,IAAI,QAAQ,MAAM;EAEnD,IAAI,WAAW,KAAA,GAAW,MAAM;CAClC;AACF;;;;;;;;;;;;AAaA,MAAM,wBAAwB,UAAyC,CAAC,MACtE,OAAO,IAAI,aAAa;CACtB,MAAM,UAAU,OAAO;CACvB,MAAM,SAAS,OAAO,OAAO;CAE7B,MAAM,gBAAgB,cACpB,OAAO,aAAa,CAAC,CAAC,KACpB,OAAO,QAAQ,OAAO,aAAa,mBAAmB,CAAC,GACvD,OAAO,UAAU,UAAU,YAAY,WAAW,iCAAiC,KAAK,CAAC,CAC3F;CAEF,MAAM,QAAQ,OAAO,IAAI,KAAkB;EACzC,0BAAU,IAAI,IAAI;EAClB,0BAAU,IAAI,IAAI;EAClB,6BAAa,IAAI,IAAI;EACrB,kCAAkB,IAAI,IAAI;EAC1B,6BAAa,IAAI,IAAI;EACrB,gCAAgB,IAAI,IAAI;EACxB,uBAAO,IAAI,IAAI;EACf,mCAAmB,IAAI,IAAI;EAC3B,wBAAwB;EACxB,gCAAgB,IAAI,IAAI;EACxB,gCAAgB,IAAI,IAAI;EACxB,gCAAgB,IAAI,IAAI;CAC1B,CAAC;CAED,OAAO,QAAQ,kBAAkB,cAAc;EAC7C,UAAU,YACR,IAAI,IAAI,KAAK,CAAC,CAAC,KACb,OAAO,KAAK,YAAY;GACtB,MAAM,aAAa,qBACjB,QAAQ,QACP,OAAO,IACR,QAAQ,aACV;GAEA,KAAK,MAAM,CAAC,UAAU,QAAQ,QAAQ,gBACpC,IAAI,IAAI,OAAO,GAAG,WAAW,IAAI,QAAQ;GAC3C,MAAM,YAAY,WAAW;GAE7B,MAAM,gBAAgB,UAAU,WAAW,QAAQ,QAAQ,UAAU,GAAG,EAAE,IAAI,KAAA;GAE9E,OAAO;IACL;IACA,GAAI,kBAAkB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc;GACzD;EACF,CAAC,CACH;EACF,OAAO,UAAU,OAAO,UACtB,OAAO,IAAI,aAAa;GACtB,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK;GAEpC,MAAM,aAAa,qBAAmC,QAAQ,IAAI,OAAO,IAAI,KAAK;GAElF,KAAK,MAAM,MAAM,QAAQ,eAAe,IAAI,QAAQ,KAAK,CAAC,GAAG,WAAW,IAAI,EAAE;GAC9E,MAAM,MAAM,WAAW;GAEvB,MAAM,UAAU,CAAC;GAEjB,KAAK,MAAM,MAAM,IAAI,MAAM,GAAG,KAAK,GAAG;IACpC,MAAM,SAAS,QAAQ,YAAY,IAAI,EAAE;IAEzC,IACE,WAAW,KAAA,KACX,OAAO,IAAI,aAAa,YACxB,OAAO,IAAI,UAAU,WAErB,OAAO,OAAO,iBAAiB,KAAK;KAClC,WAAW;KACX,SAAS;IACX,CAAC;IACH,MAAM,QAAQ,cAAc,OAAO,GAAG;IAEtC,QAAQ,KACN,OAAO,eAAe,KAAA,IAClB,QACA;KACE,GAAG;KACH,MACE,OAAO,WAAW,OAAO,SAAS,oBAC7B,UACA;IACT,CACN;GACF;GACA,MAAM,OAAO,IAAI,SAAS,QAAQ,IAAI,QAAQ,KAAK,KAAA;GAEnD,OAAO;IAAE;IAAS,GAAI,SAAS,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,KAAK;GAAG;EACnE,CAAC;CACL,CAAC;CAED,MAAM,iBAAiB,OAAO;CAE9B,MAAM,eAAe,OAAO,QAAQ,mBAAmB,KAAK,EAAE,YAAY,cAAc,CAAC,CAAC;CAE1F,MAAM,QAA8C,OAAO,WAAW,WAAW,aAAa;EAC5F,MAAM,UAAU,OAAO,SAAS,kBAAkB,SAAS,WAAW;EAEtE,MAAM,sBACJ,QAAQ,oBAAoB,KAAA,IACxB,KAAA,IACA,OAAO,OAAO,aAAa,OAAO,eAAe,eAAe,CAAC,CAAC,CAChE,QAAQ,eACV,CAAC,CAAC,KACA,OAAO,eAAe,YAAY,SAAS,mCAAmC,CAAC,CACjF;EAEN,MAAM,uBACJ,QAAQ,qBAAqB,KAAA,IACzB,KAAA,IACA,OAAO,OAAO,aAAa,OAAO,eAAe,YAAY,CAAC,CAAC,CAC7D,QAAQ,gBACV,CAAC,CAAC,KACA,OAAO,eAAe,YAAY,SAAS,oCAAoC,CAAC,CAClF;EAEN,OAAO,QACJ,oBAAoB,QAAQ,QAAQ,CAAC,CACrC,KAAK,OAAO,UAAU,UAAU,YAAY,SAAS,MAAM,SAAS,KAAK,CAAC,CAAC;EAC9E,MAAM,YAAY,OAAO,MAAM;EAG/B,MAAM,YAAW,OAFO,IAAI,IAAI,KAAK,EAAA,CAEX,eAAe,IACvC,aAAa,QAAQ,UAAU,QAAQ,WAAW,QAAQ,cAAc,CAC1E,IACI,OAAO,KAAK,YAAY,SAAS,gCAAgC,CAAC,IAClE,OAAO,OAAO,OAAO,aAAa,OAAO,CAAC;EAE9C,MAAM,WAAW,OAAO,OAAO,QAAe;EAE9C,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAOG;GACH,MAAM,MAAM,aAAa,QAAQ,UAAU,QAAQ,WAAW,QAAQ,cAAc;GACpF,MAAM,aAAa,QAAQ,eAAe,IAAI,GAAG;GAEjD,IAAI,eAAe,KAAA,GAAW;IAC5B,MAAM,WAAW,QAAQ,YAAY,IAAI,UAAU;IAEnD,IAAI,aAAa,KAAA,GACf,OAAO,CACL,QAAQ,YAAY,SAAS,iDAAiD,CAAC,GAC/E,OACF;IAIF,IACE,SAAS,IAAI,gBAAgB,QAAQ,eACrC,CAAC,kBAAkB,SAAS,IAAI,eAAe,QAAQ,aAAa,KACpE,SAAS,IAAI,mBAAmB,QAAQ,kBACxC,CAAC,OAAO,cAAc,OAAO,SAAS,eAAe,CAAC,CAAC,CACrD,SAAS,IAAI,wBAAwB,KAAA,IACjC,KAAA,IACA,OAAO,WAAW,OAAO,eAAe,eAAe,CAAC,CAAC,CACvD,SAAS,IAAI,mBACf,GACJ,QAAQ,eACV,KACA,CAAC,OAAO,cAAc,OAAO,SAAS,YAAY,CAAC,CAAC,CAClD,SAAS,IAAI,yBAAyB,KAAA,IAClC,KAAA,IACA,OAAO,WAAW,OAAO,eAAe,YAAY,CAAC,CAAC,CACpD,SAAS,IAAI,oBACf,GACJ,QAAQ,gBACV,KACA,CAAC,OAAO,cAAc,OAAO,SAAS,OAAO,IAAI,CAAC,CAAC,CACjD,SAAS,IAAI,gBACb,QAAQ,cACV,GAEA,OAAO,CACL,QACE,kBAAkB,KAAK;KACrB,UAAU,QAAQ;KAClB,WAAW,QAAQ;KACnB,gBAAgB,QAAQ;KACxB,qBAAqB,SAAS,IAAI;KAClC,sBAAsB,QAAQ;IAChC,CAAC,CACH,GACA,OACF;IAGF,OAAO,CACL,QACE,gBAAgB,KAAK;KACnB,cAAc,SAAS,IAAI;KAC3B,WAAW,SAAS,IAAI;KACxB,eAAe,SAAS,IAAI;KAC5B,OAAO,SAAS,IAAI;KACpB,UAAU;IACZ,CAAC,CACH,GACA,OACF;GACF;GAEA,IAAI,QAAQ,eAAe,IAAI,QAAQ,QAAQ,GAC7C,OAAO,CACL,QAAQ,qBAAqB,KAAK;IAAE,QAAQ;IAAW,MAAM;GAAiB,CAAC,CAAC,GAChF,OACF;GAGF,MAAM,QAAQ,WAAW,SAAS,QAAQ,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;GAE3D,IAAI,UAAU,KAAA,GAAW;IACvB,MAAM,WACJ,MAAM,IAAI,wBAAwB,KAAA,IAC9B,KAAA,IACA,OAAO,WAAW,OAAO,eAAe,eAAe,CAAC,CAAC,CACvD,MAAM,IAAI,mBACZ;IAEN,IACE,CAAC,OAAO,cAAc,OAAO,SAAS,gBAAgB,OAAO,MAAM,CAAC,CAAC,CACnE,UAAU,QACV,QAAQ,iBAAiB,MAC3B,GAEA,OAAO,CACL,QACE,qBAAqB,KAAK;KACxB,QAAQ;KACR,MAAM;IACR,CAAC,CACH,GACA,OACF;GACJ;GAGA,MAAM,UAAU,OAAO,gBAAgB,QAAQ,CAAC,CAAC,eAAe,MAAM,OAAO,CAAC;GAE9E,IAAI,KAAK,UAAU,OAAO,GACxB,OAAO,CAAC;IAAE,MAAM;IAAS,OAAO,QAAQ;GAAM,GAAG,OAAO;GAE1D,IACE,QAAQ,mBAAmB,KAAA,KAC3B,MAAM,KAAK,QAAQ,eAAe,IAAI,QAAQ,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAC5D,OAAO,QAAQ,YAAY,IAAI,EAAE,CAAC,EAAE,IAAI,mBAAmB,QAAQ,cACtE,GAEA,OAAO,CACL,QAAQ,qBAAqB,KAAK;IAAE,QAAQ;IAAY,MAAM;GAAkB,CAAC,CAAC,GAClF,OACF;GAGF,IAAI,OAAO,UAAU,QAAQ,GAAG,OAAO,CAAC,QAAQ,SAAS,OAAO,GAAG,OAAO;GAE1E,MAAM,OAAO,QAAQ,MAAM,IAAI,QAAQ,QAAQ,KAAK,EAClD,mBAAmB,EACrB;GAEA,MAAM,yBAAyB,QAAQ,yBAAyB;GAEhE,IAAI,CAAC,OAAO,cAAc,sBAAsB,GAC9C,OAAO,CACL,QAAQ,YAAY,SAAS,uCAAuC,CAAC,GACrE,OACF;GAGF,MAAM,kBAAkB,GAAG,OAAO,sBAAsB,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE,GAAG,SAAS;GACxF,MAAM,eAAe,mBAAmB,qBAAqB,iBAAiB;GAC9E,MAAM,YAAY,gBAAgB,kBAAkB,iBAAiB;GAErE,IAAI,QAAQ,YAAY,IAAI,YAAY,KAAK,QAAQ,SAAS,IAAI,SAAS,GACzE,OAAO,CACL,QAAQ,YAAY,SAAS,yCAAyC,CAAC,GACvE,OACF;GAEF,MAAM,MAAqB;IACzB;IACA,UAAU,QAAQ;IAClB,eAAe,oBAAoB,KAAK,iBAAiB;IACzD,WAAW,QAAQ;IACnB,gBAAgB,QAAQ;IACxB,SAAS,QAAQ;IACjB,cAAc,QAAQ;IACtB,cAAc,QAAQ;IACtB,cAAc,QAAQ;IACtB,aAAa,QAAQ;IACrB;IACA,OAAO;IACP,gBAAgB,KAAA;IAChB,iBAAiB;IACjB,eAAe,KAAA;IACf,eAAe,QAAQ;IACvB,GAAI,wBAAwB,KAAA,IAAY,CAAC,IAAI,EAAE,oBAAoB;IACnE,GAAI,yBAAyB,KAAA,IAAY,CAAC,IAAI,EAAE,qBAAqB;IACrE,GAAI,QAAQ,mBAAmB,KAAA,IAC3B,CAAC,IACD,EAAE,gBAAgB,QAAQ,eAAe;IAC7C,GAAI,QAAQ,mBAAmB,KAAA,IAC3B,CAAC,IACD,EAAE,gBAAgB,QAAQ,eAAe;GAC/C;GAEA,MAAM,SAA2B;IAC/B;IACA,cAAc,KAAA;IACd,cAAc,KAAA;IACd,aAAa,KAAA;IACb,wBAAwB,KAAA;IACxB,YAAY,KAAA;IACZ,aAAa,KAAA;IACb,mCAAmB,IAAI,IAAwC;IAC/D,oCAAoB,IAAI,IAAqC;GAC/D;GAEA,IAAI,CAAC,sBAAsB,QAAQ,UAAU,YAAY,GAAG,CAAC,GAC3D,OAAO,CAAC,QAAQ,sBAAsB,OAAO,CAAC,GAAG,OAAO;GAE1D,QAAQ,eAAe,QAAQ,QAAQ;GACvC,MAAM,iBAAiB,QAAQ;GAE/B,MAAM,QAAQ,QAAQ,MAAM,IAAI,QAAQ,UAAU,EAChD,mBAAmB,KAAK,oBAAoB,EAC9C,CAAC;GAED,OAAO,CACL,QACE,gBAAgB,KAAK;IACnB,cAAc,IAAI;IAClB,WAAW,IAAI;IACf,eAAe,IAAI;IACnB,OAAO,IAAI;IACX,UAAU;GACZ,CAAC,CACH,GACA;IACE,GAAG,eAAe,SAAS,MAAM;IACjC;IACA;IACA;GACF,CACF;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EACxD,IAAI,SAAS,SAAS,SAAS;GAC7B,KAAK,MAAM,UAAU,SAAS,MAAM,SAClC,IAAI,MAAM,YAAY,MAAM,KAAK,MAAM,kBAAkB,OAAO,MAAM,GAAG;IACvE,OAAO,MAAM,UAAU,OAAO,OAAO,KAAK;IAE1C,OAAO,OAAO,qBAAqB,KAAK;KACtC,QAAQ;KACR,MAAM;IACR,CAAC;GACH;GAGF,OAAO,OAAO,OAAO,UAAU,SAAS,KAAK;EAC/C;EAEA,OAAO,SAAS;CAClB,GAAG,OAAO,eAAe;CAEzB,MAAM,YAAsD,OAAO,WACjE,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,kBAAkB,aAAa,WAAW;EAC1E,MAAM,YAAY,OAAO,MAAM;EAE/B,MAAM,WAAW,OAAO,IAAI,OAC1B,QACC,YAAiE;GAChE,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QAAQ,YAAY,aAAa,sBAAsB,QAAQ,cAAc,CAAC,GAC9E,OACF;GAEF,IAAI,OAAO,IAAI,UAAU,YAAY,OAAO,CAAC,QAAQ,KAAA,CAAS,GAAG,OAAO;GAExE,OAAO,CACL,QAAQ,KAAA,CAAS,GACjB,eAAe,SAAS;IACtB,GAAG;IACH,KAAK;KAAE,GAAG,OAAO;KAAK,OAAO;KAAS,eAAe;IAAU;GACjE,CAAC,CACH;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;CAC1D,CACF;CAEA,MAAM,SAAgD,OAAO,WAC3D,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,kBAAkB,UAAU,WAAW;EACvE,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK;EAEpC,MAAM,eACJ,QAAQ,SAAS,yBACb,QAAQ,eACR,QAAQ,eAAe,IACrB,aAAa,QAAQ,UAAU,QAAQ,WAAW,QAAQ,cAAc,CAC1E;EAEN,MAAM,SACJ,iBAAiB,KAAA,IAAY,KAAA,IAAY,QAAQ,YAAY,IAAI,YAAY;EAE/E,OAAO,WAAW,KAAA,IAAY,OAAO,KAAK,IAAI,OAAO,KAAK,WAAW,OAAO,GAAG,CAAC;CAClF,CACF;CAEA,MAAM,mBAAoE,OAAO,WAC/E,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,uBAAuB,oBAAoB,WAAW;EAItF,IAAI,QAAQ,0BAA0B,KAAA,GAAW;GAC/C,MAAM,QAAQ,OAAO,QAAQ;GAE7B,IAAI,OAAO,OAAO,KAAK,GACrB,OAAO,uBAAuB,KAAK,EAAE,QAAQ,MAAM,MAAM,CAAC;EAE9D;EACA,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK;EAEpC,MAAM,eAAe,QAAQ,eAAe,IAC1C,aAAa,QAAQ,UAAU,QAAQ,WAAW,QAAQ,cAAc,CAC1E;EAEA,MAAM,SACJ,iBAAiB,KAAA,IAAY,KAAA,IAAY,QAAQ,YAAY,IAAI,YAAY;EAE/E,OAAO,WAAW,KAAA,IACd,qBAAqB,KAAK,IAC1B,kBAAkB,KAAK,EAAE,YAAY,WAAW,OAAO,GAAG,EAAE,CAAC;CACnE,CACF;CAEA,MAAM,aAAwD,OAAO,GACnE,mCACF,CAAC,EAAE,gBACD,OAAO,IAAI,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,cAAc,SAAS,WAAW;EAClE,MAAM,WAAW,OAAO,aAAa,OAAO;EAE5C,MAAM,WAAW,OAAO,IAAI,OAC1B,QACC,YAAiF;GAChF,IAAI,QAAQ,MAAM,SAAS,QAAQ,QAAQ,GAAG,OAAO,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,OAAO;GACrF,IAAI,OAAO,SAAS,SAAS,QAAQ,QAAQ;GAE7C,IAAI,QAAQ,YAAY,KAAA,GAAW;IACjC,MAAM,UAAU,QAAQ;IAExB,MAAM,aAAa,MAAM,KACvB,QAAQ,eAAe,IAAI,QAAQ,QAAQ,KAAK,CAAC,IAChD,OAAO,QAAQ,YAAY,IAAI,EAAE,CACpC,CAAC,CACE,QACE,UACC,UAAU,KAAA,KACV,EAAE,MAAM,IAAI,UAAU,aAAa,MAAM,gBAAgB,KAAA,EAC7D,CAAC,CACA,MAAM,GAAG,MAAM,EAAE,IAAI,gBAAgB,EAAE,IAAI,aAAa;IAE3D,KAAK,MAAM,aAAa,YAAY;KAClC,IAAI,UAAU,IAAI,iBAAiB,QAAQ,cAAc;MACvD,OAAO;MACP;KACF;KACA,IACE,CAAC,QAAQ,sBAAsB,SAAS,UAAU,IAAI,YAAY,KAClE,UAAU,IAAI,UAAU,mBACxB,UAAU,gBAAgB,KAAA,GAE1B,OAAO,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,OAAO;IAC3C;IACA,IACE,MAAM,IAAI,iBAAiB,QAAQ,gBAClC,KAAK,IAAI,UAAU,WAAW,KAAK,IAAI,UAAU,iBAElD,OAAO,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,OAAO;GAC3C;GAEA,IAAI,SAAS,KAAA,GAAW,OAAO,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,OAAO;GAC/D,IAAI,oBAAoB,IAAI,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,OAAO;GAEpF,OAAO,CACL,QACE,OAAO,KACL,MAAM,KAAK;IACT,cAAc,KAAK,IAAI;IACvB,WAAW,gBAAgB,kBAAkB,UAAU;IACvD,cAAc,KAAK,IAAI;GACzB,CAAC,CACH,CACF,GACA,OACF;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CAAC,CACH;CAEA,MAAM,mBAAoE,OAAO,WAC/E,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,yBAAyB,oBAAoB,WAAW;EAExF,MAAM,WAAW,OAAO,IAAI,OAC1B,QACC,YAAiF;GAChF,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QACE,YAAY,oBAAoB,sBAAsB,QAAQ,cAAc,CAC9E,GACA,OACF;GAEF,IAAI,CAAC,QAAQ,MAAM,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,YAAY,GACtE,OAAO,CAAC,QAAQ,cAAc,MAAM,CAAC,GAAG,OAAO;GAGjD,IAAI,OAAO,iBAAiB,KAAA,GAAW;IACrC,IACE,OAAO,aAAa,aAAa,QAAQ,YACzC,OAAO,aAAa,aAAa,QAAQ,UAEzC,OAAO,CAAC,QAAQ,KAAA,CAAS,GAAG,OAAO;IAGrC,OAAO,CACL,QACE,YACE,oBACA,yEAAyE,QAAQ,cACnF,CACF,GACA,OACF;GACF;GAEA,MAAM,SAAS,mBAAmB,KAAK;IACrC,UAAU,QAAQ;IAClB,UAAU,QAAQ;GACpB,CAAC;GAED,MAAM,MACJ,WAAW,OAAO,IAAI,SAAS,WAAW,mBACtC;IAAE,GAAG,OAAO;IAAK,OAAO;GAAgB,IACxC,OAAO;GAEb,OAAO,CACL,QAAQ,KAAA,CAAS,GACjB,eAAe,SAAS;IAAE,GAAG;IAAQ;IAAK,cAAc;GAAO,CAAC,CAClE;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;CAC1D,CACF;CAEA,MAAM,sBAAsB,OAAO,WAAW,WAAW,YAA2B;EAClF,MAAM,SAAS,OAAO,QAAQ,OAC5B,WAAW,UACX,6BAA6B,WAAW,YAAY,CACtD;EAEA,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;EAGjC,OAAO;GAAE;GAAQ,YAAA,OAFS,4BAA4B,QAAQ,UAAU;EAE5C;CAC9B,CAAC;CAED,MAAM,UAAqD,OAAO,GAChE,mCACF,CAAC,CAAC,WAAW,OAAO;EAClB,MAAM,EAAE,SAAS,QAAQ,eAAe,OAAO,oBAAoB,KAAK;EACxE,MAAM,WAAW,OAAO,QAAQ,cAAc,QAAQ,MAAM;EAE5D,OAAO,OAAO,QAAQ,MAAM,aAC1B,QAAQ,OAAO,UACf,QAAQ,aACN,OAAO,IAAI,aAAa;GACtB,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK;GACpC,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,OAAO,YAAY,sBAAsB,oBAAoB;GACtE,IAAI,OAAO,IAAI,aAAa,SAAS,QAAQ,UAC3C,OAAO,OAAO,YAAY,sBAAsB,oCAAoC;GACtF,OAAO,4BAA4B,QAAQ,OAAO,GAAG;GACrD,MAAM,WAAW,OAAO,oBAAoB,OAAO,GAAG;GACtD,MAAM,OAAO,OAAO,QAAQ,KAAK,OAAO,IAAI,QAAQ;GAIpD,QAAQ,QAAQ,UAAU,MAA1B;IACE,KAAK;KACH,IAAI,CAAC,QAAQ,MAAM,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,YAAY,GACtE,OAAO,OAAO,cAAc,MAAM;KACpC,OAAO,4BAA4B,QAAQ;MACzC,cAAc,QAAQ;MACtB,WAAW,OAAO,IAAI;MACtB,GAAI,WAAW,YAAY,aAAa,WAAW,UAAU,KAAA,IACzD,CAAC,IACD,EAAE,OAAO,mBAAmB,QAAQ,YAAY,EAAE;KACxD,CAAC;KACD;IACF,KAAK,UAAU;KACb,IACG,OAAO,IAAI,UAAU,YACpB,EAAE,OAAO,IAAI,UAAU,aAAa,aAAa,KAAA,MACnD,OAAO,2BAA2B,QAAQ,UAAU,kBAEpD,OAAO,OAAO,YACZ,sBACA,uCACF;KACF,MAAM,OAAO,QAAQ,YAAY,IAAI,QAAQ,UAAU,gBAAgB;KAEvE,MAAM,gBACJ,SAAS,KAAA,KAAa,KAAK,IAAI,aAAa,OAAO,IAAI,WACnD,KAAA,IACA,OAAO,oBAAoB,KAAK,GAAG;KAEzC,IAAI,kBAAkB,KAAA,GACpB,OAAO,OAAO,YACZ,sBACA,yCACF;KACF,OAAO,yBAAyB,YAAY,cAAc,UAAU;KACpE;IACF;IACA,KAAK;KACH,IACG,OAAO,IAAI,UAAU,WACpB,EAAE,OAAO,IAAI,UAAU,aAAa,aAAa,KAAA,MACnD,OAAO,gBAAgB,KAAA,KACvB,QAAQ,MAAM,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,YAAY,KACnE,WAAW,YAAY,WAEvB,OAAO,OAAO,YACZ,sBACA,6CACF;KACF,OAAO,4BAA4B,QAAQ;MACzC,cAAc,QAAQ;MACtB,WAAW,OAAO,IAAI;MACtB,OAAO,KAAA;KACT,CAAC;GAEL;GACA,IAAI,aAAa,KAAA,GACf,OAAO,4BAA4B,KAAK;IACtC,QAAQ,SAAS;IACjB,cAAc,KAAK;IACnB,UAAU;GACZ,CAAC;GACH,IAAI,OAAO,IAAI,UAAU,WACvB,OAAO,OAAO,YACZ,sBACA,kDACF;GACF,MAAM,WAAW,OAAO,QAAQ,eAAe,QAAQ;GAEvD,OAAO,4BAA4B,KAAK;IACtC;IACA,cAAc,SAAS;IACvB,UAAU;GACZ,CAAC;EACH,CAAC,CACH,CACF;CACF,CAAC;CAED,MAAM,qBAAwE,OAAO,GACnF,2CACF,CAAC,EAAE,gBACD,OAAO,IAAI,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,wBAAwB,sBAAsB,WAAW;EACzF,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK,EAAA,CAAG,YAAY,IAAI,QAAQ,YAAY;EAC3E,MAAM,YAAY,WAAW,KAAA,IAAY,KAAA,IAAY,OAAO,oBAAoB,OAAO,GAAG;EAE1F,IAAI,cAAc,KAAA,GAChB,OAAO,OAAO,YAAY,sBAAsB,wCAAwC;EAC1F,MAAM,EAAE,QAAQ,eAAe;EAC/B,MAAM,YAAY,OAAO,MAAM;EAE/B,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YACmF;GACnF,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QACE,YAAY,sBAAsB,sBAAsB,QAAQ,cAAc,CAChF,GACA,OACF;GAEF,MAAM,oBAAoB,4BAA4B,MAAM;GAE5D,IAAI,WAAW,iBAAiB,QAAQ,cACtC,OAAO,CACL,QACE,mBAAmB,KAAK;IACtB,cAAc,QAAQ;IACtB,iBAAiB,WAAW;GAC9B,CAAC,CACH,GACA,OACF;GAEF,IAAI,OAAO,iBAAiB,KAAA,GAAW;IACrC,IACE,OAAO,IAAI,UAAU,aACrB,OAAO,IAAI,mBAAmB,WAAW,WACzC,OAAO,aAAa,iBAAiB,QAAQ,gBAC7C,OAAO,aAAa,aAAa,OAAO,UAExC,OAAO,CACL,QACE,YACE,sBACA,wDACF,CACF,GACA,OACF;IAEF,OAAO,CACL,QACE,WAAW,KAAK;KACd,cAAc,OAAO,IAAI;KACzB,cAAc,WAAW;KACzB,WAAW,OAAO,IAAI;KACtB,SAAS,WAAW;KACpB,GAAI,sBAAsB,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,kBAAkB;KACxE,WAAW,IAAI,OAAO,aAAa,iBAAiB;IACtD,CAAC,CACH,GACA,OACF;GACF;GACA,IAAI,OAAO,IAAI,UAAU,WACvB,OAAO,CACL,QAAQ,YAAY,sBAAsB,gCAAgC,CAAC,GAC3E,OACF;GAEF,MAAM,WACJ,OAAO,IAAI,wBAAwB,KAAA,IAC/B,KAAA,IACA,yBAAyB,WAAW,OAAO,GAAG,GAAG,MAAM;GAE7D,MAAM,WAAW,QAAQ,eAAe,IAAI,OAAO,IAAI,QAAQ;GAC/D,MAAM,SAAS,aAAa,KAAA,IAAY,KAAA,IAAY,QAAQ,YAAY,IAAI,QAAQ;GAEpF,MAAM,eACJ,aAAa,eACb,WAAW,KAAA,KACX,OAAO,IAAI,gBAAgB,OAAO,IAAI,iBACtC,EACE,OAAO,2BAA2B,OAAO,IAAI,gBAC7C,OAAO,iBAAiB,KAAA;GAG5B,IAAI,SAAS;GAEb,IACE,aAAa,KAAA,KACb,CAAC,gBACD,CAAC,QAAQ,eAAe,IAAI,OAAO,IAAI,QAAQ,GAC/C;IACA,MAAM,cAAc,QAAQ;IAE5B,IAAI,CAAC,iBAAiB,OAAO,IAAI,QAAQ,GACvC,OAAO,CAAC,QAAQ,sBAAsB,oBAAoB,CAAC,GAAG,OAAO;IAGvE,KAAK,MAAM,SAAS,CAAC,OAAO,IAAI,GAC9B,KAAK,MAAM,MAAM,QAAQ,eAAe,IAAI,OAAO,IAAI,QAAQ,KAAK,CAAC,GAAG;KACtE,MAAM,QAAQ,YAAY,IAAI,EAAE;KAEhC,IAAI,UAAU,KAAA,GAAW;KACzB,IACE,OAAO,OAAO,IAAI,gBAClB,EACE,MAAM,2BAA2B,OAAO,IAAI,gBAC5C,MAAM,iBAAiB,KAAA,MAEzB,MAAM,gBAAgB,KAAA,GACtB;MACA,MAAM,cAAc,YAAY,KAAK;OACnC,cAAc;OACd,QAAQ,OAAO,IAAI;OACnB,QAAQ,qBAAqB;OAC7B,aAAa,IAAI,SAAS;MAC5B,CAAC;MAED,IAAI,CAAC,SAAS,CAAC,kBAAkB,MAAM,IAAI,UAAU,WAAW,GAC9D,OAAO,CAAC,QAAQ,sBAAsB,oBAAoB,CAAC,GAAG,OAAO;MACvE,IAAI,OACF,eAAe,SAAS;OACtB,GAAG;OACH;MACF,CAAC;KACL;IACF;IAEF,SAAS;KACP,GAAG;KACH;KACA,gBAAgB,QAAQ,eAAe,IAAI,OAAO,IAAI,UAAU,QAAQ;IAC1E;GACF;GAEA,MAAM,OAAO,eAAe,QAAQ;IAClC,GAAG;IACH,KAAK;KAAE,GAAG,OAAO;KAAK,OAAO;KAAW,gBAAgB,WAAW;IAAQ;IAC3E,cAAc;KACZ,cAAc,WAAW;KACzB,UAAU,OAAO;KACjB,mBAAmB;IACrB;GACF,CAAC;GAED,OAAO,CACL,QACE,WAAW,KAAK;IACd,cAAc,OAAO,IAAI;IACzB,cAAc,WAAW;IACzB,WAAW,OAAO,IAAI;IACtB,SAAS,WAAW;IACpB,GAAI,sBAAsB,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,kBAAkB;IACxE,WAAW,IAAI,SAAS;GAC1B,CAAC,CACH,GACA,IACF;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,IAAI,WAAW,KAAA,GACb,QAAQ,MAAM,gBAAgB,OAAO,IAAI,UAAU,QAAQ,YAAY;EAEzE,OAAO,SAAS;CAClB,CAAC,CACH;CAEA,MAAM,gBAAgB,OAAO,WAAW,WAAW,UAAoB;EACrE,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK;EACpC,MAAM,WAAW,QAAQ,eAAe,IAAI,QAAQ;EACpD,MAAM,SAAS,aAAa,KAAA,IAAY,KAAA,IAAY,QAAQ,YAAY,IAAI,QAAQ;EAEpF,MAAM,SAAS,CAAC,GAAI,QAAQ,eAAe,IAAI,QAAQ,KAAK,CAAC,CAAE,CAAC,CAC7D,SAAS,OAAO;GACf,MAAM,MAAM,QAAQ,YAAY,IAAI,EAAE;GAEtC,OAAO,QAAQ,KAAA,IAAY,CAAC,IAAI,CAAC,GAAG;EACtC,CAAC,CAAC,CACD,MAAM,GAAG,MAAM,EAAE,IAAI,gBAAgB,EAAE,IAAI,aAAa,CAAC,CAAC;EAE7D,MAAM,WAAW,QAAQ,eAAe,IAAI,QAAQ;EAEpD,OAAO,kBAAkB,KAAK;GAC5B,QAAQ,WAAW,KAAA,IAAY,OAAO,WAAW,OAAO,GAAG;GAC3D,QAAQ,WAAW,KAAA,IAAY,OAAO,WAAW,OAAO,GAAG;GAC3D,SAAS,QAAQ,eAAe,IAAI,QAAQ;GAC5C,GAAI,aAAa,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS;EAC/C,CAAC;CACH,CAAC;CAED,MAAM,aAAa,OAAO,WAAW,WAAW,aAAgC;EAC9E,MAAM,UAAU,OAAO,SAAS,mBAAmB,cAAc,WAAW;EAC5E,MAAM,MAAM,OAAO,MAAM;EAEzB,MAAM,WAAW,OAAO,IAAI,OAC1B,QACC,YAAmE;GAClE,MAAM,cAAc,QAAQ;GAC5B,IAAI,QAAQ;GAEZ,IAAI,CAAC,QAAQ,eAAe,IAAI,QAAQ,QAAQ,KAAK,CAAC,iBAAiB,QAAQ,QAAQ,GACrF,OAAO,CAAC,QAAQ,sBAAsB,YAAY,CAAC,GAAG,OAAO;GAG/D,KAAK,MAAM,SAAS,CAAC,OAAO,IAAI,GAC9B,KAAK,MAAM,MAAM,QAAQ,eAAe,IAAI,QAAQ,QAAQ,KAAK,CAAC,GAAG;IACnE,MAAM,SAAS,YAAY,IAAI,EAAE;IAEjC,IAAI,WAAW,KAAA,GAAW;IAC1B,IAAI,CAAC,SAAS,QAAQ,MAAM,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,YAAY,GAC/E;IACF,IAAI,OAAO,gBAAgB,KAAA,GAAW;KACpC,MAAM,cAAc,YAAY,KAAK;MACnC,cAAc;MACd,QAAQ,QAAQ;MAChB,QAAQ;MACR,aAAa,IAAI,GAAG;KACtB,CAAC;KAED,IAAI,CAAC,SAAS,CAAC,kBAAkB,OAAO,IAAI,UAAU,WAAW,GAC/D,OAAO,CAAC,QAAQ,sBAAsB,YAAY,CAAC,GAAG,OAAO;KAC/D,IAAI,OAAO,eAAe,SAAS;MAAE,GAAG;MAAQ;KAAY,CAAC;IAC/D;GACF;GAGF,OAAO,CACL,QAAQ,KAAK,GACb;IACE,GAAG;IACH;IACA,gBAAgB,QAAQ,eAAe,IAAI,QAAQ,QAAQ,IACvD,QAAQ,iBACR,QAAQ,eAAe,IAAI,QAAQ,UAAU,KAAA,CAAS;GAC5D,CACF;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CAAC;CAED,MAAM,eAA4D,OAAO,WACvE,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,cAAc,gBAAgB,WAAW;EACzE,MAAM,YAAY,OAAO,MAAM;EAE/B,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAIG;GACH,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QAAQ,YAAY,gBAAgB,sBAAsB,QAAQ,cAAc,CAAC,GACjF,OACF;GAKF,IAAI,OAAO,IAAI,UAAU,UAAU;IACjC,IAAI,OAAO,2BAA2B,KAAA,GACpC,OAAO,CACL,QACE,YACE,gBACA,qBAAqB,QAAQ,aAAa,6BAC5C,CACF,GACA,OACF;IAGF,OAAO,CACL,QACE,aAAa,KAAK;KAChB,cAAc,QAAQ;KACtB,kBAAkB,OAAO;IAC3B,CAAC,CACH,GACA,OACF;GACF;GACA,IAAI,OAAO,IAAI,UAAU,WAAW;IAClC,IAAI,OAAO,IAAI,mBAAmB,KAAA,GAChC,OAAO,CACL,QACE,YACE,gBACA,sBAAsB,QAAQ,aAAa,wBAC7C,CACF,GACA,OACF;IAGF,OAAO,CACL,QACE,mBAAmB,KAAK;KACtB,cAAc,QAAQ;KACtB,iBAAiB,OAAO,IAAI;IAC9B,CAAC,CACH,GACA,OACF;GACF;GACA,IAAI,OAAO,gBAAgB,KAAA,GAAW,OAAO,CAAC,QAAQ,OAAO,WAAW,GAAG,OAAO;GAElF,MAAM,SAAS,YAAY,KAAK;IAC9B,cAAc,QAAQ;IACtB,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,aAAa,IAAI,SAAS;GAC5B,CAAC;GAED,IAAI,CAAC,kBAAkB,OAAO,IAAI,UAAU,MAAM,GAChD,OAAO,CAAC,QAAQ,sBAAsB,cAAc,CAAC,GAAG,OAAO;GAEjE,OAAO,CAAC,QAAQ,MAAM,GAAG,eAAe,SAAS;IAAE,GAAG;IAAQ,aAAa;GAAO,CAAC,CAAC;EACtF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CACF;CAEA,MAAM,eAA4D,OAAO,WACvE,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,qBAAqB,gBAAgB,WAAW;EAChF,MAAM,4BAAY,IAAI,IAAyC;EAE/D,MAAM,SAAS,OAAO,IAAI,IAAI,KAAK;EAEnC,KAAK,MAAM,MAAM,OAAO,eAAe,IAAI,QAAQ,QAAQ,KAAK,CAAC,GAAG;GAClE,MAAM,SAAS,OAAO,YAAY,IAAI,EAAE;GAExC,IAAI,WAAW,KAAA,KAAa,OAAO,IAAI,UAAU,SAAS;GAC1D,MAAM,YAAY,OAAO,oBAAoB,OAAO,GAAG;GAEvD,IAAI,cAAc,KAAA,GAChB,UAAU,IAAI,OAAO,IAAI,cAAc,UAAU,WAAW,OAAO;EACvE;EAEA,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAIG;GACH,IAAI,QAAQ,eAAe,IAAI,QAAQ,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO;GAE9E,MAAM,OAAO,QAAQ,YAAY,IAAI,QAAQ,gBAAgB;GAE7D,IAAI,SAAS,KAAA,GACX,OAAO,CACL,QACE,YAAY,gBAAgB,sBAAsB,QAAQ,kBAAkB,CAC9E,GACA,OACF;GAEF,IAAI,KAAK,IAAI,aAAa,QAAQ,UAChC,OAAO,CACL,QACE,YACE,gBACA,mBAAmB,QAAQ,iBAAiB,6BAA6B,QAAQ,UACnF,CACF,GACA,OACF;GAEF,IAAI,CAAC,QAAQ,MAAM,SAAS,KAAK,IAAI,UAAU,KAAK,IAAI,YAAY,GAClE,OAAO,CAAC,QAAQ,cAAc,IAAI,CAAC,GAAG,OAAO;GAG/C,MAAM,QAAQ,WAAW,SAAS,QAAQ,UAAU,KAAK,IAAI,aAAa;GAE1E,MAAM,SAA8B,CAAC;GACrC,MAAM,cAAc,QAAQ;GAE5B,KAAK,MAAM,UAAU,OAAO;IAC1B,IAAI,OAAO,UAAU,QAAQ,UAAU;IAGvC,KACG,OAAO,IAAI,UAAU,aAAa,OAAO,IAAI,UAAU,aACxD,OAAO,2BAA2B,QAAQ,kBAE1C;IAKF,IAAI,OAAO,IAAI,UAAU,aAAa,OAAO,IAAI,mBAAmB,WAClE;IAIF,IAAI,OAAO,IAAI,UAAU,SAAS;IAClC,MAAM,WAAW,UAAU,IAAI,OAAO,IAAI,YAAY;IAEtD,IAAI,aAAa,WAAW;IAC5B,IAAI,aAAa,KAAA,GAAW;IAC5B,eAAe,SAAS;KACtB,GAAG;KACH,KAAK;MAAE,GAAG,OAAO;MAAK,OAAO;KAAU;KACvC,wBAAwB,QAAQ;IAClC,CAAC;IACD,OAAO,KACL,aAAa,KAAK;KAChB,cAAc,OAAO,IAAI;KACzB,eAAe,OAAO,IAAI;KAC1B,cAAc,OAAO,IAAI;IAC3B,CAAC,CACH;GACF;GAEA,OAAO,CAAC,QAAQ,MAAM,GAAG;IAAE,GAAG;IAAS;GAAY,CAAC;EACtD,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CACF;CAEA,MAAM,aAAwD,OAAO,WACnE,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,mBAAmB,cAAc,WAAW;EAE5E,MAAM,WAAW,OAAO,IAAI,OAC1B,QACC,YAAiF;GAChF,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QAAQ,YAAY,cAAc,sBAAsB,QAAQ,cAAc,CAAC,GAC/E,OACF;GAEF,IAAI,OAAO,2BAA2B,KAAA,GACpC,OAAO,CACL,QACE,YACE,cACA,cAAc,QAAQ,aAAa,+BACrC,CACF,GACA,OACF;GAEF,MAAM,OAAO,QAAQ,YAAY,IAAI,OAAO,sBAAsB;GAElE,IAAI,SAAS,KAAA,GACX,OAAO,CACL,QACE,YACE,cACA,mBAAmB,OAAO,uBAAuB,YACnD,CACF,GACA,OACF;GAIF,IAAI,CAAC,QAAQ,MAAM,SAAS,KAAK,IAAI,UAAU,KAAK,IAAI,YAAY,GAClE,OAAO,CAAC,QAAQ,cAAc,IAAI,CAAC,GAAG,OAAO;GAE/C,IAAI,OAAO,iBAAiB,KAAA,GAAW;IACrC,IACE,OAAO,aAAa,aAAa,QAAQ,YACzC,OAAO,aAAa,aAAa,QAAQ,UAEzC,OAAO,CAAC,QAAQ,KAAA,CAAS,GAAG,OAAO;IAGrC,OAAO,CACL,QACE,YACE,cACA,8DAA8D,QAAQ,cACxE,CACF,GACA,OACF;GACF;GACA,IAAI,OAAO,IAAI,UAAU,aAAa,OAAO,IAAI,UAAU,UACzD,OAAO,CACL,QACE,YACE,cACA,0BAA0B,QAAQ,aAAa,qBAAqB,OAAO,IAAI,OACjF,CACF,GACA,OACF;GAGF,MAAM,SAAS,mBAAmB,KAAK;IACrC,UAAU,QAAQ;IAClB,UAAU,QAAQ;GACpB,CAAC;GAED,OAAO,CACL,QAAQ,KAAA,CAAS,GACjB,eAAe,SAAS;IACtB,GAAG;IACH,KAAK;KAAE,GAAG,OAAO;KAAK,OAAO;IAAS;IACtC,cAAc;GAChB,CAAC,CACH;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;CAC1D,CACF;CAEA,MAAM,gBAA8D,OAAO,WACzE,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,sBAAsB,iBAAiB,WAAW;EAElF,MAAM,WAAW,OAAO,IAAI,OAC1B,QACC,YAAiE;GAChE,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QAAQ,YAAY,iBAAiB,sBAAsB,QAAQ,cAAc,CAAC,GAClF,OACF;GAIF,IAAI,OAAO,IAAI,UAAU,WAAW,OAAO,CAAC,QAAQ,KAAA,CAAS,GAAG,OAAO;GAEvE,MAAM,QAAQ,QAAQ;GAEtB,IAAI,UAAU,KAAA,GAAW;IACvB,IAAI,OAAO,2BAA2B,MAAM,kBAC1C,OAAO,CAAC,QAAQ,KAAA,CAAS,GAAG,OAAO;IACrC,MAAM,OAAO,QAAQ,YAAY,IAAI,MAAM,gBAAgB;IAE3D,IAAI,SAAS,KAAA,KAAa,KAAK,IAAI,aAAa,OAAO,IAAI,UACzD,OAAO,CACL,QACE,YACE,iBACA,mBAAmB,MAAM,iBAAiB,yCAC5C,CACF,GACA,OACF;IAEF,IACE,KAAK,IAAI,UAAU,aACnB,CAAC,QAAQ,MAAM,SAAS,KAAK,IAAI,UAAU,KAAK,IAAI,YAAY,GAEhE,OAAO,CACL,QACE,YAAY,iBAAiB,6CAA6C,CAC5E,GACA,OACF;GACJ;GAEA,OAAO,CACL,QAAQ,KAAA,CAAS,GACjB,eAAe,SAAS;IACtB,GAAG;IACH,KAAK;KAAE,GAAG,OAAO;KAAK,OAAO;IAAQ;IACrC,wBAAwB,KAAA;GAC1B,CAAC,CACH;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;CAC1D,CACF;CAEA,MAAM,UAAkD,OAAO,WAC7D,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,gBAAgB,WAAW,WAAW;EACtE,MAAM,YAAY,OAAO,MAAM;EAE/B,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK,EAAA,CAAG,YAAY,IAAI,QAAQ,YAAY;EAC3E,MAAM,YAAY,WAAW,KAAA,IAAY,KAAA,IAAY,OAAO,oBAAoB,OAAO,GAAG;EAC1F,MAAM,oCAAoB,IAAI,IAAkB;EAEhD,IAAI,QAAQ,OAAO,SAAS,mBAAmB;GAC7C,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK;GAEpC,KAAK,MAAM,EAAE,uBAAuB,QAAQ,OAAO,UAAU;IAC3D,MAAM,QAAQ,QAAQ,YAAY,IAAI,iBAAiB;IAEvD,IAAI,UAAU,KAAA,MAAc,OAAO,oBAAoB,MAAM,GAAG,OAAO,KAAA,GACrE,kBAAkB,IAAI,iBAAiB;GAC3C;EACF;EAEA,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAIG;GACH,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QAAQ,YAAY,WAAW,sBAAsB,QAAQ,cAAc,CAAC,GAC5E,OACF;GAEF,IAAI,OAAO,IAAI,UAAU,WAAW;IAClC,IAAI,OAAO,IAAI,mBAAmB,KAAA,GAChC,OAAO,CACL,QACE,YACE,WACA,sBAAsB,QAAQ,aAAa,wBAC7C,CACF,GACA,OACF;IAGF,OAAO,CACL,QACE,mBAAmB,KAAK;KACtB,cAAc,QAAQ;KACtB,iBAAiB,OAAO,IAAI;IAC9B,CAAC,CACH,GACA,OACF;GACF;GAEA,IAAI,cAAc,KAAA,GAChB,OAAO,CACL,QACE,mBAAmB,KAAK;IACtB,cAAc,QAAQ;IACtB,iBAAiB,UAAU,WAAW;GACxC,CAAC,CACH,GACA,OACF;GAEF,IAAI,CAAC,QAAQ,MAAM,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,YAAY,GACtE,OAAO,CAAC,QAAQ,cAAc,MAAM,CAAC,GAAG,OAAO;GAgBjD,IATE,QAAQ,OAAO,SAAS,oBACpB,uBACE,QAAQ,OAAO,cACd,eAAe,OAAO,kBAAkB,IAAI,UAAU,CAAC,EAAE,QAC5D,IACA,QAAQ,OAAO,SAAS,OAAO,UAC7B,kBAAkB,IAAI,MAAM,iBAAiB,CAC/C,GAGJ,OAAO,CAAC,QAAQ,oBAA6B,GAAG,OAAO;GAGzD,OAAO,CACL,QAAQ,WAAoB,GAC5B,eAAe,SAAS;IACtB,GAAG;IACH,KAAK;KAAE,GAAG,OAAO;KAAK,OAAO;IAAY;IACzC,YAAY;KAAE,QAAQ,QAAQ;KAAQ,mBAAmB;IAAU;GACrE,CAAC,CACH;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,IAAI,SAAS,UAAU,eAAe,WAAW,KAAA,GAC/C,QAAQ,MAAM,gBAAgB,OAAO,IAAI,UAAU,QAAQ,YAAY;EAEzE,OAAO,SAAS;CAClB,CACF;CAEA,MAAM,yBACJ,OAAO,WAAW,WAAW,aAAa;EACxC,MAAM,UAAU,OAAO,SACrB,yBACA,0BACA,WACF;EAEA,MAAM,YAAY,OAAO,MAAM;EAE/B,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAIG;GACH,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QACE,YACE,0BACA,sBAAsB,QAAQ,cAChC,CACF,GACA,OACF;GAEF,IAAI,OAAO,IAAI,UAAU,WAAW;IAClC,IAAI,OAAO,IAAI,mBAAmB,KAAA,GAChC,OAAO,CACL,QACE,YACE,0BACA,sBAAsB,QAAQ,aAAa,wBAC7C,CACF,GACA,OACF;IAGF,OAAO,CACL,QACE,mBAAmB,KAAK;KACtB,cAAc,QAAQ;KACtB,iBAAiB,OAAO,IAAI;IAC9B,CAAC,CACH,GACA,OACF;GACF;GACA,MAAM,WAAW,OAAO,kBAAkB,IAAI,QAAQ,UAAU;GAEhE,IAAI,aAAa,KAAA,GAAW;IAC1B,IAAI,SAAS,aAAa,QAAQ,UAChC,OAAO,CACL,QACE,iBAAiB,KAAK;KACpB,cAAc,QAAQ;KACtB,YAAY,QAAQ;KACpB,kBAAkB,SAAS;IAC7B,CAAC,CACH,GACA,OACF;IAGF,OAAO,CAAC,QAAQ,QAAQ,GAAG,OAAO;GACpC;GAEA,MAAM,SAAS,uBAAuB,KAAK;IACzC,cAAc,QAAQ;IACtB,YAAY,QAAQ;IACpB,UAAU,QAAQ;IAClB,UAAU,QAAQ;IAClB,QAAQ,QAAQ;IAChB,WAAW,IAAI,SAAS;GAC1B,CAAC;GAED,IAAI,CAAC,qBAAqB,OAAO,IAAI,UAAU,MAAM,GACnD,OAAO,CAAC,QAAQ,sBAAsB,wBAAwB,CAAC,GAAG,OAAO;GAE3E,MAAM,oBAAoB,IAAI,IAAI,OAAO,iBAAiB,CAAC,CAAC,IAC1D,QAAQ,YACR,MACF;GAKA,MAAM,QACJ,OAAO,IAAI,UAAU,eACrB,OAAO,eAAe,KAAA,KACtB,OAAO,WAAW,OAAO,SAAS,qBAClC,uBACE,OAAO,WAAW,OAAO,cACxB,eAAe,kBAAkB,IAAI,UAAU,CAAC,EAAE,QACrD;GAEF,OAAO,CACL,QAAQ,MAAM,GACd,eAAe,SAAS;IACtB,GAAG;IACH,KAAK,QAAQ;KAAE,GAAG,OAAO;KAAK,OAAO;IAAgB,IAAI,OAAO;IAChE,YAAY,QAAQ,KAAA,IAAY,OAAO;IACvC;GACF,CAAC,CACH;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CAAC;CAEH,MAAM,cAA0D,OAAO,WACrE,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,oBAAoB,eAAe,WAAW;EAE9E,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK,EAAA,CAAG,YAAY,IAAI,QAAQ,YAAY;EAC3E,MAAM,YAAY,WAAW,KAAA,IAAY,KAAA,IAAY,OAAO,oBAAoB,OAAO,GAAG;EAE1F,MAAM,WAAW,OAAO,IAAI,OAC1B,QACC,YAAsF;GACrF,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QAAQ,YAAY,eAAe,sBAAsB,QAAQ,cAAc,CAAC,GAChF,OACF;GAEF,IAAI,OAAO,IAAI,UAAU,WAAW;IAClC,IAAI,OAAO,IAAI,mBAAmB,KAAA,GAChC,OAAO,CACL,QACE,YACE,eACA,sBAAsB,QAAQ,aAAa,wBAC7C,CACF,GACA,OACF;IAGF,OAAO,CACL,QACE,mBAAmB,KAAK;KACtB,cAAc,QAAQ;KACtB,iBAAiB,OAAO,IAAI;IAC9B,CAAC,CACH,GACA,OACF;GACF;GAEA,IAAI,cAAc,KAAA,GAChB,OAAO,CACL,QACE,mBAAmB,KAAK;IACtB,cAAc,QAAQ;IACtB,iBAAiB,UAAU,WAAW;GACxC,CAAC,CACH,GACA,OACF;GAIF,MAAM,WAAW,OAAO;GACxB,MAAM,QAAQ,IAAI,IAAI,UAAU,eAAe,CAAC,CAAC;GAEjD,MAAM,SAAS,CACb,GAAI,UAAU,eAAe,CAAC,GAC9B,GAAG,QAAQ,YAAY,QAAQ,eAAe,CAAC,MAAM,IAAI,UAAU,CAAC,CACtE;GAEA,OAAO,CACL,QAAQ,KAAA,CAAS,GACjB,eAAe,SAAS;IACtB,GAAG;IACH,KACE,OAAO,IAAI,UAAU,YAAY,OAAO,MAAM;KAAE,GAAG,OAAO;KAAK,OAAO;IAAU;IAClF,aAAa;KAAE,QAAQ,UAAU,UAAU,QAAQ;KAAQ,aAAa;IAAO;GACjF,CAAC,CACH;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;CAC1D,CACF;CAEA,MAAM,0BACJ,OAAO,WAAW,WAAW,aAAa;EACxC,MAAM,UAAU,OAAO,SACrB,0BACA,2BACA,WACF;EAEA,MAAM,YAAY,OAAO,MAAM;EAE/B,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK,EAAA,CAAG,YAAY,IAAI,QAAQ,YAAY;EAC3E,MAAM,OAAO,sBAAsB,QAAQ,UAAU;EAErD,IACE,WAAW,KAAA,KACX,SAAS,aACT,CAAC,OAAO,mBAAmB,IAAI,KAAK,UAAU,CAAC,QAAQ,YAAY,IAAI,CAAC,CAAC,GACzE;GACA,MAAM,QAAQ,mBAAmB,OAAO,IAAI,YAAY;GAExD,MAAM,WAAW,OAAO,QAAQ,gBAC9B,OAAO,IAAI,UACX,OACA,QAAQ,UACV;GAEA,MAAM,SAAS,SAAS,EAAE,EAAE;GAE5B,IACE,SAAS,SAAS,KACjB,WAAW,KAAA,MACT,OAAO,SAAS,qBACf,OAAO,UAAU,SACjB,OAAO,eAAe,QAAQ,aAElC,OAAO,OAAO,YACZ,2BACA,gDACF;GAEF,IACE,QAAQ,SAAS,qBACjB,CAAC,+BAA+B,QAAQ,YAAY,MAAM,GAE1D,OAAO,OAAO,0BAA0B,KAAK;IAC3C,cAAc,QAAQ;IACtB,YAAY,QAAQ;GACtB,CAAC;EACL;EAEA,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAOG;GACH,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE3D,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QACE,YACE,2BACA,sBAAsB,QAAQ,cAChC,CACF,GACA,OACF;GAEF,IAAI,OAAO,IAAI,UAAU,WAAW;IAClC,IAAI,OAAO,IAAI,mBAAmB,KAAA,GAChC,OAAO,CACL,QACE,YACE,2BACA,sBAAsB,QAAQ,aAAa,wBAC7C,CACF,GACA,OACF;IAIF,IACE,QAAQ,WAAW,SAAS,yBAC5B,QAAQ,WAAW,SAAS,iBAE5B,OAAO,CACL,QACE,mBAAmB,KAAK;KACtB,cAAc,QAAQ;KACtB,iBAAiB,OAAO,IAAI;IAC9B,CAAC,CACH,GACA,OACF;GACJ;GACA,MAAM,MAAM,KAAK,UAAU,CAAC,QAAQ,YAAY,IAAI,CAAC;GACrD,MAAM,WAAW,OAAO,mBAAmB,IAAI,GAAG;GAElD,IACG,aAAa,KAAA,KACZ,CAAC,4BAA4B,SAAS,OAAO,YAAY,QAAQ,UAAU,KAC5E,aAAa,KAAA,KACZ,SAAS,eACT,OAAO,mBAAmB,IAAI,KAAK,UAAU,CAAC,QAAQ,YAAY,SAAS,CAAC,CAAC,GAE/E,OAAO,CACL,QACE,0BAA0B,KAAK;IAC7B,cAAc,QAAQ;IACtB,YAAY,QAAQ;GACtB,CAAC,CACH,GACA,OACF;GAGF,MAAM,SACJ,UAAU,UACV,wBAAwB,KAAK;IAC3B,cAAc,QAAQ;IACtB,YAAY,QAAQ;IACpB,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,YAAY,QAAQ;IACpB,YAAY,IAAI,SAAS;GAC3B,CAAC;GAEH,IAAI,aAAa,KAAA,KAAa,CAAC,uBAAuB,OAAO,IAAI,UAAU,MAAM,GAC/E,OAAO,CAAC,QAAQ,sBAAsB,yBAAyB,CAAC,GAAG,OAAO;GAE5E,MAAM,qBACJ,aAAa,KAAA,IACT,OAAO,qBACP,IAAI,IAAI,OAAO,kBAAkB,CAAC,CAAC,IAAI,KAAK,EAC1C,OACF,CAAC;GAKP,MAAM,QACJ,OAAO,IAAI,UAAU,aACrB,OAAO,gBAAgB,KAAA,KACvB,OAAO,YAAY,YAAY,OAC5B,eACC,mBAAmB,IAAI,KAAK,UAAU,CAAC,YAAY,WAAW,CAAC,CAAC,KAChE,mBAAmB,IAAI,KAAK,UAAU,CAAC,YAAY,SAAS,CAAC,CAAC,CAClE;GAEF,OAAO,CACL,QAAQ,MAAM,GACd,eAAe,SAAS;IACtB,GAAG;IACH,KAAK,QAAQ;KAAE,GAAG,OAAO;KAAK,OAAO;IAAgB,IAAI,OAAO;IAChE,aAAa,QAAQ,KAAA,IAAY,OAAO;IACxC;GACF,CAAC,CACH;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CAAC;CAEH,MAAM,qBAAwE,OAAO,WACnF,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SACrB,0BACA,sBACA,WACF;EAEA,MAAM,SAAS,OAAO,IAAI,IAAI,KAAK;EACnC,MAAM,UAAU,OAAO,YAAY,IAAI,QAAQ,kBAAkB,CAAC,EAAE,YAAY;EAEhF,MAAM,sBAAM,IAAI,IAAI,CAClB,QAAQ,mBACR,GAAI,SAAS,SAAS,oBAClB,QAAQ,SAAS,KAAK,UAAU,MAAM,iBAAiB,IACvD,CAAC,CACP,CAAC;EAED,MAAM,oCAAoB,IAAI,IAAkB;EAEhD,KAAK,MAAM,MAAM,KAAK;GACpB,MAAM,QAAQ,OAAO,YAAY,IAAI,EAAE;GAEvC,IAAI,UAAU,KAAA,MAAc,OAAO,oBAAoB,MAAM,GAAG,OAAO,KAAA,GACrE,kBAAkB,IAAI,EAAE;EAC5B;EAEA,MAAM,WAAW,OAAO,IAAI,OAC1B,QACC,YAAgF;GAC/E,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,kBAAkB;GAEjE,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QACE,YACE,sBACA,sBAAsB,QAAQ,oBAChC,CACF,GACA,OACF;GAKF,IAAI,CAFc,kBAAkB,IAAI,QAAQ,iBAEnC,GACX,OAAO,CACL,QACE,YACE,sBACA,oBAAoB,QAAQ,kBAAkB,4BAChD,CACF,GACA,OACF;GAEF,IACE,OAAO,IAAI,UAAU,eACrB,OAAO,eAAe,KAAA,KACtB,OAAO,WAAW,OAAO,SAAS,mBAElC,OAAO,CAAC,QAAQ,aAAsB,GAAG,OAAO;GAElD,MAAM,WAAW,OAAO,WAAW,OAAO;GAE1C,IAAI,CAAC,SAAS,MAAM,UAAU,MAAM,sBAAsB,QAAQ,iBAAiB,GACjF,OAAO,CAAC,QAAQ,aAAsB,GAAG,OAAO;GAOlD,IAAI,CAJe,SAAS,OAAO,UACjC,kBAAkB,IAAI,MAAM,iBAAiB,CAGjC,GAAG,OAAO,CAAC,QAAQ,eAAwB,GAAG,OAAO;GAEnE,OAAO,CACL,QAAQ,OAAgB,GACxB,eAAe,SAAS;IACtB,GAAG;IACH,KAAK;KAAE,GAAG,OAAO;KAAK,OAAO;IAAgB;IAC7C,YAAY,KAAA;GACd,CAAC,CACH;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CACF;CAEA,MAAM,qBAAwE,OAAO,WACnF,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SACrB,+BACA,sBACA,WACF;EAEA,MAAM,YAAY,OAAO,MAAM;EAE/B,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAIG;GACH,MAAM,WAAW,QAAQ,kBAAkB,IAAI,QAAQ,aAAa;GAEpE,IAAI,aAAa,KAAA,GAAW;IAS1B,IAAI,EALF,SAAS,uBAAuB,QAAQ,sBACxC,SAAS,qBAAqB,QAAQ,oBACtC,SAAS,qBAAqB,QAAQ,oBACtC,wBAAwB,SAAS,YAAY,QAAQ,UAAU,IAG/D,OAAO,CACL,QACE,yBAAyB,KAAK;KAC5B,eAAe,QAAQ;KACvB,QAAQ,SAAS;KACjB,SACE;IACJ,CAAC,CACH,GACA,OACF;IAGF,OAAO,CACL,QACE,oBAAoB,KAAK;KACvB,aAAa,sBAAsB,QAAQ;KAC3C,UAAU;IACZ,CAAC,CACH,GACA,OACF;GACF;GACA,KAAK,MAAM,MAAM,QAAQ,iBAAiB,IAAI,QAAQ,kBAAkB,KAAK,CAAC,GAAG;IAC/E,MAAM,cAAc,QAAQ,kBAAkB,IAAI,EAAE;IAEpD,IAAI,gBAAgB,KAAA,GAAW;IAC/B,IACE,YAAY,uBAAuB,QAAQ,sBAC3C,YAAY,qBAAqB,QAAQ,kBAEzC,OAAO,CACL,QACE,yBAAyB,KAAK;KAC5B,eAAe,QAAQ;KACvB,QAAQ,YAAY;KACpB,SAAS,oBAAoB,QAAQ,iBAAiB,4BAA4B,YAAY,cAAc;IAC9G,CAAC,CACH,GACA,OACF;GAEJ;GACA,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,kBAAkB;GAEjE,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QACE,YACE,sBACA,sBAAsB,QAAQ,oBAChC,CACF,GACA,OACF;GAIF,IAAI,CAAC,QAAQ,MAAM,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,YAAY,GACtE,OAAO,CAAC,QAAQ,cAAc,MAAM,CAAC,GAAG,OAAO;GAGjD,MAAM,cAAsC;IAC1C,eAAe,QAAQ;IACvB,oBAAoB,QAAQ;IAC5B,kBAAkB,QAAQ;IAC1B,mBAAmB,KAAA;IACnB,QAAQ;IACR,YAAY,QAAQ;IACpB,kBAAkB,QAAQ;IAC1B,YAAY,KAAA;IACZ,kBAAkB;IAClB,sBAAsB,KAAA;IACtB,kBAAkB,KAAA;GACpB;GAEA,OAAO,CACL,QACE,oBAAoB,KAAK;IACvB,aAAa,sBAAsB,WAAW;IAC9C,UAAU;GACZ,CAAC,CACH,GACA,qBAAqB,SAAS,WAAW,CAC3C;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CACF;CAEA,MAAM,2BACJ,OAAO,WAAW,WAAW,aAAa;EACxC,MAAM,UAAU,OAAO,SACrB,iCACA,4BACA,WACF;EAEA,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAOG;GACH,MAAM,cAAc,QAAQ,kBAAkB,IAAI,QAAQ,aAAa;GAEvE,IAAI,gBAAgB,KAAA,GAClB,OAAO,CACL,QACE,YACE,4BACA,6BAA6B,QAAQ,eACvC,CACF,GACA,OACF;GAEF,IAAI,YAAY,sBAAsB,KAAA,GAAW;IAE/C,IAAI,YAAY,sBAAsB,QAAQ,mBAC5C,OAAO,CAAC,QAAQ,sBAAsB,WAAW,CAAC,GAAG,OAAO;IAG9D,OAAO,CACL,QACE,yBAAyB,KAAK;KAC5B,eAAe,QAAQ;KACvB,QAAQ,YAAY;KACpB,SAAS,eAAe,QAAQ,cAAc,yBAAyB,YAAY,kBAAkB;IACvG,CAAC,CACH,GACA,OACF;GACF;GACA,MAAM,SAAS,QAAQ,YAAY,IAAI,YAAY,kBAAkB;GAErE,IAAI,WAAW,KAAA,GACb,OAAO,CACL,QACE,YACE,4BACA,sBAAsB,YAAY,oBACpC,CACF,GACA,OACF;GAEF,IAAI,CAAC,QAAQ,MAAM,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,YAAY,GACtE,OAAO,CAAC,QAAQ,cAAc,MAAM,CAAC,GAAG,OAAO;GAEjD,IAAI,YAAY,WAAW,YACzB,OAAO,CACL,QACE,yBAAyB,KAAK;IAC5B,eAAe,QAAQ;IACvB,QAAQ,YAAY;IACpB,SAAS,8BAA8B,YAAY,OAAO;GAC5D,CAAC,CACH,GACA,OACF;GAIF,IAAI,CAAC,QAAQ,YAAY,IAAI,QAAQ,iBAAiB,GACpD,OAAO,CACL,QACE,YACE,4BACA,4BAA4B,QAAQ,mBACtC,CACF,GACA,OACF;GAGF,MAAM,WAAmC;IACvC,GAAG;IACH,mBAAmB,QAAQ;GAC7B;GAEA,OAAO,CACL,QAAQ,sBAAsB,QAAQ,CAAC,GACvC,qBAAqB,SAAS,QAAQ,CACxC;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CAAC;CAEH,MAAM,0BACJ,OAAO,WAAW,WAAW,aAAa;EACxC,MAAM,UAAU,OAAO,SACrB,gCACA,2BACA,WACF;EAEA,MAAM,YAAY,OAAO,MAAM;EAE/B,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAIG;GACH,MAAM,cAAc,QAAQ,kBAAkB,IAAI,QAAQ,aAAa;GAEvE,IAAI,gBAAgB,KAAA,GAClB,OAAO,CACL,QACE,YACE,2BACA,6BAA6B,QAAQ,eACvC,CACF,GACA,OACF;GAEF,IAAI,YAAY,WAAW,YAAY;IAGrC,IACE,YAAY,eAAe,KAAA,KAC3B,wBAAwB,YAAY,YAAY,QAAQ,UAAU,GAElE,OAAO,CAAC,QAAQ,sBAAsB,WAAW,CAAC,GAAG,OAAO;IAG9D,OAAO,CACL,QACE,yBAAyB,KAAK;KAC5B,eAAe,QAAQ;KACvB,QAAQ,YAAY;KACpB,SACE;IACJ,CAAC,CACH,GACA,OACF;GACF;GAEA,MAAM,SAAiC;IACrC,GAAG;IACH,QAAQ;IACR,YAAY,QAAQ;IACpB,sBAAsB;GACxB;GAEA,OAAO,CAAC,QAAQ,sBAAsB,MAAM,CAAC,GAAG,qBAAqB,SAAS,MAAM,CAAC;EACvF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CAAC;CAEH,MAAM,qBAAwE,OAAO,WACnF,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SACrB,2BACA,sBACA,WACF;EAEA,MAAM,YAAY,OAAO,MAAM;EAE/B,MAAM,WAAW,OAAO,IAAI,OAC1B,QAEE,YAIG;GACH,MAAM,cAAc,QAAQ,kBAAkB,IAAI,QAAQ,aAAa;GAEvE,IAAI,gBAAgB,KAAA,GAClB,OAAO,CACL,QACE,YACE,sBACA,6BAA6B,QAAQ,eACvC,CACF,GACA,OACF;GAIF,IAAI,YAAY,WAAW,YACzB,OAAO,CAAC,QAAQ,sBAAsB,WAAW,CAAC,GAAG,OAAO;GAE9D,IAAI,YAAY,WAAW,kBACzB,OAAO,CACL,QACE,yBAAyB,KAAK;IAC5B,eAAe,QAAQ;IACvB,QAAQ,YAAY;IACpB,SACE;GACJ,CAAC,CACH,GACA,OACF;GAGF,MAAM,WAAmC;IACvC,GAAG;IACH,QAAQ;IACR,kBAAkB;GACpB;GAEA,OAAO,CACL,QAAQ,sBAAsB,QAAQ,CAAC,GACvC,qBAAqB,SAAS,QAAQ,CACxC;EACF,CACF;EAEA,IAAI,SAAS,SAAS,WAAW,OAAO,OAAO,SAAS;EAExD,OAAO,SAAS;CAClB,CACF;CAEA,MAAM,kBAAkE,OAAO,SAI7E,KAAA,IAAY,UACZ,OAAO,WAAW;EAChB,MAAM,UAAU,WAAW,IAAI,MAAM,GAAG;EAExC,MAAM,aAAa,qBACjB,IACC,WACC,GAAG,OAAO,IAAI,SAAS,QAAQ,OAAO,OAAO,IAAI,aAAa,CAAC,CAAC,SAAS,IAAI,GAAG,KAClF,KACF;EAEA,KAAK,MAAM,OAAO,QAAQ,eAAe,OAAO,GAC9C,KAAK,MAAM,MAAM,KAAK;GACpB,MAAM,SAAS,QAAQ,YAAY,IAAI,EAAE;GAEzC,IAAI,WAAW,KAAA,GAAW,WAAW,IAAI,MAAM;EACjD;EACF,MAAM,QAAQ,WAAW,OAAO,KAAK,EAAE,UAAU,mBAAmB,KAAK,GAAG,CAAC;EAC7E,MAAM,OAAO,WAAW,OAAO,GAAG,EAAE,CAAC,EAAE;EAEvC,OAAO,CACL,OACA,SAAS,KAAA,IACL,OAAO,KAAyB,IAChC,OAAO,KAAK,GAAG,KAAK,SAAS,QAAQ,OAAO,KAAK,aAAa,CAAC,CAAC,SAAS,IAAI,GAAG,GAAG,CACzF;CACF,CAAC,CACH;CAEA,MAAM,kBAAkE,OAAO,WAC7E,WAAW,aAAa;EACtB,MAAM,UAAU,OAAO,SAAS,oBAAoB,mBAAmB,WAAW;EAClF,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK,EAAA,CAAG,YAAY,IAAI,QAAQ,YAAY;EAE3E,IAAI,WAAW,KAAA,GACb,OAAO,OAAO,YACZ,mBACA,sBAAsB,QAAQ,cAChC;EAGF,OAAO,OAAO;CAChB,CACF;CAEA,MAAM,uBACJ,OAAO,WAAW,WAAW,aAAa;EACxC,MAAM,UAAU,OAAO,SACrB,yBACA,wBACA,WACF;EAEA,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK;EACpC,MAAM,SAAS,QAAQ,YAAY,IAAI,QAAQ,YAAY;EAE3D,IAAI,WAAW,KAAA,GACb,OAAO,OAAO,YACZ,wBACA,sBAAsB,QAAQ,cAChC;EAGF,MAAM,QAAQ,MAAM,KAAK,QAAQ,YAAY,IAAI,QAAQ,YAAY,KAAK,CAAC,IAAI,OAC7E,QAAQ,YAAY,IAAI,EAAE,CAC5B,CAAC,CACE,QAAQ,cAA6C,cAAc,KAAA,CAAS,CAAC,CAC7E,MAAM,MAAM,UAAU,KAAK,IAAI,gBAAgB,MAAM,IAAI,aAAa,CAAC,CACvE,KAAK,cACJ,aAAa,KAAK;GAChB,cAAc,UAAU,IAAI;GAC5B,OAAO,UAAU,IAAI;GACrB,kBAAkB,QAAQ;EAC5B,CAAC,CACH;EAEF,MAAM,gBACJ,MACA,UAEA,KAAK,aAAa,MAAM,aAAa,KAAK,KAAK,aAAa,MAAM,aAAa,IAAI;EAKrF,MAAM,oBAAoB,MAAM,KAC9B,QAAQ,iBAAiB,IAAI,QAAQ,YAAY,KAAK,CAAC,IACtD,OAAO,QAAQ,kBAAkB,IAAI,EAAE,CAC1C,CAAC,CACE,QAAQ,gBAAuD,gBAAgB,KAAA,CAAS,CAAC,CACzF,MAAM,MAAM,UACX,KAAK,mBAAmB,MAAM,mBAC1B,KACA,KAAK,mBAAmB,MAAM,mBAC5B,IACA,CACR;EAEF,MAAM,mBAAmD,CAAC;EAE1D,KAAK,MAAM,eAAe,mBAAmB;GAC3C,IAAI,YAAY,sBAAsB,KAAA,GAAW;GACjD,MAAM,QAAQ,QAAQ,YAAY,IAAI,YAAY,iBAAiB;GAEnE,IAAI,UAAU,KAAA,GAAW;GACzB,iBAAiB,KACf,wBAAwB,KAAK;IAC3B,YAAY,YAAY;IACxB,mBAAmB,YAAY;IAC/B,YAAY,MAAM,IAAI;IACtB,GAAI,MAAM,IAAI,mBAAmB,KAAA,IAC7B,CAAC,IACD,EAAE,cAAc,MAAM,IAAI,eAAe;GAC/C,CAAC,CACH;EACF;EAEA,OAAO,iBAAiB,KAAK;GAC3B,YAAY,WAAW,OAAO,GAAG;GACjC;GACA,mBAAmB,CAAC,GAAG,OAAO,kBAAkB,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY;GAC3E,oBAAoB,CAAC,GAAG,OAAO,mBAAmB,OAAO,CAAC,CAAC,CACxD,KAAK,eAAe,WAAW,MAAM,CAAC,CACtC,KAAK,YAAY;GACpB,mBAAmB,kBAAkB,IAAI,qBAAqB;GAC9D;GACA,GAAI,OAAO,IAAI,kBAAkB,KAAA,IAC7B,CAAC,IACD,EAAE,eAAe,OAAO,IAAI,cAAc;GAC9C,GAAI,OAAO,2BAA2B,KAAA,IAClC,CAAC,IACD,EAAE,kBAAkB,OAAO,uBAAuB;GACtD,GAAI,OAAO,eAAe,KAAA,IACtB,CAAC,IACD,EACE,YAAY,mBAAmB,KAAK;IAClC,QAAQ,OAAO,WAAW;IAC1B,aAAa,IAAI,OAAO,WAAW,iBAAiB;GACtD,CAAC,EACH;GACJ,UAAU,QAAQ,MAAM,SAAS,OAAO,IAAI,UAAU,OAAO,IAAI,YAAY;GAC7E,GAAI,OAAO,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,OAAO,aAAa;GACjF,GAAI,OAAO,gBAAgB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa,OAAO,YAAY;EAChF,CAAC;CACH,CAAC;CAEH,MAAM,SAAS,iBAAiB,GAAG;EACjC;EACA,qBAAqB,OAAO,WAAW,WAAW,aAAa;GAC7D,MAAM,UAAU,OAAO,SAAS,qBAAqB,iBAAiB,WAAW;GACjF,MAAM,UAAU,WAAW,IAAI,MAAM,GAAG;GACxC,MAAM,WAAW,QAAQ,YAAY,IAAI,QAAQ,YAAY;GAE7D,IAAI,aAAa,KAAA,KAAa,SAAS,IAAI,aAAa,QAAQ,UAC9D,OAAO,OAAO,YACZ,iBACA,4DACF;GACF,IACE,SAAS,IAAI,UAAU,aACtB,SAAS,2BAA2B,KAAA,KAAa,SAAS,iBAAiB,KAAA,GAE5E,OAAO,OAAO,YACZ,iBACA,yEACF;GAEF,MAAM,QACJ,SAAS,2BAA2B,KAAA,IAChC,WACA,QAAQ,YAAY,IAAI,SAAS,sBAAsB;GAE7D,IACE,UAAU,KAAA,KACV,MAAM,IAAI,aAAa,QAAQ,YAC9B,UAAU,YAAY,MAAM,IAAI,iBAAiB,SAAS,IAAI,eAE/D,OAAO,OAAO,YACZ,iBACA,uDACF;GAEF,OAAO,aAAa,KAAK;IACvB,UAAU,WAAW,SAAS,GAAG;IACjC,OAAO,WAAW,MAAM,GAAG;GAC7B,CAAC;EACH,CAAC;EACD,QAAQ,YAAY,QAAQ,aAAa,MAAM,OAAO,CAAC;EACvD,YAAY,YAAY,QAAQ,aAAa,UAAU,OAAO,CAAC;EAC/D;EACA;EACA,aAAa,YAAY,QAAQ,aAAa,WAAW,OAAO,CAAC;EACjE,mBAAmB,YAAY,QAAQ,aAAa,iBAAiB,OAAO,CAAC;EAC7E,qBAAqB,YAAY,QAAQ,aAAa,mBAAmB,OAAO,CAAC;EACjF,eAAe,YAAY,QAAQ,aAAa,aAAa,OAAO,CAAC;EACrE,aAAa,YAAY,QAAQ,aAAa,WAAW,OAAO,CAAC;EACjE;EACA,eAAe,YAAY,QAAQ,aAAa,aAAa,OAAO,CAAC;EACrE,aAAa,YAAY,QAAQ,aAAa,WAAW,OAAO,CAAC;EACjE,gBAAgB,YAAY,QAAQ,aAAa,cAAc,OAAO,CAAC;EACvE,UAAU,YAAY,QAAQ,aAAa,QAAQ,OAAO,CAAC;EAC3D,yBAAyB,YAAY,QAAQ,aAAa,uBAAuB,OAAO,CAAC;EACzF,cAAc,YAAY,QAAQ,aAAa,YAAY,OAAO,CAAC;EACnE,0BAA0B,YAAY,QAAQ,aAAa,wBAAwB,OAAO,CAAC;EAC3F,qBAAqB,YAAY,QAAQ,aAAa,mBAAmB,OAAO,CAAC;EACjF,qBAAqB,YAAY,QAAQ,aAAa,mBAAmB,OAAO,CAAC;EACjF,2BAA2B,YACzB,QAAQ,aAAa,yBAAyB,OAAO,CAAC;EACxD,0BAA0B,YAAY,QAAQ,aAAa,wBAAwB,OAAO,CAAC;EAC3F,qBAAqB,YAAY,QAAQ,aAAa,mBAAmB,OAAO,CAAC;EACjF;EACA;EACA;CACF,CAAC;CAED,MAAM,eAAe,KAAoB,oBACvC,gBAAgB,KAAK;EACnB,GAAG,WAAW,GAAG;EACjB,GAAI,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,WAAW,IAAI,eAAe,EAAE;CAC7E,CAAC;CAEH,MAAM,gBACJ,UACG;EACH,MAAM,EAAE,mBAAmB,GAAG,GAAG,SAAS;EAE1C,OAAO;CACT;CAEA,MAAM,YAAY,WAAyC;EACzD,OAAO;GACL,QAAQ,QAAQ,gBAAgB,KAAA,IAAY,CAAC,IAAI,CAAC,aAAa,OAAO,WAAW,CAAC;GAClF,WAAW,MAAM,KAAK,QAAQ,kBAAkB,OAAO,KAAK,CAAC,GAAG,YAAY;GAC5E,aAAa,MAAM,KAAK,QAAQ,mBAAmB,OAAO,KAAK,CAAC,IAAI,EAAE,aACpE,aAAa,MAAM,CACrB;EACF;CACF;CAEA,MAAM,eAAe,OAAO,WAAW,WAAW,QAAsC;EACtF,KACG,QAAQ,kBAAkB,QAAQ,KAAK,6BACvC,QAAQ,mBAAmB,QAAQ,KAAK,0BAEzC,OAAO,OAAO,iBAAiB,KAAK;GAClC,WAAW;GACX,SAAS;EACX,CAAC;EACH,IAAI,QAAQ;EAEZ,MAAM,OAAa,QAA4B,UAC7C,OAAO,aAAa,OAAO,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KACrD,OAAO,eACL,iBAAiB,KAAK;GACpB,WAAW;GACX,SAAS;EACX,CAAC,CACH,GACA,OAAO,SAAS,SAAS;GACvB,SAAS,eAAe,cAAc,IAAI,CAAC;GAE3C,OAAO,QAAQ,yBACX,OAAO,KACL,iBAAiB,KAAK;IACpB,WAAW;IACX,SAAS;GACX,CAAC,CACH,IACA,OAAO;EACb,CAAC,CACH;EAEF,IAAI,QAAQ,gBAAgB,KAAA,GAAW,OAAO,IAAI,aAAa,OAAO,WAAW;EACjF,KAAK,MAAM,SAAS,QAAQ,kBAAkB,OAAO,KAAK,CAAC,GACzD,OAAO,IAAI,wBAAwB,KAAK;EAC1C,KAAK,MAAM,EAAE,YAAY,QAAQ,mBAAmB,OAAO,KAAK,CAAC,GAC/D,OAAO,IAAI,yBAAyB,MAAM;EAE5C,OAAO,SAAS,MAAM;CACxB,CAAC;CAED,MAAM,mBAAmB,UAAoB,iBAC3C,OAAO,WAAW;EAChB,MAAM,SAAS,WAAW,IAAI,MAAM,GAAG,CAAC,CAAC,YAAY,IAAI,YAAY;EAErE,OAAO,QAAQ,IAAI,aAAa,WAC5B,YAAY,OAAO,KAAK,OAAO,cAAc,iBAAiB,IAC9D,KAAA;CACN,CAAC;CAEH,OAAO,QAAQ,uBAAuB;EACpC,WAAW;EACX,WAAW,OAAO,aAAa,WAAW,IAAI,MAAM,GAAG,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;EAC5E,WAAW,aACT,OAAO,WAAW;GAChB,MAAM,UAAU,WAAW,IAAI,MAAM,GAAG;GACxC,MAAM,YAAY,QAAQ,SAAS,IAAI,QAAQ;GAE/C,OAAO;IACL,OACG,QAAQ,eAAe,IAAI,QAAQ,CAAC,EAAE,QAAQ,OAAO,MACrD,WAAW,gBAAgB,OAAO;IACrC,YAAY,WAAW,QAAQ,UAAU;IACzC,QAAQ,WAAW,SAAS,OAAO,UAAU;IAC7C,WAAW,WAAW,SAAS,UAAU,UAAU;IACnD,aAAa,WAAW,SAAS,YAAY,UAAU;IACvD,GAAI,QAAQ,eAAe,IAAI,QAAQ,IACnC,EACE,YACE,QAAQ,eAAe,IAAI,QAAQ,MAAM,KAAA,IACrC,CAAC,IACD,EAAE,UAAU,QAAQ,eAAe,IAAI,QAAQ,EAAE,EACzD,IACA,CAAC;GACP;EACF,CAAC;EACH,QAAQ,UAAU,SAAS,UACzB,OAAO,WAAW;GAChB,MAAM,UAAU,WAAW,IAAI,MAAM,GAAG;GAExC,MAAM,QAAQ;IACZ,YAAY,IAAI,MAAuB;IACvC,UAAU,SAAS,KAAA,CAAS;IAC5B,YAAY,CAAC;GACf;GAEA,IAAI,OAAO,SAAS;GAEpB,IAAI,YAAY,cAAc;IAC5B,MAAM,SAAS,WACb,SACA,UACA,UAAU,KAAA,IAAY,KAAK,OAAO,KAAK,CACzC,CAAC,CAAC,KAAK,CAAC,CAAC;IAET,IAAI,WAAW,KAAA,GAAW;KACxB,MAAM,WAAW,KACf,YAAY,OAAO,KAAK,OAAO,cAAc,iBAAiB,CAChE;KACA,OAAO,OAAO,OAAO,IAAI,aAAa;IACxC;GACF,OAAO;IACL,MAAM,UAAU,QAAQ,SAAS,IAAI,QAAQ,CAAC,EAAE,SAAS,YAAY,CAAC;IACtE,MAAM,KAAK,UAAU,KAAA,IAAY,IAAI,gBAAgB,SAAS,KAAK;IACnE,MAAM,SAAS,QAAQ,KAAK,OAAO,UAAU,KAAA,KAAa,QAAQ,GAAG,EAAE,QAAQ,KAAK;IAEpF,IAAI,WAAW,KAAA,GAAW;KACxB,OAAO,OAAO;KACd,MAAM,SAAS,QAAQ,YAAY,IAAI,OAAO,YAAY;KAE1D,IAAI,YAAY,YAAY,QAAQ,gBAAgB,KAAA,GAClD,MAAM,SAAS,OAAO,KAAK,aAAa,OAAO,WAAW,CAAC;UACxD,IAAI,YAAY,eAAe,OAAO,eAAe,KAAA,GAAW;MACnE,MAAM,QAAQ,QAAQ,kBAAkB,IAAI,OAAO,UAAU;MAE7D,IAAI,UAAU,KAAA,GAAW,MAAM,SAAS,UAAU,KAAK,aAAa,KAAK,CAAC;KAC5E,OAAO,IAAI,YAAY,iBAAiB,OAAO,kBAAkB,KAAA,GAAW;MAC1E,MAAM,QAAQ,QAAQ,mBAAmB,IAAI,OAAO,aAAa;MAEjE,IAAI,UAAU,KAAA,GACZ,MAAM,SAAS,YAAY,KAAK,aAAa,MAAM,MAAM,CAAC;KAC9D;IACF;GACF;GAEA,OAAO;IAAE;IAAO,OAAO;GAAK;EAC9B,CAAC;EACH,cAAc,aACZ,OAAO,SAAS,KAAK,UACnB,OAAO,WAAW;GAChB,MAAM,SAAS,WAAW,WAAW,IAAI,MAAM,GAAG,GAAG,UAAU,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;GAE7E,OAAO,CACL,WAAW,KAAA,IAAY,CAAC,IAAI,CAAC,WAAW,OAAO,GAAG,CAAC,GACnD,WAAW,KAAA,IAAY,OAAO,KAAa,IAAI,OAAO,KAAK,OAAO,IAAI,aAAa,CACrF;EACF,CAAC,CACH;EACF,aAAa,OAAO,WAAW,WAAW,UAAU;GAClD,MAAM,UAAU,OAAO,IAAI,IAAI,KAAK;GAEpC,IACE,QAAQ,MAAM,IAAI,QAAQ,KAC1B,QAAQ,SAAS,IAAI,QAAQ,KAC7B,QAAQ,eAAe,IAAI,QAAQ,GAEnC,OAAO,OAAO,qBAAqB,KAAK;IACtC;IACA,QAAQ;IACR,SAAS;GACX,CAAC;GAEH,MAAM,SAAsB;IAC1B,6BAAa,IAAI,IAAI;IACrB,gCAAgB,IAAI,IAAI;IACxB,uBAAO,IAAI,IAAI;IACf,mCAAmB,IAAI,IAAI;IAC3B,wBAAwB,QAAQ;IAChC,gCAAgB,IAAI,IAAI;IACxB,gCAAgB,IAAI,IAAI;IACxB,gCAAgB,IAAI,IAAI;IACxB,0BAAU,IAAI,IAAI;IAClB,0BAAU,IAAI,IAAI;IAClB,6BAAa,IAAI,IAAI;IACrB,kCAAkB,IAAI,IAAI;GAC5B;GAEA,MAAM,+BAAe,IAAI,IAA0B;GACnD,MAAM,+BAAe,IAAI,IAA0B;GAEnD,MAAM,qBAAqB,OAAO,WAAW,WAC3C,QACA,OACA,IACA;IACA,MAAM,OAAO,OAAO,OAAO,aAAa,OAAO,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KACzE,OAAO,eAAe,qBAAqB,iCAAiC,QAAQ,CAAC,CACvF;IAEA,MAAM,SAAS,aAAa,IAAI,EAAE,KAAK,KAAK,eAAe,cAAc,IAAI,CAAC;IAE9E,IAAI,QAAQ,wBACV,OAAO,OAAO,qBACZ,4CACA,QACF;IACF,aAAa,IAAI,IAAI,KAAK;GAC5B,CAAC;GAwBD,OAAO;IACL,QAAA;KAtBA,YAAY,OACV,OAAO,WAAW;MAChB,MAAM,SAAS,OAAO,YAAY,IAAI,EAAE;MAExC,OAAO,WAAW,KAAA,IACd,KAAA,IACA,YAAY,OAAO,KAAK,aAAa,IAAI,EAAE,CAAC;KAClD,CAAC;KACH,WAAW,UACT,OAAO,WAAW;MAChB,IAAI,CAAC,MAAM,WAAW,MAAM,GAAG,OAAO,KAAA;MACtC,MAAM,KAAK,OAAO,WAAW,YAAY,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC;MACzD,MAAM,SAAS,OAAO,YAAY,IAAI,EAAE;MAExC,OAAO,WAAW,KAAA,IACd,KAAA,IACA,YAAY,OAAO,KAAK,aAAa,IAAI,EAAE,CAAC;KAClD,CAAC;KACH,WAAW,OAAqB,aAAa,OAAO,YAAY,IAAI,EAAE,CAAC;IAIlE;IACL,OAAO,OAAO,WAAW,WAAW,MAAM;KACxC,KAAK,MAAM,KAAK,KAAK,QAAQ,YAAY;MACvC,MAAM,MAAM,aAAa,UAAU,EAAE,WAAW,EAAE,cAAc;MAEhE,IACE,QAAQ,YAAY,IAAI,EAAE,YAAY,KACtC,OAAO,YAAY,IAAI,EAAE,YAAY,KACrC,QAAQ,SAAS,IAAI,EAAE,SAAS,KAChC,OAAO,SAAS,IAAI,EAAE,SAAS,KAC/B,QAAQ,eAAe,IAAI,GAAG,KAC9B,OAAO,eAAe,IAAI,GAAG,GAE7B,OAAO,OAAO,qBAAqB,KAAK;OACtC;OACA,QAAQ;OACR,SAAS;MACX,CAAC;MAGH,IAFiB,WAAW,QAAQ,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAE5D,IAAI,kBAAkB,EAAE,eACpC,OAAO,OAAO,qBAAqB,sCAAsC,QAAQ;MACnF,IAAI,EAAE,cAAc,KAAA,GAClB,aAAa,IAAI,EAAE,cAAc,SAAS,cAAc,EAAE,SAAS,CAAC;MACtE,eACE,QACA,YACE,kBAAkB,KAAK;OACrB,WAAW;OACX,OAAO;OACP,oBAAoB,CAAC;OACrB,WAAW,CAAC;OACZ,aAAa,CAAC;MAChB,CAAC,CACH,CACF;KACF;KACA,KAAK,MAAM,QAAQ,KAAK,QAAQ,SAAS,QAAQ;MAC/C,MAAM,SAAS,OAAO,YAAY,IAAI,KAAK,YAAY;MAEvD,IAAI,WAAW,KAAA,KAAa,OAAO,gBAAgB,KAAA,GACjD,OAAO,OAAO,qBACZ,wCACA,QACF;MACF,MAAM,SAAS,YAAY,KAAK,IAAI;MAEpC,OAAO,mBAAmB,aAAa,QAAQ,KAAK,YAAY;MAChE,eAAe,QAAQ;OAAE,GAAG;OAAQ,aAAa;MAAO,CAAC;KAC3D;KACA,KAAK,MAAM,QAAQ,KAAK,QAAQ,SAAS,WAAW;MAClD,MAAM,SAAS,OAAO,YAAY,IAAI,KAAK,YAAY;MAEvD,IAAI,WAAW,KAAA,KAAa,OAAO,kBAAkB,IAAI,KAAK,UAAU,GACtE,OAAO,OAAO,qBACZ,2CACA,QACF;MACF,IAAI,OAAO,kBAAkB,QAAQ,0BACnC,OAAO,OAAO,qBACZ,+CACA,QACF;MACF,MAAM,SAAS,uBAAuB,KAAK,IAAI;MAE/C,OAAO,mBAAmB,wBAAwB,QAAQ,KAAK,YAAY;MAE3E,MAAM,YAAY,IAAI,IAAI,OAAO,iBAAiB,CAAC,CAAC,IAAI,KAAK,YAAY,MAAM;MAE/E,eAAe,QAAQ;OAAE,GAAG;OAAQ,mBAAmB;MAAU,CAAC;KACpE;KACA,KAAK,MAAM,QAAQ,KAAK,QAAQ,SAAS,aAAa;MACpD,MAAM,SAAS,OAAO,YAAY,IAAI,KAAK,YAAY;MACvD,MAAM,MAAM,KAAK,UAAU,CAAC,KAAK,YAAY,sBAAsB,KAAK,UAAU,CAAC,CAAC;MAEpF,IAAI,WAAW,KAAA,KAAa,OAAO,mBAAmB,IAAI,GAAG,GAC3D,OAAO,OAAO,qBACZ,6CACA,QACF;MACF,IAAI,OAAO,mBAAmB,QAAQ,0BACpC,OAAO,OAAO,qBACZ,iDACA,QACF;MACF,MAAM,SAAS,wBAAwB,KAAK,IAAI;MAEhD,OAAO,mBAAmB,yBAAyB,QAAQ,KAAK,YAAY;MAE5E,MAAM,cAAc,IAAI,IAAI,OAAO,kBAAkB,CAAC,CAAC,IAAI,KAAK,EAAE,OAAO,CAAC;MAE1E,eAAe,QAAQ;OAAE,GAAG;OAAQ,oBAAoB;MAAY,CAAC;KACvE;IACF,CAAC;IACD,eAAe,OAAO,WAAW,WAAW,YAAY;KACtD,IAAI,YAAY;KAChB,IAAI,mBAAmB,YAAY,aAAa,KAAA;KAEhD,KAAK,MAAM,UAAU,WAAW,QAAQ,QAAQ,GAAG;MACjD,MAAM,IAAI,YAAY,OAAO,KAAK,aAAa,IAAI,OAAO,IAAI,YAAY,CAAC;MAC3E,MAAM,UAAU,OAAO,wBAAwB,CAAC;MAEhD,IACE,QAAQ,eAAe,KAAA,KACvB,yBAAyB,WAAW,OAAO,GAAG,GAAG,QAAQ,UAAU,MACjE,YAAY,UAEd,mBAAmB;MACrB,eAAe,QAAQ,YAAY,OAAO,CAAC;MAC3C,YAAY,KAAK,IAAI,WAAW,EAAE,aAAa;KACjD;KACA,IAAI,CAAC,kBACH,OAAO,OAAO,qBACZ,8DACA,QACF;KACF,IAAI,CAAC,OAAO,cAAc,YAAY,CAAC,GACrC,OAAO,OAAO,qBAAqB,KAAK;MACtC;MACA,QAAQ;MACR,SAAS;KACX,CAAC;KAEH,aAAa;MACX,KAAK,MAAM,UAAU,OAAO,YAAY,OAAO,GAAG,eAAe,SAAS,MAAM;MAChF,QAAQ,MAAM,IAAI,UAAU,EAAE,mBAAmB,YAAY,EAAE,CAAC;MAChE,IAAI,eAAe,KAAA,GACjB,QAAQ,eAAe,IAAI,UAAU,WAAW,QAAQ;KAC5D;IACF,CAAC;GACH;EACF,CAAC;CACH,CAAC;CAED,OAAO,QAAQ,KAAK,kBAAkB,MAAM,CAAC,CAAC,KAC5C,QAAQ,IAAI,qBAAqB,EAAE,QAAQ,CAAC,CAC9C;AACF,CAAC;;;;;;AAkBH,MAAa,+BACX,UAAyC,CAAC,MAKvC,MAAM,cAAc,qBAAqB,OAAO,CAAC;AAEtD,MAAa,6BAIT,4BAA4B"}
|
|
1
|
+
{"version":3,"file":"MemorySubmissionLedger.mjs","names":[],"sources":["../src/MemorySubmissionLedger.ts"],"sourcesContent":["import { canonicalJson, utf8ByteLength } from \"@yielded/agent/digest\";\nimport {\n type ToolCallId,\n AttemptId,\n ReceiptId,\n SubmissionId,\n type AgentId,\n type ThreadId,\n type SettlementId,\n} from \"@yielded/agent/identifiers\";\nimport { InputMessage } from \"@yielded/agent/messaging\";\nimport {\n PersistedJson,\n MAX_RUN_EVIDENCE_RECORDS,\n MAX_RUN_EVIDENCE_BYTES,\n WorkerAdmission,\n type DefinitionDigests,\n type DeploymentId,\n type Digest,\n type RecordEnvelope,\n type SettlementOutcome,\n} from \"@yielded/agent/records\";\nimport { runIdForSubmission } from \"@yielded/agent/run-journal\";\nimport {\n SettlementPublisher,\n SettlementPublicationResult,\n validatePublication,\n validateCanonicalSettlement,\n validateJoinedSettlement,\n} from \"@yielded/agent/settlement-publisher\";\nimport {\n FundingOwnerRequest,\n FundingOwner,\n type ParentLinkage,\n AbortCommand,\n WorkerStopCommand,\n WorkerLedgerState,\n workerTerminalFromRecord,\n AdmissionAdmitted,\n AdmissionConflict,\n AdmissionPolicyError,\n AdmissionIndeterminate,\n AdmissionNotAdmitted,\n AdmissionRequest,\n SubmissionAdmissionFence,\n AdmissionResult,\n ApprovalConflict,\n ApprovalDecisionCommand,\n ApprovalDecisionIntent,\n approvalDecisionsCover,\n AttachChildToReservationRequest,\n BeginChildBudgetReleaseRequest,\n ChildAttachmentSnapshot,\n ChildBudgetReservationRequest,\n ChildBudgetReservationSnapshot,\n ChildReservationConflict,\n ChildSettledNotification,\n Claim,\n ClaimJoiningRequest,\n ClaimRequest,\n InputAppliedMarker,\n JoinSnapshot,\n JoinedToHost,\n JoiningClaim,\n LedgerCapabilities,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n MarkReadyRequest,\n MarkUnknownRequest,\n OwnershipLost,\n QueueSequence,\n RecoverySnapshot,\n RecoverySnapshotRequest,\n ReleaseChildBudgetRequest,\n ReservedChildBudget,\n RevertJoiningRequest,\n Settlement,\n SettlementConflict,\n SettlementFinalization,\n settlementFailureFromRecord,\n submissionSettlementRecordId,\n AbortIntent,\n AbortIntentRequest,\n SubmissionLedger,\n SubmissionLookup,\n SubmissionLookupByKey,\n SubmissionSnapshot,\n SubmissionWorkItem,\n SuspendRequest,\n SuspensionSnapshot,\n UnknownResolution,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n UnknownResolutionIntent,\n unknownResolutionKind,\n unknownResolutionMatchesResult,\n type ChildReservationId,\n type ChildReservationStatus,\n type ChildSettledOutcome,\n type IdempotencyKey,\n type Principal,\n type SubmissionState,\n type SuspensionOutcome,\n type SuspensionReason,\n} from \"@yielded/agent/submission-ledger\";\nimport {\n rebuildClosedSubmission,\n invalidThreadArchive,\n RebuiltSubmission,\n ThreadImportRejected,\n} from \"@yielded/agent/thread-import\";\nimport {\n ThreadAdmission,\n ThreadStoreError,\n ThreadAbortFact,\n ThreadApprovalFact,\n ThreadResolutionFact,\n makeTransferFactCheck,\n transferPageFits,\n} from \"@yielded/agent/thread-store\";\nimport { admissionWork } from \"@yielded/agent/thread-work\";\nimport {\n Clock,\n Context,\n Cause,\n Crypto,\n Exit,\n Fiber,\n DateTime,\n Effect,\n Layer,\n MutableRef,\n Option,\n Ref,\n Result,\n Schema,\n Stream,\n} from \"effect\";\n\nimport { MemoryThreadStoreKernel } from \"./internal/MemoryThreadStoreKernel.ts\";\nimport { boundedWorkSelection } from \"./internal/WorkSelection.ts\";\n\n/**\n * Lifecycle ordering used to advance-but-never-regress the operational state marker: a reclaimed\n * Attempt must not erase progress markers (input-applied) that an earlier Attempt\n * already committed.\n */\nconst STATE_RANK: Record<SubmissionState, number> = {\n admitted: 0,\n ready: 1,\n joining: 2,\n joined: 3,\n \"input-applied\": 5,\n suspended: 6,\n unknown: 7,\n settled: 8,\n};\n\ninterface SubmissionRow {\n readonly submissionId: SubmissionId;\n readonly threadId: ThreadId;\n readonly queueSequence: QueueSequence;\n readonly principal: Principal;\n readonly idempotencyKey: IdempotencyKey;\n readonly agentId: AgentId;\n readonly agentDigests: DefinitionDigests;\n readonly deploymentId: DeploymentId;\n readonly inputPayload: PersistedJson;\n readonly inputDigest: Digest;\n readonly receiptId: ReceiptId;\n readonly state: SubmissionState;\n readonly settledOutcome: SettlementOutcome | undefined;\n readonly createdAtMillis: number;\n readonly readyAtMillis: number | undefined;\n /** Immutable child-side lineage recorded at admission (spec §12 step 5). */\n readonly parentLinkage: ParentLinkage | undefined;\n readonly admissionGroup?: string;\n readonly admissionFence?: AdmissionRequest[\"admissionFence\"];\n readonly workerAdmissionJson?: string;\n readonly messageAdmissionJson?: string;\n}\n\ninterface StoredFinalization {\n readonly settlementId: SettlementId;\n readonly finalizedAtMillis: number;\n readonly recordId: RecordEnvelope[\"recordId\"];\n}\n\ninterface StoredSuspension {\n readonly reason: SuspensionReason;\n readonly suspendedAtMillis: number;\n}\n\ninterface StoredUnknownMark {\n readonly reason: MarkUnknownRequest[\"reason\"];\n readonly toolCallIds: ReadonlyArray<ToolCallId>;\n}\n\ninterface StoredUnknownResolution {\n readonly intent: UnknownResolutionIntent;\n}\n\ninterface StoredSubmission {\n readonly row: SubmissionRow;\n readonly inputApplied: InputAppliedMarker | undefined;\n readonly finalization: StoredFinalization | undefined;\n readonly abortIntent: AbortIntent | undefined;\n /** Host linkage recorded at `claimJoining` time; cleared by `revertJoining` (DUR-016). */\n readonly joinedHostSubmissionId: SubmissionId | undefined;\n readonly suspension: StoredSuspension | undefined;\n readonly unknownMark: StoredUnknownMark | undefined;\n readonly approvalDecisions: ReadonlyMap<ToolCallId, ApprovalDecisionIntent>;\n readonly unknownResolutions: ReadonlyMap<string, StoredUnknownResolution>;\n}\n\n/**\n * States in which `claim` never grants the head: the lane is host-owned (`joining`/`joined`)\n * or durably suspended rather than worker-claimable. Unknown heads are checked against abort\n * intent separately: abort authorizes cleanup and settlement, never ordinary Tool replay.\n */\nconst BLOCKED_HEAD_STATES: ReadonlySet<SubmissionState> = new Set([\n \"joining\",\n \"joined\",\n \"suspended\",\n]);\n\ninterface LaneState {\n readonly nextQueueSequence: number;\n}\n\n/** One parent-owned child budget reservation row (spec §12 steps 2 and 6). */\ninterface StoredChildReservation {\n readonly reservationId: ChildReservationId;\n readonly parentSubmissionId: SubmissionId;\n readonly parentToolCallId: ToolCallId;\n readonly childSubmissionId: SubmissionId | undefined;\n readonly status: ChildReservationStatus;\n readonly allocation: PersistedJson;\n readonly allocationDigest: Digest;\n readonly accounting: PersistedJson | undefined;\n readonly reservedAtMillis: number;\n readonly releaseBeganAtMillis: number | undefined;\n readonly releasedAtMillis: number | undefined;\n}\n\ninterface ThreadDirectory {\n readonly ordered: Array<SubmissionId>;\n readonly commands: {\n readonly aborts: Array<CommandLocator>;\n readonly approvals: Array<CommandLocator>;\n readonly resolutions: Array<CommandLocator>;\n };\n children: number;\n workers: number;\n reservations: number;\n}\ninterface CommandLocator {\n readonly key: string;\n readonly submissionId: SubmissionId;\n readonly toolCallId?: ToolCallId;\n readonly resolutionKey?: string;\n}\n\nconst commandPosition = (entries: ReadonlyArray<CommandLocator>, key: string) => {\n let low = 0;\n let high = entries.length;\n\n while (low < high) {\n const middle = Math.floor((low + high) / 2);\n\n if (entries[middle].key < key) low = middle + 1;\n else high = middle;\n }\n\n return low;\n};\n\nconst retainCommand = (\n entries: Array<CommandLocator>,\n submissionId: SubmissionId,\n toolCallId?: ToolCallId,\n resolutionKey?: string,\n) => {\n // Acceptance order is native, stable and append-only; publishing a command never shifts history.\n const key = String(entries.length + 1).padStart(16, \"0\");\n\n entries.push({\n key,\n submissionId,\n ...(toolCallId === undefined ? {} : { toolCallId }),\n ...(resolutionKey === undefined ? {} : { resolutionKey }),\n });\n};\n\ninterface LedgerState {\n readonly byThread: Map<ThreadId, ThreadDirectory>;\n readonly receipts: Map<ReceiptId, SubmissionId>;\n readonly joinsByHost: Map<SubmissionId, Set<SubmissionId>>;\n readonly childrenByParent: Map<SubmissionId, Set<ChildReservationId>>;\n readonly submissions: Map<SubmissionId, StoredSubmission>;\n readonly admissionIndex: Map<string, SubmissionId>;\n readonly lanes: Map<ThreadId, LaneState>;\n readonly childReservations: Map<ChildReservationId, StoredChildReservation>;\n /** Bounded local ordering for fresh work identities; imported facts never seed it. */\n readonly freshAdmissionSequence: number;\n readonly latestByThread: Map<ThreadId, SubmissionId>;\n readonly activeByThread: Map<ThreadId, Set<SubmissionId>>;\n readonly stoppedWorkers: Map<ThreadId, WorkerLedgerState[\"terminal\"]>;\n}\n\ntype Decision<A, E> =\n | { readonly _tag: \"failure\"; readonly error: E }\n | { readonly _tag: \"success\"; readonly value: A };\n\nconst failure = <E>(error: E): Decision<never, E> => ({ _tag: \"failure\", error });\nconst success = <A>(value: A): Decision<A, never> => ({ _tag: \"success\", value });\n\nconst ledgerError = (operation: string, message: string, cause?: unknown): LedgerError =>\n cause === undefined\n ? LedgerError.make({ operation, message })\n : LedgerError.make({ operation, message, cause });\n\nconst validate = <A, I>(\n schema: Schema.Codec<A, I>,\n operation: string,\n value: unknown,\n): Effect.Effect<A, LedgerError> =>\n Schema.encodeUnknownEffect(schema)(value).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(schema)),\n Effect.mapError((error) => ledgerError(operation, `Invalid ${operation} request`, error)),\n );\n\nconst decodeSubmissionId = Schema.decodeSync(SubmissionId);\nconst decodeReceiptId = Schema.decodeSync(ReceiptId);\nconst decodeAttemptId = Schema.decodeSync(AttemptId);\n// Imported identities are opaque facts and never influence fresh identity sizes.\nconst MemoryIdentityNonce = Schema.String.check(Schema.isUUID(4));\nconst decodeQueueSequence = Schema.decodeSync(QueueSequence);\nconst equivalentPersistedJson = Schema.toEquivalence(PersistedJson);\nconst equivalentUnknownResolution = Schema.toEquivalence(UnknownResolution);\nconst admissionFitsTransfer = makeTransferFactCheck(ThreadAdmission);\nconst abortFitsTransfer = makeTransferFactCheck(ThreadAbortFact);\nconst approvalFitsTransfer = makeTransferFactCheck(ThreadApprovalFact);\nconst resolutionFitsTransfer = makeTransferFactCheck(ThreadResolutionFact);\n\nconst transferCapacityError = (operation: string) =>\n ledgerError(operation, \"Accepted fact exceeds its bounded transfer representation\");\n\nconst utc = (millis: number): DateTime.Utc => DateTime.toUtc(DateTime.makeUnsafe(millis));\n\nconst admissionKey = (\n threadId: ThreadId,\n principal: Principal,\n idempotencyKey: IdempotencyKey,\n): string => JSON.stringify([threadId, principal, idempotencyKey]);\n\nconst toSnapshot = (row: SubmissionRow): SubmissionSnapshot =>\n SubmissionSnapshot.make({\n submissionId: row.submissionId,\n threadId: row.threadId,\n queueSequence: row.queueSequence,\n principal: row.principal,\n idempotencyKey: row.idempotencyKey,\n agentId: row.agentId,\n agentDigests: row.agentDigests,\n deploymentId: row.deploymentId,\n inputPayload: row.inputPayload,\n inputDigest: row.inputDigest,\n receiptId: row.receiptId,\n state: row.state,\n createdAt: utc(row.createdAtMillis),\n ...(row.admissionGroup === undefined ? {} : { admissionGroup: row.admissionGroup }),\n ...(row.admissionFence === undefined ? {} : { admissionFence: row.admissionFence }),\n ...(row.workerAdmissionJson === undefined\n ? {}\n : {\n workerAdmission: Schema.decodeSync(Schema.fromJsonString(WorkerAdmission))(\n row.workerAdmissionJson,\n ),\n }),\n ...(row.messageAdmissionJson === undefined\n ? {}\n : {\n messageAdmission: Schema.decodeSync(Schema.fromJsonString(InputMessage))(\n row.messageAdmissionJson,\n ),\n }),\n ...(row.settledOutcome === undefined ? {} : { settledOutcome: row.settledOutcome }),\n ...(row.readyAtMillis === undefined ? {} : { readyAt: utc(row.readyAtMillis) }),\n ...(row.parentLinkage === undefined ? {} : { parentLinkage: row.parentLinkage }),\n });\n\nconst toReservationSnapshot = (row: StoredChildReservation): ChildBudgetReservationSnapshot =>\n ChildBudgetReservationSnapshot.make({\n reservationId: row.reservationId,\n parentSubmissionId: row.parentSubmissionId,\n parentToolCallId: row.parentToolCallId,\n status: row.status,\n allocation: row.allocation,\n allocationDigest: row.allocationDigest,\n reservedAt: utc(row.reservedAtMillis),\n ...(row.childSubmissionId === undefined ? {} : { childSubmissionId: row.childSubmissionId }),\n ...(row.accounting === undefined ? {} : { accounting: row.accounting }),\n ...(row.releaseBeganAtMillis === undefined\n ? {}\n : { releaseBeganAt: utc(row.releaseBeganAtMillis) }),\n ...(row.releasedAtMillis === undefined ? {} : { releasedAt: utc(row.releasedAtMillis) }),\n });\n\nconst fromRebuilt = (rebuilt: RebuiltSubmission): StoredSubmission => {\n const admission = rebuilt.admission;\n const threadId = admission.threadId;\n const canonicalSettlement = rebuilt.settlement?.payload;\n\n const settlement =\n canonicalSettlement?._tag === \"SubmissionSettled\" ? canonicalSettlement : undefined;\n\n return {\n row: {\n submissionId: admission.submissionId,\n threadId,\n queueSequence: admission.queueSequence,\n principal: admission.principal,\n idempotencyKey: admission.idempotencyKey,\n agentId: admission.agentId,\n agentDigests: admission.agentDigests,\n deploymentId: admission.deploymentId,\n inputPayload: admission.inputPayload,\n inputDigest: admission.inputDigest,\n receiptId: admission.receiptId,\n state: rebuilt.state,\n settledOutcome: settlement?.outcome,\n createdAtMillis: DateTime.toEpochMillis(admission.createdAt),\n readyAtMillis:\n rebuilt.state === \"ready\" ? DateTime.toEpochMillis(admission.createdAt) : undefined,\n parentLinkage: admission.parentLinkage,\n ...(admission.workerAdmission === undefined\n ? {}\n : {\n workerAdmissionJson: Schema.encodeSync(Schema.fromJsonString(WorkerAdmission))(\n admission.workerAdmission,\n ),\n }),\n ...(admission.messageAdmission === undefined\n ? {}\n : {\n messageAdmissionJson: Schema.encodeSync(Schema.fromJsonString(InputMessage))(\n admission.messageAdmission,\n ),\n }),\n ...(admission.admissionGroup === undefined\n ? {}\n : { admissionGroup: admission.admissionGroup }),\n ...(admission.admissionFence === undefined\n ? {}\n : { admissionFence: admission.admissionFence }),\n },\n inputApplied: rebuilt.inputApplied,\n finalization:\n settlement === undefined ||\n rebuilt.settlement === undefined ||\n admission.settledAt === undefined\n ? undefined\n : {\n settlementId: settlement.settlementId,\n recordId: rebuilt.settlement.recordId,\n finalizedAtMillis: DateTime.toEpochMillis(admission.settledAt),\n },\n abortIntent: rebuilt.abort,\n joinedHostSubmissionId: rebuilt.joinedHostSubmissionId,\n suspension:\n rebuilt.suspension === undefined\n ? undefined\n : {\n reason: rebuilt.suspension.reason,\n suspendedAtMillis: DateTime.toEpochMillis(rebuilt.suspension.suspendedAt),\n },\n unknownMark:\n rebuilt.unknownToolCallIds.length === 0\n ? undefined\n : {\n reason: \"Unresolved Tool execution recovered from the canonical log\",\n toolCallIds: rebuilt.unknownToolCallIds,\n },\n approvalDecisions: new Map(rebuilt.approvals.map((intent) => [intent.toolCallId, intent])),\n unknownResolutions: new Map(\n rebuilt.resolutions.map((intent) => [\n JSON.stringify([intent.toolCallId, unknownResolutionKind(intent.resolution)]),\n { intent },\n ]),\n ),\n };\n};\n\n/** Linkage equality: both absent, or both present naming the same parent Tool Call. */\nconst sameParentLinkage = (\n left: ParentLinkage | undefined,\n right: ParentLinkage | undefined,\n): boolean =>\n left === undefined\n ? right === undefined\n : right !== undefined &&\n left.parentSubmissionId === right.parentSubmissionId &&\n left.parentToolCallId === right.parentToolCallId;\n\nconst ownershipLost = (stored: StoredSubmission): OwnershipLost =>\n OwnershipLost.make({ submissionId: stored.row.submissionId });\n\nconst withSubmission = (state: LedgerState, stored: StoredSubmission): LedgerState => {\n const row = stored.row;\n const previous = state.submissions.get(row.submissionId);\n let directory = state.byThread.get(row.threadId);\n\n if (directory === undefined) {\n directory = {\n ordered: [],\n commands: { aborts: [], approvals: [], resolutions: [] },\n children: 0,\n workers: 0,\n reservations: 0,\n };\n state.byThread.set(row.threadId, directory);\n }\n if (previous === undefined) {\n let low = 0;\n let high = directory.ordered.length;\n\n while (low < high) {\n const middle = Math.floor((low + high) / 2);\n const candidate = state.submissions.get(directory.ordered[middle]);\n\n if (candidate !== undefined && candidate.row.queueSequence < row.queueSequence)\n low = middle + 1;\n else high = middle;\n }\n directory.ordered.splice(low, 0, row.submissionId);\n state.receipts.set(row.receiptId, row.submissionId);\n state.admissionIndex.set(\n admissionKey(row.threadId, row.principal, row.idempotencyKey),\n row.submissionId,\n );\n const latest = state.latestByThread.get(row.threadId);\n\n if (\n latest === undefined ||\n (state.submissions.get(latest)?.row.queueSequence ?? -1) < row.queueSequence\n )\n state.latestByThread.set(row.threadId, row.submissionId);\n }\n directory.children +=\n Number(row.state !== \"settled\" && row.parentLinkage !== undefined) -\n Number(\n previous !== undefined &&\n previous.row.state !== \"settled\" &&\n previous.row.parentLinkage !== undefined,\n );\n directory.workers +=\n Number(row.state !== \"settled\" && row.workerAdmissionJson !== undefined) -\n Number(\n previous !== undefined &&\n previous.row.state !== \"settled\" &&\n previous.row.workerAdmissionJson !== undefined,\n );\n if (stored.abortIntent !== undefined && previous?.abortIntent === undefined)\n retainCommand(directory.commands.aborts, row.submissionId);\n if (stored.approvalDecisions !== previous?.approvalDecisions)\n for (const id of stored.approvalDecisions.keys())\n if (!previous?.approvalDecisions.has(id))\n retainCommand(directory.commands.approvals, row.submissionId, id);\n if (stored.unknownResolutions !== previous?.unknownResolutions)\n for (const [id, value] of stored.unknownResolutions)\n if (!previous?.unknownResolutions.has(id))\n retainCommand(\n directory.commands.resolutions,\n row.submissionId,\n value.intent.toolCallId,\n id,\n );\n if (\n previous?.joinedHostSubmissionId !== undefined &&\n previous.joinedHostSubmissionId !== stored.joinedHostSubmissionId\n )\n state.joinsByHost.get(previous.joinedHostSubmissionId)?.delete(row.submissionId);\n if (stored.joinedHostSubmissionId !== undefined) {\n let joins = state.joinsByHost.get(stored.joinedHostSubmissionId);\n\n if (joins === undefined)\n state.joinsByHost.set(stored.joinedHostSubmissionId, (joins = new Set()));\n joins.add(row.submissionId);\n }\n let active = state.activeByThread.get(row.threadId);\n\n if (active === undefined) state.activeByThread.set(row.threadId, (active = new Set()));\n if (row.state === \"settled\") active.delete(row.submissionId);\n else active.add(row.submissionId);\n state.submissions.set(row.submissionId, stored);\n\n return state;\n};\n\nconst withChildReservation = (\n state: LedgerState,\n reservation: StoredChildReservation,\n): LedgerState => {\n const previous = state.childReservations.get(reservation.reservationId);\n\n state.childReservations.set(reservation.reservationId, reservation);\n let children = state.childrenByParent.get(reservation.parentSubmissionId);\n\n if (children === undefined)\n state.childrenByParent.set(reservation.parentSubmissionId, (children = new Set()));\n children.add(reservation.reservationId);\n const parent = state.submissions.get(reservation.parentSubmissionId);\n\n if (parent !== undefined) {\n const directory = state.byThread.get(parent.row.threadId);\n\n if (directory !== undefined) {\n directory.reservations +=\n Number(reservation.status !== \"released\") -\n Number(previous !== undefined && previous.status !== \"released\");\n }\n }\n\n return state;\n};\n\nconst findHead = (state: LedgerState, threadId: ThreadId): StoredSubmission | undefined => {\n let head: StoredSubmission | undefined;\n\n for (const id of state.activeByThread.get(threadId) ?? []) {\n const stored = state.submissions.get(id);\n\n if (\n stored === undefined ||\n (stored.row.state === \"unknown\" && stored.abortIntent === undefined)\n )\n continue;\n if (head === undefined || stored.row.queueSequence < head.row.queueSequence) head = stored;\n }\n\n return head;\n};\n\nfunction* threadRows(state: LedgerState, threadId: ThreadId, after = -1) {\n const ordered = state.byThread.get(threadId)?.ordered ?? [];\n let low = 0;\n let high = ordered.length;\n\n while (low < high) {\n const middle = Math.floor((low + high) / 2);\n\n if ((state.submissions.get(ordered[middle])?.row.queueSequence ?? -1) <= after)\n low = middle + 1;\n else high = middle;\n }\n for (let index = low; index < ordered.length; index++) {\n const stored = state.submissions.get(ordered[index]);\n\n if (stored !== undefined) yield stored;\n }\n}\n\nconst makeSubmissionLedger = Effect.fnUntraced(\n /**\n * Reference in-memory SubmissionLedger. Admission, ordered selection and canonical settlement\n * share the Memory kernel's mutation gate. The kernel Scope owns local Run capabilities;\n * selecting work does not write execution ownership into the ledger.\n *\n * Joining retains the contiguous ready prefix and exact host linkage. Canonical settlement\n * authorizes finalization and child wake repair, while bound sessions reject late commands.\n * Child wake checks read the child rows directly, without a separate notification marker.\n * Admission resolution is strongly consistent; resolveAdmissionFault injects the\n * Indeterminate outcome for existing caller conformance workflows.\n */\n function* (options: MemorySubmissionLedgerOptions = {}) {\n const journal = yield* MemoryThreadStoreKernel;\n const crypto = yield* Crypto.Crypto;\n\n const mintIdentity = (operation: string) =>\n crypto.randomUUIDv4().pipe(\n Effect.flatMap(Schema.decodeEffect(MemoryIdentityNonce)),\n Effect.mapError((cause) => ledgerError(operation, \"Cannot mint a Memory identity\", cause)),\n );\n\n const state = yield* Ref.make<LedgerState>({\n byThread: new Map(),\n receipts: new Map(),\n joinsByHost: new Map(),\n childrenByParent: new Map(),\n submissions: new Map(),\n admissionIndex: new Map(),\n lanes: new Map(),\n childReservations: new Map(),\n freshAdmissionSequence: 0,\n stoppedWorkers: new Map(),\n latestByThread: new Map(),\n activeByThread: new Map(),\n });\n\n yield* journal.registerWorkOwner(\"admissions\", {\n threads: (request) =>\n Ref.get(state).pipe(\n Effect.map((current) => {\n const candidates = boundedWorkSelection<ThreadId>(\n request.limit,\n (id) => id,\n request.afterThreadId,\n );\n\n for (const [threadId, ids] of current.activeByThread)\n if (ids.size > 0) candidates.add(threadId);\n const threadIds = candidates.values;\n\n const afterThreadId = threadIds.length === request.limit ? threadIds.at(-1) : undefined;\n\n return {\n threadIds,\n ...(afterThreadId === undefined ? {} : { afterThreadId }),\n };\n }),\n ),\n page: Effect.fnUntraced(function* (threadId, after, limit) {\n const current = yield* Ref.get(state);\n\n const candidates = boundedWorkSelection<SubmissionId>(limit + 1, (id) => id, after);\n\n for (const id of current.activeByThread.get(threadId) ?? []) candidates.add(id);\n const ids = candidates.values;\n\n const entries = [];\n\n for (const id of ids.slice(0, limit)) {\n const stored = current.submissions.get(id);\n\n if (\n stored === undefined ||\n stored.row.threadId !== threadId ||\n stored.row.state === \"settled\"\n )\n return yield* ThreadStoreError.make({\n operation: \"admission work\",\n message: \"Active admission index is incomplete or corrupt\",\n });\n const entry = admissionWork(stored.row);\n\n entries.push(\n stored.suspension === undefined\n ? entry\n : {\n ...entry,\n wait:\n stored.suspension.reason._tag === \"WaitingForChild\"\n ? (\"child\" as const)\n : (\"approval\" as const),\n },\n );\n }\n const next = ids.length > limit ? ids[limit - 1] : undefined;\n\n return { entries, ...(next === undefined ? {} : { after: next }) };\n }),\n });\n\n const admissionFence = yield* SubmissionAdmissionFence;\n\n const capabilities = Effect.succeed(LedgerCapabilities.make({ durability: \"non-durable\" }));\n\n const admit: SubmissionLedger[\"Service\"][\"admit\"] = Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(AdmissionRequest, \"admit\", unvalidated);\n\n const workerAdmissionJson =\n request.workerAdmission === undefined\n ? undefined\n : yield* Schema.encodeEffect(Schema.fromJsonString(WorkerAdmission))(\n request.workerAdmission,\n ).pipe(\n Effect.mapError(() => ledgerError(\"admit\", \"Invalid worker admission metadata\")),\n );\n\n const messageAdmissionJson =\n request.messageAdmission === undefined\n ? undefined\n : yield* Schema.encodeEffect(Schema.fromJsonString(InputMessage))(\n request.messageAdmission,\n ).pipe(\n Effect.mapError(() => ledgerError(\"admit\", \"Invalid message admission metadata\")),\n );\n\n yield* journal\n .checkThreadCapacity(request.threadId)\n .pipe(Effect.mapError((cause) => ledgerError(\"admit\", cause.message, cause)));\n const nowMillis = yield* Clock.currentTimeMillis;\n const retained = yield* Ref.get(state);\n\n const identity = retained.admissionIndex.has(\n admissionKey(request.threadId, request.principal, request.idempotencyKey),\n )\n ? Result.fail(ledgerError(\"admit\", \"Retained admission disappeared\"))\n : yield* Effect.result(mintIdentity(\"admit\"));\n\n const services = yield* Effect.context<never>();\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n (\n | Decision<AdmissionResult, AdmissionConflict | AdmissionPolicyError | LedgerError>\n | { readonly _tag: \"cause\"; readonly cause: Cause.Cause<AdmissionPolicyError> }\n ),\n LedgerState,\n ] => {\n const key = admissionKey(request.threadId, request.principal, request.idempotencyKey);\n const existingId = current.admissionIndex.get(key);\n\n if (existingId !== undefined) {\n const existing = current.submissions.get(existingId);\n\n if (existing === undefined) {\n return [\n failure(ledgerError(\"admit\", \"Admission index references a missing Submission\")),\n current,\n ];\n }\n // A replay must repeat the exact canonical input AND the exact parent linkage\n // (or its absence): linkage is immutable lineage (spec §12 step 5, SUB-016).\n if (\n existing.row.inputDigest !== request.inputDigest ||\n !sameParentLinkage(existing.row.parentLinkage, request.parentLinkage) ||\n existing.row.admissionGroup !== request.admissionGroup ||\n !Schema.toEquivalence(Schema.optional(WorkerAdmission))(\n existing.row.workerAdmissionJson === undefined\n ? undefined\n : Schema.decodeSync(Schema.fromJsonString(WorkerAdmission))(\n existing.row.workerAdmissionJson,\n ),\n request.workerAdmission,\n ) ||\n !Schema.toEquivalence(Schema.optional(InputMessage))(\n existing.row.messageAdmissionJson === undefined\n ? undefined\n : Schema.decodeSync(Schema.fromJsonString(InputMessage))(\n existing.row.messageAdmissionJson,\n ),\n request.messageAdmission,\n ) ||\n !Schema.toEquivalence(Schema.optional(Schema.Json))(\n existing.row.admissionFence,\n request.admissionFence,\n )\n ) {\n return [\n failure(\n AdmissionConflict.make({\n threadId: request.threadId,\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n existingInputDigest: existing.row.inputDigest,\n attemptedInputDigest: request.inputDigest,\n }),\n ),\n current,\n ];\n }\n\n return [\n success(\n AdmissionResult.make({\n submissionId: existing.row.submissionId,\n receiptId: existing.row.receiptId,\n queueSequence: existing.row.queueSequence,\n state: existing.row.state,\n replayed: true,\n }),\n ),\n current,\n ];\n }\n\n if (current.stoppedWorkers.has(request.threadId))\n return [\n failure(AdmissionPolicyError.make({ reason: \"refused\", code: \"worker-stopped\" })),\n current,\n ];\n\n // A Thread's first admission fixes its worker origin before canonical materialization.\n const first = threadRows(current, request.threadId).next().value;\n\n if (first !== undefined) {\n const previous =\n first.row.workerAdmissionJson === undefined\n ? undefined\n : Schema.decodeSync(Schema.fromJsonString(WorkerAdmission))(\n first.row.workerAdmissionJson,\n );\n\n if (\n !Schema.toEquivalence(Schema.optional(WorkerAdmission.fields.origin))(\n previous?.origin,\n request.workerAdmission?.origin,\n )\n )\n return [\n failure(\n AdmissionPolicyError.make({\n reason: \"refused\",\n code: \"worker-origin-conflict\",\n }),\n ),\n current,\n ];\n }\n // A memory policy and the ledger mutation share one synchronous critical section.\n // An asynchronous policy cannot fence this Ref and therefore fails closed.\n const checked = Effect.runSyncExitWith(services)(admissionFence.check(request));\n\n if (Exit.isFailure(checked)) {\n return [{ _tag: \"cause\", cause: checked.cause }, current];\n }\n if (\n request.admissionGroup !== undefined &&\n Array.from(current.activeByThread.get(request.threadId) ?? []).some(\n (id) => current.submissions.get(id)?.row.admissionGroup === request.admissionGroup,\n )\n )\n return [\n failure(AdmissionPolicyError.make({ reason: \"occupied\", code: \"admission-group\" })),\n current,\n ];\n\n // A concurrent matching acceptance still wins over a failed fresh allocation.\n if (Result.isFailure(identity)) return [failure(identity.failure), current];\n\n const lane = current.lanes.get(request.threadId) ?? {\n nextQueueSequence: 1,\n };\n\n const freshAdmissionSequence = current.freshAdmissionSequence + 1;\n\n if (!Number.isSafeInteger(freshAdmissionSequence))\n return [\n failure(ledgerError(\"admit\", \"Fresh admission sequence is exhausted\")),\n current,\n ];\n\n // Native work scans compare Submission identities lexically.\n const orderedIdentity = `${String(freshAdmissionSequence).padStart(16, \"0\")}-${identity.success}`;\n const submissionId = decodeSubmissionId(`submission-memory-${orderedIdentity}`);\n const receiptId = decodeReceiptId(`receipt-memory-${orderedIdentity}`);\n\n if (current.submissions.has(submissionId) || current.receipts.has(receiptId))\n return [\n failure(ledgerError(\"admit\", \"Fresh admission identity already exists\")),\n current,\n ];\n\n const row: SubmissionRow = {\n submissionId,\n threadId: request.threadId,\n queueSequence: decodeQueueSequence(lane.nextQueueSequence),\n principal: request.principal,\n idempotencyKey: request.idempotencyKey,\n agentId: request.agentId,\n agentDigests: request.agentDigests,\n deploymentId: request.deploymentId,\n inputPayload: request.inputPayload,\n inputDigest: request.inputDigest,\n receiptId,\n state: \"admitted\",\n settledOutcome: undefined,\n createdAtMillis: nowMillis,\n readyAtMillis: undefined,\n parentLinkage: request.parentLinkage,\n ...(workerAdmissionJson === undefined ? {} : { workerAdmissionJson }),\n ...(messageAdmissionJson === undefined ? {} : { messageAdmissionJson }),\n ...(request.admissionGroup === undefined\n ? {}\n : { admissionGroup: request.admissionGroup }),\n ...(request.admissionFence === undefined\n ? {}\n : { admissionFence: request.admissionFence }),\n };\n\n const stored: StoredSubmission = {\n row,\n inputApplied: undefined,\n finalization: undefined,\n abortIntent: undefined,\n joinedHostSubmissionId: undefined,\n suspension: undefined,\n unknownMark: undefined,\n approvalDecisions: new Map<ToolCallId, ApprovalDecisionIntent>(),\n unknownResolutions: new Map<string, StoredUnknownResolution>(),\n };\n\n if (!admissionFitsTransfer(request.threadId, toAdmission(row)))\n return [failure(transferCapacityError(\"admit\")), current];\n\n journal.initializeWork(request.threadId);\n const admissionIndex = current.admissionIndex;\n\n const lanes = current.lanes.set(request.threadId, {\n nextQueueSequence: lane.nextQueueSequence + 1,\n });\n\n return [\n success(\n AdmissionResult.make({\n submissionId: row.submissionId,\n receiptId: row.receiptId,\n queueSequence: row.queueSequence,\n state: row.state,\n replayed: false,\n }),\n ),\n {\n ...withSubmission(current, stored),\n admissionIndex,\n lanes,\n freshAdmissionSequence,\n },\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n if (decision._tag === \"cause\") {\n for (const reason of decision.cause.reasons) {\n if (Cause.isDieReason(reason) && Cause.isAsyncFiberError(reason.defect)) {\n yield* Fiber.interrupt(reason.defect.fiber);\n\n return yield* AdmissionPolicyError.make({\n reason: \"unavailable\",\n code: \"synchronous-memory-policy-required\",\n });\n }\n }\n\n return yield* Effect.failCause(decision.cause);\n }\n\n return decision.value;\n }, Effect.uninterruptible);\n\n const markReady: SubmissionLedger[\"Service\"][\"markReady\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(MarkReadyRequest, \"markReady\", unvalidated);\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"markReady\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n if (stored.row.state !== \"admitted\") return [success(undefined), current];\n\n return [\n success(undefined),\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"ready\", readyAtMillis: nowMillis },\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const lookup: SubmissionLedger[\"Service\"][\"lookup\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(SubmissionLookup, \"lookup\", unvalidated);\n const current = yield* Ref.get(state);\n\n const submissionId =\n request._tag === \"SubmissionLookupById\"\n ? request.submissionId\n : current.admissionIndex.get(\n admissionKey(request.threadId, request.principal, request.idempotencyKey),\n );\n\n const stored =\n submissionId === undefined ? undefined : current.submissions.get(submissionId);\n\n return stored === undefined ? Option.none() : Option.some(toSnapshot(stored.row));\n },\n );\n\n const resolveAdmission: SubmissionLedger[\"Service\"][\"resolveAdmission\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(SubmissionLookupByKey, \"resolveAdmission\", unvalidated);\n\n // Test-only fault seam: lets suites exercise the Indeterminate classification that a\n // single strongly consistent store never produces on its own (SUB-031, P6 honesty).\n if (options.resolveAdmissionFault !== undefined) {\n const fault = yield* options.resolveAdmissionFault;\n\n if (Option.isSome(fault)) {\n return AdmissionIndeterminate.make({ reason: fault.value });\n }\n }\n const current = yield* Ref.get(state);\n\n const submissionId = current.admissionIndex.get(\n admissionKey(request.threadId, request.principal, request.idempotencyKey),\n );\n\n const stored =\n submissionId === undefined ? undefined : current.submissions.get(submissionId);\n\n return stored === undefined\n ? AdmissionNotAdmitted.make()\n : AdmissionAdmitted.make({ submission: toSnapshot(stored.row) });\n },\n );\n\n const selectHead: SubmissionLedger[\"Service\"][\"selectHead\"] = Effect.fn(\n \"MemorySubmissionLedger.selectHead\",\n )((unvalidated) =>\n Effect.gen(function* () {\n const request = yield* validate(ClaimRequest, \"claim\", unvalidated);\n const identity = yield* mintIdentity(\"claim\");\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<Option.Option<Claim>, LedgerError>, LedgerState] => {\n if (journal.owner.hasOwner(request.threadId)) return [success(Option.none()), current];\n let head = findHead(current, request.threadId);\n\n if (request.handoff !== undefined) {\n const handoff = request.handoff;\n\n const candidates = Array.from(\n current.activeByThread.get(request.threadId) ?? [],\n (id) => current.submissions.get(id),\n )\n .filter(\n (entry): entry is StoredSubmission =>\n entry !== undefined &&\n !(entry.row.state === \"unknown\" && entry.abortIntent === undefined),\n )\n .sort((a, b) => a.row.queueSequence - b.row.queueSequence);\n\n for (const candidate of candidates) {\n if (candidate.row.submissionId === handoff.submissionId) {\n head = candidate;\n break;\n }\n if (\n !handoff.deferredSubmissionIds.includes(candidate.row.submissionId) ||\n candidate.row.state !== \"input-applied\" ||\n candidate.abortIntent !== undefined\n )\n return [success(Option.none()), current];\n }\n if (\n head?.row.submissionId !== handoff.submissionId ||\n (head.row.state !== \"ready\" && head.row.state !== \"input-applied\")\n )\n return [success(Option.none()), current];\n }\n\n if (head === undefined) return [success(Option.none()), current];\n if (BLOCKED_HEAD_STATES.has(head.row.state)) return [success(Option.none()), current];\n\n return [\n success(\n Option.some(\n Claim.make({\n submissionId: head.row.submissionId,\n attemptId: decodeAttemptId(`attempt-memory-${identity}`),\n inputPayload: head.row.inputPayload,\n }),\n ),\n ),\n current,\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n }),\n );\n\n const markInputApplied: SubmissionLedger[\"Service\"][\"markInputApplied\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(MarkInputAppliedRequest, \"markInputApplied\", unvalidated);\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, OwnershipLost | LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(\n ledgerError(\"markInputApplied\", `Unknown Submission ${request.submissionId}`),\n ),\n current,\n ];\n }\n if (!journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId)) {\n return [failure(ownershipLost(stored)), current];\n }\n\n if (stored.inputApplied !== undefined) {\n if (\n stored.inputApplied.recordId === request.recordId &&\n stored.inputApplied.sequence === request.sequence\n ) {\n return [success(undefined), current];\n }\n\n return [\n failure(\n ledgerError(\n \"markInputApplied\",\n `A different canonical input marker is already recorded for Submission ${request.submissionId}`,\n ),\n ),\n current,\n ];\n }\n\n const marker = InputAppliedMarker.make({\n recordId: request.recordId,\n sequence: request.sequence,\n });\n\n const row: SubmissionRow =\n STATE_RANK[stored.row.state] < STATE_RANK[\"input-applied\"]\n ? { ...stored.row, state: \"input-applied\" }\n : stored.row;\n\n return [\n success(undefined),\n withSubmission(current, { ...stored, row, inputApplied: marker }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const canonicalSettlement = Effect.fnUntraced(function* (submission: SubmissionRow) {\n const record = yield* journal.record(\n submission.threadId,\n submissionSettlementRecordId(submission.submissionId),\n );\n\n if (record === undefined) return undefined;\n const settlement = yield* validateCanonicalSettlement(record, submission);\n\n return { record, settlement };\n });\n\n const publish: SettlementPublisher[\"Service\"][\"publish\"] = Effect.fn(\n \"MemorySettlementPublisher.publish\",\n )(function* (input) {\n const { request, record, settlement } = yield* validatePublication(input);\n const prepared = yield* journal.prepareAppend(request.append);\n\n return yield* journal.owner.withProgress(\n request.append.threadId,\n journal.withMutation(\n Effect.gen(function* () {\n const current = yield* Ref.get(state);\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined)\n return yield* ledgerError(\"publish settlement\", \"Unknown Submission\");\n if (stored.row.threadId !== prepared.request.threadId)\n return yield* ledgerError(\"publish settlement\", \"Publication targets another Thread\");\n yield* validateCanonicalSettlement(record, stored.row);\n const existing = yield* canonicalSettlement(stored.row);\n const tail = yield* journal.tail(stored.row.threadId);\n\n // Replay still requires authority: finalization releases Owned tokens, while\n // retained host linkage or abort intent can authorize tokenless settled replay.\n switch (request.authority._tag) {\n case \"Owned\":\n if (!journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId))\n return yield* ownershipLost(stored);\n yield* validateCanonicalSettlement(record, {\n submissionId: request.submissionId,\n receiptId: stored.row.receiptId,\n ...(settlement.outcome === \"aborted\" && settlement.runId === undefined\n ? {}\n : { runId: runIdForSubmission(request.submissionId) }),\n });\n break;\n case \"Joined\": {\n if (\n (stored.row.state !== \"joined\" &&\n !(stored.row.state === \"settled\" && existing !== undefined)) ||\n stored.joinedHostSubmissionId !== request.authority.hostSubmissionId\n )\n return yield* ledgerError(\n \"publish settlement\",\n \"Submission is not joined to this host\",\n );\n const host = current.submissions.get(request.authority.hostSubmissionId);\n\n const canonicalHost =\n host === undefined || host.row.threadId !== stored.row.threadId\n ? undefined\n : yield* canonicalSettlement(host.row);\n\n if (canonicalHost === undefined)\n return yield* ledgerError(\n \"publish settlement\",\n \"Joined host has no canonical settlement\",\n );\n yield* validateJoinedSettlement(settlement, canonicalHost.settlement);\n break;\n }\n case \"QueuedAbort\":\n if (\n (stored.row.state !== \"ready\" &&\n !(stored.row.state === \"settled\" && existing !== undefined)) ||\n stored.abortIntent === undefined ||\n journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId) ||\n settlement.outcome !== \"aborted\"\n )\n return yield* ledgerError(\n \"publish settlement\",\n \"Submission is not an unclaimed queued abort\",\n );\n yield* validateCanonicalSettlement(record, {\n submissionId: request.submissionId,\n receiptId: stored.row.receiptId,\n runId: undefined,\n });\n break;\n }\n if (existing !== undefined)\n return SettlementPublicationResult.make({\n record: existing.record,\n tailSequence: tail.tailSequence,\n replayed: true,\n });\n if (stored.row.state === \"settled\")\n return yield* ledgerError(\n \"publish settlement\",\n \"Finalized Submission has no canonical settlement\",\n );\n const appended = yield* journal.appendPrepared(prepared);\n\n return SettlementPublicationResult.make({\n record,\n tailSequence: appended.lastSequence,\n replayed: false,\n });\n }),\n ),\n );\n });\n\n const finalizeSettlement: SubmissionLedger[\"Service\"][\"finalizeSettlement\"] = Effect.fn(\n \"MemorySubmissionLedger.finalizeSettlement\",\n )((unvalidated) =>\n Effect.gen(function* () {\n const request = yield* validate(SettlementFinalization, \"finalizeSettlement\", unvalidated);\n const before = (yield* Ref.get(state)).submissions.get(request.submissionId);\n const canonical = before === undefined ? undefined : yield* canonicalSettlement(before.row);\n\n if (canonical === undefined)\n return yield* ledgerError(\"finalizeSettlement\", \"Submission has no canonical settlement\");\n const { record, settlement } = canonical;\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [Decision<Settlement, SettlementConflict | LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(\n ledgerError(\"finalizeSettlement\", `Unknown Submission ${request.submissionId}`),\n ),\n current,\n ];\n }\n const settlementFailure = settlementFailureFromRecord(record);\n\n if (settlement.settlementId !== request.settlementId) {\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: settlement.outcome,\n }),\n ),\n current,\n ];\n }\n if (stored.finalization !== undefined) {\n if (\n stored.row.state !== \"settled\" ||\n stored.row.settledOutcome !== settlement.outcome ||\n stored.finalization.settlementId !== request.settlementId ||\n stored.finalization.recordId !== record.recordId\n )\n return [\n failure(\n ledgerError(\n \"finalizeSettlement\",\n \"Finalized identity disagrees with canonical settlement\",\n ),\n ),\n current,\n ];\n\n return [\n success(\n Settlement.make({\n submissionId: stored.row.submissionId,\n settlementId: settlement.settlementId,\n receiptId: stored.row.receiptId,\n outcome: settlement.outcome,\n ...(settlementFailure === undefined ? {} : { failure: settlementFailure }),\n settledAt: utc(stored.finalization.finalizedAtMillis),\n }),\n ),\n current,\n ];\n }\n if (stored.row.state === \"settled\")\n return [\n failure(ledgerError(\"finalizeSettlement\", \"Finalized timestamp is missing\")),\n current,\n ];\n\n const terminal =\n stored.row.workerAdmissionJson === undefined\n ? undefined\n : workerTerminalFromRecord(toSnapshot(stored.row), record);\n\n const latestId = current.latestByThread.get(stored.row.threadId);\n const latest = latestId === undefined ? undefined : current.submissions.get(latestId);\n\n const pendingNewer =\n terminal === \"completed\" &&\n latest !== undefined &&\n latest.row.queueSequence > stored.row.queueSequence &&\n !(\n latest.joinedHostSubmissionId === stored.row.submissionId &&\n latest.inputApplied !== undefined\n );\n\n let sealed = current;\n\n if (\n terminal !== undefined &&\n !pendingNewer &&\n !current.stoppedWorkers.has(stored.row.threadId)\n ) {\n const submissions = current.submissions;\n\n if (!transferPageFits(stored.row.threadId))\n return [failure(transferCapacityError(\"finalizeSettlement\")), current];\n\n // Validate every fresh fact before mutating, without retaining a second active set.\n for (const apply of [false, true]) {\n for (const id of current.activeByThread.get(stored.row.threadId) ?? []) {\n const other = submissions.get(id);\n\n if (other === undefined) continue;\n if (\n id !== stored.row.submissionId &&\n !(\n other.joinedHostSubmissionId === stored.row.submissionId &&\n other.inputApplied !== undefined\n ) &&\n other.abortIntent === undefined\n ) {\n const abortIntent = AbortIntent.make({\n submissionId: id,\n author: stored.row.principal,\n reason: `Worker assignment ${terminal}`,\n requestedAt: utc(nowMillis),\n });\n\n if (!apply && !abortFitsTransfer(other.row.threadId, abortIntent))\n return [failure(transferCapacityError(\"finalizeSettlement\")), current];\n if (apply)\n withSubmission(current, {\n ...other,\n abortIntent,\n });\n }\n }\n }\n sealed = {\n ...current,\n submissions,\n stoppedWorkers: current.stoppedWorkers.set(stored.row.threadId, terminal),\n };\n }\n\n const next = withSubmission(sealed, {\n ...stored,\n row: { ...stored.row, state: \"settled\", settledOutcome: settlement.outcome },\n finalization: {\n settlementId: settlement.settlementId,\n recordId: record.recordId,\n finalizedAtMillis: nowMillis,\n },\n });\n\n return [\n success(\n Settlement.make({\n submissionId: stored.row.submissionId,\n settlementId: settlement.settlementId,\n receiptId: stored.row.receiptId,\n outcome: settlement.outcome,\n ...(settlementFailure === undefined ? {} : { failure: settlementFailure }),\n settledAt: utc(nowMillis),\n }),\n ),\n next,\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n if (before !== undefined)\n journal.owner.closeSubmission(before.row.threadId, request.submissionId);\n\n return decision.value;\n }),\n );\n\n const inspectWorker = Effect.fnUntraced(function* (threadId: ThreadId) {\n const current = yield* Ref.get(state);\n const latestId = current.latestByThread.get(threadId);\n const latest = latestId === undefined ? undefined : current.submissions.get(latestId);\n\n const active = [...(current.activeByThread.get(threadId) ?? [])]\n .flatMap((id) => {\n const row = current.submissions.get(id);\n\n return row === undefined ? [] : [row];\n })\n .sort((a, b) => a.row.queueSequence - b.row.queueSequence)[0];\n\n const terminal = current.stoppedWorkers.get(threadId);\n\n return WorkerLedgerState.make({\n latest: latest === undefined ? null : toSnapshot(latest.row),\n active: active === undefined ? null : toSnapshot(active.row),\n stopped: current.stoppedWorkers.has(threadId),\n ...(terminal === undefined ? {} : { terminal }),\n });\n });\n\n const stopWorker = Effect.fnUntraced(function* (unvalidated: WorkerStopCommand) {\n const request = yield* validate(WorkerStopCommand, \"stopWorker\", unvalidated);\n const now = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<number, LedgerError>, LedgerState] => {\n const submissions = current.submissions;\n let owned = 0;\n\n if (!current.stoppedWorkers.has(request.threadId) && !transferPageFits(request.threadId))\n return [failure(transferCapacityError(\"stopWorker\")), current];\n\n // Both passes run in this Ref.modify; no mutation precedes complete validation.\n for (const apply of [false, true]) {\n for (const id of current.activeByThread.get(request.threadId) ?? []) {\n const stored = submissions.get(id);\n\n if (stored === undefined) continue;\n if (!apply && journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId))\n owned++;\n if (stored.abortIntent === undefined) {\n const abortIntent = AbortIntent.make({\n submissionId: id,\n author: request.author,\n reason: \"Worker owner stopped the worker\",\n requestedAt: utc(now),\n });\n\n if (!apply && !abortFitsTransfer(stored.row.threadId, abortIntent))\n return [failure(transferCapacityError(\"stopWorker\")), current];\n if (apply) withSubmission(current, { ...stored, abortIntent });\n }\n }\n }\n\n return [\n success(owned),\n {\n ...current,\n submissions,\n stoppedWorkers: current.stoppedWorkers.has(request.threadId)\n ? current.stoppedWorkers\n : current.stoppedWorkers.set(request.threadId, undefined),\n },\n ] as const;\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const requestAbort: SubmissionLedger[\"Service\"][\"requestAbort\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(AbortCommand, \"requestAbort\", unvalidated);\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<AbortIntent, SettlementConflict | JoinedToHost | LedgerError>,\n LedgerState,\n ] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"requestAbort\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n // A joined Submission settles WITH its host; the abort target is the host (plan\n // §2.5). A joining Submission still records the intent: it is honored only if the\n // host has not consumed the input (revert-then-abort).\n if (stored.row.state === \"joined\") {\n if (stored.joinedHostSubmissionId === undefined) {\n return [\n failure(\n ledgerError(\n \"requestAbort\",\n `Joined Submission ${request.submissionId} is missing its host linkage`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n JoinedToHost.make({\n submissionId: request.submissionId,\n hostSubmissionId: stored.joinedHostSubmissionId,\n }),\n ),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"requestAbort\",\n `Settled Submission ${request.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n if (stored.abortIntent !== undefined) return [success(stored.abortIntent), current];\n\n const intent = AbortIntent.make({\n submissionId: request.submissionId,\n author: request.author,\n reason: request.reason,\n requestedAt: utc(nowMillis),\n });\n\n if (!abortFitsTransfer(stored.row.threadId, intent))\n return [failure(transferCapacityError(\"requestAbort\")), current];\n\n return [success(intent), withSubmission(current, { ...stored, abortIntent: intent })];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const claimJoining: SubmissionLedger[\"Service\"][\"claimJoining\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(ClaimJoiningRequest, \"claimJoining\", unvalidated);\n const published = new Map<SubmissionId, Settlement[\"outcome\"]>();\n\n const before = yield* Ref.get(state);\n\n for (const id of before.activeByThread.get(request.threadId) ?? []) {\n const stored = before.submissions.get(id);\n\n if (stored === undefined || stored.row.state !== \"ready\") continue;\n const canonical = yield* canonicalSettlement(stored.row);\n\n if (canonical !== undefined)\n published.set(stored.row.submissionId, canonical.settlement.outcome);\n }\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ReadonlyArray<JoiningClaim>, OwnershipLost | LedgerError>,\n LedgerState,\n ] => {\n if (current.stoppedWorkers.has(request.threadId)) return [success([]), current];\n\n const host = current.submissions.get(request.hostSubmissionId);\n\n if (host === undefined) {\n return [\n failure(\n ledgerError(\"claimJoining\", `Unknown Submission ${request.hostSubmissionId}`),\n ),\n current,\n ];\n }\n if (host.row.threadId !== request.threadId) {\n return [\n failure(\n ledgerError(\n \"claimJoining\",\n `Host Submission ${request.hostSubmissionId} does not belong to Thread ${request.threadId}`,\n ),\n ),\n current,\n ];\n }\n if (!journal.owner.hasOwner(host.row.threadId, host.row.submissionId)) {\n return [failure(ownershipLost(host)), current];\n }\n\n const later = threadRows(current, request.threadId, host.row.queueSequence);\n\n const claims: Array<JoiningClaim> = [];\n const submissions = current.submissions;\n\n for (const stored of later) {\n if (claims.length >= request.maxCount) break;\n // Rows already claimed by THIS host extend its contiguous prefix and are skipped;\n // the coordinator re-delivers already-joined input through the coverage rule.\n if (\n (stored.row.state === \"joining\" || stored.row.state === \"joined\") &&\n stored.joinedHostSubmissionId === request.hostSubmissionId\n ) {\n continue;\n }\n // P7 §7(c): an aborted-settled row is a CLOSED obligation, not a gap — recovery\n // settles aborted never-claimed queued work immediately, and settlement order of\n // never-run work is not execution order (DUR-004 bounds execution).\n if (stored.row.state === \"settled\" && stored.row.settledOutcome === \"aborted\") {\n continue;\n }\n // Any other non-ready row — an admitted-not-ready gap in particular — breaks the\n // contiguous ready prefix (plan §2.5); later ready work stays queued (DUR-004).\n if (stored.row.state !== \"ready\") break;\n const terminal = published.get(stored.row.submissionId);\n\n if (terminal === \"aborted\") continue;\n if (terminal !== undefined) break;\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"joining\" },\n joinedHostSubmissionId: request.hostSubmissionId,\n });\n claims.push(\n JoiningClaim.make({\n submissionId: stored.row.submissionId,\n queueSequence: stored.row.queueSequence,\n inputPayload: stored.row.inputPayload,\n }),\n );\n }\n\n return [success(claims), { ...current, submissions }];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const markJoined: SubmissionLedger[\"Service\"][\"markJoined\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(MarkJoinedRequest, \"markJoined\", unvalidated);\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, OwnershipLost | LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"markJoined\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n if (stored.joinedHostSubmissionId === undefined) {\n return [\n failure(\n ledgerError(\n \"markJoined\",\n `Submission ${request.submissionId} was never claimed for joining`,\n ),\n ),\n current,\n ];\n }\n const host = current.submissions.get(stored.joinedHostSubmissionId);\n\n if (host === undefined) {\n return [\n failure(\n ledgerError(\n \"markJoined\",\n `Host Submission ${stored.joinedHostSubmissionId} is missing`,\n ),\n ),\n current,\n ];\n }\n // The lane is host-owned: the presented token must own the HOST's ownership period,\n // which also lets a later host Attempt repair a lost marker from history (DUR-016).\n if (!journal.owner.hasOwner(host.row.threadId, host.row.submissionId)) {\n return [failure(ownershipLost(host)), current];\n }\n if (stored.inputApplied !== undefined) {\n if (\n stored.inputApplied.recordId === request.recordId &&\n stored.inputApplied.sequence === request.sequence\n ) {\n return [success(undefined), current];\n }\n\n return [\n failure(\n ledgerError(\n \"markJoined\",\n `A different join marker is already recorded for Submission ${request.submissionId}`,\n ),\n ),\n current,\n ];\n }\n if (stored.row.state !== \"joining\" && stored.row.state !== \"joined\") {\n return [\n failure(\n ledgerError(\n \"markJoined\",\n `Cannot mark Submission ${request.submissionId} joined from state ${stored.row.state}`,\n ),\n ),\n current,\n ];\n }\n\n const marker = InputAppliedMarker.make({\n recordId: request.recordId,\n sequence: request.sequence,\n });\n\n return [\n success(undefined),\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"joined\" },\n inputApplied: marker,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const revertJoining: SubmissionLedger[\"Service\"][\"revertJoining\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(RevertJoiningRequest, \"revertJoining\", unvalidated);\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"revertJoining\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n // Idempotent and recovery-only: only a still-`joining` Submission reverts; an\n // already-joined (or already-reverted) Submission is a no-op (DUR-016).\n if (stored.row.state !== \"joining\") return [success(undefined), current];\n\n const guard = request.guard;\n\n if (guard !== undefined) {\n if (stored.joinedHostSubmissionId !== guard.hostSubmissionId)\n return [success(undefined), current];\n const host = current.submissions.get(guard.hostSubmissionId);\n\n if (host === undefined || host.row.threadId !== stored.row.threadId) {\n return [\n failure(\n ledgerError(\n \"revertJoining\",\n `Host Submission ${guard.hostSubmissionId} is missing or belongs to another Thread`,\n ),\n ),\n current,\n ];\n }\n if (\n host.row.state !== \"settled\" &&\n !journal.owner.hasOwner(host.row.threadId, host.row.submissionId)\n )\n return [\n failure(\n ledgerError(\"revertJoining\", \"The linked host has no active local session\"),\n ),\n current,\n ];\n }\n\n return [\n success(undefined),\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"ready\" },\n joinedHostSubmissionId: undefined,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const suspend: SubmissionLedger[\"Service\"][\"suspend\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(SuspendRequest, \"suspend\", unvalidated);\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const target = (yield* Ref.get(state)).submissions.get(request.submissionId);\n const canonical = target === undefined ? undefined : yield* canonicalSettlement(target.row);\n const announcedChildren = new Set<SubmissionId>();\n\n if (request.reason._tag === \"WaitingForChild\") {\n const current = yield* Ref.get(state);\n\n for (const { childSubmissionId } of request.reason.children) {\n const child = current.submissions.get(childSubmissionId);\n\n if (child !== undefined && (yield* canonicalSettlement(child.row)) !== undefined)\n announcedChildren.add(childSubmissionId);\n }\n }\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<SuspensionOutcome, OwnershipLost | SettlementConflict | LedgerError>,\n LedgerState,\n ] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"suspend\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"suspend\",\n `Settled Submission ${request.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n // Canonical publication wins over a late parking transition.\n if (canonical !== undefined) {\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: canonical.settlement.outcome,\n }),\n ),\n current,\n ];\n }\n if (!journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId)) {\n return [failure(ownershipLost(stored)), current];\n }\n\n // A covering event that raced ahead of the suspend transaction (an approval decision,\n // or a child settlement observed directly from the child's row in this single store)\n // resumes the caller immediately WITHOUT releasing the lane (plan §2.6, spec §12).\n const alreadyCovered =\n request.reason._tag === \"ApprovalPending\"\n ? approvalDecisionsCover(\n request.reason.toolCallIds,\n (toolCallId) => stored.approvalDecisions.get(toolCallId)?.decision,\n )\n : request.reason.children.every((child) =>\n announcedChildren.has(child.childSubmissionId),\n );\n\n if (alreadyCovered) {\n return [success(\"resume-immediately\" as const), current];\n }\n\n return [\n success(\"suspended\" as const),\n withSubmission(current, {\n ...stored,\n row: { ...stored.row, state: \"suspended\" },\n suspension: { reason: request.reason, suspendedAtMillis: nowMillis },\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n if (decision.value === \"suspended\" && target !== undefined)\n journal.owner.closeSubmission(target.row.threadId, request.submissionId);\n\n return decision.value;\n },\n );\n\n const recordApprovalDecision: SubmissionLedger[\"Service\"][\"recordApprovalDecision\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const command = yield* validate(\n ApprovalDecisionCommand,\n \"recordApprovalDecision\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ApprovalDecisionIntent, ApprovalConflict | SettlementConflict | LedgerError>,\n LedgerState,\n ] => {\n const stored = current.submissions.get(command.submissionId);\n\n if (stored === undefined) {\n return [\n failure(\n ledgerError(\n \"recordApprovalDecision\",\n `Unknown Submission ${command.submissionId}`,\n ),\n ),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"recordApprovalDecision\",\n `Settled Submission ${command.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n SettlementConflict.make({\n submissionId: command.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n const existing = stored.approvalDecisions.get(command.toolCallId);\n\n if (existing !== undefined) {\n if (existing.decision !== command.decision) {\n return [\n failure(\n ApprovalConflict.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n existingDecision: existing.decision,\n }),\n ),\n current,\n ];\n }\n\n return [success(existing), current];\n }\n\n const intent = ApprovalDecisionIntent.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n decision: command.decision,\n resolver: command.resolver,\n reason: command.reason,\n decidedAt: utc(nowMillis),\n });\n\n if (!approvalFitsTransfer(stored.row.threadId, intent))\n return [failure(transferCapacityError(\"recordApprovalDecision\")), current];\n\n const approvalDecisions = new Map(stored.approvalDecisions).set(\n command.toolCallId,\n intent,\n );\n\n // A denial or decisions for every pending call wake an ApprovalPending lane:\n // suspended → input-applied. A WaitingForChild suspension wakes\n // only through recordChildSettled.\n const wakes =\n stored.row.state === \"suspended\" &&\n stored.suspension !== undefined &&\n stored.suspension.reason._tag === \"ApprovalPending\" &&\n approvalDecisionsCover(\n stored.suspension.reason.toolCallIds,\n (toolCallId) => approvalDecisions.get(toolCallId)?.decision,\n );\n\n return [\n success(intent),\n withSubmission(current, {\n ...stored,\n row: wakes ? { ...stored.row, state: \"input-applied\" } : stored.row,\n suspension: wakes ? undefined : stored.suspension,\n approvalDecisions,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const markUnknown: SubmissionLedger[\"Service\"][\"markUnknown\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(MarkUnknownRequest, \"markUnknown\", unvalidated);\n\n const target = (yield* Ref.get(state)).submissions.get(request.submissionId);\n const canonical = target === undefined ? undefined : yield* canonicalSettlement(target.row);\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<void, SettlementConflict | LedgerError>, LedgerState] => {\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return [\n failure(ledgerError(\"markUnknown\", `Unknown Submission ${request.submissionId}`)),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"markUnknown\",\n `Settled Submission ${request.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n // Canonical publication wins over a late Unknown marking.\n if (canonical !== undefined) {\n return [\n failure(\n SettlementConflict.make({\n submissionId: request.submissionId,\n existingOutcome: canonical.settlement.outcome,\n }),\n ),\n current,\n ];\n }\n // Idempotent merge: repeating is a no-op; additional open calls extend the marked\n // set while the first recorded reason is kept.\n const existing = stored.unknownMark;\n const known = new Set(existing?.toolCallIds ?? []);\n\n const merged = [\n ...(existing?.toolCallIds ?? []),\n ...request.toolCallIds.filter((toolCallId) => !known.has(toolCallId)),\n ];\n\n return [\n success(undefined),\n withSubmission(current, {\n ...stored,\n row:\n stored.row.state === \"unknown\" ? stored.row : { ...stored.row, state: \"unknown\" },\n unknownMark: { reason: existing?.reason ?? request.reason, toolCallIds: merged },\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n },\n );\n\n const recordUnknownResolution: SubmissionLedger[\"Service\"][\"recordUnknownResolution\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const command = yield* validate(\n UnknownResolutionCommand,\n \"recordUnknownResolution\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const before = (yield* Ref.get(state)).submissions.get(command.submissionId);\n const kind = unknownResolutionKind(command.resolution);\n\n if (\n before !== undefined &&\n kind === \"factual\" &&\n !before.unknownResolutions.has(JSON.stringify([command.toolCallId, kind]))\n ) {\n const runId = runIdForSubmission(before.row.submissionId);\n\n const outcomes = yield* journal.toolCallResults(\n before.row.threadId,\n runId,\n command.toolCallId,\n );\n\n const result = outcomes[0]?.payload;\n\n if (\n outcomes.length > 1 ||\n (result !== undefined &&\n (result._tag !== \"ToolCallSettled\" ||\n result.runId !== runId ||\n result.toolCallId !== command.toolCallId))\n )\n return yield* ledgerError(\n \"recordUnknownResolution\",\n \"Canonical Tool result identity is inconsistent\",\n );\n\n if (\n result?._tag === \"ToolCallSettled\" &&\n !unknownResolutionMatchesResult(command.resolution, result)\n )\n return yield* UnknownResolutionConflict.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n });\n }\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<\n UnknownResolutionIntent,\n UnknownResolutionConflict | SettlementConflict | LedgerError\n >,\n LedgerState,\n ] => {\n const stored = current.submissions.get(command.submissionId);\n\n if (stored === undefined) {\n return [\n failure(\n ledgerError(\n \"recordUnknownResolution\",\n `Unknown Submission ${command.submissionId}`,\n ),\n ),\n current,\n ];\n }\n if (stored.row.state === \"settled\") {\n if (stored.row.settledOutcome === undefined) {\n return [\n failure(\n ledgerError(\n \"recordUnknownResolution\",\n `Settled Submission ${command.submissionId} is missing its outcome`,\n ),\n ),\n current,\n ];\n }\n\n // Factual closure may outlive settlement; it never restores execution authority.\n if (\n command.resolution._tag !== \"CompletedWithResult\" &&\n command.resolution._tag !== \"NeverHappened\"\n )\n return [\n failure(\n SettlementConflict.make({\n submissionId: command.submissionId,\n existingOutcome: stored.row.settledOutcome,\n }),\n ),\n current,\n ];\n }\n const key = JSON.stringify([command.toolCallId, kind]);\n const existing = stored.unknownResolutions.get(key);\n\n if (\n (existing !== undefined &&\n !equivalentUnknownResolution(existing.intent.resolution, command.resolution)) ||\n (existing === undefined &&\n kind === \"execution\" &&\n stored.unknownResolutions.has(JSON.stringify([command.toolCallId, \"factual\"])))\n ) {\n return [\n failure(\n UnknownResolutionConflict.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n }),\n ),\n current,\n ];\n }\n\n const intent =\n existing?.intent ??\n UnknownResolutionIntent.make({\n submissionId: command.submissionId,\n toolCallId: command.toolCallId,\n author: command.author,\n reason: command.reason,\n resolution: command.resolution,\n resolvedAt: utc(nowMillis),\n });\n\n if (existing === undefined && !resolutionFitsTransfer(stored.row.threadId, intent))\n return [failure(transferCapacityError(\"recordUnknownResolution\")), current];\n\n const unknownResolutions =\n existing !== undefined\n ? stored.unknownResolutions\n : new Map(stored.unknownResolutions).set(key, {\n intent,\n });\n\n // The lane reopens only when EVERY marked open call has a durable resolution\n // intent: unknown → input-applied (DUR-017). Replays re-run the coverage check so\n // a recovering caller can wake the lane idempotently.\n const wakes =\n stored.row.state === \"unknown\" &&\n stored.unknownMark !== undefined &&\n stored.unknownMark.toolCallIds.every(\n (toolCallId) =>\n unknownResolutions.has(JSON.stringify([toolCallId, \"execution\"])) ||\n unknownResolutions.has(JSON.stringify([toolCallId, \"factual\"])),\n );\n\n return [\n success(intent),\n withSubmission(current, {\n ...stored,\n row: wakes ? { ...stored.row, state: \"input-applied\" } : stored.row,\n unknownMark: wakes ? undefined : stored.unknownMark,\n unknownResolutions,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const recordChildSettled: SubmissionLedger[\"Service\"][\"recordChildSettled\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(\n ChildSettledNotification,\n \"recordChildSettled\",\n unvalidated,\n );\n\n const before = yield* Ref.get(state);\n const waiting = before.submissions.get(request.parentSubmissionId)?.suspension?.reason;\n\n const ids = new Set([\n request.childSubmissionId,\n ...(waiting?._tag === \"WaitingForChild\"\n ? waiting.children.map((child) => child.childSubmissionId)\n : []),\n ]);\n\n const announcedChildren = new Set<SubmissionId>();\n\n for (const id of ids) {\n const child = before.submissions.get(id);\n\n if (child !== undefined && (yield* canonicalSettlement(child.row)) !== undefined)\n announcedChildren.add(id);\n }\n\n const decision = yield* Ref.modify(\n state,\n (current): readonly [Decision<ChildSettledOutcome, LedgerError>, LedgerState] => {\n const parent = current.submissions.get(request.parentSubmissionId);\n\n if (parent === undefined) {\n return [\n failure(\n ledgerError(\n \"recordChildSettled\",\n `Unknown Submission ${request.parentSubmissionId}`,\n ),\n ),\n current,\n ];\n }\n // Canonical publication is visible before child ledger finalization.\n const announced = announcedChildren.has(request.childSubmissionId);\n\n if (!announced) {\n return [\n failure(\n ledgerError(\n \"recordChildSettled\",\n `Child Submission ${request.childSubmissionId} has no recorded settlement`,\n ),\n ),\n current,\n ];\n }\n if (\n parent.row.state !== \"suspended\" ||\n parent.suspension === undefined ||\n parent.suspension.reason._tag !== \"WaitingForChild\"\n ) {\n return [success(\"not-waiting\" as const), current];\n }\n const children = parent.suspension.reason.children;\n\n if (!children.some((entry) => entry.childSubmissionId === request.childSubmissionId)) {\n return [success(\"not-waiting\" as const), current];\n }\n\n const allSettled = children.every((entry) =>\n announcedChildren.has(entry.childSubmissionId),\n );\n\n if (!allSettled) return [success(\"still-waiting\" as const), current];\n\n return [\n success(\"woken\" as const),\n withSubmission(current, {\n ...parent,\n row: { ...parent.row, state: \"input-applied\" },\n suspension: undefined,\n }),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const reserveChildBudget: SubmissionLedger[\"Service\"][\"reserveChildBudget\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(\n ChildBudgetReservationRequest,\n \"reserveChildBudget\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ReservedChildBudget, ChildReservationConflict | OwnershipLost | LedgerError>,\n LedgerState,\n ] => {\n const existing = current.childReservations.get(request.reservationId);\n\n if (existing !== undefined) {\n // Identical replays short-circuit before the fence, retaining the first committed allocation:\n // a replay creates nothing, so a recovering caller resumes rather than duplicates.\n const identical =\n existing.parentSubmissionId === request.parentSubmissionId &&\n existing.parentToolCallId === request.parentToolCallId &&\n existing.allocationDigest === request.allocationDigest &&\n equivalentPersistedJson(existing.allocation, request.allocation);\n\n if (!identical) {\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: existing.status,\n message:\n \"A reservation with this identity exists with a different parent Tool Call or allocation.\",\n }),\n ),\n current,\n ];\n }\n\n return [\n success(\n ReservedChildBudget.make({\n reservation: toReservationSnapshot(existing),\n replayed: true,\n }),\n ),\n current,\n ];\n }\n for (const id of current.childrenByParent.get(request.parentSubmissionId) ?? []) {\n const reservation = current.childReservations.get(id);\n\n if (reservation === undefined) continue;\n if (\n reservation.parentSubmissionId === request.parentSubmissionId &&\n reservation.parentToolCallId === request.parentToolCallId\n ) {\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message: `Parent Tool Call ${request.parentToolCallId} already owns reservation ${reservation.reservationId}.`,\n }),\n ),\n current,\n ];\n }\n }\n const parent = current.submissions.get(request.parentSubmissionId);\n\n if (parent === undefined) {\n return [\n failure(\n ledgerError(\n \"reserveChildBudget\",\n `Unknown Submission ${request.parentSubmissionId}`,\n ),\n ),\n current,\n ];\n }\n // Creation is fenced by the parent lane's live ownership (spec §12 step 2): a stale\n // parent Attempt can never create new reservation state.\n if (!journal.owner.hasOwner(parent.row.threadId, parent.row.submissionId)) {\n return [failure(ownershipLost(parent)), current];\n }\n\n const reservation: StoredChildReservation = {\n reservationId: request.reservationId,\n parentSubmissionId: request.parentSubmissionId,\n parentToolCallId: request.parentToolCallId,\n childSubmissionId: undefined,\n status: \"reserved\",\n allocation: request.allocation,\n allocationDigest: request.allocationDigest,\n accounting: undefined,\n reservedAtMillis: nowMillis,\n releaseBeganAtMillis: undefined,\n releasedAtMillis: undefined,\n };\n\n return [\n success(\n ReservedChildBudget.make({\n reservation: toReservationSnapshot(reservation),\n replayed: false,\n }),\n ),\n withChildReservation(current, reservation),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const attachChildToReservation: SubmissionLedger[\"Service\"][\"attachChildToReservation\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(\n AttachChildToReservationRequest,\n \"attachChildToReservation\",\n unvalidated,\n );\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<\n ChildBudgetReservationSnapshot,\n ChildReservationConflict | OwnershipLost | LedgerError\n >,\n LedgerState,\n ] => {\n const reservation = current.childReservations.get(request.reservationId);\n\n if (reservation === undefined) {\n return [\n failure(\n ledgerError(\n \"attachChildToReservation\",\n `Unknown child reservation ${request.reservationId}`,\n ),\n ),\n current,\n ];\n }\n if (reservation.childSubmissionId !== undefined) {\n // Idempotent replay of the recorded attachment (unfenced — it mutates nothing).\n if (reservation.childSubmissionId === request.childSubmissionId) {\n return [success(toReservationSnapshot(reservation)), current];\n }\n\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message: `Reservation ${request.reservationId} already records child ${reservation.childSubmissionId}.`,\n }),\n ),\n current,\n ];\n }\n const parent = current.submissions.get(reservation.parentSubmissionId);\n\n if (parent === undefined) {\n return [\n failure(\n ledgerError(\n \"attachChildToReservation\",\n `Unknown Submission ${reservation.parentSubmissionId}`,\n ),\n ),\n current,\n ];\n }\n if (!journal.owner.hasOwner(parent.row.threadId, parent.row.submissionId)) {\n return [failure(ownershipLost(parent)), current];\n }\n if (reservation.status !== \"reserved\") {\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message: `Cannot attach a child to a ${reservation.status} reservation.`,\n }),\n ),\n current,\n ];\n }\n // Single-store latitude: the admitted child must exist here, so a dangling\n // attachment can never enter the recovery view.\n if (!current.submissions.has(request.childSubmissionId)) {\n return [\n failure(\n ledgerError(\n \"attachChildToReservation\",\n `Unknown child Submission ${request.childSubmissionId}`,\n ),\n ),\n current,\n ];\n }\n\n const attached: StoredChildReservation = {\n ...reservation,\n childSubmissionId: request.childSubmissionId,\n };\n\n return [\n success(toReservationSnapshot(attached)),\n withChildReservation(current, attached),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const beginChildBudgetRelease: SubmissionLedger[\"Service\"][\"beginChildBudgetRelease\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(\n BeginChildBudgetReleaseRequest,\n \"beginChildBudgetRelease\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ChildBudgetReservationSnapshot, ChildReservationConflict | LedgerError>,\n LedgerState,\n ] => {\n const reservation = current.childReservations.get(request.reservationId);\n\n if (reservation === undefined) {\n return [\n failure(\n ledgerError(\n \"beginChildBudgetRelease\",\n `Unknown child reservation ${request.reservationId}`,\n ),\n ),\n current,\n ];\n }\n if (reservation.status !== \"reserved\") {\n // The accounting decision was already frozen exactly once; an identical replay is\n // a no-op and a divergent decision conflicts (spec §12 join step 6).\n if (\n reservation.accounting !== undefined &&\n equivalentPersistedJson(reservation.accounting, request.accounting)\n ) {\n return [success(toReservationSnapshot(reservation)), current];\n }\n\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message:\n \"A different accounting decision is already frozen for this reservation.\",\n }),\n ),\n current,\n ];\n }\n\n const frozen: StoredChildReservation = {\n ...reservation,\n status: \"releasePending\",\n accounting: request.accounting,\n releaseBeganAtMillis: nowMillis,\n };\n\n return [success(toReservationSnapshot(frozen)), withChildReservation(current, frozen)];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n });\n\n const releaseChildBudget: SubmissionLedger[\"Service\"][\"releaseChildBudget\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(\n ReleaseChildBudgetRequest,\n \"releaseChildBudget\",\n unvalidated,\n );\n\n const nowMillis = yield* Clock.currentTimeMillis;\n\n const decision = yield* Ref.modify(\n state,\n (\n current,\n ): readonly [\n Decision<ChildBudgetReservationSnapshot, ChildReservationConflict | LedgerError>,\n LedgerState,\n ] => {\n const reservation = current.childReservations.get(request.reservationId);\n\n if (reservation === undefined) {\n return [\n failure(\n ledgerError(\n \"releaseChildBudget\",\n `Unknown child reservation ${request.reservationId}`,\n ),\n ),\n current,\n ];\n }\n // Applied exactly once: replaying a released reservation returns the stored row\n // unchanged (spec §12: \"never available twice\").\n if (reservation.status === \"released\") {\n return [success(toReservationSnapshot(reservation)), current];\n }\n if (reservation.status !== \"releasePending\") {\n return [\n failure(\n ChildReservationConflict.make({\n reservationId: request.reservationId,\n status: reservation.status,\n message:\n \"Cannot release a reservation whose accounting decision is not frozen.\",\n }),\n ),\n current,\n ];\n }\n\n const released: StoredChildReservation = {\n ...reservation,\n status: \"released\",\n releasedAtMillis: nowMillis,\n };\n\n return [\n success(toReservationSnapshot(released)),\n withChildReservation(current, released),\n ];\n },\n );\n\n if (decision._tag === \"failure\") return yield* decision.error;\n\n return decision.value;\n },\n );\n\n const scanNonterminal: SubmissionLedger[\"Service\"][\"scanNonterminal\"] = Stream.paginate<\n string | undefined,\n SubmissionWorkItem,\n never\n >(undefined, (after) =>\n Effect.sync(() => {\n const current = MutableRef.get(state.ref);\n\n const candidates = boundedWorkSelection<StoredSubmission>(\n 8,\n (stored) =>\n `${stored.row.threadId}\\u0000${String(stored.row.queueSequence).padStart(16, \"0\")}`,\n after,\n );\n\n for (const ids of current.activeByThread.values())\n for (const id of ids) {\n const stored = current.submissions.get(id);\n\n if (stored !== undefined) candidates.add(stored);\n }\n const items = candidates.values.map(({ row }) => SubmissionWorkItem.make(row));\n const last = candidates.values.at(-1)?.row;\n\n return [\n items,\n last === undefined\n ? Option.none<string | undefined>()\n : Option.some(`${last.threadId}\\u0000${String(last.queueSequence).padStart(16, \"0\")}`),\n ] as const;\n }),\n );\n\n const readAbortIntent: SubmissionLedger[\"Service\"][\"readAbortIntent\"] = Effect.fnUntraced(\n function* (unvalidated) {\n const request = yield* validate(AbortIntentRequest, \"readAbortIntent\", unvalidated);\n const stored = (yield* Ref.get(state)).submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return yield* ledgerError(\n \"readAbortIntent\",\n `Unknown Submission ${request.submissionId}`,\n );\n }\n\n return stored.abortIntent;\n },\n );\n\n const loadRecoverySnapshot: SubmissionLedger[\"Service\"][\"loadRecoverySnapshot\"] =\n Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(\n RecoverySnapshotRequest,\n \"loadRecoverySnapshot\",\n unvalidated,\n );\n\n const current = yield* Ref.get(state);\n const stored = current.submissions.get(request.submissionId);\n\n if (stored === undefined) {\n return yield* ledgerError(\n \"loadRecoverySnapshot\",\n `Unknown Submission ${request.submissionId}`,\n );\n }\n\n const joins = Array.from(current.joinsByHost.get(request.submissionId) ?? [], (id) =>\n current.submissions.get(id),\n )\n .filter((candidate): candidate is StoredSubmission => candidate !== undefined)\n .sort((left, right) => left.row.queueSequence - right.row.queueSequence)\n .map((candidate) =>\n JoinSnapshot.make({\n submissionId: candidate.row.submissionId,\n state: candidate.row.state,\n hostSubmissionId: request.submissionId,\n }),\n );\n\n const byToolCallId = <A extends { readonly toolCallId: ToolCallId }>(\n left: A,\n right: A,\n ): number =>\n left.toolCallId < right.toolCallId ? -1 : left.toolCallId > right.toolCallId ? 1 : 0;\n\n // Parent-side subagent view: this Submission's child budget reservations in parent Tool\n // Call order, plus each attached child's current lane state (a disposable derived view;\n // the canonical records stay the recovery truth, DUR-015).\n const childReservations = Array.from(\n current.childrenByParent.get(request.submissionId) ?? [],\n (id) => current.childReservations.get(id),\n )\n .filter((reservation): reservation is StoredChildReservation => reservation !== undefined)\n .sort((left, right) =>\n left.parentToolCallId < right.parentToolCallId\n ? -1\n : left.parentToolCallId > right.parentToolCallId\n ? 1\n : 0,\n );\n\n const childAttachments: Array<ChildAttachmentSnapshot> = [];\n\n for (const reservation of childReservations) {\n if (reservation.childSubmissionId === undefined) continue;\n const child = current.submissions.get(reservation.childSubmissionId);\n\n if (child === undefined) continue;\n childAttachments.push(\n ChildAttachmentSnapshot.make({\n toolCallId: reservation.parentToolCallId,\n childSubmissionId: reservation.childSubmissionId,\n childState: child.row.state,\n ...(child.row.settledOutcome === undefined\n ? {}\n : { childOutcome: child.row.settledOutcome }),\n }),\n );\n }\n\n return RecoverySnapshot.make({\n submission: toSnapshot(stored.row),\n joins,\n approvalDecisions: [...stored.approvalDecisions.values()].sort(byToolCallId),\n unknownResolutions: [...stored.unknownResolutions.values()]\n .map((resolution) => resolution.intent)\n .sort(byToolCallId),\n childReservations: childReservations.map(toReservationSnapshot),\n childAttachments,\n ...(stored.row.parentLinkage === undefined\n ? {}\n : { parentLinkage: stored.row.parentLinkage }),\n ...(stored.joinedHostSubmissionId === undefined\n ? {}\n : { hostSubmissionId: stored.joinedHostSubmissionId }),\n ...(stored.suspension === undefined\n ? {}\n : {\n suspension: SuspensionSnapshot.make({\n reason: stored.suspension.reason,\n suspendedAt: utc(stored.suspension.suspendedAtMillis),\n }),\n }),\n hasOwner: journal.owner.hasOwner(stored.row.threadId, stored.row.submissionId),\n ...(stored.inputApplied === undefined ? {} : { inputApplied: stored.inputApplied }),\n ...(stored.abortIntent === undefined ? {} : { abortIntent: stored.abortIntent }),\n });\n });\n\n const ledger = SubmissionLedger.of({\n capabilities,\n resolveFundingOwner: Effect.fnUntraced(function* (unvalidated) {\n const request = yield* validate(FundingOwnerRequest, \"funding owner\", unvalidated);\n const current = MutableRef.get(state.ref);\n const selected = current.submissions.get(request.submissionId);\n\n if (selected === undefined || selected.row.threadId !== request.threadId)\n return yield* ledgerError(\n \"funding owner\",\n \"Selected admission belongs to another Thread or is missing\",\n );\n if (\n selected.row.state === \"joining\" ||\n (selected.joinedHostSubmissionId !== undefined && selected.inputApplied === undefined)\n )\n return yield* ledgerError(\n \"funding owner\",\n \"Joining funding owner is not yet frozen by exact applied input evidence\",\n );\n\n const owner =\n selected.joinedHostSubmissionId === undefined\n ? selected\n : current.submissions.get(selected.joinedHostSubmissionId);\n\n if (\n owner === undefined ||\n owner.row.threadId !== request.threadId ||\n (owner !== selected && owner.row.queueSequence >= selected.row.queueSequence)\n )\n return yield* ledgerError(\n \"funding owner\",\n \"Exact joined funding owner is missing or inconsistent\",\n );\n\n return FundingOwner.make({\n selected: toSnapshot(selected.row),\n owner: toSnapshot(owner.row),\n });\n }),\n admit: (request) => journal.withMutation(admit(request)),\n markReady: (request) => journal.withMutation(markReady(request)),\n lookup,\n resolveAdmission,\n selectHead: (request) => journal.withMutation(selectHead(request)),\n markInputApplied: (request) => journal.withMutation(markInputApplied(request)),\n finalizeSettlement: (request) => journal.withMutation(finalizeSettlement(request)),\n requestAbort: (request) => journal.withMutation(requestAbort(request)),\n stopWorker: (request) => journal.withMutation(stopWorker(request)),\n inspectWorker,\n claimJoining: (request) => journal.withMutation(claimJoining(request)),\n markJoined: (request) => journal.withMutation(markJoined(request)),\n revertJoining: (request) => journal.withMutation(revertJoining(request)),\n suspend: (request) => journal.withMutation(suspend(request)),\n recordApprovalDecision: (request) => journal.withMutation(recordApprovalDecision(request)),\n markUnknown: (request) => journal.withMutation(markUnknown(request)),\n recordUnknownResolution: (request) => journal.withMutation(recordUnknownResolution(request)),\n recordChildSettled: (request) => journal.withMutation(recordChildSettled(request)),\n reserveChildBudget: (request) => journal.withMutation(reserveChildBudget(request)),\n attachChildToReservation: (request) =>\n journal.withMutation(attachChildToReservation(request)),\n beginChildBudgetRelease: (request) => journal.withMutation(beginChildBudgetRelease(request)),\n releaseChildBudget: (request) => journal.withMutation(releaseChildBudget(request)),\n scanNonterminal,\n loadRecoverySnapshot,\n readAbortIntent,\n });\n\n const toAdmission = (row: SubmissionRow, settledAtMillis?: number) =>\n ThreadAdmission.make({\n ...toSnapshot(row),\n ...(settledAtMillis === undefined ? {} : { settledAt: utc(settledAtMillis) }),\n });\n\n const cleanCommand = <A extends { readonly canonicalRecordId?: RecordEnvelope[\"recordId\"] }>(\n value: A,\n ) => {\n const { canonicalRecordId: _, ...fact } = value;\n\n return fact;\n };\n\n const commands = (stored: StoredSubmission | undefined) => {\n return {\n aborts: stored?.abortIntent === undefined ? [] : [cleanCommand(stored.abortIntent)],\n approvals: Array.from(stored?.approvalDecisions.values() ?? [], cleanCommand),\n resolutions: Array.from(stored?.unknownResolutions.values() ?? [], ({ intent }) =>\n cleanCommand(intent),\n ),\n };\n };\n\n const readCommands = Effect.fnUntraced(function* (stored: StoredSubmission | undefined) {\n if (\n (stored?.approvalDecisions.size ?? 0) > MAX_RUN_EVIDENCE_RECORDS ||\n (stored?.unknownResolutions.size ?? 0) > MAX_RUN_EVIDENCE_RECORDS\n )\n return yield* ThreadStoreError.make({\n operation: \"read commands\",\n message: \"Accepted commands exceed Run record bounds\",\n });\n let bytes = 0;\n\n const add = <A, I>(schema: Schema.Codec<A, I>, value: A) =>\n Schema.encodeEffect(Schema.toCodecJson(schema))(value).pipe(\n Effect.mapError(() =>\n ThreadStoreError.make({\n operation: \"read commands\",\n message: \"Invalid accepted command wire\",\n }),\n ),\n Effect.flatMap((wire) => {\n bytes += utf8ByteLength(canonicalJson(wire));\n\n return bytes > MAX_RUN_EVIDENCE_BYTES\n ? Effect.fail(\n ThreadStoreError.make({\n operation: \"read commands\",\n message: \"Accepted commands exceed Run byte bounds\",\n }),\n )\n : Effect.void;\n }),\n );\n\n if (stored?.abortIntent !== undefined) yield* add(AbortIntent, stored.abortIntent);\n for (const value of stored?.approvalDecisions.values() ?? [])\n yield* add(ApprovalDecisionIntent, value);\n for (const { intent } of stored?.unknownResolutions.values() ?? [])\n yield* add(UnknownResolutionIntent, intent);\n\n return commands(stored);\n });\n\n const lookupAdmission = (threadId: ThreadId, submissionId: SubmissionId) =>\n Effect.sync(() => {\n const stored = MutableRef.get(state.ref).submissions.get(submissionId);\n\n return stored?.row.threadId === threadId\n ? toAdmission(stored.row, stored.finalization?.finalizedAtMillis)\n : undefined;\n });\n\n yield* journal.registerLedgerTransfer({\n admission: lookupAdmission,\n commands: (id) => readCommands(MutableRef.get(state.ref).submissions.get(id)),\n snapshot: (threadId) =>\n Effect.sync(() => {\n const current = MutableRef.get(state.ref);\n const directory = current.byThread.get(threadId);\n\n return {\n idle:\n (current.activeByThread.get(threadId)?.size ?? 0) === 0 &&\n (directory?.reservations ?? 0) === 0,\n admissions: directory?.ordered.length ?? 0,\n aborts: directory?.commands.aborts.length ?? 0,\n approvals: directory?.commands.approvals.length ?? 0,\n resolutions: directory?.commands.resolutions.length ?? 0,\n ...(current.stoppedWorkers.has(threadId)\n ? {\n workerSeal:\n current.stoppedWorkers.get(threadId) === undefined\n ? {}\n : { terminal: current.stoppedWorkers.get(threadId) },\n }\n : {}),\n };\n }),\n facts: (threadId, section, after) =>\n Effect.sync(() => {\n const current = MutableRef.get(state.ref);\n\n const facts = {\n admissions: new Array<ThreadAdmission>(),\n commands: commands(undefined),\n deliveries: [],\n };\n\n let next = after ?? \"\";\n\n if (section === \"admissions\") {\n const stored = threadRows(\n current,\n threadId,\n after === undefined ? -1 : Number(after),\n ).next().value;\n\n if (stored !== undefined) {\n facts.admissions.push(\n toAdmission(stored.row, stored.finalization?.finalizedAtMillis),\n );\n next = String(stored.row.queueSequence);\n }\n } else {\n const entries = current.byThread.get(threadId)?.commands[section] ?? [];\n const at = after === undefined ? 0 : commandPosition(entries, after);\n const choice = entries[at + Number(after !== undefined && entries[at]?.key === after)];\n\n if (choice !== undefined) {\n next = choice.key;\n const stored = current.submissions.get(choice.submissionId);\n\n if (section === \"aborts\" && stored?.abortIntent !== undefined)\n facts.commands.aborts.push(cleanCommand(stored.abortIntent));\n else if (section === \"approvals\" && choice.toolCallId !== undefined) {\n const value = stored?.approvalDecisions.get(choice.toolCallId);\n\n if (value !== undefined) facts.commands.approvals.push(cleanCommand(value));\n } else if (section === \"resolutions\" && choice.resolutionKey !== undefined) {\n const value = stored?.unknownResolutions.get(choice.resolutionKey);\n\n if (value !== undefined)\n facts.commands.resolutions.push(cleanCommand(value.intent));\n }\n }\n }\n\n return { facts, after: next };\n }),\n submissions: (threadId) =>\n Stream.paginate(-1, (after) =>\n Effect.sync(() => {\n const stored = threadRows(MutableRef.get(state.ref), threadId, after).next().value;\n\n return [\n stored === undefined ? [] : [toSnapshot(stored.row)],\n stored === undefined ? Option.none<number>() : Option.some(stored.row.queueSequence),\n ] as const;\n }),\n ),\n startImport: Effect.fnUntraced(function* (threadId) {\n const current = yield* Ref.get(state);\n\n if (\n current.lanes.has(threadId) ||\n current.byThread.has(threadId) ||\n current.stoppedWorkers.has(threadId)\n )\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"target-not-empty\",\n message: \"Destination ledger contains Thread data\",\n });\n\n const staged: LedgerState = {\n submissions: new Map(),\n admissionIndex: new Map(),\n lanes: new Map(),\n childReservations: new Map(),\n freshAdmissionSequence: current.freshAdmissionSequence,\n stoppedWorkers: new Map(),\n latestByThread: new Map(),\n activeByThread: new Map(),\n byThread: new Map(),\n receipts: new Map(),\n joinsByHost: new Map(),\n childrenByParent: new Map(),\n };\n\n const commandBytes = new Map<SubmissionId, number>();\n const settledTimes = new Map<SubmissionId, number>();\n\n const retainCommandBytes = Effect.fnUntraced(function* <A, I>(\n schema: Schema.Codec<A, I>,\n value: A,\n id: SubmissionId,\n ) {\n const wire = yield* Schema.encodeEffect(Schema.toCodecJson(schema))(value).pipe(\n Effect.mapError(() => invalidThreadArchive(\"Invalid accepted command wire\", threadId)),\n );\n\n const bytes = (commandBytes.get(id) ?? 0) + utf8ByteLength(canonicalJson(wire));\n\n if (bytes > MAX_RUN_EVIDENCE_BYTES)\n return yield* invalidThreadArchive(\n \"Accepted commands exceed Run byte bounds\",\n threadId,\n );\n commandBytes.set(id, bytes);\n });\n\n const reader = {\n admission: (id: SubmissionId) =>\n Effect.sync(() => {\n const stored = staged.submissions.get(id);\n\n return stored === undefined\n ? undefined\n : toAdmission(stored.row, settledTimes.get(id));\n }),\n runOwner: (runId: import(\"@yielded/agent/identifiers\").RunId) =>\n Effect.sync(() => {\n if (!runId.startsWith(\"run:\")) return undefined;\n const id = Schema.decodeSync(SubmissionId)(runId.slice(4));\n const stored = staged.submissions.get(id);\n\n return stored === undefined\n ? undefined\n : toAdmission(stored.row, settledTimes.get(id));\n }),\n commands: (id: SubmissionId) => readCommands(staged.submissions.get(id)),\n };\n\n return {\n reader,\n stage: Effect.fnUntraced(function* (page) {\n for (const a of page.archive.admissions) {\n const key = admissionKey(threadId, a.principal, a.idempotencyKey);\n\n if (\n current.submissions.has(a.submissionId) ||\n staged.submissions.has(a.submissionId) ||\n current.receipts.has(a.receiptId) ||\n staged.receipts.has(a.receiptId) ||\n current.admissionIndex.has(key) ||\n staged.admissionIndex.has(key)\n )\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"destination-conflict\",\n message: \"Admission, receipt, or immutable admission key already exists\",\n });\n const previous = threadRows(staged, threadId, a.queueSequence - 1).next().value;\n\n if (previous?.row.queueSequence === a.queueSequence)\n return yield* invalidThreadArchive(\"Duplicate admission queue position\", threadId);\n if (a.settledAt !== undefined)\n settledTimes.set(a.submissionId, DateTime.toEpochMillis(a.settledAt));\n withSubmission(\n staged,\n fromRebuilt(\n RebuiltSubmission.make({\n admission: a,\n state: \"admitted\",\n unknownToolCallIds: [],\n approvals: [],\n resolutions: [],\n }),\n ),\n );\n }\n for (const fact of page.archive.commands.aborts) {\n const stored = staged.submissions.get(fact.submissionId);\n\n if (stored === undefined || stored.abortIntent !== undefined)\n return yield* invalidThreadArchive(\n \"Missing admission or duplicate abort\",\n threadId,\n );\n const intent = AbortIntent.make(fact);\n\n yield* retainCommandBytes(AbortIntent, intent, fact.submissionId);\n withSubmission(staged, { ...stored, abortIntent: intent });\n }\n for (const fact of page.archive.commands.approvals) {\n const stored = staged.submissions.get(fact.submissionId);\n\n if (stored === undefined || stored.approvalDecisions.has(fact.toolCallId))\n return yield* invalidThreadArchive(\n \"Missing admission or duplicate approval\",\n threadId,\n );\n if (stored.approvalDecisions.size >= MAX_RUN_EVIDENCE_RECORDS)\n return yield* invalidThreadArchive(\n \"Accepted approvals exceed Run record bounds\",\n threadId,\n );\n const intent = ApprovalDecisionIntent.make(fact);\n\n yield* retainCommandBytes(ApprovalDecisionIntent, intent, fact.submissionId);\n\n const approvals = new Map(stored.approvalDecisions).set(fact.toolCallId, intent);\n\n withSubmission(staged, { ...stored, approvalDecisions: approvals });\n }\n for (const fact of page.archive.commands.resolutions) {\n const stored = staged.submissions.get(fact.submissionId);\n const key = JSON.stringify([fact.toolCallId, unknownResolutionKind(fact.resolution)]);\n\n if (stored === undefined || stored.unknownResolutions.has(key))\n return yield* invalidThreadArchive(\n \"Missing admission or duplicate resolution\",\n threadId,\n );\n if (stored.unknownResolutions.size >= MAX_RUN_EVIDENCE_RECORDS)\n return yield* invalidThreadArchive(\n \"Accepted resolutions exceed Run record bounds\",\n threadId,\n );\n const intent = UnknownResolutionIntent.make(fact);\n\n yield* retainCommandBytes(UnknownResolutionIntent, intent, fact.submissionId);\n\n const resolutions = new Map(stored.unknownResolutions).set(key, { intent });\n\n withSubmission(staged, { ...stored, unknownResolutions: resolutions });\n }\n }),\n prepareCommit: Effect.fnUntraced(function* (workerSeal) {\n let lastQueue = 0;\n let terminalEvidence = workerSeal?.terminal === undefined;\n\n for (const stored of threadRows(staged, threadId)) {\n const a = toAdmission(stored.row, settledTimes.get(stored.row.submissionId));\n const rebuilt = yield* rebuildClosedSubmission(a);\n\n if (\n rebuilt.settlement !== undefined &&\n workerTerminalFromRecord(toSnapshot(stored.row), rebuilt.settlement) ===\n workerSeal?.terminal\n )\n terminalEvidence = true;\n withSubmission(staged, fromRebuilt(rebuilt));\n lastQueue = Math.max(lastQueue, a.queueSequence);\n }\n if (!terminalEvidence)\n return yield* invalidThreadArchive(\n \"Worker seal terminal has no exact completed input evidence\",\n threadId,\n );\n if (!Number.isSafeInteger(lastQueue + 1))\n return yield* ThreadImportRejected.make({\n threadId,\n reason: \"unsupported-capacity\",\n message: \"Admission queue sequence is exhausted\",\n });\n\n return () => {\n for (const stored of staged.submissions.values()) withSubmission(current, stored);\n current.lanes.set(threadId, { nextQueueSequence: lastQueue + 1 });\n if (workerSeal !== undefined)\n current.stoppedWorkers.set(threadId, workerSeal.terminal);\n };\n }),\n };\n }),\n });\n\n return Context.make(SubmissionLedger, ledger).pipe(\n Context.add(SettlementPublisher, { publish }),\n );\n },\n);\n\n/** Construction options for the in-memory reference SubmissionLedger. */\nexport interface MemorySubmissionLedgerOptions {\n /**\n * Test-only fault seam for `resolveAdmission` (SUB-031): when the effect yields a reason,\n * the resolution answers `Indeterminate` with it instead of consulting the store — modelling\n * an authoritative child owner that is temporarily unreachable. `Option.none()` restores the\n * store-derived answer. Ledger state is never mutated by the fault.\n */\n readonly resolveAdmissionFault?: Effect.Effect<Option.Option<string>>;\n}\n\n/**\n * In-memory reference SubmissionLedger Layer (durability `non-durable`). All state lives in one\n * `Ref` owned by the Layer's Scope. Fresh identities use the supplied `Crypto` service;\n * imported identities remain unchanged. No daemon fibers are spawned and no wall clock is consulted.\n */\nexport const memorySubmissionLedgerLayer = (\n options: MemorySubmissionLedgerOptions = {},\n): Layer.Layer<\n SubmissionLedger | SettlementPublisher,\n never,\n MemoryThreadStoreKernel | Crypto.Crypto\n> => Layer.effectContext(makeSubmissionLedger(options));\n\nexport const MemorySubmissionLedgerLive: Layer.Layer<\n SubmissionLedger | SettlementPublisher,\n never,\n MemoryThreadStoreKernel | Crypto.Crypto\n> = memorySubmissionLedgerLayer();\n"],"mappings":"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"}
|