@yielded/agent-storage-cloudflare 0.1.0-beta.174 → 0.1.0-beta.176
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/DoMemoryStore.mjs +1 -1
- package/dist/DoMessageDeliveryStore.mjs +1 -1
- package/dist/DoStorageFailpoint.d.mts +3 -1
- package/dist/DoStorageFailpoint.mjs +7 -2
- package/dist/DoStorageFailpoint.mjs.map +1 -1
- package/dist/{DoStorageVersion-NKnQU3eR.d.mts → DoStorageVersion-Mc7CXMdN.d.mts} +2 -2
- package/dist/DoStorageVersion.d.mts +1 -1
- package/dist/DoStorageVersion.mjs +2 -2
- package/dist/DoSubmissionLedger.d.mts +1 -1
- package/dist/DoSubmissionLedger.mjs +194 -98
- package/dist/DoSubmissionLedger.mjs.map +1 -1
- package/dist/{DoThreadStore-Bd4fTns3.d.mts → DoThreadStore-BzYJjm4O.d.mts} +18 -8
- package/dist/{DoThreadStore-DyzOZDXK.mjs → DoThreadStore-DG0h5J6u.mjs} +25 -19
- package/dist/DoThreadStore-DG0h5J6u.mjs.map +1 -0
- package/dist/DoThreadStore.d.mts +2 -2
- package/dist/DoThreadStore.mjs +3 -2
- package/dist/PortProtocol.d.mts +7201 -7201
- package/dist/PortRouting.mjs +21 -11
- package/dist/PortRouting.mjs.map +1 -1
- package/dist/{do-journal-ZMAzzENZ.mjs → do-journal-ySC3eXNv.mjs} +144 -45
- package/dist/do-journal-ySC3eXNv.mjs.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{migrations-C3N9GN6A.mjs → migrations-CAO_akhD.mjs} +45 -22
- package/dist/migrations-CAO_akhD.mjs.map +1 -0
- package/dist/{owned-state-DcFh0YNo.mjs → owned-state-BgGOA2Ak.mjs} +4 -3
- package/dist/owned-state-BgGOA2Ak.mjs.map +1 -0
- package/package.json +1 -1
- package/src/DoStorageFailpoint.ts +4 -0
- package/src/DoSubmissionLedger.ts +430 -228
- package/src/DoThreadStore.ts +25 -44
- package/src/PortRouting.ts +57 -31
- package/src/internal/do-journal.ts +318 -70
- package/src/internal/migrations.ts +52 -10
- package/src/internal/owned-state.ts +12 -5
- package/src/internal/prompt-checkpoint.ts +6 -3
- package/src/internal/storage-span.ts +14 -10
- package/dist/DoThreadStore-DyzOZDXK.mjs.map +0 -1
- package/dist/do-journal-ZMAzzENZ.mjs.map +0 -1
- package/dist/migrations-C3N9GN6A.mjs.map +0 -1
- package/dist/owned-state-DcFh0YNo.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DoSubmissionLedger.mjs","names":[],"sources":["../src/DoSubmissionLedger.ts"],"sourcesContent":["import { BrowserCrypto } from \"@effect/platform-browser\";\nimport { SqliteClient } from \"@effect/sql-sqlite-do\";\nimport {\n decodeAbortFact,\n decodeAdmissionFact,\n decodeApprovalFact,\n decodeResolutionFact,\n} from \"@yielded/agent-storage-sql/sql-admission-facts\";\nimport {\n definitionJson,\n makeCanonicalStorage,\n recordBatchId,\n runKey,\n} from \"@yielded/agent-storage-sql/sql-canonical-storage\";\nimport {\n SqlStorageProgress,\n type SqlStorageProgressKind,\n} from \"@yielded/agent-storage-sql/sql-storage-progress\";\nimport { canonicalRecordJson } from \"@yielded/agent-storage-sql/sql-thread-archive-range\";\nimport type { LifecyclePublicationFact } from \"@yielded/agent/lifecycle-publication\";\nimport { InputMessage } from \"@yielded/agent/messaging\";\nimport {\n ApprovalDecision,\n CanonicalSequence,\n DefinitionDigests,\n Digest,\n PersistedJson,\n WorkerAdmission,\n RecordEnvelope,\n RecordId,\n SettlementOutcome,\n} from \"@yielded/agent/records\";\nimport { runIdForSubmission } from \"@yielded/agent/run-journal\";\nimport { StorageOwner } from \"@yielded/agent/run-storage\";\nimport {\n SettlementPublicationResult,\n SettlementPublisher,\n validatePublication,\n validateCanonicalSettlement,\n validateJoinedSettlement,\n} from \"@yielded/agent/settlement-publisher\";\nimport {\n AbortCommand,\n WorkerStopCommand,\n WorkerLedgerState,\n workerTerminalFromRecord,\n AbortIntent,\n AbortIntentRequest,\n AdmissionAdmitted,\n AdmissionConflict,\n AdmissionFence,\n AdmissionGroup,\n AdmissionPolicyError,\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 ChildReservationStatus,\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 ParentLinkage,\n QueueSequence,\n RecoverySnapshot,\n RecoverySnapshotRequest,\n ReleaseChildBudgetRequest,\n ReservedChildBudget,\n RevertJoiningRequest,\n Settlement,\n SettlementConflict,\n SettlementFinalization,\n SubmissionLedger,\n SubmissionLookup,\n SubmissionLookupByKey,\n SubmissionSnapshot,\n FundingOwnerRequest,\n FundingOwner,\n SubmissionWorkItem,\n SubmissionState,\n settlementFailureFromRecord,\n SuspendRequest,\n SuspensionReason,\n SuspensionSnapshot,\n UnknownResolution,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n UnknownResolutionIntent,\n UnknownResolutionKind,\n unknownResolutionKind,\n unknownResolutionMatchesResult,\n submissionAbortRecordId,\n submissionSettlementRecordId,\n submissionSettlementBatchId,\n type ChildSettledOutcome,\n type SuspensionOutcome,\n} from \"@yielded/agent/submission-ledger\";\nimport {\n makeTransferFactCheck,\n AppendConflict,\n ThreadNotMaterialized,\n ThreadStoreDiagnostic,\n ThreadStoreError,\n} from \"@yielded/agent/thread-store\";\nimport { AssignmentTerminal } from \"@yielded/agent/worker\";\nimport {\n Cause,\n Clock,\n Context,\n Crypto,\n DateTime,\n Effect,\n Layer,\n Option,\n Schema,\n Stream,\n} from \"effect\";\nimport * as SqlClientService from \"effect/sql/SqlClient\";\nimport type { SqlError } from \"effect/sql/SqlError\";\n\nimport { DoStorageConfig } from \"./DoStorageConfig.ts\";\nimport {\n DoLedgerError,\n DoStorageCorruptionError,\n DoStorageError,\n type DoStorageFailpointLocation,\n} from \"./DoStorageError.ts\";\nimport { DoStorageFailpoint } from \"./DoStorageFailpoint.ts\";\nimport {\n storageConfigLayer,\n storageFailpointLayer,\n type DoStorageInitializationError,\n type DoStorageOptions,\n} from \"./DoThreadStore.ts\";\nimport { prepareCanonicalAppend } from \"./internal/canonical-append.ts\";\nimport { decodeRows, initializeDoJournal } from \"./internal/do-journal.ts\";\nimport { ownedRows } from \"./internal/owned-state.ts\";\n\ntype SubmissionId = SubmissionSnapshot[\"submissionId\"];\n\n/**\n * Static decode-side ceiling; writes are bounded in bytes by the configured\n * `maxStoredValueBytes` (see do-journal.ts).\n */\nconst BoundedStoredText = Schema.String.check(Schema.isMaxLength(2_000_000));\nconst BoundedIdentifier = Schema.NonEmptyString.check(Schema.isMaxLength(1024));\nconst BoundedTimestamp = Schema.NonEmptyString.check(Schema.isMaxLength(128));\n\nconst SCAN_PAGE_SIZE = 256;\nconst admissionFitsTransfer = makeTransferFactCheck(AdmissionRequest);\nconst RESUME_IMMEDIATELY: SuspensionOutcome = \"resume-immediately\";\nconst SUSPENDED: SuspensionOutcome = \"suspended\";\nconst NOT_WAITING: ChildSettledOutcome = \"not-waiting\";\nconst STILL_WAITING: ChildSettledOutcome = \"still-waiting\";\nconst WOKEN: ChildSettledOutcome = \"woken\";\nconst MAX_IDENTIFIER_LENGTH = 1_024;\n\nclass SubmissionRow extends Schema.Class<SubmissionRow>(\"SubmissionRow\")({\n submission_id: BoundedIdentifier,\n thread_id: BoundedIdentifier,\n queue_sequence: QueueSequence,\n principal: BoundedIdentifier,\n idempotency_key: BoundedIdentifier,\n agent_id: BoundedIdentifier,\n agent_digests_json: BoundedStoredText,\n deployment_id: BoundedIdentifier,\n input_json: BoundedStoredText,\n input_digest: Digest,\n receipt_id: BoundedIdentifier,\n state: SubmissionState,\n settled_outcome: Schema.NullOr(SettlementOutcome),\n settled_record_id: Schema.NullOr(BoundedIdentifier.pipe(Schema.decodeTo(RecordId))),\n finalized_at: Schema.NullOr(BoundedTimestamp),\n created_at: BoundedTimestamp,\n ready_at: Schema.NullOr(BoundedTimestamp),\n input_applied_record_id: Schema.NullOr(BoundedIdentifier),\n input_applied_sequence: Schema.NullOr(CanonicalSequence),\n joined_host_submission_id: Schema.NullOr(BoundedIdentifier),\n suspended_reason_json: Schema.NullOr(BoundedStoredText),\n suspended_at: Schema.NullOr(BoundedTimestamp),\n unknown_reason: Schema.NullOr(BoundedStoredText),\n unknown_tool_call_ids_json: Schema.NullOr(BoundedStoredText),\n parent_submission_id: Schema.NullOr(BoundedIdentifier),\n parent_tool_call_id: Schema.NullOr(BoundedIdentifier),\n admission_group: Schema.NullOr(AdmissionGroup),\n admission_fence_json: Schema.NullOr(BoundedStoredText),\n worker_admission_json: Schema.NullOr(BoundedStoredText),\n message_admission_json: Schema.NullOr(BoundedStoredText),\n}) {}\n\n// Discovery retains identity and state, never every queued input payload.\nconst SubmissionWorkRow = Schema.Struct({\n submission_id: SubmissionRow.fields.submission_id,\n thread_id: SubmissionRow.fields.thread_id,\n queue_sequence: SubmissionRow.fields.queue_sequence,\n principal: SubmissionRow.fields.principal,\n idempotency_key: SubmissionRow.fields.idempotency_key,\n deployment_id: SubmissionRow.fields.deployment_id,\n receipt_id: SubmissionRow.fields.receipt_id,\n state: SubmissionRow.fields.state,\n});\n\nclass ChildReservationRow extends Schema.Class<ChildReservationRow>(\"ChildReservationRow\")({\n reservation_id: BoundedIdentifier,\n parent_submission_id: BoundedIdentifier,\n parent_tool_call_id: BoundedIdentifier,\n child_submission_id: Schema.NullOr(BoundedIdentifier),\n status: ChildReservationStatus,\n allocation_json: BoundedStoredText,\n allocation_digest: Digest,\n accounting_json: Schema.NullOr(BoundedStoredText),\n reserved_at: BoundedTimestamp,\n release_began_at: Schema.NullOr(BoundedTimestamp),\n released_at: Schema.NullOr(BoundedTimestamp),\n}) {}\n\nclass ChildSettlementMarkerRow extends Schema.Class<ChildSettlementMarkerRow>(\n \"ChildSettlementMarkerRow\",\n)({\n parent_submission_id: BoundedIdentifier,\n child_submission_id: BoundedIdentifier,\n child_outcome: Schema.NullOr(SettlementOutcome),\n recorded_at: BoundedTimestamp,\n}) {}\n\nclass ApprovalDecisionRow extends Schema.Class<ApprovalDecisionRow>(\"ApprovalDecisionRow\")({\n submission_id: BoundedIdentifier,\n tool_call_id: BoundedIdentifier,\n decision: ApprovalDecision,\n resolver: BoundedIdentifier,\n reason: BoundedStoredText,\n decided_at: BoundedTimestamp,\n}) {}\n\nclass UnknownResolutionRow extends Schema.Class<UnknownResolutionRow>(\"UnknownResolutionRow\")({\n submission_id: BoundedIdentifier,\n tool_call_id: BoundedIdentifier,\n resolution_kind: UnknownResolutionKind,\n author: BoundedIdentifier,\n reason: BoundedStoredText,\n resolution_json: BoundedStoredText,\n resolved_at: BoundedTimestamp,\n}) {}\n\nclass AbortIntentRow extends Schema.Class<AbortIntentRow>(\"AbortIntentRow\")({\n submission_id: BoundedIdentifier,\n author: BoundedIdentifier,\n reason: BoundedStoredText,\n requested_at: BoundedTimestamp,\n canonical_record_id: Schema.NullOr(BoundedIdentifier),\n}) {}\n\nclass WorkerStopRow extends Schema.Class<WorkerStopRow>(\"WorkerStopRow\")({\n thread_id: BoundedIdentifier,\n terminal: Schema.NullOr(AssignmentTerminal),\n}) {}\n\nclass MaxQueueSequenceRow extends Schema.Class<MaxQueueSequenceRow>(\"MaxQueueSequenceRow\")({\n max_queue_sequence: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n}) {}\n\nconst SUBMISSION_COLUMNS = `\n submission_id,\n thread_id,\n queue_sequence,\n principal,\n idempotency_key,\n agent_id,\n deployment_id,\n input_json,\n input_digest,\n receipt_id,\n state,\n settled_outcome,\n settled_record_id,\n finalized_at,\n created_at,\n ready_at,\n input_applied_record_id,\n input_applied_sequence,\n joined_host_submission_id,\n suspended_reason_json,\n suspended_at,\n unknown_reason,\n unknown_tool_call_ids_json,\n parent_submission_id,\n parent_tool_call_id,\n admission_group,\n admission_fence_json,\n worker_admission_json,\n message_admission_json\n`;\n\nconst CHILD_RESERVATION_COLUMNS = `\n reservation_id,\n parent_submission_id,\n parent_tool_call_id,\n child_submission_id,\n status,\n allocation_json,\n allocation_digest,\n accounting_json,\n reserved_at,\n release_began_at,\n released_at\n`;\n\n/** The branded ToolCallId schema, reached through the thread port so no core import is needed. */\nconst ToolCallIdSchema = ApprovalDecisionCommand.fields.toolCallId;\nconst ToolCallIdList = Schema.Array(ToolCallIdSchema);\n\nconst encodePersistedJsonText = Schema.encodeEffect(Schema.fromJsonString(PersistedJson));\nconst encodeDefinitionDigestsText = Schema.encodeEffect(Schema.fromJsonString(DefinitionDigests));\nconst decodeRecordEnvelopeText = Schema.decodeEffect(Schema.fromJsonString(RecordEnvelope));\nconst encodeSuspensionReasonText = Schema.encodeEffect(Schema.fromJsonString(SuspensionReason));\nconst encodeUnknownResolutionText = Schema.encodeEffect(Schema.fromJsonString(UnknownResolution));\nconst encodeToolCallIdsText = Schema.encodeEffect(Schema.fromJsonString(ToolCallIdList));\nconst decodeToolCallIdsText = Schema.decodeEffect(Schema.fromJsonString(ToolCallIdList));\nconst parseStoredJsonText = Schema.decodeEffect(Schema.fromJsonString(Schema.Json));\nconst decodeAdmissionResult = Schema.decodeUnknownEffect(AdmissionResult);\nconst decodeClaim = Schema.decodeUnknownEffect(Claim);\nconst decodeSettlement = Schema.decodeUnknownEffect(Settlement);\nconst decodeAbortIntent = Schema.decodeUnknownEffect(AbortIntent);\nconst decodeInputAppliedMarker = Schema.decodeUnknownEffect(InputAppliedMarker);\n\nconst decodeSubmissionSnapshotType = (input: typeof SubmissionSnapshot.Type) =>\n Schema.decodeEffect(Schema.toType(Schema.Struct(SubmissionSnapshot.fields)))(input).pipe(\n Effect.map((fields) => SubmissionSnapshot.make(fields)),\n );\n\nconst decodeSubmissionId = Schema.decodeUnknownEffect(SubmissionSnapshot.fields.submissionId);\nconst decodeQueueSequence = Schema.decodeUnknownEffect(QueueSequence);\nconst decodeUtcInstant = Schema.decodeUnknownEffect(Schema.DateTimeUtcFromString);\nconst decodeJoiningClaim = Schema.decodeUnknownEffect(JoiningClaim);\nconst decodeJoinSnapshot = Schema.decodeUnknownEffect(JoinSnapshot);\nconst decodeSuspensionSnapshot = Schema.decodeUnknownEffect(SuspensionSnapshot);\nconst decodeApprovalDecisionIntent = Schema.decodeUnknownEffect(ApprovalDecisionIntent);\nconst decodeUnknownResolutionIntent = Schema.decodeUnknownEffect(UnknownResolutionIntent);\nconst decodeParentLinkage = Schema.decodeUnknownEffect(ParentLinkage);\n\nconst decodeChildReservationSnapshotUnknown = Schema.decodeUnknownEffect(\n ChildBudgetReservationSnapshot,\n);\n\nconst decodeChildAttachmentSnapshot = Schema.decodeUnknownEffect(ChildAttachmentSnapshot);\nconst equivalentPersistedJson = Schema.toEquivalence(PersistedJson);\nconst equivalentUnknownResolution = Schema.toEquivalence(UnknownResolution);\nconst isDoStorageError = Schema.is(DoStorageError);\n\n/** Wrap an adapter-internal failure into the port's LedgerError without erasing its tag. */\nconst internalFailure =\n (operation: string) =>\n (error: { readonly message: string }): LedgerError =>\n LedgerError.make({ operation, message: error.message, cause: error });\n\n/**\n * Classify raw SQL failures. Within one Durable Object there is exactly one writer, so the\n * Node adapter's retryable `SqliteWriteContention` classification has no analogue: every raw\n * failure is a `DoLedgerError` preserved as the LedgerError's cause.\n */\nconst sqlFailure =\n (operation: string) =>\n (error: SqlError): LedgerError =>\n internalFailure(operation)(\n DoLedgerError.make({\n cause: error,\n operation,\n message: error.message,\n }),\n );\n\nconst corruptionFailure = (operation: string, table: string, rowKey: string, message: string) =>\n internalFailure(operation)(DoStorageCorruptionError.make({ table, rowKey, message }));\n\nconst submissionsRows = ownedRows(\n SubmissionRow,\n \"effect_agent_submissions\",\n (row) => row.submission_id,\n \"submission_id\",\n [[\"thread_id\", \"principal\", \"idempotency_key\"]],\n (sql) => sql`*, ${definitionJson(sql)} AS agent_digests_json`,\n);\n\nconst abortsRows = ownedRows(\n AbortIntentRow,\n \"effect_agent_abort_intents\",\n (row) => row.submission_id,\n \"submission_id\",\n);\n\nconst approvalsRows = ownedRows(ApprovalDecisionRow, \"effect_agent_approval_decisions\", (row) =>\n JSON.stringify([row.submission_id, row.tool_call_id]),\n);\n\nconst resolutionsRows = ownedRows(UnknownResolutionRow, \"effect_agent_unknown_resolutions\", (row) =>\n JSON.stringify([row.submission_id, row.tool_call_id, row.resolution_kind]),\n);\n\nconst childSettlementsRows = ownedRows(\n ChildSettlementMarkerRow,\n \"effect_agent_child_settlements\",\n (row) => JSON.stringify([row.parent_submission_id, row.child_submission_id]),\n);\n\nconst childReservationsRows = ownedRows(\n ChildReservationRow,\n \"effect_agent_child_reservations\",\n (row) => row.reservation_id,\n \"reservation_id\",\n);\n\nconst workerStopsRows = ownedRows(\n WorkerStopRow,\n \"effect_agent_worker_stops\",\n (row) => row.thread_id,\n \"thread_id\",\n);\n\nconst submissionWorkRows = ownedRows(\n SubmissionWorkRow,\n \"effect_agent_submissions\",\n (row) => row.submission_id,\n);\n\nconst makeServices = Effect.fnUntraced(function* () {\n const progress = yield* SqlStorageProgress;\n\n const recordProgress = (kind: SqlStorageProgressKind, operation: string) =>\n progress\n .committed(kind)\n .pipe(\n Effect.catchCause((cause) =>\n Effect.failCause(Cause.map(cause, internalFailure(operation))),\n ),\n );\n\n const config = yield* DoStorageConfig;\n const failpoint = yield* DoStorageFailpoint;\n const sql = yield* SqlClientService.SqlClient;\n const crypto = yield* Crypto.Crypto;\n const physical = yield* makeCanonicalStorage();\n const submissionColumns = sql`${sql.literal(SUBMISSION_COLUMNS)}, ${definitionJson(sql)} AS agent_digests_json`;\n const admissionFence = yield* SubmissionAdmissionFence;\n const journal = yield* initializeDoJournal(sql, failpoint.hit, config.maxStoredValueBytes);\n const lifecycle = journal.lifecycle;\n const state = journal.state;\n const owner = state.owner;\n const submissionViews = submissionsRows(state, sql);\n const workRows = submissionWorkRows(state, sql);\n\n const rows = {\n submissions: {\n by: submissionViews.by,\n byFields: submissionViews.byFields,\n seed: submissionViews.seed,\n // The same RETURNING rows update the full-row views and the small discovery index.\n write: <E, R>(effect: Effect.Effect<ReadonlyArray<unknown>, E, R>) =>\n submissionViews\n .write(effect)\n .pipe(Effect.tap((changed) => workRows.write(Effect.succeed(changed)))),\n },\n aborts: abortsRows(state, sql),\n approvals: approvalsRows(state, sql),\n resolutions: resolutionsRows(state, sql),\n childSettlements: childSettlementsRows(state, sql),\n childReservations: childReservationsRows(state, sql),\n threads: journal.threads,\n workerStops: workerStopsRows(state, sql),\n };\n\n const cached = <A>(\n effect: Effect.Effect<A, SqlError | DoStorageCorruptionError>,\n operation: string,\n ) => effect.pipe(Effect.mapError(internalFailure(operation)));\n\n const byKey = Effect.fnUntraced(function* (\n request: Pick<SubmissionLookupByKey, \"threadId\" | \"principal\" | \"idempotencyKey\">,\n operation: string,\n ) {\n return yield* cached(\n rows.submissions.byFields([\n [\"thread_id\", request.threadId],\n [\"principal\", request.principal],\n [\"idempotency_key\", request.idempotencyKey],\n ]),\n operation,\n );\n }, state.read);\n\n const retainLifecycle = (submission: SubmissionRow, fact: LifecyclePublicationFact) =>\n lifecycle === undefined\n ? Effect.void\n : Effect.gen(function* () {\n const ownerThreadId = yield* Schema.decodeEffect(SubmissionSnapshot.fields.threadId)(\n submission.thread_id,\n ).pipe(Effect.mapError(internalFailure(\"lifecycle owner\")));\n\n yield* lifecycle\n .retain({ ownerThreadId, createdAt: yield* DateTime.now, fact })\n .pipe(Effect.mapError(internalFailure(\"retain lifecycle publication\")));\n });\n\n const retainWorkerSeal = (\n threadId: string,\n terminal: Extract<LifecyclePublicationFact, { readonly _tag: \"WorkerInboxSealed\" }>[\"terminal\"],\n ) =>\n lifecycle === undefined\n ? Effect.void\n : Effect.gen(function* () {\n const operation = \"retain worker inbox seal\";\n\n const ownerThreadId = yield* Schema.decodeEffect(SubmissionSnapshot.fields.threadId)(\n threadId,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const active =\n yield* sql`SELECT submission_id FROM effect_agent_submissions WHERE thread_id = ${threadId} AND state <> 'settled' ORDER BY queue_sequence`.pipe(\n Effect.mapError(sqlFailure(operation)),\n );\n\n const activeSubmissionIds = yield* Effect.forEach(active, (row) =>\n decodeSubmissionId(row.submission_id).pipe(Effect.mapError(internalFailure(operation))),\n );\n\n yield* lifecycle\n .retain({\n id: JSON.stringify([threadId, \"inbox-sealed\"]),\n ownerThreadId,\n createdAt: yield* DateTime.now,\n fact: {\n _tag: \"WorkerInboxSealed\",\n threadId: ownerThreadId,\n activeSubmissionIds,\n terminal,\n },\n })\n .pipe(Effect.mapError(internalFailure(operation)));\n });\n\n const hitFailpoint = (\n location: DoStorageFailpointLocation,\n operation: string,\n ): Effect.Effect<void, LedgerError> =>\n failpoint.hit(location).pipe(Effect.mapError((error) => internalFailure(operation)(error)));\n\n /**\n * Run one ledger mutation under the journal's Durable Object storage-backed transaction so\n * ownership-token and epoch checks are atomic with their writes (DUR-006). Transaction\n * failures surface as LedgerError carrying the typed `DoStorageError` as cause.\n */\n const inWriteTransaction = <\n A,\n E extends\n | AdmissionConflict\n | AdmissionPolicyError\n | ApprovalConflict\n | ChildReservationConflict\n | JoinedToHost\n | OwnershipLost\n | SettlementConflict\n | UnknownResolutionConflict\n | LedgerError,\n >(\n operation: string,\n effect: Effect.Effect<A, E>,\n expected?: (error: { readonly _tag: string }) => boolean,\n ): Effect.Effect<A, E | LedgerError> =>\n journal\n .withWriteTransaction(\n operation,\n expected,\n )(effect)\n .pipe(\n Effect.mapError((error) =>\n isDoStorageError(error) ? internalFailure(operation)(error) : error,\n ),\n );\n\n const mintUuid = (operation: string): Effect.Effect<string, LedgerError> =>\n crypto.randomUUIDv7().pipe(Effect.mapError((error) => internalFailure(operation)(error)));\n\n const currentInstant = Effect.map(Clock.currentTimeMillis, (millis) => ({\n millis,\n iso: new Date(millis).toISOString(),\n }));\n\n const decodeSubmissionRows = (operation: string, rowKey: string, rows: unknown) =>\n decodeRows(Schema.Array(SubmissionRow), \"effect_agent_submissions\", rowKey, rows).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const readSubmission = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<Option.Option<SubmissionRow>, LedgerError> {\n const found = yield* cached(rows.submissions.by(\"submission_id\", submissionId), operation);\n\n return Option.fromUndefinedOr(found[0]);\n });\n\n const requireSubmission = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<SubmissionRow, LedgerError> {\n const submission = yield* readSubmission(operation, submissionId);\n\n if (Option.isNone(submission)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown submission ${submissionId}.`,\n });\n }\n\n return submission.value;\n });\n\n const requireOwner = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n ): Effect.fn.Return<void, OwnershipLost | LedgerError> {\n if (owner.hasOwner(submission.thread_id, submission.submission_id)) return;\n\n const submissionId = yield* decodeSubmissionId(submission.submission_id).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n return yield* OwnershipLost.make({ submissionId });\n });\n\n const submissions = new WeakMap<SubmissionRow, SubmissionSnapshot>();\n\n const decodeSubmissionSnapshot = Effect.fnUntraced(function* (\n operation: string,\n row: SubmissionRow,\n ): Effect.fn.Return<SubmissionSnapshot, LedgerError> {\n const existing = submissions.get(row);\n\n if (existing !== undefined) return existing;\n\n const decodeFailure = (error: Schema.SchemaError) =>\n internalFailure(operation)(\n DoStorageCorruptionError.make({\n table: \"effect_agent_submissions\",\n rowKey: row.submission_id,\n message: \"Stored submission does not satisfy the ledger schema\",\n diagnostic: ThreadStoreDiagnostic.make({\n causeTag: error._tag,\n operation,\n decoder: \"SubmissionSnapshot\",\n issueTag: error.issue._tag,\n }),\n }),\n );\n\n if ((row.parent_submission_id === null) !== (row.parent_tool_call_id === null)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n row.submission_id,\n \"A parent linkage must record both the parent Submission and the parent Tool Call.\",\n );\n }\n\n const admission = yield* decodeAdmissionFact(row).pipe(Effect.mapError(decodeFailure));\n\n const settledAt =\n row.finalized_at === null\n ? undefined\n : yield* decodeUtcInstant(row.finalized_at).pipe(Effect.mapError(decodeFailure));\n\n const readyAt =\n row.ready_at === null\n ? undefined\n : yield* decodeUtcInstant(row.ready_at).pipe(Effect.mapError(decodeFailure));\n\n const snapshot = yield* decodeSubmissionSnapshotType({\n ...admission,\n state: row.state,\n ...(row.settled_outcome === null ? {} : { settledOutcome: row.settled_outcome }),\n ...(settledAt === undefined ? {} : { settledAt }),\n ...(row.settled_record_id === null ? {} : { settledRecordId: row.settled_record_id }),\n ...(readyAt === undefined ? {} : { readyAt }),\n }).pipe(Effect.mapError(decodeFailure));\n\n submissions.set(row, snapshot);\n\n return snapshot;\n });\n\n const readCanonicalSettlement = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n ) {\n const expected = yield* decodeSubmissionSnapshot(operation, submission);\n const recordId = submissionSettlementRecordId(expected.submissionId);\n\n const found =\n yield* sql`SELECT ${recordBatchId(sql)} AS batch_id, record_id, ${canonicalRecordJson(sql)} AS record_json\n FROM effect_agent_canonical_records WHERE thread_id = ${submission.thread_id}\n AND record_id = ${JSON.stringify(recordId)}`.pipe(Effect.mapError(sqlFailure(operation)));\n\n const decoded = yield* decodeRows(\n Schema.Array(\n Schema.Struct({\n batch_id: Schema.fromJsonString(BoundedIdentifier),\n record_id: Schema.fromJsonString(BoundedIdentifier),\n record_json: BoundedStoredText,\n }),\n ),\n \"effect_agent_canonical_records\",\n recordId,\n found,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (decoded.length === 0) return undefined;\n const row = decoded[0];\n\n if (\n decoded.length !== 1 ||\n row.batch_id !== submissionSettlementBatchId(expected.submissionId) ||\n row.record_id !== recordId\n )\n return yield* corruptionFailure(\n operation,\n \"effect_agent_canonical_records\",\n recordId,\n \"Canonical settlement identity is inconsistent.\",\n );\n\n const record = yield* decodeRecordEnvelopeText(row.record_json).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const settlement = yield* validateCanonicalSettlement(record, expected);\n\n return { record, settlement };\n });\n\n const readAbortIntent = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<Option.Option<AbortIntentRow>, LedgerError> {\n const found = yield* cached(rows.aborts.by(\"submission_id\", submissionId), operation);\n\n return Option.fromUndefinedOr(found[0]);\n });\n\n /**\n * Read the durable cross-store child-settlement markers recorded against one parent\n * Submission (the DC realization of the port's \"cross-store adapters record a durable\n * notification marker\" contract).\n */\n const readChildSettlementMarkers = Effect.fnUntraced(function* (\n operation: string,\n parentSubmissionId: string,\n ): Effect.fn.Return<ReadonlyArray<ChildSettlementMarkerRow>, LedgerError> {\n const found = yield* cached(\n rows.childSettlements.by(\"parent_submission_id\", parentSubmissionId),\n operation,\n );\n\n return found.toSorted((a, b) =>\n a.child_submission_id < b.child_submission_id\n ? -1\n : a.child_submission_id > b.child_submission_id\n ? 1\n : 0,\n );\n });\n\n /**\n * Whether one listed child is provably settled from THIS store: either its own row lives\n * here and is settled (single-store evidence, identical to the Node adapter), or a durable\n * cross-store notification marker was recorded for it (the child's row lives in another\n * Durable Object and its owner reported the settlement through `recordChildSettled`).\n */\n const childProvablySettled = Effect.fnUntraced(function* (\n operation: string,\n markerChildren: ReadonlySet<string>,\n childSubmissionId: string,\n ): Effect.fn.Return<boolean, LedgerError> {\n if (markerChildren.has(childSubmissionId)) return true;\n const childRow = yield* readSubmission(operation, childSubmissionId);\n\n return (\n Option.isSome(childRow) &&\n (yield* readCanonicalSettlement(operation, childRow.value)) !== undefined\n );\n });\n\n const decodeChildReservationRows = (operation: string, rowKey: string, rows: unknown) =>\n decodeRows(\n Schema.Array(ChildReservationRow),\n \"effect_agent_child_reservations\",\n rowKey,\n rows,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const readChildReservation = Effect.fnUntraced(function* (\n operation: string,\n reservationId: string,\n ): Effect.fn.Return<Option.Option<ChildReservationRow>, LedgerError> {\n const rows = yield* sql<Record<string, unknown>>`\n SELECT ${sql.literal(CHILD_RESERVATION_COLUMNS)}\n FROM effect_agent_child_reservations\n WHERE reservation_id = ${reservationId}\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const decoded = yield* decodeChildReservationRows(operation, reservationId, rows);\n\n if (decoded.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n reservationId,\n \"A child reservation primary key returned more than one row.\",\n );\n }\n\n return decoded.length === 0 ? Option.none() : Option.some(decoded[0]);\n });\n\n const readChildReservationForCall = Effect.fnUntraced(function* (\n operation: string,\n parentSubmissionId: string,\n parentToolCallId: string,\n ): Effect.fn.Return<Option.Option<ChildReservationRow>, LedgerError> {\n const rows = yield* sql<Record<string, unknown>>`\n SELECT ${sql.literal(CHILD_RESERVATION_COLUMNS)}\n FROM effect_agent_child_reservations\n WHERE parent_submission_id = ${parentSubmissionId}\n AND parent_tool_call_id = ${parentToolCallId}\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const decoded = yield* decodeChildReservationRows(\n operation,\n `${parentSubmissionId}/${parentToolCallId}`,\n rows,\n );\n\n if (decoded.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n `${parentSubmissionId}/${parentToolCallId}`,\n \"A parent Tool Call returned more than one child reservation.\",\n );\n }\n\n return decoded.length === 0 ? Option.none() : Option.some(decoded[0]);\n });\n\n const childReservationSnapshotFromRow = Effect.fnUntraced(function* (\n operation: string,\n row: ChildReservationRow,\n ): Effect.fn.Return<ChildBudgetReservationSnapshot, LedgerError> {\n const rowFailure = (error: { readonly message: string }) =>\n corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n row.reservation_id,\n error.message,\n );\n\n const allocation = yield* parseStoredJsonText(row.allocation_json).pipe(\n Effect.mapError(rowFailure),\n );\n\n const accounting =\n row.accounting_json === null\n ? undefined\n : yield* parseStoredJsonText(row.accounting_json).pipe(Effect.mapError(rowFailure));\n\n return yield* decodeChildReservationSnapshotUnknown({\n reservationId: row.reservation_id,\n parentSubmissionId: row.parent_submission_id,\n parentToolCallId: row.parent_tool_call_id,\n status: row.status,\n allocation,\n allocationDigest: row.allocation_digest,\n reservedAt: row.reserved_at,\n ...(row.child_submission_id === null ? {} : { childSubmissionId: row.child_submission_id }),\n ...(accounting === undefined ? {} : { accounting }),\n ...(row.release_began_at === null ? {} : { releaseBeganAt: row.release_began_at }),\n ...(row.released_at === null ? {} : { releasedAt: row.released_at }),\n }).pipe(Effect.mapError(rowFailure));\n });\n\n const readApprovalDecisions = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<ReadonlyArray<ApprovalDecisionRow>, LedgerError> {\n const found = yield* cached(rows.approvals.by(\"submission_id\", submissionId), operation);\n\n return found.toSorted((a, b) =>\n a.tool_call_id < b.tool_call_id ? -1 : a.tool_call_id > b.tool_call_id ? 1 : 0,\n );\n });\n\n const approvalIntentFromRow = (\n operation: string,\n row: ApprovalDecisionRow,\n ): Effect.Effect<ApprovalDecisionIntent, LedgerError> =>\n decodeApprovalFact(row).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_approval_decisions\",\n `${row.submission_id}/${row.tool_call_id}`,\n error.message,\n ),\n ),\n );\n\n const readUnknownResolutions = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<ReadonlyArray<UnknownResolutionRow>, LedgerError> {\n const found = yield* cached(rows.resolutions.by(\"submission_id\", submissionId), operation);\n\n return found.toSorted((a, b) =>\n a.tool_call_id < b.tool_call_id ? -1 : a.tool_call_id > b.tool_call_id ? 1 : 0,\n );\n });\n\n const unknownResolutionIntentFromRow = Effect.fnUntraced(function* (\n operation: string,\n row: UnknownResolutionRow,\n ): Effect.fn.Return<UnknownResolutionIntent, LedgerError> {\n return yield* decodeResolutionFact(row).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_unknown_resolutions\",\n `${row.submission_id}/${row.tool_call_id}`,\n error.message,\n ),\n ),\n );\n });\n\n /** The Submission's marked-unknown open Tool Call identities, empty when never marked. */\n const storedUnknownToolCallIds = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n ): Effect.fn.Return<ReadonlyArray<typeof ToolCallIdSchema.Type>, LedgerError> {\n if (submission.unknown_tool_call_ids_json === null) return [];\n\n return yield* decodeToolCallIdsText(submission.unknown_tool_call_ids_json).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n submission.submission_id,\n error.message,\n ),\n ),\n );\n });\n\n /**\n * Canonical history is the abort authority (DUR-015): the intent's canonicalRecordId is\n * derived from the shared canonical-records table using the deterministic abort record\n * identity, never from a cached ledger marker.\n */\n const canonicalAbortRecordId = Effect.fnUntraced(function* (\n operation: string,\n threadId: string,\n submissionId: SubmissionId,\n ): Effect.fn.Return<AbortIntent[\"canonicalRecordId\"], LedgerError> {\n const recordId = submissionAbortRecordId(submissionId);\n\n const present = yield* journal\n .hasRecord(threadId, recordId)\n .pipe(Effect.mapError(internalFailure(operation)));\n\n return present ? recordId : undefined;\n });\n\n const abortIntentFromRow = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n submissionId: SubmissionId,\n row: AbortIntentRow,\n ): Effect.fn.Return<AbortIntent, LedgerError> {\n const canonicalRecordId = yield* canonicalAbortRecordId(\n operation,\n submission.thread_id,\n submissionId,\n );\n\n const fact = yield* decodeAbortFact(row).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_abort_intents\",\n row.submission_id,\n error.message,\n ),\n ),\n );\n\n return AbortIntent.make({\n ...fact,\n ...(canonicalRecordId === undefined ? {} : { canonicalRecordId }),\n });\n });\n\n // Durable Object storage is the single serialized owner: writes confirm through output\n // gates before any response is observable, which is exactly the single-owner crash\n // durability this adapter claims — under its own honest label (P7 WP0).\n const capabilities = Effect.succeed(\n LedgerCapabilities.make({ durability: \"durable-cloudflare\" }),\n );\n\n const admit: SubmissionLedger[\"Service\"][\"admit\"] = Effect.fnUntraced(function* (\n request: AdmissionRequest,\n ) {\n const operation = \"ledger admit\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(AdmissionRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const inputJson = yield* encodePersistedJsonText(validated.inputPayload).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n // The platform's ~2 MB per-value bound, refused typed BEFORE any durable mutation\n // (resource-limits gate; oversized payloads are the designed R2 overflow path).\n yield* journal\n .checkValueBound(operation, inputJson)\n .pipe(Effect.mapError(internalFailure(operation)));\n\n const workerAdmissionJson =\n validated.workerAdmission === undefined\n ? null\n : yield* Schema.encodeEffect(Schema.fromJsonString(WorkerAdmission))(\n validated.workerAdmission,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (\n workerAdmissionJson !== null &&\n new TextEncoder().encode(workerAdmissionJson).byteLength > config.maxStoredValueBytes\n ) {\n return yield* LedgerError.make({\n operation,\n message: \"Worker admission metadata exceeds the stored value bound\",\n });\n }\n\n const messageAdmissionJson =\n validated.messageAdmission === undefined\n ? null\n : yield* Schema.encodeEffect(Schema.fromJsonString(InputMessage))(\n validated.messageAdmission,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (\n messageAdmissionJson !== null &&\n new TextEncoder().encode(messageAdmissionJson).byteLength > config.maxStoredValueBytes\n ) {\n return yield* LedgerError.make({\n operation,\n message: \"Message admission metadata exceeds the stored value bound\",\n });\n }\n\n const agentDigestsJson = yield* encodeDefinitionDigestsText(validated.agentDigests).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n // Routable Submission identity (D-P6-5): `{uuidv7}:{threadId}`. The cross-DO\n // routing layer parses ITS OWN minted format (split at the first \":\") to address\n // submissionId-only operations to the owning Thread Object; the id stays opaque\n // to every other component, exactly like DN's `submission-{uuid}` prefix.\n const mintedSubmissionId = `${yield* mintUuid(operation)}:${validated.threadId}`;\n\n if (mintedSubmissionId.length > MAX_IDENTIFIER_LENGTH) {\n return yield* LedgerError.make({\n operation,\n message:\n `A routable Submission identity of ${mintedSubmissionId.length} characters exceeds ` +\n `the ${MAX_IDENTIFIER_LENGTH}-character ledger row bound; shorten the Thread identity.`,\n });\n }\n const mintedReceiptId = `receipt-${yield* mintUuid(operation)}`;\n\n yield* hitFailpoint(\"ledger:admit:before\", operation);\n\n const result = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const keyRowKey = `${validated.threadId}/${validated.principal}/${validated.idempotencyKey}`;\n\n const existingRows = yield* byKey(validated, operation);\n\n const existing = yield* decodeSubmissionRows(operation, keyRowKey, existingRows);\n\n if (existing.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n keyRowKey,\n \"An admission idempotency key returned more than one row.\",\n );\n }\n if (existing.length === 1) {\n // A replay must repeat the exact canonical input AND the exact parent linkage (or\n // its absence): linkage is immutable child lineage (spec §12 step 5, SUB-016).\n const sameLinkage =\n validated.parentLinkage === undefined\n ? existing[0].parent_submission_id === null &&\n existing[0].parent_tool_call_id === null\n : existing[0].parent_submission_id === validated.parentLinkage.parentSubmissionId &&\n existing[0].parent_tool_call_id === validated.parentLinkage.parentToolCallId;\n\n if (existing[0].input_digest !== validated.inputDigest || !sameLinkage) {\n return yield* AdmissionConflict.make({\n threadId: validated.threadId,\n principal: validated.principal,\n idempotencyKey: validated.idempotencyKey,\n existingInputDigest: existing[0].input_digest,\n attemptedInputDigest: validated.inputDigest,\n });\n }\n\n const retainedWorkerAdmission =\n existing[0].worker_admission_json === null\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(WorkerAdmission))(\n existing[0].worker_admission_json,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const retainedInputMessage =\n existing[0].message_admission_json === null\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(InputMessage))(\n existing[0].message_admission_json,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const retainedFence =\n existing[0].admission_fence_json === null\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(AdmissionFence))(\n existing[0].admission_fence_json,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (\n (existing[0].admission_group ?? undefined) !== validated.admissionGroup ||\n !Schema.toEquivalence(Schema.optional(WorkerAdmission))(\n retainedWorkerAdmission,\n validated.workerAdmission,\n ) ||\n !Schema.toEquivalence(Schema.optional(InputMessage))(\n retainedInputMessage,\n validated.messageAdmission,\n ) ||\n !Schema.toEquivalence(Schema.optional(AdmissionFence))(\n retainedFence,\n validated.admissionFence,\n )\n )\n return yield* AdmissionConflict.make({\n threadId: validated.threadId,\n principal: validated.principal,\n idempotencyKey: validated.idempotencyKey,\n existingInputDigest: existing[0].input_digest,\n attemptedInputDigest: validated.inputDigest,\n });\n\n return yield* decodeAdmissionResult({\n submissionId: existing[0].submission_id,\n receiptId: existing[0].receipt_id,\n queueSequence: existing[0].queue_sequence,\n state: existing[0].state,\n replayed: true,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }\n\n if (!admissionFitsTransfer(validated.threadId, validated))\n return yield* LedgerError.make({\n operation,\n message: \"Admission exceeds the complete transfer page byte bound\",\n });\n\n const stopped = yield* cached(\n rows.workerStops.by(\"thread_id\", validated.threadId),\n operation,\n );\n\n if (stopped.length > 0)\n return yield* AdmissionPolicyError.make({ reason: \"refused\", code: \"worker-stopped\" });\n\n // The first accepted input fixes ordinary/worker lane identity atomically with admission.\n // Canonical origin materialization can lag admission; a log scan cannot fence that race.\n const firstRows = yield* sql<Record<string, unknown>>`\n SELECT worker_admission_json FROM effect_agent_submissions\n WHERE thread_id=${validated.threadId} ORDER BY queue_sequence LIMIT 1\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const first = yield* Schema.decodeUnknownEffect(\n Schema.Array(\n Schema.Struct({\n worker_admission_json: Schema.NullOr(BoundedStoredText),\n }),\n ),\n )(firstRows).pipe(Effect.mapError(internalFailure(operation)));\n\n if (first[0] !== undefined) {\n const previous =\n first[0].worker_admission_json === null\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(WorkerAdmission))(\n first[0].worker_admission_json,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (\n !Schema.toEquivalence(Schema.optional(WorkerAdmission.fields.origin))(\n previous?.origin,\n validated.workerAdmission?.origin,\n )\n )\n return yield* AdmissionPolicyError.make({\n reason: \"refused\",\n code: \"worker-origin-conflict\",\n });\n }\n\n yield* admissionFence.check(validated);\n if (validated.admissionGroup !== undefined) {\n const occupied = yield* sql<Record<string, unknown>>`\n SELECT submission_id FROM effect_agent_submissions\n WHERE thread_id=${validated.threadId} AND admission_group=${validated.admissionGroup} AND state<>'settled' LIMIT 1\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n if (occupied.length > 0)\n return yield* AdmissionPolicyError.make({\n reason: \"occupied\",\n code: \"admission-group\",\n });\n }\n\n const maxRows = yield* sql<Record<string, unknown>>`\n SELECT COALESCE(MAX(queue_sequence), 0) AS max_queue_sequence\n FROM effect_agent_submissions\n WHERE thread_id = ${validated.threadId}\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const decodedMax = yield* decodeRows(\n Schema.Array(MaxQueueSequenceRow),\n \"effect_agent_submissions\",\n validated.threadId,\n maxRows,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const queueSequence = yield* decodeQueueSequence(\n (decodedMax[0]?.max_queue_sequence ?? 0) + 1,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const now = yield* currentInstant;\n\n yield* sql`\n INSERT INTO effect_agent_submissions (\n submission_id,\n thread_id,\n queue_sequence,\n principal,\n idempotency_key,\n agent_id,\n definition_key,\n deployment_id,\n input_json,\n input_digest,\n receipt_id,\n state,\n created_at,\n parent_submission_id,\n parent_tool_call_id,\n admission_group,\n admission_fence_json,\n worker_admission_json,\n message_admission_json\n ) VALUES (\n ${mintedSubmissionId},\n ${validated.threadId},\n ${queueSequence},\n ${validated.principal},\n ${validated.idempotencyKey},\n ${validated.agentId},\n ${yield* physical.definition(agentDigestsJson).pipe(Effect.mapError(internalFailure(operation)))},\n ${validated.deploymentId},\n ${inputJson},\n ${validated.inputDigest},\n ${mintedReceiptId},\n 'admitted',\n ${now.iso},\n ${validated.parentLinkage?.parentSubmissionId ?? null},\n ${validated.parentLinkage?.parentToolCallId ?? null},\n ${validated.admissionGroup ?? null},\n ${validated.admissionFence === undefined ? null : JSON.stringify(validated.admissionFence)},\n ${workerAdmissionJson},\n ${messageAdmissionJson}\n )\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n if (queueSequence === 1) {\n const threads = yield* journal\n .getThread(validated.threadId)\n .pipe(Effect.mapError(internalFailure(operation)));\n\n if (threads.length === 0)\n yield* journal.work\n .initialize(validated.threadId)\n .pipe(Effect.mapError(internalFailure(operation)));\n }\n\n // The INSERT (never replay or hydration) proves these new submission-owned sets\n // empty. Gated writes update them; rollback/invalidation discards that proof.\n rows.aborts.seed(\"submission_id\", mintedSubmissionId, []);\n rows.submissions.seed(\"joined_host_submission_id\", mintedSubmissionId, []);\n rows.approvals.seed(\"submission_id\", mintedSubmissionId, []);\n rows.resolutions.seed(\"submission_id\", mintedSubmissionId, []);\n rows.childReservations.seed(\"parent_submission_id\", mintedSubmissionId, []);\n rows.childSettlements.seed(\"parent_submission_id\", mintedSubmissionId, []);\n\n yield* recordProgress(\"submission\", operation);\n\n return yield* decodeAdmissionResult({\n submissionId: mintedSubmissionId,\n receiptId: mintedReceiptId,\n queueSequence,\n state: \"admitted\",\n replayed: false,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }),\n );\n\n yield* hitFailpoint(\"ledger:admit:after\", operation);\n\n return result;\n });\n\n const markReady: SubmissionLedger[\"Service\"][\"markReady\"] = Effect.fnUntraced(function* (\n request: MarkReadyRequest,\n ) {\n const operation = \"ledger mark ready\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(MarkReadyRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:mark-ready:before\", operation);\n yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state !== \"admitted\") return;\n const now = yield* currentInstant;\n\n yield* sql`\n UPDATE effect_agent_submissions\n SET state = 'ready', ready_at = ${now.iso}\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n yield* recordProgress(\"submission\", operation);\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionReady\",\n submissionId: validated.submissionId,\n });\n }),\n );\n yield* hitFailpoint(\"ledger:mark-ready:after\", operation);\n });\n\n const resolveFundingOwner: NonNullable<SubmissionLedger[\"Service\"][\"resolveFundingOwner\"]> =\n Effect.fnUntraced(function* (input) {\n const operation = \"resolve funding owner\";\n\n const request = yield* Schema.decodeEffect(FundingOwnerRequest)(input).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const selected = yield* requireSubmission(operation, request.submissionId);\n\n if (selected.thread_id !== request.threadId)\n return yield* LedgerError.make({\n operation,\n message: \"Selected funding input belongs to another Thread.\",\n });\n if (selected.state === \"joining\")\n return yield* LedgerError.make({\n operation,\n message: \"Selected funding input is still joining; retry after durable binding.\",\n });\n const hostId = selected.joined_host_submission_id;\n\n if (hostId === null && selected.state === \"joined\")\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n selected.submission_id,\n \"Joined input has no stable host identity.\",\n );\n if (hostId !== null && selected.state !== \"joined\" && selected.state !== \"settled\")\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n selected.submission_id,\n \"Host linkage is inconsistent with selected input state.\",\n );\n const owner = hostId === null ? selected : yield* requireSubmission(operation, hostId);\n\n if (\n owner.thread_id !== request.threadId ||\n (hostId !== null &&\n (owner.submission_id === selected.submission_id ||\n owner.joined_host_submission_id !== null ||\n owner.state === \"joining\" ||\n owner.state === \"joined\" ||\n owner.queue_sequence >= selected.queue_sequence))\n )\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n selected.submission_id,\n \"Funding host is not a stable earlier input in this Thread.\",\n );\n\n return yield* Schema.decodeEffect(Schema.toType(FundingOwner))({\n selected: yield* decodeSubmissionSnapshot(operation, selected),\n owner: yield* decodeSubmissionSnapshot(operation, owner),\n }).pipe(Effect.mapError(internalFailure(operation)));\n }, state.read);\n\n const lookup: SubmissionLedger[\"Service\"][\"lookup\"] = Effect.fnUntraced(function* (\n request: SubmissionLookup,\n ) {\n const operation = \"ledger lookup\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(SubmissionLookup))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n if (validated._tag === \"SubmissionLookupById\") {\n const row = yield* readSubmission(operation, validated.submissionId);\n\n if (Option.isNone(row)) return Option.none();\n\n return Option.some(yield* decodeSubmissionSnapshot(operation, row.value));\n }\n\n const foundRows = yield* byKey(validated, operation);\n\n const decoded = yield* decodeSubmissionRows(\n operation,\n `${validated.threadId}/${validated.principal}/${validated.idempotencyKey}`,\n foundRows,\n );\n\n if (decoded.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n `${validated.threadId}/${validated.principal}/${validated.idempotencyKey}`,\n \"An admission idempotency key returned more than one row.\",\n );\n }\n if (decoded.length === 0) return Option.none();\n\n return Option.some(yield* decodeSubmissionSnapshot(operation, decoded[0]));\n });\n\n // This LOCAL facet is the authoritative owner of every Thread stored in this Durable\n // Object, so the key-scoped read IS the admission truth and the tri-state degenerates to\n // NotAdmitted or Admitted (SUB-031). `AdmissionIndeterminate` becomes real one layer out:\n // the WP2 routed decorator answers it when the OWNING Durable Object is unreachable.\n const resolveAdmission: SubmissionLedger[\"Service\"][\"resolveAdmission\"] = Effect.fnUntraced(\n function* (request: SubmissionLookupByKey) {\n const operation = \"ledger resolve admission\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(SubmissionLookupByKey))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const foundRows = yield* byKey(validated, operation);\n\n const decoded = yield* decodeSubmissionRows(\n operation,\n `${validated.threadId}/${validated.principal}/${validated.idempotencyKey}`,\n foundRows,\n );\n\n if (decoded.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n `${validated.threadId}/${validated.principal}/${validated.idempotencyKey}`,\n \"An admission idempotency key returned more than one row.\",\n );\n }\n if (decoded.length === 0) return AdmissionNotAdmitted.make();\n\n return AdmissionAdmitted.make({\n submission: yield* decodeSubmissionSnapshot(operation, decoded[0]),\n });\n },\n );\n\n const selectHead: SubmissionLedger[\"Service\"][\"selectHead\"] = Effect.fn(\n \"DoSubmissionLedger.selectHead\",\n )(function* (request: ClaimRequest) {\n const operation = \"ledger select head\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ClaimRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const attemptId = `attempt-${yield* mintUuid(operation)}`;\n\n yield* hitFailpoint(\"ledger:claim:before\", operation);\n\n const claimed = yield* owner.withMutation(\n Effect.gen(function* () {\n if (owner.hasOwner(validated.threadId)) return Option.none<Claim>();\n\n const headRows = yield* sql<Record<string, unknown>>`\n SELECT ${submissionColumns}\n FROM effect_agent_submissions\n WHERE thread_id = ${validated.threadId}\n AND state <> 'settled'\n AND (\n state <> 'unknown' OR EXISTS (\n SELECT 1 FROM effect_agent_abort_intents\n WHERE submission_id = effect_agent_submissions.submission_id\n )\n )\n ORDER BY queue_sequence ASC\n LIMIT ${validated.handoff === undefined ? 1 : validated.handoff.deferredSubmissionIds.length + 1}\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const heads = yield* decodeSubmissionRows(operation, validated.threadId, headRows);\n\n if (heads.length === 0) return Option.none<Claim>();\n let head = heads[0];\n\n if (validated.handoff !== undefined) {\n const handoff = validated.handoff;\n\n for (const candidate of heads) {\n if (candidate.submission_id === handoff.submissionId) {\n head = candidate;\n break;\n }\n if (\n !handoff.deferredSubmissionIds.some((id) => id === candidate.submission_id) ||\n candidate.state !== \"input-applied\" ||\n Option.isSome(yield* readAbortIntent(operation, candidate.submission_id))\n )\n return Option.none<Claim>();\n }\n if (\n head.submission_id !== handoff.submissionId ||\n (head.state !== \"ready\" && head.state !== \"input-applied\")\n )\n return Option.none<Claim>();\n }\n\n // Approval/delegation suspension and joined work retain their queue barrier.\n // Unknown work with an abort intent is selected for cleanup without Tool replay.\n if (\n head.state === \"joining\" ||\n head.state === \"joined\" ||\n head.state === \"suspended\" ||\n (head.state === \"unknown\" &&\n Option.isNone(yield* readAbortIntent(operation, head.submission_id)))\n ) {\n return Option.none<Claim>();\n }\n\n const inputPayload = yield* parseStoredJsonText(head.input_json).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n head.submission_id,\n error.message,\n ),\n ),\n );\n\n return Option.some(\n yield* decodeClaim({\n submissionId: head.submission_id,\n attemptId,\n inputPayload,\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n }),\n );\n\n yield* hitFailpoint(\"ledger:claim:after\", operation);\n\n return claimed;\n });\n\n const markInputApplied: SubmissionLedger[\"Service\"][\"markInputApplied\"] = Effect.fnUntraced(\n function* (request: MarkInputAppliedRequest) {\n const operation = \"ledger mark input applied\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(MarkInputAppliedRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:mark-input-applied:before\", operation);\n yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n yield* requireOwner(operation, submission);\n if (submission.input_applied_record_id !== null) {\n if (\n submission.input_applied_record_id === validated.recordId &&\n submission.input_applied_sequence === validated.sequence\n ) {\n return;\n }\n\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A different canonical input marker is already recorded for this Submission.\",\n );\n }\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n input_applied_record_id = ${validated.recordId},\n input_applied_sequence = ${validated.sequence},\n state = CASE\n WHEN state IN ('admitted', 'ready') THEN 'input-applied'\n ELSE state\n END\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n }),\n );\n yield* hitFailpoint(\"ledger:mark-input-applied:after\", operation);\n },\n );\n\n const publish: SettlementPublisher[\"Service\"][\"publish\"] = Effect.fn(\n \"DoSubmissionLedger.publishSettlement\",\n )(function* (input) {\n const operation = \"publish settlement\";\n const { request, record, settlement } = yield* validatePublication(input);\n\n const prepared = yield* prepareCanonicalAppend(request.append).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n );\n\n const mapAppendError = (error: { readonly _tag: string; readonly message: string }) =>\n ThreadStoreError.make({ operation, message: error.message, cause: error });\n\n yield* journal.prepareAppend(prepared.raw).pipe(Effect.mapError(mapAppendError));\n\n return yield* owner.withProgress(\n request.append.threadId,\n owner.withMutation(\n Effect.gen(function* () {\n yield* hitFailpoint(\"append:before\", operation);\n\n const result = yield* journal\n .withWriteTransaction(operation)(\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, request.submissionId);\n\n if (submission.thread_id !== prepared.request.threadId)\n return yield* LedgerError.make({\n operation,\n message: \"Settlement publication belongs to another Thread.\",\n });\n const snapshot = yield* decodeSubmissionSnapshot(operation, submission);\n\n yield* validateCanonicalSettlement(record, snapshot);\n const existing = yield* readCanonicalSettlement(operation, submission);\n const thread = (yield* journal.getThread(prepared.request.threadId))[0];\n\n if (thread === undefined)\n return yield* ThreadNotMaterialized.make({ threadId: prepared.request.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 yield* requireOwner(operation, submission);\n yield* validateCanonicalSettlement(record, {\n submissionId: request.submissionId,\n receiptId: snapshot.receiptId,\n ...(settlement.outcome === \"aborted\" && settlement.runId === undefined\n ? {}\n : { runId: runIdForSubmission(request.submissionId) }),\n });\n break;\n case \"Joined\": {\n if (\n (submission.state !== \"joined\" &&\n !(submission.state === \"settled\" && existing !== undefined)) ||\n submission.joined_host_submission_id !== request.authority.hostSubmissionId\n )\n return yield* LedgerError.make({\n operation,\n message: \"Submission is not joined to the named host.\",\n });\n\n const host = yield* requireSubmission(\n operation,\n request.authority.hostSubmissionId,\n );\n\n if (host.thread_id !== submission.thread_id)\n return yield* LedgerError.make({\n operation,\n message: \"Joined host belongs to another Thread.\",\n });\n const canonicalHost = yield* readCanonicalSettlement(operation, host);\n\n if (canonicalHost === undefined)\n return yield* LedgerError.make({\n operation,\n message: \"Joined host has no canonical settlement.\",\n });\n yield* validateJoinedSettlement(settlement, canonicalHost.settlement);\n break;\n }\n case \"QueuedAbort\":\n if (\n (submission.state !== \"ready\" &&\n !(submission.state === \"settled\" && existing !== undefined)) ||\n settlement.outcome !== \"aborted\" ||\n Option.isNone(yield* readAbortIntent(operation, request.submissionId)) ||\n owner.hasOwner(submission.thread_id, request.submissionId)\n )\n return yield* LedgerError.make({\n operation,\n message: \"Queued abort is no longer authorized.\",\n });\n yield* validateCanonicalSettlement(record, {\n submissionId: request.submissionId,\n receiptId: snapshot.receiptId,\n runId: undefined,\n });\n }\n if (existing !== undefined) {\n yield* journal.checkCommitIntent(prepared.raw);\n\n return SettlementPublicationResult.make({\n record: existing.record,\n tailSequence: thread.tail_sequence,\n replayed: true,\n });\n }\n if (submission.state === \"settled\")\n return yield* LedgerError.make({\n operation,\n message: \"Finalized Submission has no canonical settlement.\",\n });\n const appended = yield* journal.appendPrepared(prepared.raw);\n\n return SettlementPublicationResult.make({\n record,\n tailSequence: appended.lastSequence,\n replayed: appended.replayed,\n });\n }),\n )\n .pipe(\n Effect.mapError((error) => {\n if (error._tag === \"DoAppendConflict\")\n return AppendConflict.make({\n threadId: prepared.request.threadId,\n batchId: prepared.request.batch.batchId,\n reason: error.reason,\n ...(error.actualTailSequence !== undefined\n ? {\n actualTailSequence: error.actualTailSequence,\n }\n : {}),\n });\n\n return isDoStorageError(error) ||\n error._tag === \"DoStorageCorruptionError\" ||\n error._tag === \"DoStorageFailpointError\" ||\n error._tag === \"DoValueBoundExceeded\"\n ? mapAppendError(error)\n : error;\n }),\n );\n\n yield* hitFailpoint(\"append:after\", operation);\n\n return result;\n }),\n ),\n );\n });\n\n const validateFinalization = Effect.fnUntraced(function* (\n validated: SettlementFinalization,\n submission: SubmissionRow,\n ) {\n const operation = \"ledger finalize settlement\";\n const canonical = yield* readCanonicalSettlement(operation, submission);\n\n if (canonical === undefined)\n return yield* LedgerError.make({\n operation,\n message: `No canonical settlement exists for submission ${validated.submissionId}.`,\n });\n if (canonical.settlement.settlementId !== validated.settlementId)\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: canonical.settlement.outcome,\n });\n\n return { ...canonical, settlementFailure: settlementFailureFromRecord(canonical.record) };\n });\n\n const replayFinalization = Effect.fnUntraced(function* (\n validated: SettlementFinalization,\n submission: SubmissionRow,\n {\n record,\n settlement,\n settlementFailure,\n }: Effect.Success<ReturnType<typeof validateFinalization>>,\n ) {\n const operation = \"ledger finalize settlement\";\n\n if (\n submission.finalized_at === null ||\n submission.settled_record_id !== record.recordId ||\n submission.settled_outcome !== settlement.outcome\n )\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"Settled projection disagrees with its canonical settlement.\",\n );\n\n return yield* decodeSettlement({\n submissionId: validated.submissionId,\n settlementId: validated.settlementId,\n receiptId: submission.receipt_id,\n outcome: settlement.outcome,\n ...(settlementFailure === undefined ? {} : { failure: settlementFailure }),\n settledAt: submission.finalized_at,\n }).pipe(Effect.mapError(internalFailure(operation)));\n });\n\n const finalizeSettlement: SubmissionLedger[\"Service\"][\"finalizeSettlement\"] = Effect.fn(\n \"DoSubmissionLedger.finalizeSettlement\",\n )(function* (request: SettlementFinalization) {\n const operation = \"ledger finalize settlement\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(SettlementFinalization))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:finalize-settlement:before\", operation);\n\n // Read the immutable receipt under the same gate as every local write.\n const replay = yield* state.read(\n Effect.gen(function* () {\n const submission = yield* readSubmission(operation, validated.submissionId);\n\n if (Option.isNone(submission) || submission.value.state !== \"settled\") return Option.none();\n\n const finalization = yield* validateFinalization(validated, submission.value);\n\n return Option.some({\n settlement: yield* replayFinalization(validated, submission.value, finalization),\n threadId: submission.value.thread_id,\n });\n }),\n );\n\n if (Option.isSome(replay)) {\n owner.closeSubmission(replay.value.threadId, validated.submissionId);\n yield* hitFailpoint(\"ledger:finalize-settlement:after\", operation);\n\n return replay.value.settlement;\n }\n\n const settlement = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n const state = yield* validateFinalization(validated, submission);\n\n const {\n settlement: canonicalSettlement,\n record: canonicalRecord,\n settlementFailure,\n } = state;\n\n if (submission.state === \"settled\")\n return {\n settlement: yield* replayFinalization(validated, submission, state),\n threadId: submission.thread_id,\n };\n const now = yield* currentInstant;\n\n const terminal =\n submission.worker_admission_json === null\n ? undefined\n : workerTerminalFromRecord(\n yield* decodeSubmissionSnapshot(operation, submission),\n canonicalRecord,\n );\n\n let sealedTerminal: typeof terminal;\n\n if (terminal !== undefined) {\n // Admission and finalization serialize here. An accepted correction that this Run\n // has not applied vetoes its completion, including admission after RunCompleted.\n const pending =\n terminal === \"completed\"\n ? yield* sql`SELECT submission_id FROM effect_agent_submissions\n WHERE thread_id = ${submission.thread_id} AND queue_sequence > ${submission.queue_sequence}\n AND queue_sequence = (SELECT MAX(queue_sequence) FROM effect_agent_submissions WHERE thread_id = ${submission.thread_id})\n AND (joined_host_submission_id IS NULL OR joined_host_submission_id <> ${submission.submission_id}\n OR input_applied_record_id IS NULL) LIMIT 1`.pipe(\n Effect.mapError(sqlFailure(operation)),\n )\n : [];\n\n if (pending.length === 0) {\n const sealed =\n yield* sql`INSERT OR IGNORE INTO effect_agent_worker_stops (thread_id, terminal)\n VALUES (${submission.thread_id}, ${terminal}) RETURNING *`.pipe(\n rows.workerStops.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* sql`INSERT OR IGNORE INTO effect_agent_abort_intents (submission_id, author, reason, requested_at)\n SELECT submission_id, ${submission.principal}, ${`Worker assignment ${terminal}`}, ${now.iso}\n FROM effect_agent_submissions WHERE thread_id = ${submission.thread_id} AND state <> 'settled'\n AND submission_id <> ${submission.submission_id}\n AND (joined_host_submission_id IS NULL OR joined_host_submission_id <> ${submission.submission_id}\n OR input_applied_record_id IS NULL) RETURNING *`.pipe(\n rows.aborts.write,\n Effect.mapError(internalFailure(operation)),\n );\n if (sealed.length > 0) sealedTerminal = terminal;\n }\n }\n\n yield* sql`\n UPDATE effect_agent_submissions\n SET state = 'settled', settled_outcome = ${canonicalSettlement.outcome},\n settled_record_id = ${canonicalRecord.recordId}, finalized_at = ${now.iso}\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* recordProgress(\"submission\", operation);\n\n if (sealedTerminal !== undefined)\n yield* retainWorkerSeal(submission.thread_id, sealedTerminal);\n\n return {\n threadId: submission.thread_id,\n settlement: yield* decodeSettlement({\n submissionId: validated.submissionId,\n settlementId: validated.settlementId,\n receiptId: submission.receipt_id,\n outcome: canonicalSettlement.outcome,\n ...(settlementFailure === undefined ? {} : { failure: settlementFailure }),\n settledAt: now.iso,\n }).pipe(Effect.mapError(internalFailure(operation))),\n };\n }),\n );\n\n owner.closeSubmission(settlement.threadId, validated.submissionId);\n yield* hitFailpoint(\"ledger:finalize-settlement:after\", operation);\n\n return settlement.settlement;\n });\n\n const inspectWorker = Effect.fnUntraced(function* (threadId: SubmissionSnapshot[\"threadId\"]) {\n const operation = \"inspect worker\";\n\n return yield* state\n .transaction(\n Effect.gen(function* () {\n const read = Effect.fnUntraced(function* (active: boolean) {\n const rows = yield* sql`SELECT ${submissionColumns} FROM effect_agent_submissions\n WHERE thread_id = ${threadId} ${active ? sql`AND state <> 'settled'` : sql``}\n ORDER BY queue_sequence ${active ? sql`ASC` : sql`DESC`} LIMIT 1`.pipe(\n Effect.mapError(sqlFailure(operation)),\n );\n\n const decoded = yield* decodeSubmissionRows(operation, threadId, rows);\n\n return decoded[0] === undefined\n ? null\n : yield* decodeSubmissionSnapshot(operation, decoded[0]);\n });\n\n const latest = yield* read(false);\n const active = yield* read(true);\n\n const stops = yield* cached(rows.workerStops.by(\"thread_id\", threadId), operation);\n\n return yield* Schema.decodeEffect(Schema.toType(WorkerLedgerState))({\n latest,\n active,\n stopped: stops.length > 0,\n ...(stops[0] === undefined || stops[0].terminal === null\n ? {}\n : { terminal: stops[0].terminal }),\n }).pipe(Effect.mapError(internalFailure(operation)));\n }),\n )\n .pipe(\n Effect.provideService(SqlClientService.SqlClient, sql),\n Effect.catchTag(\"SqlError\", (cause) => sqlFailure(operation)(cause)),\n );\n });\n\n const stopWorker = Effect.fnUntraced(function* (request: WorkerStopCommand) {\n const operation = \"ledger stop worker\";\n\n const validated = yield* Schema.decodeEffect(WorkerStopCommand)(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n return yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const now = yield* currentInstant;\n\n const sealed =\n yield* sql`INSERT OR IGNORE INTO effect_agent_worker_stops (thread_id) VALUES (${validated.threadId}) RETURNING *`.pipe(\n rows.workerStops.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n const aborted =\n yield* sql`INSERT OR IGNORE INTO effect_agent_abort_intents (submission_id, author, reason, requested_at)\n SELECT submission_id, ${validated.author}, 'Worker owner stopped the worker', ${now.iso}\n FROM effect_agent_submissions WHERE thread_id = ${validated.threadId} AND state <> 'settled' RETURNING *`.pipe(\n rows.aborts.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n if (sealed.length > 0 || aborted.length > 0) yield* recordProgress(\"control\", operation);\n if (sealed.length > 0) yield* retainWorkerSeal(validated.threadId, null);\n\n return owner.hasOwner(validated.threadId) ? 1 : 0;\n }),\n );\n });\n\n const requestAbort: SubmissionLedger[\"Service\"][\"requestAbort\"] = Effect.fnUntraced(function* (\n request: AbortCommand,\n ) {\n const operation = \"ledger request abort\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(AbortCommand))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:request-abort:before\", operation);\n\n const intent = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\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 (submission.state === \"joined\") {\n if (submission.joined_host_submission_id === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A joined Submission carries no host linkage.\",\n );\n }\n\n const hostSubmissionId = yield* decodeSubmissionId(\n submission.joined_host_submission_id,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n return yield* JoinedToHost.make({\n submissionId: validated.submissionId,\n hostSubmissionId,\n });\n }\n const existing = yield* readAbortIntent(operation, validated.submissionId);\n\n if (Option.isSome(existing)) {\n return yield* abortIntentFromRow(\n operation,\n submission,\n validated.submissionId,\n existing.value,\n );\n }\n const now = yield* currentInstant;\n\n yield* sql`\n INSERT INTO effect_agent_abort_intents (\n submission_id,\n author,\n reason,\n requested_at\n ) VALUES (\n ${validated.submissionId},\n ${validated.author},\n ${validated.reason},\n ${now.iso}\n )\n RETURNING *`.pipe(rows.aborts.write, Effect.mapError(internalFailure(operation)));\n\n yield* recordProgress(\"control\", operation);\n\n const canonicalRecordId = yield* canonicalAbortRecordId(\n operation,\n submission.thread_id,\n validated.submissionId,\n );\n\n const intent = yield* decodeAbortIntent({\n submissionId: validated.submissionId,\n author: validated.author,\n reason: validated.reason,\n requestedAt: now.iso,\n ...(canonicalRecordId === undefined ? {} : { canonicalRecordId }),\n }).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* retainLifecycle(submission, { _tag: \"AbortIntentRecorded\", intent });\n\n return intent;\n }),\n );\n\n yield* hitFailpoint(\"ledger:request-abort:after\", operation);\n\n return intent;\n });\n\n const claimJoining: SubmissionLedger[\"Service\"][\"claimJoining\"] = Effect.fnUntraced(function* (\n request: ClaimJoiningRequest,\n ) {\n const operation = \"ledger claim joining\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ClaimJoiningRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:claim-joining:before\", operation);\n\n const claims = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const host = yield* requireSubmission(operation, validated.hostSubmissionId);\n\n if (host.thread_id !== validated.threadId) {\n return yield* LedgerError.make({\n operation,\n message: `Host submission ${validated.hostSubmissionId} does not belong to thread ${validated.threadId}.`,\n });\n }\n // The host Attempt retains its local ownership while the ready prefix joins it.\n yield* requireOwner(operation, host);\n\n const stopped = yield* cached(\n rows.workerStops.by(\"thread_id\", validated.threadId),\n operation,\n );\n\n if (stopped.length > 0) return [];\n\n const laterRows = yield* sql<Record<string, unknown>>`\n SELECT ${submissionColumns}\n FROM effect_agent_submissions\n WHERE thread_id = ${validated.threadId}\n AND queue_sequence > ${host.queue_sequence}\n ORDER BY queue_sequence ASC\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const later = yield* decodeSubmissionRows(operation, validated.threadId, laterRows);\n const claimed: Array<JoiningClaim> = [];\n\n for (const row of later) {\n if (claimed.length >= validated.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 (row.state === \"joining\" || row.state === \"joined\") &&\n row.joined_host_submission_id === validated.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 (row.state === \"settled\" && row.settled_outcome === \"aborted\") continue;\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 (row.state !== \"ready\") break;\n const canonical = yield* readCanonicalSettlement(operation, row);\n\n if (canonical?.settlement.outcome === \"aborted\") continue;\n if (canonical !== undefined) break;\n yield* sql`\n UPDATE effect_agent_submissions\n SET state = 'joining', joined_host_submission_id = ${validated.hostSubmissionId}\n WHERE submission_id = ${row.submission_id}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n const inputPayload = yield* parseStoredJsonText(row.input_json).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n row.submission_id,\n error.message,\n ),\n ),\n );\n\n claimed.push(\n yield* decodeJoiningClaim({\n submissionId: row.submission_id,\n queueSequence: row.queue_sequence,\n inputPayload,\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n }\n\n return claimed;\n }),\n );\n\n yield* hitFailpoint(\"ledger:claim-joining:after\", operation);\n\n return claims;\n });\n\n const markJoined: SubmissionLedger[\"Service\"][\"markJoined\"] = Effect.fnUntraced(function* (\n request: MarkJoinedRequest,\n ) {\n const operation = \"ledger mark joined\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(MarkJoinedRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:mark-joined:before\", operation);\n yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.joined_host_submission_id === null) {\n return yield* LedgerError.make({\n operation,\n message: `Submission ${validated.submissionId} was never claimed for joining.`,\n });\n }\n const host = yield* requireSubmission(operation, submission.joined_host_submission_id);\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 yield* requireOwner(operation, host);\n if (submission.input_applied_record_id !== null) {\n if (\n submission.input_applied_record_id === validated.recordId &&\n submission.input_applied_sequence === validated.sequence\n ) {\n return;\n }\n\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A different join marker is already recorded for this Submission.\",\n );\n }\n if (submission.state !== \"joining\" && submission.state !== \"joined\") {\n return yield* LedgerError.make({\n operation,\n message: `Cannot mark submission ${validated.submissionId} joined from state ${submission.state}.`,\n });\n }\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n input_applied_record_id = ${validated.recordId},\n input_applied_sequence = ${validated.sequence},\n state = 'joined'\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n }),\n );\n yield* hitFailpoint(\"ledger:mark-joined:after\", operation);\n });\n\n const revertJoining: SubmissionLedger[\"Service\"][\"revertJoining\"] = Effect.fnUntraced(function* (\n request: RevertJoiningRequest,\n ) {\n const operation = \"ledger revert joining\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(RevertJoiningRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:revert-joining:before\", operation);\n yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\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 (submission.state !== \"joining\") return;\n const guard = validated.guard;\n\n if (guard !== undefined) {\n if (submission.joined_host_submission_id !== guard.hostSubmissionId) return;\n const host = yield* requireSubmission(operation, guard.hostSubmissionId);\n\n if (host.thread_id !== submission.thread_id)\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"The joined host belongs to another Thread.\",\n );\n if (host.state !== \"settled\") {\n yield* requireOwner(operation, host).pipe(\n Effect.mapError((cause) =>\n cause._tag === \"OwnershipLost\"\n ? LedgerError.make({\n operation,\n message: \"Joining recovery no longer owns the linked host.\",\n cause,\n })\n : cause,\n ),\n );\n }\n }\n yield* sql`\n UPDATE effect_agent_submissions\n SET state = 'ready', joined_host_submission_id = NULL\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n }),\n );\n yield* hitFailpoint(\"ledger:revert-joining:after\", operation);\n });\n\n const suspend: SubmissionLedger[\"Service\"][\"suspend\"] = Effect.fnUntraced(function* (\n request: SuspendRequest,\n ) {\n const operation = \"ledger suspend\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(SuspendRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const reasonJson = yield* encodeSuspensionReasonText(validated.reason).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:suspend:before\", operation);\n\n const outcome = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\n });\n }\n // Canonical terminal intent wins over a later suspension.\n const canonical = yield* readCanonicalSettlement(operation, submission);\n\n if (canonical !== undefined) {\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: canonical.settlement.outcome,\n });\n }\n yield* requireOwner(operation, submission);\n // A covering event that raced ahead of the suspend transaction resumes the caller\n // immediately WITHOUT releasing the lane (plan §2.6, §12). For WaitingForChild the\n // covering evidence is EITHER a locally settled child row OR a durable cross-store\n // notification marker: parent and child Threads live in different Durable\n // Objects, and the port contract requires that a child settlement reported (via\n // `recordChildSettled` → marker) before this suspend commits is observed here.\n if (validated.reason._tag === \"ApprovalPending\") {\n const decisions = yield* readApprovalDecisions(operation, validated.submissionId);\n const decided = new Map(decisions.map((row) => [row.tool_call_id, row.decision]));\n\n if (\n approvalDecisionsCover(validated.reason.toolCallIds, (toolCallId) =>\n decided.get(toolCallId),\n )\n ) {\n return { outcome: RESUME_IMMEDIATELY, threadId: submission.thread_id };\n }\n } else {\n const markers = yield* readChildSettlementMarkers(operation, validated.submissionId);\n const markerChildren = new Set(markers.map((row) => row.child_submission_id));\n let allSettled = true;\n\n for (const child of validated.reason.children) {\n const settled = yield* childProvablySettled(\n operation,\n markerChildren,\n child.childSubmissionId,\n );\n\n if (!settled) {\n allSettled = false;\n break;\n }\n }\n if (allSettled) {\n return { outcome: RESUME_IMMEDIATELY, threadId: submission.thread_id };\n }\n }\n const now = yield* currentInstant;\n\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'suspended',\n suspended_reason_json = ${reasonJson},\n suspended_at = ${now.iso}\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n // Suspension ends the ownership period WITHOUT settling: the accepted-work\n // obligation stays owed while the lane consumes no worker permit (plan §2.6).\n\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionSuspended\",\n submissionId: validated.submissionId,\n reason: validated.reason,\n });\n\n return { outcome: SUSPENDED, threadId: submission.thread_id };\n }),\n );\n\n if (outcome.outcome === SUSPENDED)\n owner.closeSubmission(outcome.threadId, validated.submissionId);\n yield* hitFailpoint(\"ledger:suspend:after\", operation);\n\n return outcome.outcome;\n });\n\n /**\n * Once one pending call is denied or every pending call has a decision intent,\n * the lane wakes: suspended → input-applied, suspension cleared (plan §2.6). A\n * WaitingForChild suspension wakes only through recordChildSettled. Runs inside the caller's\n * write transaction.\n */\n const wakeSuspendedIfCovered = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n ): Effect.fn.Return<void, LedgerError> {\n if (submission.state !== \"suspended\" || submission.suspended_reason_json === null) return;\n\n const reason = yield* Schema.decodeEffect(Schema.fromJsonString(SuspensionReason))(\n submission.suspended_reason_json,\n ).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n submission.submission_id,\n error.message,\n ),\n ),\n );\n\n if (reason._tag !== \"ApprovalPending\") return;\n const decisions = yield* readApprovalDecisions(operation, submission.submission_id);\n const decided = new Map(decisions.map((row) => [row.tool_call_id, row.decision]));\n\n if (!approvalDecisionsCover(reason.toolCallIds, (toolCallId) => decided.get(toolCallId)))\n return;\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'input-applied',\n suspended_reason_json = NULL,\n suspended_at = NULL\n WHERE submission_id = ${submission.submission_id}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionResumed\",\n submissionId: yield* decodeSubmissionId(submission.submission_id).pipe(\n Effect.mapError(internalFailure(operation)),\n ),\n });\n });\n\n const recordApprovalDecision: SubmissionLedger[\"Service\"][\"recordApprovalDecision\"] =\n Effect.fnUntraced(function* (command: ApprovalDecisionCommand) {\n const operation = \"ledger record approval decision\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ApprovalDecisionCommand))(\n command,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:approval-decision:before\", operation);\n\n const intent = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\n });\n }\n const decisions = yield* readApprovalDecisions(operation, validated.submissionId);\n const existing = decisions.find((row) => row.tool_call_id === validated.toolCallId);\n\n if (existing !== undefined) {\n // Idempotent per (submissionId, toolCallId): repeating the SAME decision replays\n // the recorded intent unchanged; a divergent re-decision conflicts.\n if (existing.decision !== validated.decision) {\n return yield* ApprovalConflict.make({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n existingDecision: existing.decision,\n });\n }\n\n return yield* approvalIntentFromRow(operation, existing);\n }\n const now = yield* currentInstant;\n\n yield* sql`\n INSERT INTO effect_agent_approval_decisions (\n submission_id,\n tool_call_id,\n decision,\n resolver,\n reason,\n decided_at\n ) VALUES (\n ${validated.submissionId},\n ${validated.toolCallId},\n ${validated.decision},\n ${validated.resolver},\n ${validated.reason},\n ${now.iso}\n )\n RETURNING *`.pipe(rows.approvals.write, Effect.mapError(internalFailure(operation)));\n yield* recordProgress(\"control\", operation);\n yield* wakeSuspendedIfCovered(operation, submission);\n\n return yield* decodeApprovalDecisionIntent({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n decision: validated.decision,\n resolver: validated.resolver,\n reason: validated.reason,\n decidedAt: now.iso,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }),\n );\n\n yield* hitFailpoint(\"ledger:approval-decision:after\", operation);\n\n return intent;\n });\n\n const markUnknown: SubmissionLedger[\"Service\"][\"markUnknown\"] = Effect.fnUntraced(function* (\n request: MarkUnknownRequest,\n ) {\n const operation = \"ledger mark unknown\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(MarkUnknownRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:mark-unknown:before\", operation);\n yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\n });\n }\n // Canonical terminal intent wins over a late Unknown marking.\n const canonical = yield* readCanonicalSettlement(operation, submission);\n\n if (canonical !== undefined) {\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: canonical.settlement.outcome,\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 existingIds = yield* storedUnknownToolCallIds(operation, submission);\n const known = new Set(existingIds);\n\n const merged = [\n ...existingIds,\n ...validated.toolCallIds.filter((toolCallId) => !known.has(toolCallId)),\n ];\n\n const idsJson = yield* encodeToolCallIdsText(merged).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'unknown',\n unknown_reason = ${submission.unknown_reason ?? validated.reason},\n unknown_tool_call_ids_json = ${idsJson}\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n if (submission.state !== \"unknown\")\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionUnknown\",\n submissionId: validated.submissionId,\n });\n }),\n );\n yield* hitFailpoint(\"ledger:mark-unknown:after\", operation);\n });\n\n const recordUnknownResolution: SubmissionLedger[\"Service\"][\"recordUnknownResolution\"] =\n Effect.fnUntraced(function* (command: UnknownResolutionCommand) {\n const operation = \"ledger record unknown resolution\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(UnknownResolutionCommand))(\n command,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const resolutionJson = yield* encodeUnknownResolutionText(validated.resolution).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:unknown-resolution:before\", operation);\n\n const intent = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n // Factual closure may outlive settlement; it never restores execution authority.\n if (\n validated.resolution._tag !== \"CompletedWithResult\" &&\n validated.resolution._tag !== \"NeverHappened\"\n )\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\n });\n }\n const resolutions = yield* readUnknownResolutions(operation, validated.submissionId);\n const kind = unknownResolutionKind(validated.resolution);\n\n const existing = resolutions.find(\n (row) => row.tool_call_id === validated.toolCallId && row.resolution_kind === kind,\n );\n\n const existingIntent =\n existing === undefined\n ? undefined\n : yield* unknownResolutionIntentFromRow(operation, existing);\n\n if (\n (existingIntent !== undefined &&\n !equivalentUnknownResolution(existingIntent.resolution, validated.resolution)) ||\n (existing === undefined &&\n kind === \"execution\" &&\n resolutions.some(\n (row) =>\n row.tool_call_id === validated.toolCallId && row.resolution_kind === \"factual\",\n ))\n ) {\n return yield* UnknownResolutionConflict.make({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n });\n }\n\n if (existingIntent === undefined && kind === \"factual\") {\n const runId = runIdForSubmission(validated.submissionId);\n\n const found = yield* sql`\n SELECT ${canonicalRecordJson(sql)} AS record_json FROM effect_agent_canonical_records\n WHERE thread_id = ${submission.thread_id}\n AND record_tag = 27\n AND run_id = ${runKey(sql, sql`${submission.thread_id}`, sql`${JSON.stringify(runId)}`)}\n AND tool_call_id = ${JSON.stringify(validated.toolCallId)}\n LIMIT 2\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const outcomes = yield* decodeRows(\n Schema.Array(Schema.Struct({ record_json: BoundedStoredText })),\n \"effect_agent_canonical_records\",\n validated.toolCallId,\n found,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const result =\n outcomes[0] === undefined\n ? undefined\n : (yield* decodeRecordEnvelopeText(outcomes[0].record_json).pipe(\n Effect.mapError(internalFailure(operation)),\n )).payload;\n\n if (\n outcomes.length > 1 ||\n (result !== undefined &&\n (result._tag !== \"ToolCallSettled\" ||\n result.runId !== runId ||\n result.toolCallId !== validated.toolCallId))\n )\n return yield* corruptionFailure(\n operation,\n \"effect_agent_canonical_records\",\n validated.toolCallId,\n \"Canonical Tool result identity is inconsistent.\",\n );\n\n if (\n result?._tag === \"ToolCallSettled\" &&\n !unknownResolutionMatchesResult(validated.resolution, result)\n )\n return yield* UnknownResolutionConflict.make({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n });\n }\n let resolved: UnknownResolutionIntent;\n\n if (existingIntent !== undefined) {\n // Idempotent replay of the recorded intent (author/reason may differ; the stored\n // audit fields win, exactly like requestAbort).\n resolved = existingIntent;\n } else {\n const now = yield* currentInstant;\n\n yield* sql`\n INSERT INTO effect_agent_unknown_resolutions (\n submission_id,\n tool_call_id,\n resolution_kind,\n author,\n reason,\n resolution_json,\n resolved_at\n ) VALUES (\n ${validated.submissionId},\n ${validated.toolCallId},\n ${kind},\n ${validated.author},\n ${validated.reason},\n ${resolutionJson},\n ${now.iso}\n )\n RETURNING *`.pipe(rows.resolutions.write, Effect.mapError(internalFailure(operation)));\n yield* recordProgress(\"control\", operation);\n\n const resolution = yield* parseStoredJsonText(resolutionJson).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n resolved = yield* decodeUnknownResolutionIntent({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n author: validated.author,\n reason: validated.reason,\n resolution,\n resolvedAt: now.iso,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }\n // The lane reopens only when EVERY marked open call has a durable resolution intent:\n // unknown → input-applied (DUR-017). Replays re-run the coverage check so a\n // recovering caller can wake the lane idempotently.\n if (submission.state === \"unknown\" && submission.unknown_tool_call_ids_json !== null) {\n const markedIds = yield* storedUnknownToolCallIds(operation, submission);\n const covering = yield* readUnknownResolutions(operation, validated.submissionId);\n const coveredIds = new Set(covering.map((row) => row.tool_call_id));\n\n if (markedIds.every((toolCallId) => coveredIds.has(toolCallId))) {\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'input-applied',\n unknown_reason = NULL,\n unknown_tool_call_ids_json = NULL\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionResumed\",\n submissionId: validated.submissionId,\n });\n }\n }\n\n return resolved;\n }),\n );\n\n yield* hitFailpoint(\"ledger:unknown-resolution:after\", operation);\n\n return intent;\n });\n\n const recordChildSettled: SubmissionLedger[\"Service\"][\"recordChildSettled\"] = Effect.fnUntraced(\n function* (request: ChildSettledNotification) {\n const operation = \"ledger record child settled\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ChildSettledNotification))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:child-settled:before\", operation);\n\n const outcome = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const parent = yield* requireSubmission(operation, validated.parentSubmissionId);\n // The child's canonical Settlement is the authority for this wake. When the child's\n // row lives in THIS store (single-store latitude, and every conformance lane), either a\n // canonical settlement admits the notification: the\n // runtime calls only after the canonical append and before ledger finalization. When the\n // row does not live here — the normal cross-DO case — the routed notification from the\n // child's owning Durable Object is the settlement evidence this store records durably.\n const child = yield* readSubmission(operation, validated.childSubmissionId);\n\n const childCanonical = Option.isSome(child)\n ? yield* readCanonicalSettlement(operation, child.value)\n : undefined;\n\n if (Option.isSome(child) && childCanonical === undefined) {\n return yield* LedgerError.make({\n operation,\n message: `Child submission ${validated.childSubmissionId} has no recorded settlement.`,\n });\n }\n // Record the durable notification marker FIRST and unconditionally (idempotent):\n // the port's cross-store race guarantee requires that a notification committed\n // before the parent's suspend transaction is observed by that suspend's covering\n // check, even when the parent is not (or not yet) suspended.\n const now = yield* currentInstant;\n\n const added = yield* sql`\n INSERT INTO effect_agent_child_settlements (\n parent_submission_id,\n child_submission_id,\n child_outcome,\n recorded_at\n ) VALUES (\n ${validated.parentSubmissionId},\n ${validated.childSubmissionId},\n ${childCanonical?.settlement.outcome ?? null},\n ${now.iso}\n )\n ON CONFLICT (parent_submission_id, child_submission_id) DO NOTHING\n RETURNING *`.pipe(\n rows.childSettlements.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n if (added.length > 0) yield* recordProgress(\"control\", operation);\n\n if (parent.state !== \"suspended\" || parent.suspended_reason_json === null) {\n return NOT_WAITING;\n }\n\n const reason = yield* Schema.decodeEffect(Schema.fromJsonString(SuspensionReason))(\n parent.suspended_reason_json,\n ).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n parent.submission_id,\n error.message,\n ),\n ),\n );\n\n if (reason._tag !== \"WaitingForChild\") {\n return NOT_WAITING;\n }\n if (\n !reason.children.some(\n (entry) => entry.childSubmissionId === validated.childSubmissionId,\n )\n ) {\n return NOT_WAITING;\n }\n\n // The parent wakes exactly when EVERY listed child is provably settled — from its\n // local row or a recorded marker (spec §12 step 10); replays re-run the coverage\n // check so a recovering caller wakes the lane idempotently.\n const markers = yield* readChildSettlementMarkers(\n operation,\n validated.parentSubmissionId,\n );\n\n const markerChildren = new Set(markers.map((row) => row.child_submission_id));\n\n for (const entry of reason.children) {\n const settled = yield* childProvablySettled(\n operation,\n markerChildren,\n entry.childSubmissionId,\n );\n\n if (!settled) {\n return STILL_WAITING;\n }\n }\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'input-applied',\n suspended_reason_json = NULL,\n suspended_at = NULL\n WHERE submission_id = ${validated.parentSubmissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* retainLifecycle(parent, {\n _tag: \"SubmissionResumed\",\n submissionId: validated.parentSubmissionId,\n });\n\n return WOKEN;\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-settled:after\", operation);\n\n return outcome;\n },\n );\n\n const reserveChildBudget: SubmissionLedger[\"Service\"][\"reserveChildBudget\"] = Effect.fnUntraced(\n function* (request: ChildBudgetReservationRequest) {\n const operation = \"ledger reserve child budget\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ChildBudgetReservationRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const allocationJson = yield* encodePersistedJsonText(validated.allocation).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:child-reservation:before\", operation);\n\n const reserved = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const existing = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isSome(existing)) {\n const existingSnapshot = yield* childReservationSnapshotFromRow(\n operation,\n existing.value,\n );\n\n // Identical replays short-circuit before the fence, retaining its first committed allocation: a\n // replay creates nothing, so a recovering caller resumes rather than duplicates.\n const identical =\n existing.value.parent_submission_id === validated.parentSubmissionId &&\n existing.value.parent_tool_call_id === validated.parentToolCallId &&\n existing.value.allocation_digest === validated.allocationDigest &&\n equivalentPersistedJson(existingSnapshot.allocation, validated.allocation);\n\n if (!identical) {\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message:\n \"A reservation with this identity exists with a different parent Tool Call or allocation.\",\n });\n }\n\n return ReservedChildBudget.make({\n reservation: existingSnapshot,\n replayed: true,\n });\n }\n\n const collision = yield* readChildReservationForCall(\n operation,\n validated.parentSubmissionId,\n validated.parentToolCallId,\n );\n\n if (Option.isSome(collision)) {\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: collision.value.status,\n message: `Parent Tool Call ${validated.parentToolCallId} already owns reservation ${collision.value.reservation_id}.`,\n });\n }\n const parent = yield* requireSubmission(operation, validated.parentSubmissionId);\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 yield* requireOwner(operation, parent);\n const now = yield* currentInstant;\n\n yield* sql`\n INSERT INTO effect_agent_child_reservations (\n reservation_id,\n parent_submission_id,\n parent_tool_call_id,\n status,\n allocation_json,\n allocation_digest,\n reserved_at\n ) VALUES (\n ${validated.reservationId},\n ${validated.parentSubmissionId},\n ${validated.parentToolCallId},\n 'reserved',\n ${allocationJson},\n ${validated.allocationDigest},\n ${now.iso}\n )\n RETURNING *`.pipe(\n rows.childReservations.write,\n Effect.mapError(internalFailure(operation)),\n );\n const inserted = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(inserted)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n validated.reservationId,\n \"An inserted child reservation row is missing inside its own transaction.\",\n );\n }\n\n return ReservedChildBudget.make({\n reservation: yield* childReservationSnapshotFromRow(operation, inserted.value),\n replayed: false,\n });\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-reservation:after\", operation);\n\n return reserved;\n },\n );\n\n const attachChildToReservation: SubmissionLedger[\"Service\"][\"attachChildToReservation\"] =\n Effect.fnUntraced(function* (request: AttachChildToReservationRequest) {\n const operation = \"ledger attach child to reservation\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(AttachChildToReservationRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:child-attach:before\", operation);\n\n const attached = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const existing = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(existing)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown child reservation ${validated.reservationId}.`,\n });\n }\n if (existing.value.child_submission_id !== null) {\n // Idempotent replay of the recorded attachment (unfenced — it mutates nothing).\n if (existing.value.child_submission_id === validated.childSubmissionId) {\n return yield* childReservationSnapshotFromRow(operation, existing.value);\n }\n\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message: `Reservation ${validated.reservationId} already records child ${existing.value.child_submission_id}.`,\n });\n }\n const parent = yield* requireSubmission(operation, existing.value.parent_submission_id);\n\n yield* requireOwner(operation, parent);\n if (existing.value.status !== \"reserved\") {\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message: `Cannot attach a child to a ${existing.value.status} reservation.`,\n });\n }\n // Unlike the single-store Node adapter, the admitted child's row lives in ANOTHER\n // Durable Object, so no local existence check is possible here. The canonical\n // `SubagentStarted` record remains the attachment's repair authority (DUR-015),\n // and the coordinator only attaches after the child's admission committed.\n yield* sql`\n UPDATE effect_agent_child_reservations\n SET child_submission_id = ${validated.childSubmissionId}\n WHERE reservation_id = ${validated.reservationId}\n RETURNING *`.pipe(\n rows.childReservations.write,\n Effect.mapError(internalFailure(operation)),\n );\n const updated = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(updated)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n validated.reservationId,\n \"An updated child reservation row is missing inside its own transaction.\",\n );\n }\n\n return yield* childReservationSnapshotFromRow(operation, updated.value);\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-attach:after\", operation);\n\n return attached;\n });\n\n const beginChildBudgetRelease: SubmissionLedger[\"Service\"][\"beginChildBudgetRelease\"] =\n Effect.fnUntraced(function* (request: BeginChildBudgetReleaseRequest) {\n const operation = \"ledger begin child budget release\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(BeginChildBudgetReleaseRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const accountingJson = yield* encodePersistedJsonText(validated.accounting).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:child-release-pending:before\", operation);\n\n const frozen = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const existing = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(existing)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown child reservation ${validated.reservationId}.`,\n });\n }\n if (existing.value.status !== \"reserved\") {\n const existingSnapshot = yield* childReservationSnapshotFromRow(\n operation,\n existing.value,\n );\n\n // The accounting decision was already frozen exactly once; an identical replay is a\n // no-op and a divergent decision conflicts (spec §12 join step 6).\n if (\n existingSnapshot.accounting !== undefined &&\n equivalentPersistedJson(existingSnapshot.accounting, validated.accounting)\n ) {\n return existingSnapshot;\n }\n\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message: \"A different accounting decision is already frozen for this reservation.\",\n });\n }\n const now = yield* currentInstant;\n\n yield* sql`\n UPDATE effect_agent_child_reservations\n SET\n status = 'releasePending',\n accounting_json = ${accountingJson},\n release_began_at = ${now.iso}\n WHERE reservation_id = ${validated.reservationId}\n RETURNING *`.pipe(\n rows.childReservations.write,\n Effect.mapError(internalFailure(operation)),\n );\n const updated = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(updated)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n validated.reservationId,\n \"An updated child reservation row is missing inside its own transaction.\",\n );\n }\n\n return yield* childReservationSnapshotFromRow(operation, updated.value);\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-release-pending:after\", operation);\n\n return frozen;\n });\n\n const releaseChildBudget: SubmissionLedger[\"Service\"][\"releaseChildBudget\"] = Effect.fnUntraced(\n function* (request: ReleaseChildBudgetRequest) {\n const operation = \"ledger release child budget\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ReleaseChildBudgetRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:child-release:before\", operation);\n\n const released = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const existing = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(existing)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown child reservation ${validated.reservationId}.`,\n });\n }\n // Applied exactly once: replaying a released reservation returns the stored row\n // unchanged (spec §12: \"never available twice\").\n if (existing.value.status === \"released\") {\n return yield* childReservationSnapshotFromRow(operation, existing.value);\n }\n if (existing.value.status !== \"releasePending\") {\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message: \"Cannot release a reservation whose accounting decision is not frozen.\",\n });\n }\n const now = yield* currentInstant;\n\n yield* sql`\n UPDATE effect_agent_child_reservations\n SET status = 'released', released_at = ${now.iso}\n WHERE reservation_id = ${validated.reservationId}\n RETURNING *`.pipe(\n rows.childReservations.write,\n Effect.mapError(internalFailure(operation)),\n );\n const updated = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(updated)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n validated.reservationId,\n \"An updated child reservation row is missing inside its own transaction.\",\n );\n }\n\n return yield* childReservationSnapshotFromRow(operation, updated.value);\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-release:after\", operation);\n\n return released;\n },\n );\n\n interface ScanCursor {\n readonly threadId: string;\n readonly queueSequence: number;\n }\n\n const scanPage = Effect.fnUntraced(function* (\n cursor: ScanCursor | undefined,\n ): Effect.fn.Return<\n readonly [ReadonlyArray<SubmissionWorkItem>, Option.Option<ScanCursor | undefined>],\n LedgerError\n > {\n const operation = \"ledger scan nonterminal\";\n\n const rows = yield* (\n cursor === undefined\n ? sql<Record<string, unknown>>`\n SELECT submission_id AS \"submissionId\", thread_id AS \"threadId\",\n queue_sequence AS \"queueSequence\", principal, idempotency_key AS \"idempotencyKey\",\n deployment_id AS \"deploymentId\", receipt_id AS \"receiptId\", state\n FROM effect_agent_submissions\n WHERE state <> 'settled'\n ORDER BY thread_id ASC, queue_sequence ASC\n LIMIT ${SCAN_PAGE_SIZE}\n `\n : sql<Record<string, unknown>>`\n SELECT submission_id AS \"submissionId\", thread_id AS \"threadId\",\n queue_sequence AS \"queueSequence\", principal, idempotency_key AS \"idempotencyKey\",\n deployment_id AS \"deploymentId\", receipt_id AS \"receiptId\", state\n FROM effect_agent_submissions\n WHERE state <> 'settled'\n AND (thread_id, queue_sequence) > (${cursor.threadId}, ${cursor.queueSequence})\n ORDER BY thread_id ASC, queue_sequence ASC\n LIMIT ${SCAN_PAGE_SIZE}\n `\n ).pipe(Effect.mapError(sqlFailure(operation)));\n\n const decoded = yield* decodeRows(\n Schema.Array(SubmissionWorkItem),\n \"effect_agent_submissions\",\n \"nonterminal_scan\",\n rows,\n \"SubmissionWorkItem\",\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const last = decoded[decoded.length - 1];\n\n const next: Option.Option<ScanCursor | undefined> =\n last === undefined || decoded.length < SCAN_PAGE_SIZE\n ? Option.none()\n : Option.some({\n threadId: last.threadId,\n queueSequence: last.queueSequence,\n });\n\n return [decoded, next] as const;\n });\n\n const scanNonterminal: Stream.Stream<SubmissionWorkItem, LedgerError> = Stream.unwrap(\n state.read(\n Effect.gen(function* () {\n // Cache only a complete bounded active set. Large hosts keep the paged scan.\n const active = yield* cached(\n workRows.matching(\n \"nonterminal\",\n (row) => row.state !== \"settled\",\n sql`SELECT submission_id, thread_id, queue_sequence, principal, idempotency_key,\n deployment_id, receipt_id, state\n FROM effect_agent_submissions WHERE state <> 'settled' LIMIT 129`,\n 128,\n ),\n \"ledger scan nonterminal\",\n );\n\n if (active.length > 128)\n return Stream.paginate<ScanCursor | undefined, SubmissionWorkItem, LedgerError>(\n undefined,\n scanPage,\n );\n\n const sorted = [...active].sort((left, right) =>\n left.thread_id < right.thread_id\n ? -1\n : left.thread_id > right.thread_id\n ? 1\n : left.queue_sequence - right.queue_sequence,\n );\n\n const work = yield* Schema.decodeEffect(Schema.Array(SubmissionWorkItem))(\n sorted.map((row) => ({\n submissionId: row.submission_id,\n threadId: row.thread_id,\n queueSequence: row.queue_sequence,\n principal: row.principal,\n idempotencyKey: row.idempotency_key,\n deploymentId: row.deployment_id,\n receiptId: row.receipt_id,\n state: row.state,\n })),\n ).pipe(Effect.mapError(internalFailure(\"ledger scan nonterminal\")));\n\n return Stream.fromIterable(work);\n }),\n ),\n );\n\n const readAbortIntentForSubmission: SubmissionLedger[\"Service\"][\"readAbortIntent\"] =\n Effect.fnUntraced(function* (request) {\n const operation = \"ledger read abort intent\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(AbortIntentRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n return yield* state.read(\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n const intent = yield* readAbortIntent(operation, validated.submissionId);\n\n return Option.isNone(intent)\n ? undefined\n : yield* abortIntentFromRow(\n operation,\n submission,\n validated.submissionId,\n intent.value,\n );\n }),\n );\n });\n\n const loadRecoverySnapshot: SubmissionLedger[\"Service\"][\"loadRecoverySnapshot\"] =\n Effect.fnUntraced(function* (request: RecoverySnapshotRequest) {\n const operation = \"ledger load recovery snapshot\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(RecoverySnapshotRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n return yield* state.read(\n Effect.gen(function* () {\n const submissionRow = yield* requireSubmission(operation, validated.submissionId);\n const submission = yield* decodeSubmissionSnapshot(operation, submissionRow);\n\n let inputApplied: InputAppliedMarker | undefined;\n\n if (\n submissionRow.input_applied_record_id !== null &&\n submissionRow.input_applied_sequence !== null\n ) {\n inputApplied = yield* decodeInputAppliedMarker({\n recordId: submissionRow.input_applied_record_id,\n sequence: submissionRow.input_applied_sequence,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }\n\n let abortIntent: AbortIntent | undefined;\n const abortRow = yield* readAbortIntent(operation, validated.submissionId);\n\n if (Option.isSome(abortRow)) {\n abortIntent = yield* abortIntentFromRow(\n operation,\n submissionRow,\n validated.submissionId,\n abortRow.value,\n );\n }\n\n // Host-side view: every Submission whose host linkage points here, in queue order\n // (the terminalize loop settles them with the host outcome, DUR-002).\n const joinRows = (yield* cached(\n rows.submissions.by(\"joined_host_submission_id\", validated.submissionId),\n operation,\n ))\n .filter((row) => row.joined_host_submission_id === validated.submissionId)\n .sort((a, b) => a.queue_sequence - b.queue_sequence);\n\n const joinSubmissions = yield* decodeSubmissionRows(\n operation,\n validated.submissionId,\n joinRows,\n );\n\n const joins = yield* Effect.forEach(joinSubmissions, (row) =>\n decodeJoinSnapshot({\n submissionId: row.submission_id,\n state: row.state,\n hostSubmissionId: validated.submissionId,\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n\n let hostSubmissionId: RecoverySnapshot[\"hostSubmissionId\"];\n\n if (submissionRow.joined_host_submission_id !== null) {\n hostSubmissionId = yield* decodeSubmissionId(\n submissionRow.joined_host_submission_id,\n ).pipe(Effect.mapError(internalFailure(operation)));\n }\n\n let suspension: SuspensionSnapshot | undefined;\n\n if (submissionRow.suspended_reason_json !== null && submissionRow.suspended_at !== null) {\n const reason = yield* parseStoredJsonText(submissionRow.suspended_reason_json).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n error.message,\n ),\n ),\n );\n\n suspension = yield* decodeSuspensionSnapshot({\n reason,\n suspendedAt: submissionRow.suspended_at,\n }).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n error.message,\n ),\n ),\n );\n }\n\n const decisionRows = yield* readApprovalDecisions(operation, validated.submissionId);\n\n const approvalDecisions = yield* Effect.forEach(decisionRows, (row) =>\n approvalIntentFromRow(operation, row),\n );\n\n const resolutionRows = yield* readUnknownResolutions(operation, validated.submissionId);\n\n const unknownResolutions = yield* Effect.forEach(resolutionRows, (row) =>\n unknownResolutionIntentFromRow(operation, row),\n );\n\n // Parent-side subagent view: this Submission's child budget reservations in parent\n // Tool Call order, plus each attached child's current lane state (a disposable\n // derived view; canonical records stay the recovery truth, DUR-015). The child's\n // state comes from its local row when this store holds it, and otherwise from the\n // durable cross-store settlement marker; a child that is neither local nor marked\n // settled is enriched by the routed per-child lookup one layer out (plan §1.3).\n const childReservationRows = (yield* cached(\n rows.childReservations.by(\"parent_submission_id\", validated.submissionId),\n operation,\n ))\n .filter((row) => row.parent_submission_id === validated.submissionId)\n .sort((a, b) => a.parent_tool_call_id.localeCompare(b.parent_tool_call_id));\n\n const decodedChildReservations = yield* decodeChildReservationRows(\n operation,\n validated.submissionId,\n childReservationRows,\n );\n\n const childReservations = yield* Effect.forEach(decodedChildReservations, (row) =>\n childReservationSnapshotFromRow(operation, row),\n );\n\n const markers = yield* readChildSettlementMarkers(operation, validated.submissionId);\n const markersByChild = new Map(markers.map((row) => [row.child_submission_id, row]));\n const childAttachments: Array<ChildAttachmentSnapshot> = [];\n\n for (const row of decodedChildReservations) {\n if (row.child_submission_id === null) continue;\n const child = yield* readSubmission(operation, row.child_submission_id);\n\n if (Option.isSome(child)) {\n childAttachments.push(\n yield* decodeChildAttachmentSnapshot({\n toolCallId: row.parent_tool_call_id,\n childSubmissionId: row.child_submission_id,\n childState: child.value.state,\n ...(child.value.settled_outcome === null\n ? {}\n : { childOutcome: child.value.settled_outcome }),\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n continue;\n }\n const marker = markersByChild.get(row.child_submission_id);\n\n if (marker === undefined) continue;\n childAttachments.push(\n yield* decodeChildAttachmentSnapshot({\n toolCallId: row.parent_tool_call_id,\n childSubmissionId: row.child_submission_id,\n childState: \"settled\",\n ...(marker.child_outcome === null ? {} : { childOutcome: marker.child_outcome }),\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n }\n\n let parentLinkage: ParentLinkage | undefined;\n\n if (\n submissionRow.parent_submission_id !== null &&\n submissionRow.parent_tool_call_id !== null\n ) {\n parentLinkage = yield* decodeParentLinkage({\n parentSubmissionId: submissionRow.parent_submission_id,\n parentToolCallId: submissionRow.parent_tool_call_id,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }\n\n return RecoverySnapshot.make({\n submission,\n joins,\n approvalDecisions,\n unknownResolutions,\n childReservations,\n childAttachments,\n ...(parentLinkage === undefined ? {} : { parentLinkage }),\n ...(hostSubmissionId === undefined ? {} : { hostSubmissionId }),\n ...(suspension === undefined ? {} : { suspension }),\n hasOwner: owner.hasOwner(submissionRow.thread_id, submissionRow.submission_id),\n ...(inputApplied === undefined ? {} : { inputApplied }),\n ...(abortIntent === undefined ? {} : { abortIntent }),\n });\n }),\n );\n });\n\n return Context.make(\n SubmissionLedger,\n SubmissionLedger.of({\n capabilities,\n admit,\n markReady,\n lookup,\n resolveFundingOwner,\n resolveAdmission,\n selectHead,\n markInputApplied,\n finalizeSettlement: (request) => owner.withMutation(finalizeSettlement(request)),\n requestAbort,\n stopWorker,\n inspectWorker,\n claimJoining,\n markJoined,\n revertJoining,\n suspend: (request) => owner.withMutation(suspend(request)),\n recordApprovalDecision,\n markUnknown,\n recordUnknownResolution,\n recordChildSettled,\n reserveChildBudget,\n attachChildToReservation,\n beginChildBudgetRelease,\n releaseChildBudget,\n scanNonterminal,\n loadRecoverySnapshot,\n readAbortIntent: readAbortIntentForSubmission,\n }),\n ).pipe(Context.add(StorageOwner, owner), Context.add(SettlementPublisher, { publish }));\n});\n\n/**\n * Durable Object SubmissionLedger implementation sharing the journal's private SQLite\n * database, storage-backed transactions, and scoped local owner.\n * Configuration, failpoint, SQL, and Crypto authority stay visible in the input channel.\n */\nexport const submissionLedgerLayer: Layer.Layer<\n SubmissionLedger | SettlementPublisher | StorageOwner,\n DoStorageInitializationError,\n DoStorageConfig | DoStorageFailpoint | SqlClientService.SqlClient | Crypto.Crypto\n> = Layer.effectContext(makeServices());\n\n/**\n * A composition-root convenience Layer for the durable Submission Ledger. Point it at the\n * same `ctx.storage` as the ThreadStore so both share the same scoped storage owner.\n */\nexport const ledgerLayer = (\n options: DoStorageOptions,\n): Layer.Layer<\n SubmissionLedger | SettlementPublisher | StorageOwner,\n DoStorageInitializationError\n> =>\n Layer.unwrap(\n Effect.map(DoStorageConfig, (config) =>\n submissionLedgerLayer.pipe(\n Layer.provide(\n Layer.mergeAll(\n Layer.succeed(DoStorageConfig)(config),\n storageFailpointLayer(options),\n SqliteClient.layer({ storage: options.storage }),\n BrowserCrypto.layer,\n ),\n ),\n ),\n ),\n ).pipe(Layer.provide(storageConfigLayer(options)));\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DoSubmissionLedger.mjs","names":[],"sources":["../src/DoSubmissionLedger.ts"],"sourcesContent":["import { BrowserCrypto } from \"@effect/platform-browser\";\nimport { SqliteClient } from \"@effect/sql-sqlite-do\";\nimport {\n decodeAbortFact,\n decodeAdmissionFact,\n decodeApprovalFact,\n decodeResolutionFact,\n} from \"@yielded/agent-storage-sql/sql-admission-facts\";\nimport {\n definitionJson,\n makeCanonicalStorage,\n recordBatchId,\n runKey,\n} from \"@yielded/agent-storage-sql/sql-canonical-storage\";\nimport {\n SqlStorageProgress,\n type SqlStorageProgressKind,\n} from \"@yielded/agent-storage-sql/sql-storage-progress\";\nimport { canonicalRecordJson } from \"@yielded/agent-storage-sql/sql-thread-archive-range\";\nimport type { LifecyclePublicationFact } from \"@yielded/agent/lifecycle-publication\";\nimport { InputMessage } from \"@yielded/agent/messaging\";\nimport {\n ApprovalDecision,\n CanonicalSequence,\n DefinitionDigests,\n Digest,\n PersistedJson,\n WorkerAdmission,\n RecordEnvelope,\n RecordId,\n SettlementOutcome,\n} from \"@yielded/agent/records\";\nimport { runIdForSubmission } from \"@yielded/agent/run-journal\";\nimport { StorageOwner } from \"@yielded/agent/run-storage\";\nimport {\n SettlementPublicationResult,\n SettlementPublisher,\n validatePublication,\n validateCanonicalSettlement,\n validateJoinedSettlement,\n} from \"@yielded/agent/settlement-publisher\";\nimport {\n AbortCommand,\n WorkerStopCommand,\n WorkerLedgerState,\n workerTerminalFromRecord,\n AbortIntent,\n AbortIntentRequest,\n AdmissionAdmitted,\n AdmissionConflict,\n AdmissionFence,\n AdmissionGroup,\n AdmissionPolicyError,\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 ChildReservationStatus,\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 ParentLinkage,\n QueueSequence,\n RecoverySnapshot,\n RecoverySnapshotRequest,\n ReleaseChildBudgetRequest,\n ReservedChildBudget,\n RevertJoiningRequest,\n Settlement,\n SettlementConflict,\n SettlementFinalization,\n SubmissionLedger,\n SubmissionLookup,\n SubmissionLookupByKey,\n SubmissionSnapshot,\n FundingOwnerRequest,\n FundingOwner,\n SubmissionWorkItem,\n SubmissionState,\n settlementFailureFromRecord,\n SuspendRequest,\n SuspensionReason,\n SuspensionSnapshot,\n UnknownResolution,\n UnknownResolutionCommand,\n UnknownResolutionConflict,\n UnknownResolutionIntent,\n UnknownResolutionKind,\n unknownResolutionKind,\n unknownResolutionMatchesResult,\n submissionInputRecordId,\n submissionInputBatchId,\n submissionAbortRecordId,\n submissionSettlementRecordId,\n submissionSettlementBatchId,\n type ChildSettledOutcome,\n type SuspensionOutcome,\n} from \"@yielded/agent/submission-ledger\";\nimport {\n makeTransferFactCheck,\n AppendConflict,\n ThreadNotMaterialized,\n ThreadStoreDiagnostic,\n ThreadStoreError,\n} from \"@yielded/agent/thread-store\";\nimport { AssignmentTerminal } from \"@yielded/agent/worker\";\nimport {\n Cause,\n Clock,\n Context,\n Crypto,\n DateTime,\n Effect,\n Layer,\n Option,\n Schema,\n Stream,\n} from \"effect\";\nimport * as SqlClientService from \"effect/sql/SqlClient\";\nimport type { SqlError } from \"effect/sql/SqlError\";\n\nimport { DoStorageConfig } from \"./DoStorageConfig.ts\";\nimport {\n DoLedgerError,\n DoStorageCorruptionError,\n DoStorageError,\n type DoStorageFailpointLocation,\n} from \"./DoStorageError.ts\";\nimport { DoStorageFailpoint } from \"./DoStorageFailpoint.ts\";\nimport {\n storageConfigLayer,\n storageFailpointLayer,\n type DoStorageInitializationError,\n type DoStorageOptions,\n} from \"./DoThreadStore.ts\";\nimport { prepareCanonicalAppend } from \"./internal/canonical-append.ts\";\nimport { decodeRows, initializeDoJournal } from \"./internal/do-journal.ts\";\nimport { ownedRows } from \"./internal/owned-state.ts\";\n\ntype SubmissionId = SubmissionSnapshot[\"submissionId\"];\n\n/**\n * Static decode-side ceiling; writes are bounded in bytes by the configured\n * `maxStoredValueBytes` (see do-journal.ts).\n */\nconst BoundedStoredText = Schema.String.check(Schema.isMaxLength(2_000_000));\nconst BoundedIdentifier = Schema.NonEmptyString.check(Schema.isMaxLength(1024));\nconst BoundedTimestamp = Schema.NonEmptyString.check(Schema.isMaxLength(128));\n\nconst SCAN_PAGE_SIZE = 256;\nconst admissionFitsTransfer = makeTransferFactCheck(AdmissionRequest);\nconst RESUME_IMMEDIATELY: SuspensionOutcome = \"resume-immediately\";\nconst SUSPENDED: SuspensionOutcome = \"suspended\";\nconst NOT_WAITING: ChildSettledOutcome = \"not-waiting\";\nconst STILL_WAITING: ChildSettledOutcome = \"still-waiting\";\nconst WOKEN: ChildSettledOutcome = \"woken\";\nconst MAX_IDENTIFIER_LENGTH = 1_024;\n\nclass SubmissionRow extends Schema.Class<SubmissionRow>(\"SubmissionRow\")({\n submission_id: BoundedIdentifier,\n thread_id: BoundedIdentifier,\n queue_sequence: QueueSequence,\n principal: BoundedIdentifier,\n idempotency_key: BoundedIdentifier,\n agent_id: BoundedIdentifier,\n agent_digests_json: BoundedStoredText,\n deployment_id: BoundedIdentifier,\n input_json: BoundedStoredText,\n input_digest: Digest,\n receipt_id: BoundedIdentifier,\n state: SubmissionState,\n settled_outcome: Schema.NullOr(SettlementOutcome),\n settled_record_id: Schema.NullOr(BoundedIdentifier.pipe(Schema.decodeTo(RecordId))),\n finalized_at: Schema.NullOr(BoundedTimestamp),\n created_at: BoundedTimestamp,\n ready_at: Schema.NullOr(BoundedTimestamp),\n input_applied_record_id: Schema.NullOr(BoundedIdentifier),\n input_applied_sequence: Schema.NullOr(CanonicalSequence),\n joined_host_submission_id: Schema.NullOr(BoundedIdentifier),\n suspended_reason_json: Schema.NullOr(BoundedStoredText),\n suspended_at: Schema.NullOr(BoundedTimestamp),\n unknown_reason: Schema.NullOr(BoundedStoredText),\n unknown_tool_call_ids_json: Schema.NullOr(BoundedStoredText),\n parent_submission_id: Schema.NullOr(BoundedIdentifier),\n parent_tool_call_id: Schema.NullOr(BoundedIdentifier),\n admission_group: Schema.NullOr(AdmissionGroup),\n admission_fence_json: Schema.NullOr(BoundedStoredText),\n worker_admission_json: Schema.NullOr(BoundedStoredText),\n message_admission_json: Schema.NullOr(BoundedStoredText),\n}) {}\n\n// Discovery retains identity and state, never every queued input payload.\nconst SubmissionWorkRow = Schema.Struct({\n submission_id: SubmissionRow.fields.submission_id,\n thread_id: SubmissionRow.fields.thread_id,\n queue_sequence: SubmissionRow.fields.queue_sequence,\n principal: SubmissionRow.fields.principal,\n idempotency_key: SubmissionRow.fields.idempotency_key,\n deployment_id: SubmissionRow.fields.deployment_id,\n receipt_id: SubmissionRow.fields.receipt_id,\n state: SubmissionRow.fields.state,\n});\n\nclass ChildReservationRow extends Schema.Class<ChildReservationRow>(\"ChildReservationRow\")({\n reservation_id: BoundedIdentifier,\n parent_submission_id: BoundedIdentifier,\n parent_tool_call_id: BoundedIdentifier,\n child_submission_id: Schema.NullOr(BoundedIdentifier),\n status: ChildReservationStatus,\n allocation_json: BoundedStoredText,\n allocation_digest: Digest,\n accounting_json: Schema.NullOr(BoundedStoredText),\n reserved_at: BoundedTimestamp,\n release_began_at: Schema.NullOr(BoundedTimestamp),\n released_at: Schema.NullOr(BoundedTimestamp),\n}) {}\n\nclass ChildSettlementMarkerRow extends Schema.Class<ChildSettlementMarkerRow>(\n \"ChildSettlementMarkerRow\",\n)({\n parent_submission_id: BoundedIdentifier,\n child_submission_id: BoundedIdentifier,\n child_outcome: Schema.NullOr(SettlementOutcome),\n recorded_at: BoundedTimestamp,\n}) {}\n\nclass ApprovalDecisionRow extends Schema.Class<ApprovalDecisionRow>(\"ApprovalDecisionRow\")({\n submission_id: BoundedIdentifier,\n tool_call_id: BoundedIdentifier,\n decision: ApprovalDecision,\n resolver: BoundedIdentifier,\n reason: BoundedStoredText,\n decided_at: BoundedTimestamp,\n}) {}\n\nclass UnknownResolutionRow extends Schema.Class<UnknownResolutionRow>(\"UnknownResolutionRow\")({\n submission_id: BoundedIdentifier,\n tool_call_id: BoundedIdentifier,\n resolution_kind: UnknownResolutionKind,\n author: BoundedIdentifier,\n reason: BoundedStoredText,\n resolution_json: BoundedStoredText,\n resolved_at: BoundedTimestamp,\n}) {}\n\nclass AbortIntentRow extends Schema.Class<AbortIntentRow>(\"AbortIntentRow\")({\n submission_id: BoundedIdentifier,\n author: BoundedIdentifier,\n reason: BoundedStoredText,\n requested_at: BoundedTimestamp,\n canonical_record_id: Schema.NullOr(BoundedIdentifier),\n}) {}\n\nclass WorkerStopRow extends Schema.Class<WorkerStopRow>(\"WorkerStopRow\")({\n thread_id: BoundedIdentifier,\n terminal: Schema.NullOr(AssignmentTerminal),\n}) {}\n\nclass MaxQueueSequenceRow extends Schema.Class<MaxQueueSequenceRow>(\"MaxQueueSequenceRow\")({\n max_queue_sequence: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n}) {}\n\nconst SUBMISSION_COLUMNS = `\n submission_id,\n thread_id,\n queue_sequence,\n principal,\n idempotency_key,\n agent_id,\n deployment_id,\n input_json,\n input_digest,\n receipt_id,\n state,\n settled_outcome,\n settled_record_id,\n finalized_at,\n created_at,\n ready_at,\n input_applied_record_id,\n input_applied_sequence,\n joined_host_submission_id,\n suspended_reason_json,\n suspended_at,\n unknown_reason,\n unknown_tool_call_ids_json,\n parent_submission_id,\n parent_tool_call_id,\n admission_group,\n admission_fence_json,\n worker_admission_json,\n message_admission_json\n`;\n\nconst CHILD_RESERVATION_COLUMNS = `\n reservation_id,\n parent_submission_id,\n parent_tool_call_id,\n child_submission_id,\n status,\n allocation_json,\n allocation_digest,\n accounting_json,\n reserved_at,\n release_began_at,\n released_at\n`;\n\n/** The branded ToolCallId schema, reached through the thread port so no core import is needed. */\nconst ToolCallIdSchema = ApprovalDecisionCommand.fields.toolCallId;\nconst ToolCallIdList = Schema.Array(ToolCallIdSchema);\n\nconst encodePersistedJsonText = Schema.encodeEffect(Schema.fromJsonString(PersistedJson));\nconst encodeDefinitionDigestsText = Schema.encodeEffect(Schema.fromJsonString(DefinitionDigests));\nconst decodeRecordEnvelopeText = Schema.decodeEffect(Schema.fromJsonString(RecordEnvelope));\nconst encodeSuspensionReasonText = Schema.encodeEffect(Schema.fromJsonString(SuspensionReason));\nconst encodeUnknownResolutionText = Schema.encodeEffect(Schema.fromJsonString(UnknownResolution));\nconst encodeToolCallIdsText = Schema.encodeEffect(Schema.fromJsonString(ToolCallIdList));\nconst decodeToolCallIdsText = Schema.decodeEffect(Schema.fromJsonString(ToolCallIdList));\nconst parseStoredJsonText = Schema.decodeEffect(Schema.fromJsonString(Schema.Json));\nconst decodeAdmissionResult = Schema.decodeUnknownEffect(AdmissionResult);\nconst decodeClaim = Schema.decodeUnknownEffect(Claim);\nconst decodeSettlement = Schema.decodeUnknownEffect(Settlement);\nconst decodeAbortIntent = Schema.decodeUnknownEffect(AbortIntent);\nconst decodeInputAppliedMarker = Schema.decodeUnknownEffect(InputAppliedMarker);\n\nconst decodeSubmissionSnapshotType = (input: typeof SubmissionSnapshot.Type) =>\n SubmissionSnapshot.makeEffect(input).pipe(\n Effect.mapError((issue) => new Schema.SchemaError(issue)),\n );\n\nconst decodeSubmissionId = Schema.decodeUnknownEffect(SubmissionSnapshot.fields.submissionId);\nconst decodeQueueSequence = Schema.decodeUnknownEffect(QueueSequence);\nconst decodeUtcInstant = Schema.decodeUnknownEffect(Schema.DateTimeUtcFromString);\nconst decodeJoiningClaim = Schema.decodeUnknownEffect(JoiningClaim);\nconst decodeJoinSnapshot = Schema.decodeUnknownEffect(JoinSnapshot);\nconst decodeSuspensionSnapshot = Schema.decodeUnknownEffect(SuspensionSnapshot);\nconst decodeApprovalDecisionIntent = Schema.decodeUnknownEffect(ApprovalDecisionIntent);\nconst decodeUnknownResolutionIntent = Schema.decodeUnknownEffect(UnknownResolutionIntent);\nconst decodeParentLinkage = Schema.decodeUnknownEffect(ParentLinkage);\n\nconst decodeChildReservationSnapshotUnknown = Schema.decodeUnknownEffect(\n ChildBudgetReservationSnapshot,\n);\n\nconst decodeChildAttachmentSnapshot = Schema.decodeUnknownEffect(ChildAttachmentSnapshot);\nconst equivalentPersistedJson = Schema.toEquivalence(PersistedJson);\nconst equivalentUnknownResolution = Schema.toEquivalence(UnknownResolution);\nconst decodeAdmissionRequestType = Schema.decodeEffect(Schema.toType(AdmissionRequest));\nconst decodeSubmissionLookupType = Schema.decodeEffect(Schema.toType(SubmissionLookup));\nconst decodeClaimRequestType = Schema.decodeEffect(Schema.toType(ClaimRequest));\n\nconst decodeMarkInputAppliedRequestType = Schema.decodeEffect(\n Schema.toType(MarkInputAppliedRequest),\n);\n\nconst decodeSettlementFinalizationType = Schema.decodeEffect(Schema.toType(SettlementFinalization));\nconst decodeClaimJoiningRequestType = Schema.decodeEffect(Schema.toType(ClaimJoiningRequest));\n\nconst decodeAbortIntentRequestType = Schema.decodeEffect(Schema.toType(AbortIntentRequest));\n\nconst decodeRecoverySnapshotRequestType = Schema.decodeEffect(\n Schema.toType(RecoverySnapshotRequest),\n);\n\nconst SubmissionRows = Schema.Array(SubmissionRow);\nconst ChildReservationRows = Schema.Array(ChildReservationRow);\nconst MaxQueueSequenceRows = Schema.Array(MaxQueueSequenceRow);\nconst SubmissionWorkItems = Schema.Array(SubmissionWorkItem);\nconst decodeSubmissionWorkItems = Schema.decodeEffect(SubmissionWorkItems);\nconst equivalentWorkerOrigin = Schema.toEquivalence(Schema.optional(WorkerAdmission.fields.origin));\n\nconst decodeFirstWorkerAdmissions = Schema.decodeUnknownEffect(\n Schema.Array(\n Schema.Struct({\n worker_admission_json: Schema.NullOr(BoundedStoredText),\n }),\n ),\n);\n\nconst CanonicalSettlementRows = Schema.Array(\n Schema.Struct({\n batch_id: Schema.fromJsonString(BoundedIdentifier),\n record_id: Schema.fromJsonString(BoundedIdentifier),\n record_json: BoundedStoredText,\n }),\n);\n\nconst isDoStorageError = Schema.is(DoStorageError);\n\n/** Wrap an adapter-internal failure into the port's LedgerError without erasing its tag. */\nconst internalFailure =\n (operation: string) =>\n (error: { readonly message: string }): LedgerError =>\n LedgerError.make({ operation, message: error.message, cause: error });\n\n/**\n * Classify raw SQL failures. Within one Durable Object there is exactly one writer, so the\n * Node adapter's retryable `SqliteWriteContention` classification has no analogue: every raw\n * failure is a `DoLedgerError` preserved as the LedgerError's cause.\n */\nconst sqlFailure =\n (operation: string) =>\n (error: SqlError): LedgerError =>\n internalFailure(operation)(\n DoLedgerError.make({\n cause: error,\n operation,\n message: error.message,\n }),\n );\n\nconst corruptionFailure = (operation: string, table: string, rowKey: string, message: string) =>\n internalFailure(operation)(DoStorageCorruptionError.make({ table, rowKey, message }));\n\nconst submissionsRows = ownedRows(\n SubmissionRow,\n \"effect_agent_submissions\",\n (row) => row.submission_id,\n \"submission_id\",\n [[\"thread_id\", \"principal\", \"idempotency_key\"]],\n (sql) => sql`*, ${definitionJson(sql)} AS agent_digests_json`,\n);\n\nconst abortsRows = ownedRows(\n AbortIntentRow,\n \"effect_agent_abort_intents\",\n (row) => row.submission_id,\n \"submission_id\",\n);\n\nconst approvalsRows = ownedRows(ApprovalDecisionRow, \"effect_agent_approval_decisions\", (row) =>\n JSON.stringify([row.submission_id, row.tool_call_id]),\n);\n\nconst resolutionsRows = ownedRows(UnknownResolutionRow, \"effect_agent_unknown_resolutions\", (row) =>\n JSON.stringify([row.submission_id, row.tool_call_id, row.resolution_kind]),\n);\n\nconst childSettlementsRows = ownedRows(\n ChildSettlementMarkerRow,\n \"effect_agent_child_settlements\",\n (row) => JSON.stringify([row.parent_submission_id, row.child_submission_id]),\n);\n\nconst childReservationsRows = ownedRows(\n ChildReservationRow,\n \"effect_agent_child_reservations\",\n (row) => row.reservation_id,\n \"reservation_id\",\n);\n\nconst workerStopsRows = ownedRows(\n WorkerStopRow,\n \"effect_agent_worker_stops\",\n (row) => row.thread_id,\n \"thread_id\",\n);\n\nconst submissionWorkRows = ownedRows(\n SubmissionWorkRow,\n \"effect_agent_submissions\",\n (row) => row.submission_id,\n);\n\nconst makeServices = Effect.fnUntraced(function* () {\n const progress = yield* SqlStorageProgress;\n\n const recordProgress = (kind: SqlStorageProgressKind, operation: string) =>\n progress\n .committed(kind)\n .pipe(\n Effect.catchCause((cause) =>\n Effect.failCause(Cause.map(cause, internalFailure(operation))),\n ),\n );\n\n const config = yield* DoStorageConfig;\n const failpoint = yield* DoStorageFailpoint;\n const sql = yield* SqlClientService.SqlClient;\n const crypto = yield* Crypto.Crypto;\n const physical = yield* makeCanonicalStorage();\n const submissionColumns = sql`${sql.literal(SUBMISSION_COLUMNS)}, ${definitionJson(sql)} AS agent_digests_json`;\n const admissionFence = yield* SubmissionAdmissionFence;\n const journal = yield* initializeDoJournal(sql, failpoint.hit, config.maxStoredValueBytes);\n const lifecycle = journal.lifecycle;\n const state = journal.state;\n const owner = state.owner;\n const submissionViews = submissionsRows(state, sql);\n const workRows = submissionWorkRows(state, sql);\n\n const rows = {\n submissions: {\n by: submissionViews.by,\n byFields: submissionViews.byFields,\n seed: submissionViews.seed,\n // The same RETURNING rows update the full-row views and the small discovery index.\n write: <E, R>(effect: Effect.Effect<ReadonlyArray<unknown>, E, R>) =>\n submissionViews\n .write(effect)\n .pipe(Effect.tap((changed) => workRows.write(Effect.succeed(changed)))),\n },\n aborts: abortsRows(state, sql),\n approvals: approvalsRows(state, sql),\n resolutions: resolutionsRows(state, sql),\n childSettlements: childSettlementsRows(state, sql),\n childReservations: childReservationsRows(state, sql),\n threads: journal.threads,\n workerStops: workerStopsRows(state, sql),\n };\n\n const cached = <A>(\n effect: Effect.Effect<A, SqlError | DoStorageCorruptionError>,\n operation: string,\n ) => effect.pipe(Effect.mapError(internalFailure(operation)));\n\n const byKey = Effect.fnUntraced(function* (\n request: Pick<SubmissionLookupByKey, \"threadId\" | \"principal\" | \"idempotencyKey\">,\n operation: string,\n ) {\n return yield* cached(\n rows.submissions.byFields([\n [\"thread_id\", request.threadId],\n [\"principal\", request.principal],\n [\"idempotency_key\", request.idempotencyKey],\n ]),\n operation,\n );\n }, state.read);\n\n const retainLifecycle = (submission: SubmissionRow, fact: LifecyclePublicationFact) =>\n lifecycle === undefined\n ? Effect.void\n : Effect.gen(function* () {\n const ownerThreadId = yield* Schema.decodeEffect(SubmissionSnapshot.fields.threadId)(\n submission.thread_id,\n ).pipe(Effect.mapError(internalFailure(\"lifecycle owner\")));\n\n yield* lifecycle\n .retain({ ownerThreadId, createdAt: yield* DateTime.now, fact })\n .pipe(Effect.mapError(internalFailure(\"retain lifecycle publication\")));\n });\n\n const retainWorkerSeal = (\n threadId: string,\n terminal: Extract<LifecyclePublicationFact, { readonly _tag: \"WorkerInboxSealed\" }>[\"terminal\"],\n ) =>\n lifecycle === undefined\n ? Effect.void\n : Effect.gen(function* () {\n const operation = \"retain worker inbox seal\";\n\n const ownerThreadId = yield* Schema.decodeEffect(SubmissionSnapshot.fields.threadId)(\n threadId,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const active =\n yield* sql`SELECT submission_id FROM effect_agent_submissions WHERE thread_id = ${threadId} AND state <> 'settled' ORDER BY queue_sequence`.pipe(\n Effect.mapError(sqlFailure(operation)),\n );\n\n const activeSubmissionIds = yield* Effect.forEach(active, (row) =>\n decodeSubmissionId(row.submission_id).pipe(Effect.mapError(internalFailure(operation))),\n );\n\n yield* lifecycle\n .retain({\n id: JSON.stringify([threadId, \"inbox-sealed\"]),\n ownerThreadId,\n createdAt: yield* DateTime.now,\n fact: {\n _tag: \"WorkerInboxSealed\",\n threadId: ownerThreadId,\n activeSubmissionIds,\n terminal,\n },\n })\n .pipe(Effect.mapError(internalFailure(operation)));\n });\n\n const hitFailpoint = (\n location: DoStorageFailpointLocation,\n operation: string,\n ): Effect.Effect<void, LedgerError> =>\n failpoint.hit(location).pipe(Effect.mapError((error) => internalFailure(operation)(error)));\n\n /**\n * Run one ledger mutation under the journal's Durable Object storage-backed transaction so\n * ownership-token and epoch checks are atomic with their writes (DUR-006). Transaction\n * failures surface as LedgerError carrying the typed `DoStorageError` as cause.\n */\n const inWriteTransaction = <\n A,\n E extends\n | AdmissionConflict\n | AdmissionPolicyError\n | ApprovalConflict\n | ChildReservationConflict\n | JoinedToHost\n | OwnershipLost\n | SettlementConflict\n | UnknownResolutionConflict\n | LedgerError,\n >(\n operation: string,\n effect: Effect.Effect<A, E>,\n expected?: (error: { readonly _tag: string }) => boolean,\n ): Effect.Effect<A, E | LedgerError> =>\n journal\n .withWriteTransaction(\n operation,\n expected,\n )(effect)\n .pipe(\n Effect.mapError((error) =>\n isDoStorageError(error) ? internalFailure(operation)(error) : error,\n ),\n );\n\n const mintUuid = (operation: string): Effect.Effect<string, LedgerError> =>\n crypto.randomUUIDv7().pipe(Effect.mapError((error) => internalFailure(operation)(error)));\n\n const currentInstant = Effect.map(Clock.currentTimeMillis, (millis) => ({\n millis,\n iso: new Date(millis).toISOString(),\n }));\n\n const decodeSubmissionRows = (operation: string, rowKey: string, rows: unknown) =>\n decodeRows(SubmissionRows, \"effect_agent_submissions\", rowKey, rows).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const readSubmission = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<Option.Option<SubmissionRow>, LedgerError> {\n const found = yield* cached(rows.submissions.by(\"submission_id\", submissionId), operation);\n\n return Option.fromUndefinedOr(found[0]);\n });\n\n const requireSubmission = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<SubmissionRow, LedgerError> {\n const submission = yield* readSubmission(operation, submissionId);\n\n if (Option.isNone(submission)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown submission ${submissionId}.`,\n });\n }\n\n return submission.value;\n });\n\n const requireOwner = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n ): Effect.fn.Return<void, OwnershipLost | LedgerError> {\n if (owner.hasOwner(submission.thread_id, submission.submission_id)) return;\n\n const submissionId = yield* decodeSubmissionId(submission.submission_id).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n return yield* OwnershipLost.make({ submissionId });\n });\n\n const submissions = new WeakMap<SubmissionRow, SubmissionSnapshot>();\n\n const decodeSubmissionSnapshot = Effect.fnUntraced(function* (\n operation: string,\n row: SubmissionRow,\n ): Effect.fn.Return<SubmissionSnapshot, LedgerError> {\n const existing = submissions.get(row);\n\n if (existing !== undefined) return existing;\n\n const decodeFailure = (error: Schema.SchemaError) =>\n internalFailure(operation)(\n DoStorageCorruptionError.make({\n table: \"effect_agent_submissions\",\n rowKey: row.submission_id,\n message: \"Stored submission does not satisfy the ledger schema\",\n diagnostic: ThreadStoreDiagnostic.make({\n causeTag: error._tag,\n operation,\n decoder: \"SubmissionSnapshot\",\n issueTag: error.issue._tag,\n }),\n }),\n );\n\n if ((row.parent_submission_id === null) !== (row.parent_tool_call_id === null)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n row.submission_id,\n \"A parent linkage must record both the parent Submission and the parent Tool Call.\",\n );\n }\n\n const admission = yield* decodeAdmissionFact(row).pipe(Effect.mapError(decodeFailure));\n\n const settledAt =\n row.finalized_at === null\n ? undefined\n : yield* decodeUtcInstant(row.finalized_at).pipe(Effect.mapError(decodeFailure));\n\n const readyAt =\n row.ready_at === null\n ? undefined\n : yield* decodeUtcInstant(row.ready_at).pipe(Effect.mapError(decodeFailure));\n\n const snapshot = yield* decodeSubmissionSnapshotType({\n ...admission,\n state: row.state,\n ...(row.settled_outcome === null ? {} : { settledOutcome: row.settled_outcome }),\n ...(settledAt === undefined ? {} : { settledAt }),\n ...(row.settled_record_id === null ? {} : { settledRecordId: row.settled_record_id }),\n ...(readyAt === undefined ? {} : { readyAt }),\n }).pipe(Effect.mapError(decodeFailure));\n\n submissions.set(row, snapshot);\n\n return snapshot;\n });\n\n const readCanonicalSettlement = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n ) {\n const expected = yield* decodeSubmissionSnapshot(operation, submission);\n const recordId = submissionSettlementRecordId(expected.submissionId);\n\n const found =\n yield* sql`SELECT ${recordBatchId(sql)} AS batch_id, record_id, ${canonicalRecordJson(sql)} AS record_json\n FROM effect_agent_canonical_records WHERE thread_id = ${submission.thread_id}\n AND record_id = ${JSON.stringify(recordId)}`.pipe(Effect.mapError(sqlFailure(operation)));\n\n const decoded = yield* decodeRows(\n CanonicalSettlementRows,\n \"effect_agent_canonical_records\",\n recordId,\n found,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (decoded.length === 0) return undefined;\n const row = decoded[0];\n\n if (\n decoded.length !== 1 ||\n row.batch_id !== submissionSettlementBatchId(expected.submissionId) ||\n row.record_id !== recordId\n )\n return yield* corruptionFailure(\n operation,\n \"effect_agent_canonical_records\",\n recordId,\n \"Canonical settlement identity is inconsistent.\",\n );\n\n const record = yield* decodeRecordEnvelopeText(row.record_json).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const settlement = yield* validateCanonicalSettlement(record, expected);\n\n return { record, settlement };\n });\n\n const readAbortIntent = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<Option.Option<AbortIntentRow>, LedgerError> {\n const found = yield* cached(rows.aborts.by(\"submission_id\", submissionId), operation);\n\n return Option.fromUndefinedOr(found[0]);\n });\n\n /**\n * Read the durable cross-store child-settlement markers recorded against one parent\n * Submission (the DC realization of the port's \"cross-store adapters record a durable\n * notification marker\" contract).\n */\n const readChildSettlementMarkers = Effect.fnUntraced(function* (\n operation: string,\n parentSubmissionId: string,\n ): Effect.fn.Return<ReadonlyArray<ChildSettlementMarkerRow>, LedgerError> {\n const found = yield* cached(\n rows.childSettlements.by(\"parent_submission_id\", parentSubmissionId),\n operation,\n );\n\n return found.toSorted((a, b) =>\n a.child_submission_id < b.child_submission_id\n ? -1\n : a.child_submission_id > b.child_submission_id\n ? 1\n : 0,\n );\n });\n\n /**\n * Whether one listed child is provably settled from THIS store: either its own row lives\n * here and is settled (single-store evidence, identical to the Node adapter), or a durable\n * cross-store notification marker was recorded for it (the child's row lives in another\n * Durable Object and its owner reported the settlement through `recordChildSettled`).\n */\n const childProvablySettled = Effect.fnUntraced(function* (\n operation: string,\n markerChildren: ReadonlySet<string>,\n childSubmissionId: string,\n ): Effect.fn.Return<boolean, LedgerError> {\n if (markerChildren.has(childSubmissionId)) return true;\n const childRow = yield* readSubmission(operation, childSubmissionId);\n\n return (\n Option.isSome(childRow) &&\n (yield* readCanonicalSettlement(operation, childRow.value)) !== undefined\n );\n });\n\n const decodeChildReservationRows = (operation: string, rowKey: string, rows: unknown) =>\n decodeRows(ChildReservationRows, \"effect_agent_child_reservations\", rowKey, rows).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const readChildReservation = Effect.fnUntraced(function* (\n operation: string,\n reservationId: string,\n ): Effect.fn.Return<Option.Option<ChildReservationRow>, LedgerError> {\n const rows = yield* sql<Record<string, unknown>>`\n SELECT ${sql.literal(CHILD_RESERVATION_COLUMNS)}\n FROM effect_agent_child_reservations\n WHERE reservation_id = ${reservationId}\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const decoded = yield* decodeChildReservationRows(operation, reservationId, rows);\n\n if (decoded.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n reservationId,\n \"A child reservation primary key returned more than one row.\",\n );\n }\n\n return decoded.length === 0 ? Option.none() : Option.some(decoded[0]);\n });\n\n const readChildReservationForCall = Effect.fnUntraced(function* (\n operation: string,\n parentSubmissionId: string,\n parentToolCallId: string,\n ): Effect.fn.Return<Option.Option<ChildReservationRow>, LedgerError> {\n const rows = yield* sql<Record<string, unknown>>`\n SELECT ${sql.literal(CHILD_RESERVATION_COLUMNS)}\n FROM effect_agent_child_reservations\n WHERE parent_submission_id = ${parentSubmissionId}\n AND parent_tool_call_id = ${parentToolCallId}\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const decoded = yield* decodeChildReservationRows(\n operation,\n `${parentSubmissionId}/${parentToolCallId}`,\n rows,\n );\n\n if (decoded.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n `${parentSubmissionId}/${parentToolCallId}`,\n \"A parent Tool Call returned more than one child reservation.\",\n );\n }\n\n return decoded.length === 0 ? Option.none() : Option.some(decoded[0]);\n });\n\n const childReservationSnapshotFromRow = Effect.fnUntraced(function* (\n operation: string,\n row: ChildReservationRow,\n ): Effect.fn.Return<ChildBudgetReservationSnapshot, LedgerError> {\n const rowFailure = (error: { readonly message: string }) =>\n corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n row.reservation_id,\n error.message,\n );\n\n const allocation = yield* parseStoredJsonText(row.allocation_json).pipe(\n Effect.mapError(rowFailure),\n );\n\n const accounting =\n row.accounting_json === null\n ? undefined\n : yield* parseStoredJsonText(row.accounting_json).pipe(Effect.mapError(rowFailure));\n\n return yield* decodeChildReservationSnapshotUnknown({\n reservationId: row.reservation_id,\n parentSubmissionId: row.parent_submission_id,\n parentToolCallId: row.parent_tool_call_id,\n status: row.status,\n allocation,\n allocationDigest: row.allocation_digest,\n reservedAt: row.reserved_at,\n ...(row.child_submission_id === null ? {} : { childSubmissionId: row.child_submission_id }),\n ...(accounting === undefined ? {} : { accounting }),\n ...(row.release_began_at === null ? {} : { releaseBeganAt: row.release_began_at }),\n ...(row.released_at === null ? {} : { releasedAt: row.released_at }),\n }).pipe(Effect.mapError(rowFailure));\n });\n\n const readApprovalDecisions = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<ReadonlyArray<ApprovalDecisionRow>, LedgerError> {\n const found = yield* cached(rows.approvals.by(\"submission_id\", submissionId), operation);\n\n return found.toSorted((a, b) =>\n a.tool_call_id < b.tool_call_id ? -1 : a.tool_call_id > b.tool_call_id ? 1 : 0,\n );\n });\n\n const approvalIntentFromRow = (\n operation: string,\n row: ApprovalDecisionRow,\n ): Effect.Effect<ApprovalDecisionIntent, LedgerError> =>\n decodeApprovalFact(row).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_approval_decisions\",\n `${row.submission_id}/${row.tool_call_id}`,\n error.message,\n ),\n ),\n );\n\n const readUnknownResolutions = Effect.fnUntraced(function* (\n operation: string,\n submissionId: string,\n ): Effect.fn.Return<ReadonlyArray<UnknownResolutionRow>, LedgerError> {\n const found = yield* cached(rows.resolutions.by(\"submission_id\", submissionId), operation);\n\n return found.toSorted((a, b) =>\n a.tool_call_id < b.tool_call_id ? -1 : a.tool_call_id > b.tool_call_id ? 1 : 0,\n );\n });\n\n const unknownResolutionIntentFromRow = Effect.fnUntraced(function* (\n operation: string,\n row: UnknownResolutionRow,\n ): Effect.fn.Return<UnknownResolutionIntent, LedgerError> {\n return yield* decodeResolutionFact(row).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_unknown_resolutions\",\n `${row.submission_id}/${row.tool_call_id}`,\n error.message,\n ),\n ),\n );\n });\n\n /** The Submission's marked-unknown open Tool Call identities, empty when never marked. */\n const storedUnknownToolCallIds = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n ): Effect.fn.Return<ReadonlyArray<typeof ToolCallIdSchema.Type>, LedgerError> {\n if (submission.unknown_tool_call_ids_json === null) return [];\n\n return yield* decodeToolCallIdsText(submission.unknown_tool_call_ids_json).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n submission.submission_id,\n error.message,\n ),\n ),\n );\n });\n\n /**\n * Canonical history is the abort authority (DUR-015): the intent's canonicalRecordId is\n * derived from the shared canonical-records table using the deterministic abort record\n * identity, never from a cached ledger marker.\n */\n const canonicalAbortRecordId = Effect.fnUntraced(function* (\n operation: string,\n threadId: string,\n submissionId: SubmissionId,\n ): Effect.fn.Return<AbortIntent[\"canonicalRecordId\"], LedgerError> {\n const recordId = submissionAbortRecordId(submissionId);\n\n const present = yield* journal\n .hasRecord(threadId, recordId)\n .pipe(Effect.mapError(internalFailure(operation)));\n\n return present ? recordId : undefined;\n });\n\n const abortIntentFromRow = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n submissionId: SubmissionId,\n row: AbortIntentRow,\n ): Effect.fn.Return<AbortIntent, LedgerError> {\n const canonicalRecordId = yield* canonicalAbortRecordId(\n operation,\n submission.thread_id,\n submissionId,\n );\n\n const fact = yield* decodeAbortFact(row).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_abort_intents\",\n row.submission_id,\n error.message,\n ),\n ),\n );\n\n return AbortIntent.make({\n ...fact,\n ...(canonicalRecordId === undefined ? {} : { canonicalRecordId }),\n });\n });\n\n // Durable Object storage is the single serialized owner: writes confirm through output\n // gates before any response is observable, which is exactly the single-owner crash\n // durability this adapter claims — under its own honest label (P7 WP0).\n const capabilities = Effect.succeed(\n LedgerCapabilities.make({ durability: \"durable-cloudflare\" }),\n );\n\n const admit: SubmissionLedger[\"Service\"][\"admit\"] = Effect.fnUntraced(function* (\n request: AdmissionRequest,\n options?: { readonly readyIfInitialized?: boolean },\n ) {\n const operation = \"ledger admit\";\n\n const validated = yield* decodeAdmissionRequestType(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const inputJson = yield* encodePersistedJsonText(validated.inputPayload).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n // The platform's ~2 MB per-value bound, refused typed BEFORE any durable mutation\n // (resource-limits gate; oversized payloads are the designed R2 overflow path).\n yield* journal\n .checkValueBound(operation, inputJson)\n .pipe(Effect.mapError(internalFailure(operation)));\n\n const workerAdmissionJson =\n validated.workerAdmission === undefined\n ? null\n : yield* Schema.encodeEffect(Schema.fromJsonString(WorkerAdmission))(\n validated.workerAdmission,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (\n workerAdmissionJson !== null &&\n new TextEncoder().encode(workerAdmissionJson).byteLength > config.maxStoredValueBytes\n ) {\n return yield* LedgerError.make({\n operation,\n message: \"Worker admission metadata exceeds the stored value bound\",\n });\n }\n\n const messageAdmissionJson =\n validated.messageAdmission === undefined\n ? null\n : yield* Schema.encodeEffect(Schema.fromJsonString(InputMessage))(\n validated.messageAdmission,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (\n messageAdmissionJson !== null &&\n new TextEncoder().encode(messageAdmissionJson).byteLength > config.maxStoredValueBytes\n ) {\n return yield* LedgerError.make({\n operation,\n message: \"Message admission metadata exceeds the stored value bound\",\n });\n }\n\n const agentDigestsJson = yield* encodeDefinitionDigestsText(validated.agentDigests).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n // Routable Submission identity (D-P6-5): `{uuidv7}:{threadId}`. The cross-DO\n // routing layer parses ITS OWN minted format (split at the first \":\") to address\n // submissionId-only operations to the owning Thread Object; the id stays opaque\n // to every other component, exactly like DN's `submission-{uuid}` prefix.\n const mintedSubmissionId = `${yield* mintUuid(operation)}:${validated.threadId}`;\n\n if (mintedSubmissionId.length > MAX_IDENTIFIER_LENGTH) {\n return yield* LedgerError.make({\n operation,\n message:\n `A routable Submission identity of ${mintedSubmissionId.length} characters exceeds ` +\n `the ${MAX_IDENTIFIER_LENGTH}-character ledger row bound; shorten the Thread identity.`,\n });\n }\n const mintedReceiptId = `receipt-${yield* mintUuid(operation)}`;\n\n yield* hitFailpoint(\"ledger:admit:before\", operation);\n\n const result = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const keyRowKey = `${validated.threadId}/${validated.principal}/${validated.idempotencyKey}`;\n\n const existing = yield* byKey(validated, operation);\n\n if (existing.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n keyRowKey,\n \"An admission idempotency key returned more than one row.\",\n );\n }\n if (existing.length === 1) {\n // A replay must repeat the exact canonical input AND the exact parent linkage (or\n // its absence): linkage is immutable child lineage (spec §12 step 5, SUB-016).\n const sameLinkage =\n validated.parentLinkage === undefined\n ? existing[0].parent_submission_id === null &&\n existing[0].parent_tool_call_id === null\n : existing[0].parent_submission_id === validated.parentLinkage.parentSubmissionId &&\n existing[0].parent_tool_call_id === validated.parentLinkage.parentToolCallId;\n\n if (existing[0].input_digest !== validated.inputDigest || !sameLinkage) {\n return yield* AdmissionConflict.make({\n threadId: validated.threadId,\n principal: validated.principal,\n idempotencyKey: validated.idempotencyKey,\n existingInputDigest: existing[0].input_digest,\n attemptedInputDigest: validated.inputDigest,\n });\n }\n\n const retainedWorkerAdmission =\n existing[0].worker_admission_json === null\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(WorkerAdmission))(\n existing[0].worker_admission_json,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const retainedInputMessage =\n existing[0].message_admission_json === null\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(InputMessage))(\n existing[0].message_admission_json,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const retainedFence =\n existing[0].admission_fence_json === null\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(AdmissionFence))(\n existing[0].admission_fence_json,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (\n (existing[0].admission_group ?? undefined) !== validated.admissionGroup ||\n !Schema.toEquivalence(Schema.optional(WorkerAdmission))(\n retainedWorkerAdmission,\n validated.workerAdmission,\n ) ||\n !Schema.toEquivalence(Schema.optional(InputMessage))(\n retainedInputMessage,\n validated.messageAdmission,\n ) ||\n !Schema.toEquivalence(Schema.optional(AdmissionFence))(\n retainedFence,\n validated.admissionFence,\n )\n )\n return yield* AdmissionConflict.make({\n threadId: validated.threadId,\n principal: validated.principal,\n idempotencyKey: validated.idempotencyKey,\n existingInputDigest: existing[0].input_digest,\n attemptedInputDigest: validated.inputDigest,\n });\n\n return yield* decodeAdmissionResult({\n submissionId: existing[0].submission_id,\n receiptId: existing[0].receipt_id,\n queueSequence: existing[0].queue_sequence,\n state: existing[0].state,\n replayed: true,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }\n\n if (!admissionFitsTransfer(validated.threadId, validated))\n return yield* LedgerError.make({\n operation,\n message: \"Admission exceeds the complete transfer page byte bound\",\n });\n\n const stopped = yield* cached(\n rows.workerStops.by(\"thread_id\", validated.threadId),\n operation,\n );\n\n if (stopped.length > 0)\n return yield* AdmissionPolicyError.make({ reason: \"refused\", code: \"worker-stopped\" });\n\n // The first accepted input fixes ordinary/worker lane identity atomically with admission.\n // Canonical origin materialization can lag admission; a log scan cannot fence that race.\n const firstRows = yield* sql<Record<string, unknown>>`\n SELECT worker_admission_json FROM effect_agent_submissions\n WHERE thread_id=${validated.threadId} ORDER BY queue_sequence LIMIT 1\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const first = yield* decodeFirstWorkerAdmissions(firstRows).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n if (first[0] !== undefined) {\n const previous =\n first[0].worker_admission_json === null\n ? undefined\n : yield* Schema.decodeEffect(Schema.fromJsonString(WorkerAdmission))(\n first[0].worker_admission_json,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n if (!equivalentWorkerOrigin(previous?.origin, validated.workerAdmission?.origin))\n return yield* AdmissionPolicyError.make({\n reason: \"refused\",\n code: \"worker-origin-conflict\",\n });\n }\n\n yield* admissionFence.check(validated);\n if (validated.admissionGroup !== undefined) {\n const occupied = yield* sql<Record<string, unknown>>`\n SELECT submission_id FROM effect_agent_submissions\n WHERE thread_id=${validated.threadId} AND admission_group=${validated.admissionGroup} AND state<>'settled' LIMIT 1\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n if (occupied.length > 0)\n return yield* AdmissionPolicyError.make({\n reason: \"occupied\",\n code: \"admission-group\",\n });\n }\n\n const maxRows = yield* sql<Record<string, unknown>>`\n SELECT COALESCE(MAX(queue_sequence), 0) AS max_queue_sequence\n FROM effect_agent_submissions\n WHERE thread_id = ${validated.threadId}\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const decodedMax = yield* decodeRows(\n MaxQueueSequenceRows,\n \"effect_agent_submissions\",\n validated.threadId,\n maxRows,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const queueSequence = yield* decodeQueueSequence(\n (decodedMax[0]?.max_queue_sequence ?? 0) + 1,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const now = yield* currentInstant;\n\n // The first canonical record is ThreadCreated. This is the same positive-tail proof\n // used by ensureThreadCreated, captured under this admission's owner transaction.\n const ready =\n options?.readyIfInitialized === true &&\n validated.workerAdmission === undefined &&\n (yield* journal\n .getThread(validated.threadId)\n .pipe(Effect.mapError(internalFailure(operation)))).some(\n (thread) => thread.tail_sequence > 0,\n );\n\n yield* sql`\n INSERT INTO effect_agent_submissions (\n submission_id,\n thread_id,\n queue_sequence,\n principal,\n idempotency_key,\n agent_id,\n definition_key,\n deployment_id,\n input_json,\n input_digest,\n receipt_id,\n state,\n created_at,\n ready_at,\n parent_submission_id,\n parent_tool_call_id,\n admission_group,\n admission_fence_json,\n worker_admission_json,\n message_admission_json\n ) VALUES (\n ${mintedSubmissionId},\n ${validated.threadId},\n ${queueSequence},\n ${validated.principal},\n ${validated.idempotencyKey},\n ${validated.agentId},\n ${yield* physical.definition(agentDigestsJson).pipe(Effect.mapError(internalFailure(operation)))},\n ${validated.deploymentId},\n ${inputJson},\n ${validated.inputDigest},\n ${mintedReceiptId},\n ${ready ? \"ready\" : \"admitted\"},\n ${now.iso},\n ${ready ? now.iso : null},\n ${validated.parentLinkage?.parentSubmissionId ?? null},\n ${validated.parentLinkage?.parentToolCallId ?? null},\n ${validated.admissionGroup ?? null},\n ${validated.admissionFence === undefined ? null : JSON.stringify(validated.admissionFence)},\n ${workerAdmissionJson},\n ${messageAdmissionJson}\n )\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n if (queueSequence === 1) {\n const threads = yield* journal\n .getThread(validated.threadId)\n .pipe(Effect.mapError(internalFailure(operation)));\n\n if (threads.length === 0)\n yield* journal.work\n .initialize(validated.threadId)\n .pipe(Effect.mapError(internalFailure(operation)));\n }\n\n // The INSERT (never replay or hydration) proves these new submission-owned sets\n // empty. Gated writes update them; rollback/invalidation discards that proof.\n // MAX(queue_sequence) and this insert share the transaction: no later row exists.\n // Every matching admission invalidates this complete empty suffix before readiness.\n submissionViews.seedMatching(\n JSON.stringify([\"joining-suffix\", validated.threadId, queueSequence]),\n (row) => row.thread_id === validated.threadId && row.queue_sequence > queueSequence,\n [],\n 0,\n );\n rows.aborts.seed(\"submission_id\", mintedSubmissionId, []);\n rows.submissions.seed(\"joined_host_submission_id\", mintedSubmissionId, []);\n rows.approvals.seed(\"submission_id\", mintedSubmissionId, []);\n rows.resolutions.seed(\"submission_id\", mintedSubmissionId, []);\n rows.childReservations.seed(\"parent_submission_id\", mintedSubmissionId, []);\n rows.childSettlements.seed(\"parent_submission_id\", mintedSubmissionId, []);\n\n yield* recordProgress(\"submission\", operation);\n\n const admitted = yield* decodeAdmissionResult({\n submissionId: mintedSubmissionId,\n receiptId: mintedReceiptId,\n queueSequence,\n state: ready ? \"ready\" : \"admitted\",\n replayed: false,\n }).pipe(Effect.mapError(internalFailure(operation)));\n\n if (ready && lifecycle !== undefined)\n yield* retainLifecycle(yield* requireSubmission(operation, mintedSubmissionId), {\n _tag: \"SubmissionReady\",\n submissionId: admitted.submissionId,\n });\n\n return admitted;\n }),\n );\n\n yield* hitFailpoint(\"ledger:admit:after\", operation);\n\n return result;\n });\n\n const markReady: SubmissionLedger[\"Service\"][\"markReady\"] = Effect.fnUntraced(function* (\n request: MarkReadyRequest,\n ) {\n const operation = \"ledger mark ready\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(MarkReadyRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:mark-ready:before\", operation);\n yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state !== \"admitted\") return;\n const now = yield* currentInstant;\n\n yield* sql`\n UPDATE effect_agent_submissions\n SET state = 'ready', ready_at = ${now.iso}\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n yield* recordProgress(\"submission\", operation);\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionReady\",\n submissionId: validated.submissionId,\n });\n }),\n );\n yield* hitFailpoint(\"ledger:mark-ready:after\", operation);\n });\n\n const resolveFundingOwner: NonNullable<SubmissionLedger[\"Service\"][\"resolveFundingOwner\"]> =\n Effect.fnUntraced(function* (input) {\n const operation = \"resolve funding owner\";\n\n const request = yield* Schema.decodeEffect(FundingOwnerRequest)(input).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const selected = yield* requireSubmission(operation, request.submissionId);\n\n if (selected.thread_id !== request.threadId)\n return yield* LedgerError.make({\n operation,\n message: \"Selected funding input belongs to another Thread.\",\n });\n if (selected.state === \"joining\")\n return yield* LedgerError.make({\n operation,\n message: \"Selected funding input is still joining; retry after durable binding.\",\n });\n const hostId = selected.joined_host_submission_id;\n\n if (hostId === null && selected.state === \"joined\")\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n selected.submission_id,\n \"Joined input has no stable host identity.\",\n );\n if (hostId !== null && selected.state !== \"joined\" && selected.state !== \"settled\")\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n selected.submission_id,\n \"Host linkage is inconsistent with selected input state.\",\n );\n const owner = hostId === null ? selected : yield* requireSubmission(operation, hostId);\n\n if (\n owner.thread_id !== request.threadId ||\n (hostId !== null &&\n (owner.submission_id === selected.submission_id ||\n owner.joined_host_submission_id !== null ||\n owner.state === \"joining\" ||\n owner.state === \"joined\" ||\n owner.queue_sequence >= selected.queue_sequence))\n )\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n selected.submission_id,\n \"Funding host is not a stable earlier input in this Thread.\",\n );\n\n return yield* Schema.decodeEffect(Schema.toType(FundingOwner))({\n selected: yield* decodeSubmissionSnapshot(operation, selected),\n owner: yield* decodeSubmissionSnapshot(operation, owner),\n }).pipe(Effect.mapError(internalFailure(operation)));\n }, state.read);\n\n const lookup: SubmissionLedger[\"Service\"][\"lookup\"] = Effect.fnUntraced(function* (\n request: SubmissionLookup,\n ) {\n const operation = \"ledger lookup\";\n\n const validated = yield* decodeSubmissionLookupType(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n if (validated._tag === \"SubmissionLookupById\") {\n const row = yield* readSubmission(operation, validated.submissionId);\n\n if (Option.isNone(row)) return Option.none();\n\n return Option.some(yield* decodeSubmissionSnapshot(operation, row.value));\n }\n\n const decoded = yield* byKey(validated, operation);\n\n if (decoded.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n `${validated.threadId}/${validated.principal}/${validated.idempotencyKey}`,\n \"An admission idempotency key returned more than one row.\",\n );\n }\n if (decoded.length === 0) return Option.none();\n\n return Option.some(yield* decodeSubmissionSnapshot(operation, decoded[0]));\n });\n\n // This LOCAL facet is the authoritative owner of every Thread stored in this Durable\n // Object, so the key-scoped read IS the admission truth and the tri-state degenerates to\n // NotAdmitted or Admitted (SUB-031). `AdmissionIndeterminate` becomes real one layer out:\n // the WP2 routed decorator answers it when the OWNING Durable Object is unreachable.\n const resolveAdmission: SubmissionLedger[\"Service\"][\"resolveAdmission\"] = Effect.fnUntraced(\n function* (request: SubmissionLookupByKey) {\n const operation = \"ledger resolve admission\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(SubmissionLookupByKey))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const decoded = yield* byKey(validated, operation);\n\n if (decoded.length > 1) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n `${validated.threadId}/${validated.principal}/${validated.idempotencyKey}`,\n \"An admission idempotency key returned more than one row.\",\n );\n }\n if (decoded.length === 0) return AdmissionNotAdmitted.make();\n\n return AdmissionAdmitted.make({\n submission: yield* decodeSubmissionSnapshot(operation, decoded[0]),\n });\n },\n );\n\n const selectHead: SubmissionLedger[\"Service\"][\"selectHead\"] = Effect.fn(\n \"DoSubmissionLedger.selectHead\",\n )(function* (request: ClaimRequest) {\n const operation = \"ledger select head\";\n\n const validated = yield* decodeClaimRequestType(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const attemptId = `attempt-${yield* mintUuid(operation)}`;\n\n yield* hitFailpoint(\"ledger:claim:before\", operation);\n\n const claimed = yield* owner.withMutation(\n Effect.gen(function* () {\n if (owner.hasOwner(validated.threadId)) return Option.none<Claim>();\n\n const active = yield* activeNonterminal;\n const heads: Array<SubmissionRow> = [];\n\n const limit =\n validated.handoff === undefined ? 1 : validated.handoff.deferredSubmissionIds.length + 1;\n\n if (active.length <= 128) {\n const candidates = active\n .filter((row) => row.thread_id === validated.threadId)\n .sort((left, right) => left.queue_sequence - right.queue_sequence);\n\n for (const candidate of candidates) {\n if (\n candidate.state === \"unknown\" &&\n Option.isNone(yield* readAbortIntent(operation, candidate.submission_id))\n )\n continue;\n heads.push(yield* requireSubmission(operation, candidate.submission_id));\n if (heads.length === limit) break;\n }\n } else {\n const headRows = yield* sql<Record<string, unknown>>`\n SELECT ${submissionColumns}\n FROM effect_agent_submissions\n WHERE thread_id = ${validated.threadId}\n AND state <> 'settled'\n AND (\n state <> 'unknown' OR EXISTS (\n SELECT 1 FROM effect_agent_abort_intents\n WHERE submission_id = effect_agent_submissions.submission_id\n )\n )\n ORDER BY queue_sequence ASC\n LIMIT ${validated.handoff === undefined ? 1 : validated.handoff.deferredSubmissionIds.length + 1}\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n heads.push(...(yield* decodeSubmissionRows(operation, validated.threadId, headRows)));\n }\n\n if (heads.length === 0) return Option.none<Claim>();\n let head = heads[0];\n\n if (validated.handoff !== undefined) {\n const handoff = validated.handoff;\n\n for (const candidate of heads) {\n if (candidate.submission_id === handoff.submissionId) {\n head = candidate;\n break;\n }\n if (\n !handoff.deferredSubmissionIds.some((id) => id === candidate.submission_id) ||\n candidate.state !== \"input-applied\" ||\n Option.isSome(yield* readAbortIntent(operation, candidate.submission_id))\n )\n return Option.none<Claim>();\n }\n if (\n head.submission_id !== handoff.submissionId ||\n (head.state !== \"ready\" && head.state !== \"input-applied\")\n )\n return Option.none<Claim>();\n }\n\n // Approval/delegation suspension and joined work retain their queue barrier.\n // Unknown work with an abort intent is selected for cleanup without Tool replay.\n if (\n head.state === \"joining\" ||\n head.state === \"joined\" ||\n head.state === \"suspended\" ||\n (head.state === \"unknown\" &&\n Option.isNone(yield* readAbortIntent(operation, head.submission_id)))\n ) {\n return Option.none<Claim>();\n }\n\n const inputPayload = yield* parseStoredJsonText(head.input_json).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n head.submission_id,\n error.message,\n ),\n ),\n );\n\n return Option.some(\n yield* decodeClaim({\n submissionId: head.submission_id,\n attemptId,\n inputPayload,\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n }),\n );\n\n yield* hitFailpoint(\"ledger:claim:after\", operation);\n\n return claimed;\n });\n\n const markInputAppliedInTransaction = Effect.fnUntraced(function* (\n validated: MarkInputAppliedRequest,\n ) {\n const operation = \"ledger mark input applied\";\n\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n yield* requireOwner(operation, submission);\n if (submission.input_applied_record_id !== null) {\n if (\n submission.input_applied_record_id === validated.recordId &&\n submission.input_applied_sequence === validated.sequence\n ) {\n return;\n }\n\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A different canonical input marker is already recorded for this Submission.\",\n );\n }\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n input_applied_record_id = ${validated.recordId},\n input_applied_sequence = ${validated.sequence},\n state = CASE\n WHEN state IN ('admitted', 'ready') THEN 'input-applied'\n ELSE state\n END\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n });\n\n const markInputApplied: SubmissionLedger[\"Service\"][\"markInputApplied\"] = Effect.fnUntraced(\n function* (request: MarkInputAppliedRequest) {\n const operation = \"ledger mark input applied\";\n\n const validated = yield* decodeMarkInputAppliedRequestType(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:mark-input-applied:before\", operation);\n yield* inWriteTransaction(operation, markInputAppliedInTransaction(validated));\n yield* hitFailpoint(\"ledger:mark-input-applied:after\", operation);\n },\n );\n\n const appendInput: NonNullable<SubmissionLedger[\"Service\"][\"appendInput\"]> = Effect.fnUntraced(\n function* (submissionId, request) {\n const operation = \"append original input and context\";\n\n const prepared = yield* prepareCanonicalAppend(request).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n );\n\n const record = prepared.request.batch.records[0];\n\n const context = prepared.request.executions\n ?.flatMap((update) => update.facts ?? [])\n .find(({ payload }) => payload._tag === \"RunContextRecorded\");\n\n if (\n prepared.request.executions?.length !== 1 ||\n prepared.request.executions[0]?.previousRevision !== 0 ||\n prepared.request.batch.records.length !== 1 ||\n record?.payload._tag !== \"UserInputRecorded\" ||\n record.payload.kind !== \"user\" ||\n record.payload.submissionId !== submissionId ||\n record.payload.runId !== runIdForSubmission(submissionId) ||\n record.recordId !== submissionInputRecordId(submissionId) ||\n prepared.request.batch.batchId !== submissionInputBatchId(submissionId) ||\n (context?.payload._tag === \"RunContextRecorded\" &&\n context.payload.historyThrough !== prepared.request.expectedTailSequence)\n )\n return yield* ThreadStoreError.make({\n operation,\n message: \"Original input publication has a different context boundary\",\n });\n\n const mapError = (cause: { readonly message: string }) =>\n ThreadStoreError.make({ operation, message: cause.message, cause });\n\n yield* journal.prepareAppend(prepared.raw).pipe(Effect.mapError(mapError));\n\n return yield* owner.withProgress(\n prepared.request.threadId,\n owner.withMutation(\n Effect.gen(function* () {\n yield* hitFailpoint(\"append:before\", operation);\n yield* hitFailpoint(\"ledger:mark-input-applied:before\", operation);\n\n const result = yield* journal\n .withWriteTransaction(operation)(\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, submissionId);\n\n yield* requireOwner(operation, submission);\n if (submission.thread_id !== prepared.request.threadId)\n return yield* LedgerError.make({\n operation,\n message: \"Original input belongs to another Thread\",\n });\n const result = yield* journal.appendPrepared(prepared.raw);\n\n yield* markInputAppliedInTransaction(\n MarkInputAppliedRequest.make({\n submissionId,\n recordId: record.recordId,\n sequence: result.firstSequence,\n }),\n );\n\n return result;\n }),\n )\n .pipe(\n Effect.mapError((error) =>\n error._tag === \"DoAppendConflict\"\n ? AppendConflict.make({\n threadId: prepared.request.threadId,\n batchId: prepared.request.batch.batchId,\n reason: error.reason,\n ...(error.actualTailSequence === undefined\n ? {}\n : { actualTailSequence: error.actualTailSequence }),\n })\n : error._tag === \"OwnershipLost\"\n ? error\n : mapError(error),\n ),\n );\n\n yield* hitFailpoint(\"ledger:mark-input-applied:after\", operation);\n yield* hitFailpoint(\"append:after\", operation);\n\n return result;\n }).pipe(\n Effect.mapError((error) =>\n error._tag === \"OwnershipLost\" ||\n error._tag === \"ThreadStoreError\" ||\n error._tag === \"AppendConflict\"\n ? error\n : mapError(error),\n ),\n ),\n ),\n );\n },\n );\n\n const publish: SettlementPublisher[\"Service\"][\"publish\"] = Effect.fn(\n \"DoSubmissionLedger.publishSettlement\",\n )(function* (input) {\n const operation = \"publish settlement\";\n const { request, record, settlement } = yield* validatePublication(input);\n\n const prepared = yield* prepareCanonicalAppend(request.append).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n );\n\n const mapAppendError = (error: { readonly _tag: string; readonly message: string }) =>\n ThreadStoreError.make({ operation, message: error.message, cause: error });\n\n yield* journal.prepareAppend(prepared.raw).pipe(Effect.mapError(mapAppendError));\n\n return yield* owner.withProgress(\n request.append.threadId,\n owner.withMutation(\n Effect.gen(function* () {\n yield* hitFailpoint(\"append:before\", operation);\n\n const result = yield* journal\n .withWriteTransaction(operation)(\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, request.submissionId);\n\n if (submission.thread_id !== prepared.request.threadId)\n return yield* LedgerError.make({\n operation,\n message: \"Settlement publication belongs to another Thread.\",\n });\n const snapshot = yield* decodeSubmissionSnapshot(operation, submission);\n\n yield* validateCanonicalSettlement(record, snapshot);\n const existing = yield* readCanonicalSettlement(operation, submission);\n const thread = (yield* journal.getThread(prepared.request.threadId))[0];\n\n if (thread === undefined)\n return yield* ThreadNotMaterialized.make({ threadId: prepared.request.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 yield* requireOwner(operation, submission);\n yield* validateCanonicalSettlement(record, {\n submissionId: request.submissionId,\n receiptId: snapshot.receiptId,\n ...(settlement.outcome === \"aborted\" && settlement.runId === undefined\n ? {}\n : { runId: runIdForSubmission(request.submissionId) }),\n });\n break;\n case \"Joined\": {\n if (\n (submission.state !== \"joined\" &&\n !(submission.state === \"settled\" && existing !== undefined)) ||\n submission.joined_host_submission_id !== request.authority.hostSubmissionId\n )\n return yield* LedgerError.make({\n operation,\n message: \"Submission is not joined to the named host.\",\n });\n\n const host = yield* requireSubmission(\n operation,\n request.authority.hostSubmissionId,\n );\n\n if (host.thread_id !== submission.thread_id)\n return yield* LedgerError.make({\n operation,\n message: \"Joined host belongs to another Thread.\",\n });\n const canonicalHost = yield* readCanonicalSettlement(operation, host);\n\n if (canonicalHost === undefined)\n return yield* LedgerError.make({\n operation,\n message: \"Joined host has no canonical settlement.\",\n });\n yield* validateJoinedSettlement(settlement, canonicalHost.settlement);\n break;\n }\n case \"QueuedAbort\":\n if (\n (submission.state !== \"ready\" &&\n !(submission.state === \"settled\" && existing !== undefined)) ||\n settlement.outcome !== \"aborted\" ||\n Option.isNone(yield* readAbortIntent(operation, request.submissionId)) ||\n owner.hasOwner(submission.thread_id, request.submissionId)\n )\n return yield* LedgerError.make({\n operation,\n message: \"Queued abort is no longer authorized.\",\n });\n yield* validateCanonicalSettlement(record, {\n submissionId: request.submissionId,\n receiptId: snapshot.receiptId,\n runId: undefined,\n });\n }\n if (existing !== undefined) {\n yield* journal.checkCommitIntent(prepared.raw);\n\n return SettlementPublicationResult.make({\n record: existing.record,\n tailSequence: thread.tail_sequence,\n replayed: true,\n });\n }\n if (submission.state === \"settled\")\n return yield* LedgerError.make({\n operation,\n message: \"Finalized Submission has no canonical settlement.\",\n });\n const appended = yield* journal.appendPrepared(prepared.raw);\n\n return SettlementPublicationResult.make({\n record,\n tailSequence: appended.lastSequence,\n replayed: appended.replayed,\n });\n }),\n )\n .pipe(\n Effect.mapError((error) => {\n if (error._tag === \"DoAppendConflict\")\n return AppendConflict.make({\n threadId: prepared.request.threadId,\n batchId: prepared.request.batch.batchId,\n reason: error.reason,\n ...(error.actualTailSequence !== undefined\n ? {\n actualTailSequence: error.actualTailSequence,\n }\n : {}),\n });\n\n return isDoStorageError(error) ||\n error._tag === \"DoStorageCorruptionError\" ||\n error._tag === \"DoStorageFailpointError\" ||\n error._tag === \"DoValueBoundExceeded\"\n ? mapAppendError(error)\n : error;\n }),\n );\n\n yield* hitFailpoint(\"append:after\", operation);\n\n return result;\n }),\n ),\n );\n });\n\n const validateFinalization = Effect.fnUntraced(function* (\n validated: SettlementFinalization,\n submission: SubmissionRow,\n ) {\n const operation = \"ledger finalize settlement\";\n const canonical = yield* readCanonicalSettlement(operation, submission);\n\n if (canonical === undefined)\n return yield* LedgerError.make({\n operation,\n message: `No canonical settlement exists for submission ${validated.submissionId}.`,\n });\n if (canonical.settlement.settlementId !== validated.settlementId)\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: canonical.settlement.outcome,\n });\n\n return { ...canonical, settlementFailure: settlementFailureFromRecord(canonical.record) };\n });\n\n const replayFinalization = Effect.fnUntraced(function* (\n validated: SettlementFinalization,\n submission: SubmissionRow,\n {\n record,\n settlement,\n settlementFailure,\n }: Effect.Success<ReturnType<typeof validateFinalization>>,\n ) {\n const operation = \"ledger finalize settlement\";\n\n if (\n submission.finalized_at === null ||\n submission.settled_record_id !== record.recordId ||\n submission.settled_outcome !== settlement.outcome\n )\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"Settled projection disagrees with its canonical settlement.\",\n );\n\n return yield* decodeSettlement({\n submissionId: validated.submissionId,\n settlementId: validated.settlementId,\n receiptId: submission.receipt_id,\n outcome: settlement.outcome,\n ...(settlementFailure === undefined ? {} : { failure: settlementFailure }),\n settledAt: submission.finalized_at,\n }).pipe(Effect.mapError(internalFailure(operation)));\n });\n\n const finalizeSettlement: SubmissionLedger[\"Service\"][\"finalizeSettlement\"] = Effect.fn(\n \"DoSubmissionLedger.finalizeSettlement\",\n )(function* (request: SettlementFinalization) {\n const operation = \"ledger finalize settlement\";\n\n const validated = yield* decodeSettlementFinalizationType(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:finalize-settlement:before\", operation);\n\n // Read the immutable receipt under the same gate as every local write.\n const replay = yield* state.read(\n Effect.gen(function* () {\n const submission = yield* readSubmission(operation, validated.submissionId);\n\n if (Option.isNone(submission) || submission.value.state !== \"settled\") return Option.none();\n\n const finalization = yield* validateFinalization(validated, submission.value);\n\n return Option.some({\n settlement: yield* replayFinalization(validated, submission.value, finalization),\n threadId: submission.value.thread_id,\n });\n }),\n );\n\n if (Option.isSome(replay)) {\n owner.closeSubmission(replay.value.threadId, validated.submissionId);\n yield* hitFailpoint(\"ledger:finalize-settlement:after\", operation);\n\n return replay.value.settlement;\n }\n\n const settlement = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n const state = yield* validateFinalization(validated, submission);\n\n const {\n settlement: canonicalSettlement,\n record: canonicalRecord,\n settlementFailure,\n } = state;\n\n if (submission.state === \"settled\")\n return {\n settlement: yield* replayFinalization(validated, submission, state),\n threadId: submission.thread_id,\n };\n const now = yield* currentInstant;\n\n const terminal =\n submission.worker_admission_json === null\n ? undefined\n : workerTerminalFromRecord(\n yield* decodeSubmissionSnapshot(operation, submission),\n canonicalRecord,\n );\n\n let sealedTerminal: typeof terminal;\n\n if (terminal !== undefined) {\n // Admission and finalization serialize here. An accepted correction that this Run\n // has not applied vetoes its completion, including admission after RunCompleted.\n const pending =\n terminal === \"completed\"\n ? yield* sql`SELECT submission_id FROM effect_agent_submissions\n WHERE thread_id = ${submission.thread_id} AND queue_sequence > ${submission.queue_sequence}\n AND queue_sequence = (SELECT MAX(queue_sequence) FROM effect_agent_submissions WHERE thread_id = ${submission.thread_id})\n AND (joined_host_submission_id IS NULL OR joined_host_submission_id <> ${submission.submission_id}\n OR input_applied_record_id IS NULL) LIMIT 1`.pipe(\n Effect.mapError(sqlFailure(operation)),\n )\n : [];\n\n if (pending.length === 0) {\n const sealed =\n yield* sql`INSERT OR IGNORE INTO effect_agent_worker_stops (thread_id, terminal)\n VALUES (${submission.thread_id}, ${terminal}) RETURNING *`.pipe(\n rows.workerStops.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* sql`INSERT OR IGNORE INTO effect_agent_abort_intents (submission_id, author, reason, requested_at)\n SELECT submission_id, ${submission.principal}, ${`Worker assignment ${terminal}`}, ${now.iso}\n FROM effect_agent_submissions WHERE thread_id = ${submission.thread_id} AND state <> 'settled'\n AND submission_id <> ${submission.submission_id}\n AND (joined_host_submission_id IS NULL OR joined_host_submission_id <> ${submission.submission_id}\n OR input_applied_record_id IS NULL) RETURNING *`.pipe(\n rows.aborts.write,\n Effect.mapError(internalFailure(operation)),\n );\n if (sealed.length > 0) sealedTerminal = terminal;\n }\n }\n\n yield* sql`\n UPDATE effect_agent_submissions\n SET state = 'settled', settled_outcome = ${canonicalSettlement.outcome},\n settled_record_id = ${canonicalRecord.recordId}, finalized_at = ${now.iso}\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* recordProgress(\"submission\", operation);\n\n if (sealedTerminal !== undefined)\n yield* retainWorkerSeal(submission.thread_id, sealedTerminal);\n\n return {\n threadId: submission.thread_id,\n settlement: yield* decodeSettlement({\n submissionId: validated.submissionId,\n settlementId: validated.settlementId,\n receiptId: submission.receipt_id,\n outcome: canonicalSettlement.outcome,\n ...(settlementFailure === undefined ? {} : { failure: settlementFailure }),\n settledAt: now.iso,\n }).pipe(Effect.mapError(internalFailure(operation))),\n };\n }),\n );\n\n owner.closeSubmission(settlement.threadId, validated.submissionId);\n yield* hitFailpoint(\"ledger:finalize-settlement:after\", operation);\n\n return settlement.settlement;\n });\n\n const inspectWorker = Effect.fnUntraced(function* (threadId: SubmissionSnapshot[\"threadId\"]) {\n const operation = \"inspect worker\";\n\n return yield* state\n .transaction(\n Effect.gen(function* () {\n const read = Effect.fnUntraced(function* (active: boolean) {\n const rows = yield* sql`SELECT ${submissionColumns} FROM effect_agent_submissions\n WHERE thread_id = ${threadId} ${active ? sql`AND state <> 'settled'` : sql``}\n ORDER BY queue_sequence ${active ? sql`ASC` : sql`DESC`} LIMIT 1`.pipe(\n Effect.mapError(sqlFailure(operation)),\n );\n\n const decoded = yield* decodeSubmissionRows(operation, threadId, rows);\n\n return decoded[0] === undefined\n ? null\n : yield* decodeSubmissionSnapshot(operation, decoded[0]);\n });\n\n const latest = yield* read(false);\n const active = yield* read(true);\n\n const stops = yield* cached(rows.workerStops.by(\"thread_id\", threadId), operation);\n\n return yield* Schema.decodeEffect(Schema.toType(WorkerLedgerState))({\n latest,\n active,\n stopped: stops.length > 0,\n ...(stops[0] === undefined || stops[0].terminal === null\n ? {}\n : { terminal: stops[0].terminal }),\n }).pipe(Effect.mapError(internalFailure(operation)));\n }),\n )\n .pipe(\n Effect.provideService(SqlClientService.SqlClient, sql),\n Effect.catchTag(\"SqlError\", (cause) => sqlFailure(operation)(cause)),\n );\n });\n\n const stopWorker = Effect.fnUntraced(function* (request: WorkerStopCommand) {\n const operation = \"ledger stop worker\";\n\n const validated = yield* Schema.decodeEffect(WorkerStopCommand)(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n return yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const now = yield* currentInstant;\n\n const sealed =\n yield* sql`INSERT OR IGNORE INTO effect_agent_worker_stops (thread_id) VALUES (${validated.threadId}) RETURNING *`.pipe(\n rows.workerStops.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n const aborted =\n yield* sql`INSERT OR IGNORE INTO effect_agent_abort_intents (submission_id, author, reason, requested_at)\n SELECT submission_id, ${validated.author}, 'Worker owner stopped the worker', ${now.iso}\n FROM effect_agent_submissions WHERE thread_id = ${validated.threadId} AND state <> 'settled' RETURNING *`.pipe(\n rows.aborts.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n if (sealed.length > 0 || aborted.length > 0) yield* recordProgress(\"control\", operation);\n if (sealed.length > 0) yield* retainWorkerSeal(validated.threadId, null);\n\n return owner.hasOwner(validated.threadId) ? 1 : 0;\n }),\n );\n });\n\n const requestAbort: SubmissionLedger[\"Service\"][\"requestAbort\"] = Effect.fnUntraced(function* (\n request: AbortCommand,\n ) {\n const operation = \"ledger request abort\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(AbortCommand))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:request-abort:before\", operation);\n\n const intent = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\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 (submission.state === \"joined\") {\n if (submission.joined_host_submission_id === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A joined Submission carries no host linkage.\",\n );\n }\n\n const hostSubmissionId = yield* decodeSubmissionId(\n submission.joined_host_submission_id,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n return yield* JoinedToHost.make({\n submissionId: validated.submissionId,\n hostSubmissionId,\n });\n }\n const existing = yield* readAbortIntent(operation, validated.submissionId);\n\n if (Option.isSome(existing)) {\n return yield* abortIntentFromRow(\n operation,\n submission,\n validated.submissionId,\n existing.value,\n );\n }\n const now = yield* currentInstant;\n\n yield* sql`\n INSERT INTO effect_agent_abort_intents (\n submission_id,\n author,\n reason,\n requested_at\n ) VALUES (\n ${validated.submissionId},\n ${validated.author},\n ${validated.reason},\n ${now.iso}\n )\n RETURNING *`.pipe(rows.aborts.write, Effect.mapError(internalFailure(operation)));\n\n yield* recordProgress(\"control\", operation);\n\n const canonicalRecordId = yield* canonicalAbortRecordId(\n operation,\n submission.thread_id,\n validated.submissionId,\n );\n\n const intent = yield* decodeAbortIntent({\n submissionId: validated.submissionId,\n author: validated.author,\n reason: validated.reason,\n requestedAt: now.iso,\n ...(canonicalRecordId === undefined ? {} : { canonicalRecordId }),\n }).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* retainLifecycle(submission, { _tag: \"AbortIntentRecorded\", intent });\n\n return intent;\n }),\n );\n\n yield* hitFailpoint(\"ledger:request-abort:after\", operation);\n\n return intent;\n });\n\n const claimJoining: SubmissionLedger[\"Service\"][\"claimJoining\"] = Effect.fnUntraced(function* (\n request: ClaimJoiningRequest,\n ) {\n const operation = \"ledger claim joining\";\n\n const validated = yield* decodeClaimJoiningRequestType(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:claim-joining:before\", operation);\n\n const claims = yield* owner.withMutation(\n Effect.gen(function* () {\n const host = yield* requireSubmission(operation, validated.hostSubmissionId);\n\n if (host.thread_id !== validated.threadId) {\n return yield* LedgerError.make({\n operation,\n message: `Host submission ${validated.hostSubmissionId} does not belong to thread ${validated.threadId}.`,\n });\n }\n // The host Attempt retains its local ownership while the ready prefix joins it.\n yield* requireOwner(operation, host);\n\n const stopped = yield* cached(\n rows.workerStops.by(\"thread_id\", validated.threadId),\n operation,\n );\n\n if (stopped.length > 0) return [];\n\n // Retain only an empty complete suffix. Any later admission invalidates this view;\n // nonempty rows keep their SQL ordering, and rollback discards the empty proof.\n const later = yield* submissionViews\n .matching(\n JSON.stringify([\"joining-suffix\", validated.threadId, host.queue_sequence]),\n (row) =>\n row.thread_id === validated.threadId && row.queue_sequence > host.queue_sequence,\n sql`\n SELECT ${submissionColumns}\n FROM effect_agent_submissions\n WHERE thread_id = ${validated.threadId}\n AND queue_sequence > ${host.queue_sequence}\n ORDER BY queue_sequence ASC\n `,\n 0,\n )\n .pipe(\n Effect.mapError((error) =>\n error._tag === \"SqlError\"\n ? sqlFailure(operation)(error)\n : internalFailure(operation)(error),\n ),\n );\n\n if (later.length === 0) return [];\n\n // The reader gate stays held through promotion. Nonempty candidates retain\n // their native transaction, live-owner checks and contiguous-prefix rules.\n return yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const claimed: Array<JoiningClaim> = [];\n\n for (const row of later) {\n if (claimed.length >= validated.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 (row.state === \"joining\" || row.state === \"joined\") &&\n row.joined_host_submission_id === validated.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 (row.state === \"settled\" && row.settled_outcome === \"aborted\") continue;\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 (row.state !== \"ready\") break;\n const canonical = yield* readCanonicalSettlement(operation, row);\n\n if (canonical?.settlement.outcome === \"aborted\") continue;\n if (canonical !== undefined) break;\n yield* sql`\n UPDATE effect_agent_submissions\n SET state = 'joining', joined_host_submission_id = ${validated.hostSubmissionId}\n WHERE submission_id = ${row.submission_id}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n const inputPayload = yield* parseStoredJsonText(row.input_json).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n row.submission_id,\n error.message,\n ),\n ),\n );\n\n claimed.push(\n yield* decodeJoiningClaim({\n submissionId: row.submission_id,\n queueSequence: row.queue_sequence,\n inputPayload,\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n }\n\n return claimed;\n }),\n );\n }),\n );\n\n yield* hitFailpoint(\"ledger:claim-joining:after\", operation);\n\n return claims;\n });\n\n const markJoined: SubmissionLedger[\"Service\"][\"markJoined\"] = Effect.fnUntraced(function* (\n request: MarkJoinedRequest,\n ) {\n const operation = \"ledger mark joined\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(MarkJoinedRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:mark-joined:before\", operation);\n yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.joined_host_submission_id === null) {\n return yield* LedgerError.make({\n operation,\n message: `Submission ${validated.submissionId} was never claimed for joining.`,\n });\n }\n const host = yield* requireSubmission(operation, submission.joined_host_submission_id);\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 yield* requireOwner(operation, host);\n if (submission.input_applied_record_id !== null) {\n if (\n submission.input_applied_record_id === validated.recordId &&\n submission.input_applied_sequence === validated.sequence\n ) {\n return;\n }\n\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A different join marker is already recorded for this Submission.\",\n );\n }\n if (submission.state !== \"joining\" && submission.state !== \"joined\") {\n return yield* LedgerError.make({\n operation,\n message: `Cannot mark submission ${validated.submissionId} joined from state ${submission.state}.`,\n });\n }\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n input_applied_record_id = ${validated.recordId},\n input_applied_sequence = ${validated.sequence},\n state = 'joined'\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n }),\n );\n yield* hitFailpoint(\"ledger:mark-joined:after\", operation);\n });\n\n const revertJoining: SubmissionLedger[\"Service\"][\"revertJoining\"] = Effect.fnUntraced(function* (\n request: RevertJoiningRequest,\n ) {\n const operation = \"ledger revert joining\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(RevertJoiningRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:revert-joining:before\", operation);\n yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\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 (submission.state !== \"joining\") return;\n const guard = validated.guard;\n\n if (guard !== undefined) {\n if (submission.joined_host_submission_id !== guard.hostSubmissionId) return;\n const host = yield* requireSubmission(operation, guard.hostSubmissionId);\n\n if (host.thread_id !== submission.thread_id)\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"The joined host belongs to another Thread.\",\n );\n if (host.state !== \"settled\") {\n yield* requireOwner(operation, host).pipe(\n Effect.mapError((cause) =>\n cause._tag === \"OwnershipLost\"\n ? LedgerError.make({\n operation,\n message: \"Joining recovery no longer owns the linked host.\",\n cause,\n })\n : cause,\n ),\n );\n }\n }\n yield* sql`\n UPDATE effect_agent_submissions\n SET state = 'ready', joined_host_submission_id = NULL\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n }),\n );\n yield* hitFailpoint(\"ledger:revert-joining:after\", operation);\n });\n\n const suspend: SubmissionLedger[\"Service\"][\"suspend\"] = Effect.fnUntraced(function* (\n request: SuspendRequest,\n ) {\n const operation = \"ledger suspend\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(SuspendRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n const reasonJson = yield* encodeSuspensionReasonText(validated.reason).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:suspend:before\", operation);\n\n const outcome = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\n });\n }\n // Canonical terminal intent wins over a later suspension.\n const canonical = yield* readCanonicalSettlement(operation, submission);\n\n if (canonical !== undefined) {\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: canonical.settlement.outcome,\n });\n }\n yield* requireOwner(operation, submission);\n // A covering event that raced ahead of the suspend transaction resumes the caller\n // immediately WITHOUT releasing the lane (plan §2.6, §12). For WaitingForChild the\n // covering evidence is EITHER a locally settled child row OR a durable cross-store\n // notification marker: parent and child Threads live in different Durable\n // Objects, and the port contract requires that a child settlement reported (via\n // `recordChildSettled` → marker) before this suspend commits is observed here.\n if (validated.reason._tag === \"ApprovalPending\") {\n const decisions = yield* readApprovalDecisions(operation, validated.submissionId);\n const decided = new Map(decisions.map((row) => [row.tool_call_id, row.decision]));\n\n if (\n approvalDecisionsCover(validated.reason.toolCallIds, (toolCallId) =>\n decided.get(toolCallId),\n )\n ) {\n return { outcome: RESUME_IMMEDIATELY, threadId: submission.thread_id };\n }\n } else {\n const markers = yield* readChildSettlementMarkers(operation, validated.submissionId);\n const markerChildren = new Set(markers.map((row) => row.child_submission_id));\n let allSettled = true;\n\n for (const child of validated.reason.children) {\n const settled = yield* childProvablySettled(\n operation,\n markerChildren,\n child.childSubmissionId,\n );\n\n if (!settled) {\n allSettled = false;\n break;\n }\n }\n if (allSettled) {\n return { outcome: RESUME_IMMEDIATELY, threadId: submission.thread_id };\n }\n }\n const now = yield* currentInstant;\n\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'suspended',\n suspended_reason_json = ${reasonJson},\n suspended_at = ${now.iso}\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n // Suspension ends the ownership period WITHOUT settling: the accepted-work\n // obligation stays owed while the lane consumes no worker permit (plan §2.6).\n\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionSuspended\",\n submissionId: validated.submissionId,\n reason: validated.reason,\n });\n\n return { outcome: SUSPENDED, threadId: submission.thread_id };\n }),\n );\n\n if (outcome.outcome === SUSPENDED)\n owner.closeSubmission(outcome.threadId, validated.submissionId);\n yield* hitFailpoint(\"ledger:suspend:after\", operation);\n\n return outcome.outcome;\n });\n\n /**\n * Once one pending call is denied or every pending call has a decision intent,\n * the lane wakes: suspended → input-applied, suspension cleared (plan §2.6). A\n * WaitingForChild suspension wakes only through recordChildSettled. Runs inside the caller's\n * write transaction.\n */\n const wakeSuspendedIfCovered = Effect.fnUntraced(function* (\n operation: string,\n submission: SubmissionRow,\n ): Effect.fn.Return<void, LedgerError> {\n if (submission.state !== \"suspended\" || submission.suspended_reason_json === null) return;\n\n const reason = yield* Schema.decodeEffect(Schema.fromJsonString(SuspensionReason))(\n submission.suspended_reason_json,\n ).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n submission.submission_id,\n error.message,\n ),\n ),\n );\n\n if (reason._tag !== \"ApprovalPending\") return;\n const decisions = yield* readApprovalDecisions(operation, submission.submission_id);\n const decided = new Map(decisions.map((row) => [row.tool_call_id, row.decision]));\n\n if (!approvalDecisionsCover(reason.toolCallIds, (toolCallId) => decided.get(toolCallId)))\n return;\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'input-applied',\n suspended_reason_json = NULL,\n suspended_at = NULL\n WHERE submission_id = ${submission.submission_id}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionResumed\",\n submissionId: yield* decodeSubmissionId(submission.submission_id).pipe(\n Effect.mapError(internalFailure(operation)),\n ),\n });\n });\n\n const recordApprovalDecision: SubmissionLedger[\"Service\"][\"recordApprovalDecision\"] =\n Effect.fnUntraced(function* (command: ApprovalDecisionCommand) {\n const operation = \"ledger record approval decision\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ApprovalDecisionCommand))(\n command,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:approval-decision:before\", operation);\n\n const intent = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\n });\n }\n const decisions = yield* readApprovalDecisions(operation, validated.submissionId);\n const existing = decisions.find((row) => row.tool_call_id === validated.toolCallId);\n\n if (existing !== undefined) {\n // Idempotent per (submissionId, toolCallId): repeating the SAME decision replays\n // the recorded intent unchanged; a divergent re-decision conflicts.\n if (existing.decision !== validated.decision) {\n return yield* ApprovalConflict.make({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n existingDecision: existing.decision,\n });\n }\n\n return yield* approvalIntentFromRow(operation, existing);\n }\n const now = yield* currentInstant;\n\n yield* sql`\n INSERT INTO effect_agent_approval_decisions (\n submission_id,\n tool_call_id,\n decision,\n resolver,\n reason,\n decided_at\n ) VALUES (\n ${validated.submissionId},\n ${validated.toolCallId},\n ${validated.decision},\n ${validated.resolver},\n ${validated.reason},\n ${now.iso}\n )\n RETURNING *`.pipe(rows.approvals.write, Effect.mapError(internalFailure(operation)));\n yield* recordProgress(\"control\", operation);\n yield* wakeSuspendedIfCovered(operation, submission);\n\n return yield* decodeApprovalDecisionIntent({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n decision: validated.decision,\n resolver: validated.resolver,\n reason: validated.reason,\n decidedAt: now.iso,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }),\n );\n\n yield* hitFailpoint(\"ledger:approval-decision:after\", operation);\n\n return intent;\n });\n\n const markUnknown: SubmissionLedger[\"Service\"][\"markUnknown\"] = Effect.fnUntraced(function* (\n request: MarkUnknownRequest,\n ) {\n const operation = \"ledger mark unknown\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(MarkUnknownRequest))(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:mark-unknown:before\", operation);\n yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\n });\n }\n // Canonical terminal intent wins over a late Unknown marking.\n const canonical = yield* readCanonicalSettlement(operation, submission);\n\n if (canonical !== undefined) {\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: canonical.settlement.outcome,\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 existingIds = yield* storedUnknownToolCallIds(operation, submission);\n const known = new Set(existingIds);\n\n const merged = [\n ...existingIds,\n ...validated.toolCallIds.filter((toolCallId) => !known.has(toolCallId)),\n ];\n\n const idsJson = yield* encodeToolCallIdsText(merged).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'unknown',\n unknown_reason = ${submission.unknown_reason ?? validated.reason},\n unknown_tool_call_ids_json = ${idsJson}\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n if (submission.state !== \"unknown\")\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionUnknown\",\n submissionId: validated.submissionId,\n });\n }),\n );\n yield* hitFailpoint(\"ledger:mark-unknown:after\", operation);\n });\n\n const recordUnknownResolution: SubmissionLedger[\"Service\"][\"recordUnknownResolution\"] =\n Effect.fnUntraced(function* (command: UnknownResolutionCommand) {\n const operation = \"ledger record unknown resolution\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(UnknownResolutionCommand))(\n command,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const resolutionJson = yield* encodeUnknownResolutionText(validated.resolution).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:unknown-resolution:before\", operation);\n\n const intent = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n\n if (submission.state === \"settled\") {\n if (submission.settled_outcome === null) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n \"A settled Submission carries no terminal outcome.\",\n );\n }\n\n // Factual closure may outlive settlement; it never restores execution authority.\n if (\n validated.resolution._tag !== \"CompletedWithResult\" &&\n validated.resolution._tag !== \"NeverHappened\"\n )\n return yield* SettlementConflict.make({\n submissionId: validated.submissionId,\n existingOutcome: submission.settled_outcome,\n });\n }\n const resolutions = yield* readUnknownResolutions(operation, validated.submissionId);\n const kind = unknownResolutionKind(validated.resolution);\n\n const existing = resolutions.find(\n (row) => row.tool_call_id === validated.toolCallId && row.resolution_kind === kind,\n );\n\n const existingIntent =\n existing === undefined\n ? undefined\n : yield* unknownResolutionIntentFromRow(operation, existing);\n\n if (\n (existingIntent !== undefined &&\n !equivalentUnknownResolution(existingIntent.resolution, validated.resolution)) ||\n (existing === undefined &&\n kind === \"execution\" &&\n resolutions.some(\n (row) =>\n row.tool_call_id === validated.toolCallId && row.resolution_kind === \"factual\",\n ))\n ) {\n return yield* UnknownResolutionConflict.make({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n });\n }\n\n if (existingIntent === undefined && kind === \"factual\") {\n const runId = runIdForSubmission(validated.submissionId);\n\n const found = yield* sql`\n SELECT ${canonicalRecordJson(sql)} AS record_json FROM effect_agent_canonical_records\n WHERE thread_id = ${submission.thread_id}\n AND record_tag = 27\n AND run_id = ${runKey(sql, sql`${submission.thread_id}`, sql`${JSON.stringify(runId)}`)}\n AND tool_call_id = ${JSON.stringify(validated.toolCallId)}\n LIMIT 2\n `.pipe(Effect.mapError(sqlFailure(operation)));\n\n const outcomes = yield* decodeRows(\n Schema.Array(Schema.Struct({ record_json: BoundedStoredText })),\n \"effect_agent_canonical_records\",\n validated.toolCallId,\n found,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const result =\n outcomes[0] === undefined\n ? undefined\n : (yield* decodeRecordEnvelopeText(outcomes[0].record_json).pipe(\n Effect.mapError(internalFailure(operation)),\n )).payload;\n\n if (\n outcomes.length > 1 ||\n (result !== undefined &&\n (result._tag !== \"ToolCallSettled\" ||\n result.runId !== runId ||\n result.toolCallId !== validated.toolCallId))\n )\n return yield* corruptionFailure(\n operation,\n \"effect_agent_canonical_records\",\n validated.toolCallId,\n \"Canonical Tool result identity is inconsistent.\",\n );\n\n if (\n result?._tag === \"ToolCallSettled\" &&\n !unknownResolutionMatchesResult(validated.resolution, result)\n )\n return yield* UnknownResolutionConflict.make({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n });\n }\n let resolved: UnknownResolutionIntent;\n\n if (existingIntent !== undefined) {\n // Idempotent replay of the recorded intent (author/reason may differ; the stored\n // audit fields win, exactly like requestAbort).\n resolved = existingIntent;\n } else {\n const now = yield* currentInstant;\n\n yield* sql`\n INSERT INTO effect_agent_unknown_resolutions (\n submission_id,\n tool_call_id,\n resolution_kind,\n author,\n reason,\n resolution_json,\n resolved_at\n ) VALUES (\n ${validated.submissionId},\n ${validated.toolCallId},\n ${kind},\n ${validated.author},\n ${validated.reason},\n ${resolutionJson},\n ${now.iso}\n )\n RETURNING *`.pipe(rows.resolutions.write, Effect.mapError(internalFailure(operation)));\n yield* recordProgress(\"control\", operation);\n\n const resolution = yield* parseStoredJsonText(resolutionJson).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n resolved = yield* decodeUnknownResolutionIntent({\n submissionId: validated.submissionId,\n toolCallId: validated.toolCallId,\n author: validated.author,\n reason: validated.reason,\n resolution,\n resolvedAt: now.iso,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }\n // The lane reopens only when EVERY marked open call has a durable resolution intent:\n // unknown → input-applied (DUR-017). Replays re-run the coverage check so a\n // recovering caller can wake the lane idempotently.\n if (submission.state === \"unknown\" && submission.unknown_tool_call_ids_json !== null) {\n const markedIds = yield* storedUnknownToolCallIds(operation, submission);\n const covering = yield* readUnknownResolutions(operation, validated.submissionId);\n const coveredIds = new Set(covering.map((row) => row.tool_call_id));\n\n if (markedIds.every((toolCallId) => coveredIds.has(toolCallId))) {\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'input-applied',\n unknown_reason = NULL,\n unknown_tool_call_ids_json = NULL\n WHERE submission_id = ${validated.submissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n yield* retainLifecycle(submission, {\n _tag: \"SubmissionResumed\",\n submissionId: validated.submissionId,\n });\n }\n }\n\n return resolved;\n }),\n );\n\n yield* hitFailpoint(\"ledger:unknown-resolution:after\", operation);\n\n return intent;\n });\n\n const recordChildSettled: SubmissionLedger[\"Service\"][\"recordChildSettled\"] = Effect.fnUntraced(\n function* (request: ChildSettledNotification) {\n const operation = \"ledger record child settled\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ChildSettledNotification))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:child-settled:before\", operation);\n\n const outcome = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const parent = yield* requireSubmission(operation, validated.parentSubmissionId);\n // The child's canonical Settlement is the authority for this wake. When the child's\n // row lives in THIS store (single-store latitude, and every conformance lane), either a\n // canonical settlement admits the notification: the\n // runtime calls only after the canonical append and before ledger finalization. When the\n // row does not live here — the normal cross-DO case — the routed notification from the\n // child's owning Durable Object is the settlement evidence this store records durably.\n const child = yield* readSubmission(operation, validated.childSubmissionId);\n\n const childCanonical = Option.isSome(child)\n ? yield* readCanonicalSettlement(operation, child.value)\n : undefined;\n\n if (Option.isSome(child) && childCanonical === undefined) {\n return yield* LedgerError.make({\n operation,\n message: `Child submission ${validated.childSubmissionId} has no recorded settlement.`,\n });\n }\n // Record the durable notification marker FIRST and unconditionally (idempotent):\n // the port's cross-store race guarantee requires that a notification committed\n // before the parent's suspend transaction is observed by that suspend's covering\n // check, even when the parent is not (or not yet) suspended.\n const now = yield* currentInstant;\n\n const added = yield* sql`\n INSERT INTO effect_agent_child_settlements (\n parent_submission_id,\n child_submission_id,\n child_outcome,\n recorded_at\n ) VALUES (\n ${validated.parentSubmissionId},\n ${validated.childSubmissionId},\n ${childCanonical?.settlement.outcome ?? null},\n ${now.iso}\n )\n ON CONFLICT (parent_submission_id, child_submission_id) DO NOTHING\n RETURNING *`.pipe(\n rows.childSettlements.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n if (added.length > 0) yield* recordProgress(\"control\", operation);\n\n if (parent.state !== \"suspended\" || parent.suspended_reason_json === null) {\n return NOT_WAITING;\n }\n\n const reason = yield* Schema.decodeEffect(Schema.fromJsonString(SuspensionReason))(\n parent.suspended_reason_json,\n ).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n parent.submission_id,\n error.message,\n ),\n ),\n );\n\n if (reason._tag !== \"WaitingForChild\") {\n return NOT_WAITING;\n }\n if (\n !reason.children.some(\n (entry) => entry.childSubmissionId === validated.childSubmissionId,\n )\n ) {\n return NOT_WAITING;\n }\n\n // The parent wakes exactly when EVERY listed child is provably settled — from its\n // local row or a recorded marker (spec §12 step 10); replays re-run the coverage\n // check so a recovering caller wakes the lane idempotently.\n const markers = yield* readChildSettlementMarkers(\n operation,\n validated.parentSubmissionId,\n );\n\n const markerChildren = new Set(markers.map((row) => row.child_submission_id));\n\n for (const entry of reason.children) {\n const settled = yield* childProvablySettled(\n operation,\n markerChildren,\n entry.childSubmissionId,\n );\n\n if (!settled) {\n return STILL_WAITING;\n }\n }\n yield* sql`\n UPDATE effect_agent_submissions\n SET\n state = 'input-applied',\n suspended_reason_json = NULL,\n suspended_at = NULL\n WHERE submission_id = ${validated.parentSubmissionId}\n RETURNING *, ${definitionJson(sql)} AS agent_digests_json`.pipe(\n rows.submissions.write,\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* retainLifecycle(parent, {\n _tag: \"SubmissionResumed\",\n submissionId: validated.parentSubmissionId,\n });\n\n return WOKEN;\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-settled:after\", operation);\n\n return outcome;\n },\n );\n\n const reserveChildBudget: SubmissionLedger[\"Service\"][\"reserveChildBudget\"] = Effect.fnUntraced(\n function* (request: ChildBudgetReservationRequest) {\n const operation = \"ledger reserve child budget\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ChildBudgetReservationRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const allocationJson = yield* encodePersistedJsonText(validated.allocation).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:child-reservation:before\", operation);\n\n const reserved = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const existing = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isSome(existing)) {\n const existingSnapshot = yield* childReservationSnapshotFromRow(\n operation,\n existing.value,\n );\n\n // Identical replays short-circuit before the fence, retaining its first committed allocation: a\n // replay creates nothing, so a recovering caller resumes rather than duplicates.\n const identical =\n existing.value.parent_submission_id === validated.parentSubmissionId &&\n existing.value.parent_tool_call_id === validated.parentToolCallId &&\n existing.value.allocation_digest === validated.allocationDigest &&\n equivalentPersistedJson(existingSnapshot.allocation, validated.allocation);\n\n if (!identical) {\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message:\n \"A reservation with this identity exists with a different parent Tool Call or allocation.\",\n });\n }\n\n return ReservedChildBudget.make({\n reservation: existingSnapshot,\n replayed: true,\n });\n }\n\n const collision = yield* readChildReservationForCall(\n operation,\n validated.parentSubmissionId,\n validated.parentToolCallId,\n );\n\n if (Option.isSome(collision)) {\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: collision.value.status,\n message: `Parent Tool Call ${validated.parentToolCallId} already owns reservation ${collision.value.reservation_id}.`,\n });\n }\n const parent = yield* requireSubmission(operation, validated.parentSubmissionId);\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 yield* requireOwner(operation, parent);\n const now = yield* currentInstant;\n\n yield* sql`\n INSERT INTO effect_agent_child_reservations (\n reservation_id,\n parent_submission_id,\n parent_tool_call_id,\n status,\n allocation_json,\n allocation_digest,\n reserved_at\n ) VALUES (\n ${validated.reservationId},\n ${validated.parentSubmissionId},\n ${validated.parentToolCallId},\n 'reserved',\n ${allocationJson},\n ${validated.allocationDigest},\n ${now.iso}\n )\n RETURNING *`.pipe(\n rows.childReservations.write,\n Effect.mapError(internalFailure(operation)),\n );\n const inserted = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(inserted)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n validated.reservationId,\n \"An inserted child reservation row is missing inside its own transaction.\",\n );\n }\n\n return ReservedChildBudget.make({\n reservation: yield* childReservationSnapshotFromRow(operation, inserted.value),\n replayed: false,\n });\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-reservation:after\", operation);\n\n return reserved;\n },\n );\n\n const attachChildToReservation: SubmissionLedger[\"Service\"][\"attachChildToReservation\"] =\n Effect.fnUntraced(function* (request: AttachChildToReservationRequest) {\n const operation = \"ledger attach child to reservation\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(AttachChildToReservationRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:child-attach:before\", operation);\n\n const attached = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const existing = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(existing)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown child reservation ${validated.reservationId}.`,\n });\n }\n if (existing.value.child_submission_id !== null) {\n // Idempotent replay of the recorded attachment (unfenced — it mutates nothing).\n if (existing.value.child_submission_id === validated.childSubmissionId) {\n return yield* childReservationSnapshotFromRow(operation, existing.value);\n }\n\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message: `Reservation ${validated.reservationId} already records child ${existing.value.child_submission_id}.`,\n });\n }\n const parent = yield* requireSubmission(operation, existing.value.parent_submission_id);\n\n yield* requireOwner(operation, parent);\n if (existing.value.status !== \"reserved\") {\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message: `Cannot attach a child to a ${existing.value.status} reservation.`,\n });\n }\n // Unlike the single-store Node adapter, the admitted child's row lives in ANOTHER\n // Durable Object, so no local existence check is possible here. The canonical\n // `SubagentStarted` record remains the attachment's repair authority (DUR-015),\n // and the coordinator only attaches after the child's admission committed.\n yield* sql`\n UPDATE effect_agent_child_reservations\n SET child_submission_id = ${validated.childSubmissionId}\n WHERE reservation_id = ${validated.reservationId}\n RETURNING *`.pipe(\n rows.childReservations.write,\n Effect.mapError(internalFailure(operation)),\n );\n const updated = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(updated)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n validated.reservationId,\n \"An updated child reservation row is missing inside its own transaction.\",\n );\n }\n\n return yield* childReservationSnapshotFromRow(operation, updated.value);\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-attach:after\", operation);\n\n return attached;\n });\n\n const beginChildBudgetRelease: SubmissionLedger[\"Service\"][\"beginChildBudgetRelease\"] =\n Effect.fnUntraced(function* (request: BeginChildBudgetReleaseRequest) {\n const operation = \"ledger begin child budget release\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(BeginChildBudgetReleaseRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const accountingJson = yield* encodePersistedJsonText(validated.accounting).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n yield* hitFailpoint(\"ledger:child-release-pending:before\", operation);\n\n const frozen = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const existing = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(existing)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown child reservation ${validated.reservationId}.`,\n });\n }\n if (existing.value.status !== \"reserved\") {\n const existingSnapshot = yield* childReservationSnapshotFromRow(\n operation,\n existing.value,\n );\n\n // The accounting decision was already frozen exactly once; an identical replay is a\n // no-op and a divergent decision conflicts (spec §12 join step 6).\n if (\n existingSnapshot.accounting !== undefined &&\n equivalentPersistedJson(existingSnapshot.accounting, validated.accounting)\n ) {\n return existingSnapshot;\n }\n\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message: \"A different accounting decision is already frozen for this reservation.\",\n });\n }\n const now = yield* currentInstant;\n\n yield* sql`\n UPDATE effect_agent_child_reservations\n SET\n status = 'releasePending',\n accounting_json = ${accountingJson},\n release_began_at = ${now.iso}\n WHERE reservation_id = ${validated.reservationId}\n RETURNING *`.pipe(\n rows.childReservations.write,\n Effect.mapError(internalFailure(operation)),\n );\n const updated = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(updated)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n validated.reservationId,\n \"An updated child reservation row is missing inside its own transaction.\",\n );\n }\n\n return yield* childReservationSnapshotFromRow(operation, updated.value);\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-release-pending:after\", operation);\n\n return frozen;\n });\n\n const releaseChildBudget: SubmissionLedger[\"Service\"][\"releaseChildBudget\"] = Effect.fnUntraced(\n function* (request: ReleaseChildBudgetRequest) {\n const operation = \"ledger release child budget\";\n\n const validated = yield* Schema.decodeEffect(Schema.toType(ReleaseChildBudgetRequest))(\n request,\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n yield* hitFailpoint(\"ledger:child-release:before\", operation);\n\n const released = yield* inWriteTransaction(\n operation,\n Effect.gen(function* () {\n const existing = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(existing)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown child reservation ${validated.reservationId}.`,\n });\n }\n // Applied exactly once: replaying a released reservation returns the stored row\n // unchanged (spec §12: \"never available twice\").\n if (existing.value.status === \"released\") {\n return yield* childReservationSnapshotFromRow(operation, existing.value);\n }\n if (existing.value.status !== \"releasePending\") {\n return yield* ChildReservationConflict.make({\n reservationId: validated.reservationId,\n status: existing.value.status,\n message: \"Cannot release a reservation whose accounting decision is not frozen.\",\n });\n }\n const now = yield* currentInstant;\n\n yield* sql`\n UPDATE effect_agent_child_reservations\n SET status = 'released', released_at = ${now.iso}\n WHERE reservation_id = ${validated.reservationId}\n RETURNING *`.pipe(\n rows.childReservations.write,\n Effect.mapError(internalFailure(operation)),\n );\n const updated = yield* readChildReservation(operation, validated.reservationId);\n\n if (Option.isNone(updated)) {\n return yield* corruptionFailure(\n operation,\n \"effect_agent_child_reservations\",\n validated.reservationId,\n \"An updated child reservation row is missing inside its own transaction.\",\n );\n }\n\n return yield* childReservationSnapshotFromRow(operation, updated.value);\n }),\n );\n\n yield* hitFailpoint(\"ledger:child-release:after\", operation);\n\n return released;\n },\n );\n\n interface ScanCursor {\n readonly threadId: string;\n readonly queueSequence: number;\n }\n\n const scanPage = Effect.fnUntraced(function* (\n cursor: ScanCursor | undefined,\n ): Effect.fn.Return<\n readonly [ReadonlyArray<SubmissionWorkItem>, Option.Option<ScanCursor | undefined>],\n LedgerError\n > {\n const operation = \"ledger scan nonterminal\";\n\n const rows = yield* (\n cursor === undefined\n ? sql<Record<string, unknown>>`\n SELECT submission_id AS \"submissionId\", thread_id AS \"threadId\",\n queue_sequence AS \"queueSequence\", principal, idempotency_key AS \"idempotencyKey\",\n deployment_id AS \"deploymentId\", receipt_id AS \"receiptId\", state\n FROM effect_agent_submissions\n WHERE state <> 'settled'\n ORDER BY thread_id ASC, queue_sequence ASC\n LIMIT ${SCAN_PAGE_SIZE}\n `\n : sql<Record<string, unknown>>`\n SELECT submission_id AS \"submissionId\", thread_id AS \"threadId\",\n queue_sequence AS \"queueSequence\", principal, idempotency_key AS \"idempotencyKey\",\n deployment_id AS \"deploymentId\", receipt_id AS \"receiptId\", state\n FROM effect_agent_submissions\n WHERE state <> 'settled'\n AND (thread_id, queue_sequence) > (${cursor.threadId}, ${cursor.queueSequence})\n ORDER BY thread_id ASC, queue_sequence ASC\n LIMIT ${SCAN_PAGE_SIZE}\n `\n ).pipe(Effect.mapError(sqlFailure(operation)));\n\n const decoded = yield* decodeRows(\n SubmissionWorkItems,\n \"effect_agent_submissions\",\n \"nonterminal_scan\",\n rows,\n \"SubmissionWorkItem\",\n ).pipe(Effect.mapError(internalFailure(operation)));\n\n const last = decoded[decoded.length - 1];\n\n const next: Option.Option<ScanCursor | undefined> =\n last === undefined || decoded.length < SCAN_PAGE_SIZE\n ? Option.none()\n : Option.some({\n threadId: last.threadId,\n queueSequence: last.queueSequence,\n });\n\n return [decoded, next] as const;\n });\n\n // Both discovery and head selection use this same complete, owner-invalidated bounded view.\n const activeNonterminal = cached(\n workRows.matching(\n \"nonterminal\",\n (row) => row.state !== \"settled\",\n sql`SELECT submission_id, thread_id, queue_sequence, principal, idempotency_key,\n deployment_id, receipt_id, state\n FROM effect_agent_submissions WHERE state <> 'settled' LIMIT 129`,\n 128,\n ),\n \"ledger scan nonterminal\",\n );\n\n const boundedNonterminal = state.read(\n Effect.gen(function* () {\n // Cache only a complete bounded active set. Large hosts keep the paged scan.\n const active = yield* activeNonterminal;\n\n if (active.length > 128) return undefined;\n\n const sorted = [...active].sort((left, right) =>\n left.thread_id < right.thread_id\n ? -1\n : left.thread_id > right.thread_id\n ? 1\n : left.queue_sequence - right.queue_sequence,\n );\n\n const work = yield* decodeSubmissionWorkItems(\n sorted.map((row) => ({\n submissionId: row.submission_id,\n threadId: row.thread_id,\n queueSequence: row.queue_sequence,\n principal: row.principal,\n idempotencyKey: row.idempotency_key,\n deploymentId: row.deployment_id,\n receiptId: row.receipt_id,\n state: row.state,\n })),\n ).pipe(Effect.mapError(internalFailure(\"ledger scan nonterminal\")));\n\n return work;\n }),\n );\n\n const pagedNonterminal = Stream.paginate<ScanCursor | undefined, SubmissionWorkItem, LedgerError>(\n undefined,\n scanPage,\n );\n\n // Large scans keep their bounded page lifetime and streaming backpressure.\n const scanNonterminal = Stream.unwrap(\n Effect.map(boundedNonterminal, (work) =>\n work === undefined ? pagedNonterminal : Stream.fromIterable(work),\n ),\n );\n\n const listNonterminal = Effect.filterOrElse(\n boundedNonterminal,\n (work) => work !== undefined,\n () => Stream.runCollect(pagedNonterminal),\n );\n\n const readAbortIntentForSubmission: SubmissionLedger[\"Service\"][\"readAbortIntent\"] =\n Effect.fnUntraced(function* (request) {\n const operation = \"ledger read abort intent\";\n\n const validated = yield* decodeAbortIntentRequestType(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n return yield* state.read(\n Effect.gen(function* () {\n const submission = yield* requireSubmission(operation, validated.submissionId);\n const intent = yield* readAbortIntent(operation, validated.submissionId);\n\n return Option.isNone(intent)\n ? undefined\n : yield* abortIntentFromRow(\n operation,\n submission,\n validated.submissionId,\n intent.value,\n );\n }),\n );\n });\n\n const loadRecoverySnapshot: SubmissionLedger[\"Service\"][\"loadRecoverySnapshot\"] =\n Effect.fnUntraced(function* (request: RecoverySnapshotRequest) {\n const operation = \"ledger load recovery snapshot\";\n\n const validated = yield* decodeRecoverySnapshotRequestType(request).pipe(\n Effect.mapError(internalFailure(operation)),\n );\n\n return yield* state.read(\n Effect.gen(function* () {\n const submissionRow = yield* requireSubmission(operation, validated.submissionId);\n const submission = yield* decodeSubmissionSnapshot(operation, submissionRow);\n\n let inputApplied: InputAppliedMarker | undefined;\n\n if (\n submissionRow.input_applied_record_id !== null &&\n submissionRow.input_applied_sequence !== null\n ) {\n inputApplied = yield* decodeInputAppliedMarker({\n recordId: submissionRow.input_applied_record_id,\n sequence: submissionRow.input_applied_sequence,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }\n\n let abortIntent: AbortIntent | undefined;\n const abortRow = yield* readAbortIntent(operation, validated.submissionId);\n\n if (Option.isSome(abortRow)) {\n abortIntent = yield* abortIntentFromRow(\n operation,\n submissionRow,\n validated.submissionId,\n abortRow.value,\n );\n }\n\n // Host-side view: every Submission whose host linkage points here, in queue order\n // (the terminalize loop settles them with the host outcome, DUR-002).\n const joinRows = (yield* cached(\n rows.submissions.by(\"joined_host_submission_id\", validated.submissionId),\n operation,\n ))\n .filter((row) => row.joined_host_submission_id === validated.submissionId)\n .sort((a, b) => a.queue_sequence - b.queue_sequence);\n\n const joins: Array<JoinSnapshot> = [];\n\n for (const row of joinRows)\n joins.push(\n yield* decodeJoinSnapshot({\n submissionId: row.submission_id,\n state: row.state,\n hostSubmissionId: validated.submissionId,\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n\n let hostSubmissionId: RecoverySnapshot[\"hostSubmissionId\"];\n\n if (submissionRow.joined_host_submission_id !== null) {\n hostSubmissionId = yield* decodeSubmissionId(\n submissionRow.joined_host_submission_id,\n ).pipe(Effect.mapError(internalFailure(operation)));\n }\n\n let suspension: SuspensionSnapshot | undefined;\n\n if (submissionRow.suspended_reason_json !== null && submissionRow.suspended_at !== null) {\n const reason = yield* parseStoredJsonText(submissionRow.suspended_reason_json).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n error.message,\n ),\n ),\n );\n\n suspension = yield* decodeSuspensionSnapshot({\n reason,\n suspendedAt: submissionRow.suspended_at,\n }).pipe(\n Effect.mapError((error) =>\n corruptionFailure(\n operation,\n \"effect_agent_submissions\",\n validated.submissionId,\n error.message,\n ),\n ),\n );\n }\n\n const decisionRows = yield* readApprovalDecisions(operation, validated.submissionId);\n\n const approvalDecisions: Array<ApprovalDecisionIntent> = [];\n\n for (const row of decisionRows)\n approvalDecisions.push(yield* approvalIntentFromRow(operation, row));\n\n const resolutionRows = yield* readUnknownResolutions(operation, validated.submissionId);\n\n const unknownResolutions: Array<UnknownResolutionIntent> = [];\n\n for (const row of resolutionRows)\n unknownResolutions.push(yield* unknownResolutionIntentFromRow(operation, row));\n\n // Parent-side subagent view: this Submission's child budget reservations in parent\n // Tool Call order, plus each attached child's current lane state (a disposable\n // derived view; canonical records stay the recovery truth, DUR-015). The child's\n // state comes from its local row when this store holds it, and otherwise from the\n // durable cross-store settlement marker; a child that is neither local nor marked\n // settled is enriched by the routed per-child lookup one layer out (plan §1.3).\n const childReservationRows = (yield* cached(\n rows.childReservations.by(\"parent_submission_id\", validated.submissionId),\n operation,\n ))\n .filter((row) => row.parent_submission_id === validated.submissionId)\n .sort((a, b) => a.parent_tool_call_id.localeCompare(b.parent_tool_call_id));\n\n const childReservations: Array<ChildBudgetReservationSnapshot> = [];\n\n for (const row of childReservationRows)\n childReservations.push(yield* childReservationSnapshotFromRow(operation, row));\n\n const markers = yield* readChildSettlementMarkers(operation, validated.submissionId);\n const markersByChild = new Map(markers.map((row) => [row.child_submission_id, row]));\n const childAttachments: Array<ChildAttachmentSnapshot> = [];\n\n for (const row of childReservationRows) {\n if (row.child_submission_id === null) continue;\n const child = yield* readSubmission(operation, row.child_submission_id);\n\n if (Option.isSome(child)) {\n childAttachments.push(\n yield* decodeChildAttachmentSnapshot({\n toolCallId: row.parent_tool_call_id,\n childSubmissionId: row.child_submission_id,\n childState: child.value.state,\n ...(child.value.settled_outcome === null\n ? {}\n : { childOutcome: child.value.settled_outcome }),\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n continue;\n }\n const marker = markersByChild.get(row.child_submission_id);\n\n if (marker === undefined) continue;\n childAttachments.push(\n yield* decodeChildAttachmentSnapshot({\n toolCallId: row.parent_tool_call_id,\n childSubmissionId: row.child_submission_id,\n childState: \"settled\",\n ...(marker.child_outcome === null ? {} : { childOutcome: marker.child_outcome }),\n }).pipe(Effect.mapError(internalFailure(operation))),\n );\n }\n\n let parentLinkage: ParentLinkage | undefined;\n\n if (\n submissionRow.parent_submission_id !== null &&\n submissionRow.parent_tool_call_id !== null\n ) {\n parentLinkage = yield* decodeParentLinkage({\n parentSubmissionId: submissionRow.parent_submission_id,\n parentToolCallId: submissionRow.parent_tool_call_id,\n }).pipe(Effect.mapError(internalFailure(operation)));\n }\n\n return RecoverySnapshot.make({\n submission,\n joins,\n approvalDecisions,\n unknownResolutions,\n childReservations,\n childAttachments,\n ...(parentLinkage === undefined ? {} : { parentLinkage }),\n ...(hostSubmissionId === undefined ? {} : { hostSubmissionId }),\n ...(suspension === undefined ? {} : { suspension }),\n hasOwner: owner.hasOwner(submissionRow.thread_id, submissionRow.submission_id),\n ...(inputApplied === undefined ? {} : { inputApplied }),\n ...(abortIntent === undefined ? {} : { abortIntent }),\n });\n }),\n );\n });\n\n return Context.make(\n SubmissionLedger,\n SubmissionLedger.of({\n capabilities,\n admit,\n markReady,\n lookup,\n resolveFundingOwner,\n resolveAdmission,\n selectHead,\n markInputApplied,\n appendInput,\n finalizeSettlement: (request) => owner.withMutation(finalizeSettlement(request)),\n requestAbort,\n stopWorker,\n inspectWorker,\n claimJoining,\n markJoined,\n revertJoining,\n suspend: (request) => owner.withMutation(suspend(request)),\n recordApprovalDecision,\n markUnknown,\n recordUnknownResolution,\n recordChildSettled,\n reserveChildBudget,\n attachChildToReservation,\n beginChildBudgetRelease,\n releaseChildBudget,\n scanNonterminal,\n listNonterminal,\n loadRecoverySnapshot,\n readAbortIntent: readAbortIntentForSubmission,\n }),\n ).pipe(Context.add(StorageOwner, owner), Context.add(SettlementPublisher, { publish }));\n});\n\n/**\n * Durable Object SubmissionLedger implementation sharing the journal's private SQLite\n * database, storage-backed transactions, and scoped local owner.\n * Configuration, failpoint, SQL, and Crypto authority stay visible in the input channel.\n */\nexport const submissionLedgerLayer: Layer.Layer<\n SubmissionLedger | SettlementPublisher | StorageOwner,\n DoStorageInitializationError,\n DoStorageConfig | DoStorageFailpoint | SqlClientService.SqlClient | Crypto.Crypto\n> = Layer.effectContext(makeServices());\n\n/**\n * A composition-root convenience Layer for the durable Submission Ledger. Point it at the\n * same `ctx.storage` as the ThreadStore so both share the same scoped storage owner.\n */\nexport const ledgerLayer = (\n options: DoStorageOptions,\n): Layer.Layer<\n SubmissionLedger | SettlementPublisher | StorageOwner,\n DoStorageInitializationError\n> =>\n Layer.unwrap(\n Effect.map(DoStorageConfig, (config) =>\n submissionLedgerLayer.pipe(\n Layer.provide(\n Layer.mergeAll(\n Layer.succeed(DoStorageConfig)(config),\n storageFailpointLayer(options),\n SqliteClient.layer({ storage: options.storage }),\n BrowserCrypto.layer,\n ),\n ),\n ),\n ),\n ).pipe(Layer.provide(storageConfigLayer(options)));\n"],"mappings":"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"}
|