effect-agent 0.1.0-beta.86 → 0.1.0-beta.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DurableAgentRuntime-sOrBVu4B.mjs → DurableAgentRuntime-uggeJpv3.mjs} +3 -1
- package/dist/{DurableAgentRuntime-sOrBVu4B.mjs.map → DurableAgentRuntime-uggeJpv3.mjs.map} +1 -1
- package/dist/durable/DurableAgentRuntime.mjs +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/src/durable/DurableAgentRuntime.ts +12 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DurableAgentRuntime-sOrBVu4B.mjs","names":["failure","sameAdmission","sameJson","AgentRuntime.projectCompletionFromToolOutput","AgentRuntime.projectCompletionOutput","AgentRuntime.decodeFinalOutput","AgentRuntime.encodeRunDisposition","AgentRuntime.streamWithUsageAccountingUnknown","IdGenerator"],"sources":["../src/durable/internal/worker-runtime.ts","../src/durable/internal/agent-updates.ts","../src/durable/internal/journal-checkpoint.ts","../src/durable/internal/messaging-host.ts","../src/durable/internal/worker-host.ts","../src/durable/DurableAgentRuntime.ts"],"sourcesContent":["import { Context, type Effect } from \"effect\";\n\nimport type { makeWorkerRuntime } from \"./worker-host.ts\";\n\n/** Canonical worker operations constructed once by the durable coordinator. */\nexport class WorkerRuntime extends Context.Service<\n WorkerRuntime,\n Effect.Success<ReturnType<typeof makeWorkerRuntime>>\n>()(\"@effect-agent/thread/internal/WorkerRuntime\") {}\n","import { Clock, Crypto, DateTime, Effect, Option, Schema } from \"effect\";\n\nimport { Update, UpdateError } from \"../../core/AgentUpdates.ts\";\nimport type { RunId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../../core/internal/utf8.ts\";\nimport { IdempotencyKey } from \"../../core/Receipt.ts\";\nimport { digestJson } from \"../Digest.ts\";\nimport { DurableRuntimeFailpoint } from \"../DurableFailpoint.ts\";\nimport {\n MessageDeliveryStore,\n MessageDeliveryRecord,\n messageDeliveryCapacity,\n messageDeliveryUsesCapacity,\n prepareMessageDelivery,\n} from \"../MessageDelivery.ts\";\nimport {\n AgentUpdateEmitted,\n BatchId,\n CanonicalBatch,\n type CanonicalRecordEnvelope,\n DefinitionDigests,\n type DeploymentId,\n PersistedJson,\n type ProducerEpoch,\n type ProducerId,\n RecordEnvelope,\n RecordId,\n} from \"../Records.ts\";\nimport { LedgerError, type SubmissionSnapshot } from \"../SubmissionLedger.ts\";\nimport { PreparedInput } from \"../Subscription.ts\";\nimport {\n FencedAppendRequest,\n ThreadExportRequest,\n ThreadStore,\n ThreadTailRequest,\n} from \"../ThreadStore.ts\";\nimport { WorkerRuntime } from \"./worker-runtime.ts\";\n\nexport const lastWorkerReportMessageId = (records: ReadonlyArray<CanonicalRecordEnvelope>) => {\n for (let index = records.length - 1; index >= 0; index--) {\n const payload = records[index]?.record.payload;\n\n if (payload?._tag === \"WorkerReportPrepared\") return payload.messageId;\n if (payload?._tag === \"AgentUpdateEmitted\" && payload.delivery !== undefined)\n return payload.delivery.messageId;\n }\n\n return undefined;\n};\n\ntype Delivery = NonNullable<AgentUpdateEmitted[\"delivery\"]>;\n\nconst storage = () =>\n LedgerError.make({ operation: \"agent-update\", message: \"Durable update persistence failed\" });\n\nconst rejected = (reason: UpdateError[\"reason\"]) => UpdateError.make({ reason });\n\n/** Acceptance is fenced by the actual emitting Attempt; recovery only recreates frozen outbox rows. */\nexport const makeAgentUpdateRuntime = Effect.fn(\"AgentUpdates.makeDurable\")(function* (options: {\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n}) {\n const store = yield* ThreadStore;\n const workers = yield* WorkerRuntime;\n const deliveries = yield* Effect.serviceOption(MessageDeliveryStore);\n const crypto = yield* Crypto.Crypto;\n const failpoint = yield* DurableRuntimeFailpoint;\n\n const read = (threadId: ThreadId) =>\n store.export(ThreadExportRequest.make({ threadId })).pipe(Effect.mapError(storage));\n\n const prepareDelivery = Effect.fn(\"AgentUpdates.prepareDelivery\")(function* (\n update: Update,\n delivery: Delivery,\n ) {\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(delivery.envelope).pipe(\n Effect.mapError(storage),\n );\n\n return yield* prepareMessageDelivery({\n key: { ownerThreadId: update.threadId, messageId: delivery.messageId },\n envelope,\n createdAtMillis: delivery.createdAtMillis,\n deadlineAtMillis: delivery.deadlineAtMillis,\n ...(delivery.predecessor === undefined ? {} : { predecessor: delivery.predecessor }),\n }).pipe(Effect.provideService(Crypto.Crypto, crypto), Effect.mapError(storage));\n });\n\n const insert = Effect.fn(\"AgentUpdates.restoreDelivery\")(function* (record: AgentUpdateEmitted) {\n const delivery = record.delivery;\n\n if (delivery === undefined) return;\n if (Option.isNone(deliveries)) return yield* storage();\n const prepared = yield* prepareDelivery(record.update, delivery);\n\n yield* failpoint.hit(\"update:before-delivery-insert\");\n yield* deliveries.value.insert(prepared).pipe(Effect.mapError(storage));\n yield* failpoint.hit(\"update:after-delivery-insert\");\n });\n\n const repair = Effect.fn(\"AgentUpdates.repair\")(function* (threadId: ThreadId) {\n const history = yield* read(threadId);\n\n for (const { record } of history.records) {\n if (record.payload._tag === \"AgentUpdateEmitted\" && record.payload.delivery !== undefined)\n yield* insert(record.payload);\n }\n });\n\n const emit = Effect.fn(\"AgentUpdates.accept\")(function* (request: {\n readonly submission: SubmissionSnapshot;\n readonly runId: RunId;\n readonly producerEpoch: ProducerEpoch;\n readonly definitions: DefinitionDigests;\n readonly updateId: IdempotencyKey;\n readonly value: Schema.Json;\n readonly maxCount?: number;\n readonly maxBytes?: number;\n }) {\n const value = yield* Schema.encodeEffect(Schema.fromJsonString(PersistedJson))(\n request.value,\n ).pipe(\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(PersistedJson))),\n Effect.mapError(() => rejected(\"validation\")),\n );\n\n const updateId = yield* Schema.decodeEffect(IdempotencyKey)(request.updateId).pipe(\n Effect.mapError(() => rejected(\"validation\")),\n );\n\n const digest = yield* digestJson([request.submission.threadId, request.runId, updateId]).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError(storage),\n );\n\n const id = `agent-update:${digest}`;\n const messageId = Schema.decodeSync(IdempotencyKey)(`worker-update:${digest}`);\n const maxCount = request.maxCount ?? 32;\n const maxBytes = request.maxBytes ?? 16_384;\n\n if (\n !Number.isSafeInteger(maxCount) ||\n maxCount < 1 ||\n !Number.isSafeInteger(maxBytes) ||\n maxBytes < 1\n )\n return yield* rejected(\"validation\");\n\n for (let attempt = 0; attempt < 32; attempt++) {\n const history = yield* read(request.submission.threadId);\n\n const updates = history.records.flatMap(({ record }) =>\n record.payload._tag === \"AgentUpdateEmitted\" ? [record.payload] : [],\n );\n\n const existing = updates.find(\n (entry) => entry.update.runId === request.runId && entry.update.updateId === updateId,\n );\n\n if (existing !== undefined) {\n if (\n existing.update.agentId !== request.submission.agentId ||\n !Schema.toEquivalence(PersistedJson)(existing.update.value, value) ||\n !Schema.toEquivalence(DefinitionDigests)(existing.definitions, request.definitions)\n )\n return yield* rejected(\"conflict\");\n yield* insert(existing);\n\n return existing.update;\n }\n const own = updates.filter((entry) => entry.update.runId === request.runId);\n\n if (\n own.length >= maxCount ||\n own.reduce(\n (total, entry) => total + utf8ByteLength(JSON.stringify(entry.update.value)),\n 0,\n ) +\n utf8ByteLength(JSON.stringify(value)) >\n maxBytes\n )\n return yield* rejected(\"capacity\");\n if (\n history.records.some(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" && record.payload.runId === request.runId,\n ) ||\n !history.records.some(\n ({ record }) =>\n record.payload._tag === \"RunStarted\" && record.payload.runId === request.runId,\n )\n )\n return yield* rejected(\"identity\");\n\n const update = Update.make({\n schemaVersion: 1,\n agentId: request.submission.agentId,\n threadId: request.submission.threadId,\n runId: request.runId,\n updateId,\n sequence: (updates.at(-1)?.update.sequence ?? 0) + 1,\n value,\n });\n\n const prepared = yield* workers.prepareUpdate(update, request.submission, messageId);\n let delivery: Delivery | undefined;\n\n if (prepared !== undefined) {\n if (Option.isNone(deliveries)) return yield* rejected(\"unavailable\");\n const retained = updates.filter((entry) => entry.delivery !== undefined);\n const capacity = messageDeliveryCapacity(deliveries.value.limits, true);\n\n if (\n retained.length >= capacity.retained ||\n utf8ByteLength(JSON.stringify(prepared.envelope)) >\n deliveries.value.limits.maxEnvelopeBytes\n )\n return yield* rejected(\"capacity\");\n let pending = 0;\n\n for (const accepted of retained) {\n if (accepted.delivery === undefined) continue;\n\n const row = yield* deliveries.value\n .get({\n ownerThreadId: request.submission.threadId,\n messageId: accepted.delivery.messageId,\n })\n .pipe(Effect.mapError(storage));\n\n if (row === null || messageDeliveryUsesCapacity(row)) pending++;\n }\n if (pending >= capacity.pending) return yield* rejected(\"capacity\");\n const predecessor = lastWorkerReportMessageId(history.records);\n\n delivery = { ...prepared, ...(predecessor === undefined ? {} : { predecessor }) };\n const deliveryRecord = yield* prepareDelivery(update, delivery);\n\n const stored = yield* Schema.encodeEffect(Schema.fromJsonString(MessageDeliveryRecord))(\n deliveryRecord,\n ).pipe(Effect.mapError(storage));\n\n if (utf8ByteLength(stored) > deliveries.value.maxStoredValueBytes)\n return yield* rejected(\"capacity\");\n }\n\n const payload = AgentUpdateEmitted.make({\n update,\n definitions: request.definitions,\n ...(delivery === undefined ? {} : { delivery }),\n });\n\n const tail = yield* store\n .inspectTail(ThreadTailRequest.make({ threadId: request.submission.threadId }))\n .pipe(Effect.mapError(storage));\n\n if (tail.producerEpoch !== request.producerEpoch) return yield* storage();\n if (tail.tailSequence !== history.tailSequence || tail.tailDigest !== history.tailDigest)\n continue;\n yield* failpoint.hit(\"update:before-canonical-append\");\n\n const appended = yield* store\n .append(\n FencedAppendRequest.make({\n threadId: request.submission.threadId,\n producerEpoch: request.producerEpoch,\n expectedTailSequence: history.tailSequence,\n expectedTailDigest: history.tailDigest,\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: options.producerId,\n records: [\n RecordEnvelope.make({\n recordId: Schema.decodeSync(RecordId)(id),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(yield* Clock.currentTimeMillis),\n deploymentId: options.deploymentId,\n payload,\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag(\"AppendConflict\", () => Effect.succeed(false)),\n Effect.mapError(storage),\n );\n\n if (!appended) continue;\n yield* failpoint.hit(\"update:after-canonical-append\");\n yield* insert(payload);\n\n return update;\n }\n\n return yield* storage();\n });\n\n return { emit, repair };\n});\n","import { Option, Schema } from \"effect\";\nimport { Prompt } from \"effect/unstable/ai\";\n\nimport { RunId, SubmissionId } from \"../../core/Identifiers.ts\";\nimport { RunPolicyUsage } from \"../../core/RunPolicyUsage.ts\";\nimport { Selection } from \"../../core/ToolExposure.ts\";\nimport { RunUsageSummary } from \"../../core/Usage.ts\";\nimport { CanonicalRecordEnvelope, CanonicalSequence, Digest, PersistedJson } from \"../Records.ts\";\n\n/** Retired accounting is additive; the latest Tool batch always remains replayable verbatim. */\nexport class JournalCheckpointSeed extends Schema.Class<JournalCheckpointSeed>(\n \"@effect-agent/thread/internal/JournalCheckpointSeed\",\n)({\n runId: RunId,\n throughSequence: CanonicalSequence,\n firstSequence: Schema.optionalKey(CanonicalSequence),\n toolSelection: Schema.optionalKey(Selection),\n committedTurns: Schema.Natural,\n policyUsage: RunPolicyUsage,\n modelCalls: Schema.Natural,\n unobservedModelCalls: Schema.Natural,\n inputTokens: Schema.Natural,\n outputTokens: Schema.Natural,\n lastInputTokens: Schema.Natural,\n lastOutputTokens: Schema.Natural,\n costMicrousd: Schema.Natural,\n summarizedModelUsage: RunUsageSummary,\n protectedContext: Schema.optionalKey(PersistedJson),\n contextWindowId: Schema.optionalKey(Schema.String),\n frontier: Schema.optionalKey(\n Schema.Struct({\n sequence: CanonicalSequence,\n tag: Schema.Literals([\"ModelResponseRecorded\", \"ToolCallSettled\"]),\n }),\n ),\n /** Canonical replacement whose covered batches were validated before retirement. */\n compaction: CanonicalRecordEnvelope,\n}) {}\n\n/** A bounded sparse projection, never a canonical log or a submission-ownership record. */\nexport class RecoveryCheckpointState extends Schema.Class<RecoveryCheckpointState>(\n \"@effect-agent/thread/internal/RecoveryCheckpointState\",\n)({\n schemaVersion: Schema.Literal(1),\n policyAccountingVersion: Schema.Literal(1),\n submissionId: SubmissionId,\n submissionIds: Schema.Array(SubmissionId).check(Schema.isMaxLength(4_096)),\n seed: JournalCheckpointSeed,\n records: Schema.Array(CanonicalRecordEnvelope).check(Schema.isMaxLength(4_096)),\n}) {}\n\nexport class RecoveryCheckpointContents extends Schema.Class<RecoveryCheckpointContents>(\n \"@effect-agent/thread/internal/RecoveryCheckpointContents\",\n)({\n state: RecoveryCheckpointState,\n digest: Digest,\n}) {}\n\nexport const RECOVERY_ENGINE_VERSION = \"effect-agent/recovery@1\";\n\n/**\n * Late evidence can invalidate an old compaction. Such histories use full canonical replay;\n * an omitted run/turn must never be treated as proven absent by a sparse projection.\n */\nexport const checkpointSuffixCompatible = (\n seed: JournalCheckpointSeed,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n retained: ReadonlyArray<CanonicalRecordEnvelope>,\n): boolean =>\n records.every(({ sequence, record: { payload } }) => {\n if (\"runId\" in payload && payload.runId !== undefined && payload.runId !== seed.runId)\n return false;\n if (\"turn\" in payload && payload.turn <= seed.committedTurns) return false;\n if (payload._tag === \"ToolCallSettled\" || payload._tag === \"ToolCallResolved\") {\n // These records have no turn. The retained declaration/preparation proves their scope.\n return [...retained, ...records].some(\n ({ sequence: declarationSequence, record: { payload: candidate } }) => {\n if (\n candidate._tag !== \"ModelResponseRecorded\" ||\n candidate.runId !== payload.runId ||\n candidate.turn <= seed.committedTurns ||\n seed.compaction.record.payload._tag !== \"CompactionCreated\" ||\n declarationSequence <= seed.compaction.record.payload.coversThrough ||\n declarationSequence >= sequence\n )\n return false;\n const decoded = Schema.decodeUnknownOption(Prompt.Prompt)(candidate.messages);\n\n return (\n Option.isSome(decoded) &&\n decoded.value.content.some(\n (message) =>\n message.role === \"assistant\" &&\n message.content.some(\n (part) => part.type === \"tool-call\" && part.id === payload.toolCallId,\n ),\n )\n );\n },\n );\n }\n\n return payload._tag !== \"CompactionCreated\" || payload.coversThrough >= seed.throughSequence;\n });\n","import { Clock, Crypto, DateTime, Effect, Option, Schema, Stream } from \"effect\";\n\nimport type { InboxPage } from \"../../capabilities/Messaging.ts\";\nimport {\n MessageAdmission,\n MessageRef,\n MessageStatus,\n MessagingError,\n PeerName,\n} from \"../../capabilities/Messaging.ts\";\nimport type { AgentId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { IdempotencyKey, type Principal } from \"../../core/Receipt.ts\";\nimport type { WorkerSource } from \"../../core/Worker.ts\";\nimport {\n type MessagingHost,\n type PeerTarget,\n type SendPeerMessage,\n} from \"../../engine/MessagingHost.ts\";\nimport {\n PeerAuthorizer,\n PeerRoutes,\n PeerDeliveryLifetime,\n PeerMessageCapacity,\n} from \"../../engine/MessagingHost.ts\";\nimport { digestJson } from \"../Digest.ts\";\nimport type { DurableSubmitOptions } from \"../DurableAgentRuntime.ts\";\nimport {\n MessageDeliveryFailpoint,\n MessageDeliveryStore,\n type MessageDeliveryRecord,\n prepareMessageDelivery,\n} from \"../MessageDelivery.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n type DeploymentId,\n type Digest,\n PeerMessagePrepared,\n PersistedJson,\n type ProducerId,\n RecordEnvelope,\n RecordId,\n} from \"../Records.ts\";\nimport { PreparedInput } from \"../Subscription.ts\";\nimport {\n FencedAppendRequest,\n ThreadExportRequest,\n ThreadRead,\n ThreadTailRequest,\n ThreadStore,\n} from \"../ThreadStore.ts\";\nimport {\n definitionDigestsEqual,\n resolveDefinitionBinding,\n type ResolvedBinding,\n} from \"./agent-registration.ts\";\n\nexport interface MessagingRuntimeOptions {\n readonly bindings: ReadonlyArray<ResolvedBinding>;\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n}\n\nconst failure = (operation: MessagingError[\"operation\"], reason: MessagingError[\"reason\"]) =>\n MessagingError.make({ operation, reason });\n\nconst sameRef = Schema.toEquivalence(MessageRef);\nconst sameAdmission = Schema.toEquivalence(MessageAdmission);\nconst sameJson = Schema.toEquivalence(PersistedJson);\n\n/** Thread-owned durable peer delivery. Source proof and the independent due index survive Run settlement. */\nexport const makeMessagingRuntime = Effect.fn(\"MessagingHost.make\")(function* (\n options: MessagingRuntimeOptions,\n) {\n const deps = {\n ...options,\n store: yield* ThreadStore,\n deliveries: yield* Effect.serviceOption(MessageDeliveryStore),\n crypto: yield* Crypto.Crypto,\n authorizer: yield* PeerAuthorizer,\n routes: yield* PeerRoutes,\n lifetimeMillis: yield* PeerDeliveryLifetime,\n maxMessagesPerSource: yield* PeerMessageCapacity,\n failpoint: yield* MessageDeliveryFailpoint,\n };\n\n const digest = (value: Schema.Json) =>\n digestJson(value).pipe(\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(() => failure(\"send\", \"storage\")),\n );\n\n const read = (threadId: ThreadId) =>\n deps.store\n .export(ThreadExportRequest.make({ threadId }))\n .pipe(Effect.mapError(() => failure(\"context\", \"storage\")));\n\n const sourceOf = Effect.fn(\"MessagingHost.source\")(function* (threadId: ThreadId) {\n const log = yield* read(threadId);\n const created = log.records[0]?.record.payload;\n\n if (created?._tag !== \"ThreadCreated\") return yield* failure(\"context\", \"not-found\");\n\n const matching = deps.bindings.filter(\n (binding) =>\n binding.agentId === created.agentId &&\n definitionDigestsEqual(binding.digests, created.definitions),\n );\n\n if (matching.length !== 1) return yield* failure(\"context\", \"binding-mismatch\");\n\n return { log, address: { threadId, agentId: created.agentId } };\n });\n\n const decodeProof = Effect.fn(\"MessagingHost.decodeProof\")(function* (record: RecordEnvelope) {\n if (record.payload._tag !== \"PeerMessagePrepared\") return yield* failure(\"send\", \"corrupt\");\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(\n record.payload.encodedEnvelope,\n ).pipe(Effect.mapError(() => failure(\"send\", \"corrupt\")));\n\n if (\n !Schema.is(MessageAdmission)(envelope.messageAdmission) ||\n envelope.messageAdmission.message.messageId !== record.payload.messageId\n )\n return yield* failure(\"send\", \"corrupt\");\n\n return {\n envelope,\n sourcePrincipal: record.payload.sourcePrincipal,\n operation: record.payload.operation,\n deadlineAtMillis: record.payload.deadlineAtMillis,\n createdAtMillis: DateTime.toEpochMillis(record.createdAt),\n };\n });\n\n const proof = Effect.fn(\"MessagingHost.proof\")(function* (message: MessageRef) {\n const source = yield* sourceOf(message.ownerThreadId);\n\n const record = source.log.records.find(\n ({ record }) =>\n record.payload._tag === \"PeerMessagePrepared\" &&\n record.payload.messageId === message.messageId,\n )?.record;\n\n if (record === undefined) return yield* failure(\"reply\", \"invalid-reference\");\n const saved = yield* decodeProof(record);\n\n if (\n !Schema.is(MessageAdmission)(saved.envelope.messageAdmission) ||\n saved.envelope.messageAdmission.sender.agentId !== source.address.agentId ||\n !sameRef(saved.envelope.messageAdmission.message, message)\n )\n return yield* failure(\"reply\", \"invalid-reference\");\n\n return saved;\n });\n\n const authorizeEnvelope = Effect.fn(\"MessagingHost.authorizeEnvelope\")(function* (\n saved: Effect.Success<ReturnType<typeof proof>>,\n operation: \"send\" | \"reply\",\n ) {\n const metadata = saved.envelope.messageAdmission;\n\n if (!Schema.is(MessageAdmission)(metadata)) return yield* failure(operation, \"corrupt\");\n\n const principal = yield* deps.authorizer.authorize({\n source: metadata.sender,\n principal: saved.sourcePrincipal,\n operation: saved.operation,\n access: \"send\",\n peerName: metadata.peerName,\n destination: { threadId: saved.envelope.threadId, agentId: saved.envelope.agentId },\n });\n\n if (principal !== saved.envelope.deliveryPrincipal) return yield* failure(operation, \"denied\");\n });\n\n const status = (row: MessageDeliveryRecord): MessageStatus =>\n MessageStatus.make({\n message: row.key,\n status: row.status,\n receipt: row.receipt,\n settlement:\n row.settlement === null\n ? null\n : { settlementId: row.settlement.settlementId, outcome: row.settlement.outcome },\n reason: row.refusal ?? row.parkReason,\n });\n\n const deliveries = (operation: MessagingError[\"operation\"]) =>\n Option.isSome(deps.deliveries)\n ? Effect.succeed(deps.deliveries.value)\n : failure(operation, \"unavailable\");\n\n const mapStore =\n (operation: MessagingError[\"operation\"]) =>\n (error: { readonly _tag: string; readonly reason?: string }) =>\n failure(\n operation,\n error.reason === \"capacity\"\n ? \"capacity\"\n : error.reason === \"conflict\"\n ? \"conflict\"\n : \"storage\",\n );\n\n const lifetime = Schema.decodeEffect(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(604_800_000)),\n )(deps.lifetimeMillis).pipe(Effect.mapError(() => failure(\"send\", \"capacity\")));\n\n const capacity = Schema.decodeEffect(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1_000)),\n )(deps.maxMessagesPerSource ?? 256).pipe(Effect.mapError(() => failure(\"send\", \"capacity\")));\n\n const facet = (\n threadId: ThreadId,\n principal: Principal,\n toolSource?: WorkerSource,\n ): MessagingHost[\"Service\"] => {\n const authorize = Effect.fn(\"MessagingHost.authorize\")(function* (\n operation: MessagingError[\"operation\"],\n access: \"context\" | \"read\" | \"send\" | \"control\",\n peer?: PeerTarget,\n destination?: { readonly threadId: ThreadId; readonly agentId: AgentId },\n ) {\n const source = yield* sourceOf(threadId);\n\n if (\n toolSource !== undefined &&\n (toolSource.agentId !== source.address.agentId || toolSource.threadId !== threadId)\n )\n return yield* failure(operation, \"denied\");\n if (peer !== undefined)\n yield* Schema.decodeEffect(PeerName)(peer.name).pipe(\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const deliveryPrincipal = yield* deps.authorizer.authorize({\n source: source.address,\n principal,\n operation,\n access,\n ...(peer === undefined ? {} : { peerName: peer.name }),\n ...(destination === undefined ? {} : { destination }),\n });\n\n return { ...source, deliveryPrincipal };\n });\n\n const send = Effect.fn(\"MessagingHost.send\")(function* (\n request: SendPeerMessage,\n operation: \"send\" | \"reply\",\n ) {\n const initial = yield* authorize(operation, \"send\", request);\n\n const target = yield* resolveDefinitionBinding(deps.bindings, request.target).pipe(\n Effect.mapError(() => failure(operation, \"binding-mismatch\")),\n );\n\n const encoded = yield* Schema.decodeUnknownEffect(Schema.toEncoded(target.definition.input))(\n request.encodedInput,\n ).pipe(Effect.mapError(() => failure(operation, \"invalid-input\")));\n\n const input = yield* Schema.decodeUnknownEffect(PersistedJson)(encoded).pipe(\n Effect.flatMap(Schema.encodeEffect(Schema.fromJsonString(PersistedJson))),\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(PersistedJson))),\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const key = yield* Schema.decodeEffect(IdempotencyKey)(request.idempotencyKey).pipe(\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const inReplyTo =\n request.inReplyTo === undefined\n ? undefined\n : yield* Schema.decodeEffect(MessageRef)(request.inReplyTo).pipe(\n Effect.mapError(() => failure(operation, \"invalid-reference\")),\n );\n\n const message: MessageRef = {\n ownerThreadId: threadId,\n messageId: Schema.decodeSync(IdempotencyKey)(\n `peer:${yield* digest([threadId, principal, request.name, operation, key])}`,\n ),\n };\n\n const store = yield* deliveries(operation);\n const window = yield* lifetime;\n const maxMessages = yield* capacity;\n\n for (let attempt = 0; attempt < 8; attempt++) {\n const current = attempt === 0 ? initial : yield* sourceOf(threadId);\n\n const prior = current.log.records.find(\n ({ record }) =>\n record.payload._tag === \"PeerMessagePrepared\" &&\n record.payload.messageId === message.messageId,\n )?.record;\n\n let saved: Effect.Success<ReturnType<typeof proof>>;\n\n if (prior !== undefined) {\n saved = yield* decodeProof(prior);\n const metadata = saved.envelope.messageAdmission;\n\n if (\n !Schema.is(MessageAdmission)(metadata) ||\n metadata.peerName !== request.name ||\n saved.envelope.agentId !== target.agentId ||\n !definitionDigestsEqual(saved.envelope.definitions, target.digests) ||\n !sameJson(saved.envelope.input, input) ||\n (inReplyTo === undefined || metadata.inReplyTo === undefined\n ? inReplyTo !== metadata.inReplyTo\n : !sameRef(inReplyTo, metadata.inReplyTo))\n )\n return yield* failure(operation, \"conflict\");\n yield* authorize(operation, \"send\", request, {\n threadId: saved.envelope.threadId,\n agentId: target.agentId,\n });\n yield* authorizeEnvelope(saved, operation);\n } else {\n if (\n current.log.records.filter(\n ({ record }) => record.payload._tag === \"PeerMessagePrepared\",\n ).length >= maxMessages\n )\n return yield* failure(operation, \"capacity\");\n let destinationThread: ThreadId;\n\n if (operation === \"reply\") {\n if (inReplyTo === undefined) return yield* failure(operation, \"invalid-reference\");\n\n const inbound = current.log.records.find(\n ({ record }) =>\n record.payload._tag === \"UserInputRecorded\" &&\n Schema.is(MessageAdmission)(record.payload.messageAdmission) &&\n sameRef(record.payload.messageAdmission.message, inReplyTo),\n )?.record.payload;\n\n if (\n inbound?._tag !== \"UserInputRecorded\" ||\n !Schema.is(MessageAdmission)(inbound.messageAdmission) ||\n inbound.messageAdmission.sender.agentId !== target.agentId\n )\n return yield* failure(operation, \"invalid-reference\");\n destinationThread = inbound.messageAdmission.returnAddress.threadId;\n } else {\n destinationThread = yield* deps.routes.resolve({\n source: current.address,\n principal,\n peerName: request.name,\n targetAgentId: target.agentId,\n });\n }\n\n const allowed = yield* authorize(operation, \"send\", request, {\n threadId: destinationThread,\n agentId: target.agentId,\n });\n\n const metadata = MessageAdmission.make({\n schemaVersion: 1,\n message,\n peerName: request.name,\n sender: current.address,\n returnAddress: current.address,\n ...(inReplyTo === undefined ? {} : { inReplyTo }),\n });\n\n const envelope = PreparedInput.make({\n schemaVersion: 1,\n threadId: destinationThread,\n agentId: target.agentId,\n definitions: target.digests,\n deliveryPrincipal: allowed.deliveryPrincipal,\n input,\n inputDigest: yield* digest(input),\n admissionKey: message.messageId,\n authorization: { policyId: \"peer-message\", decisionId: message.messageId },\n messageAdmission: metadata,\n });\n\n const encodedEnvelope = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(Effect.mapError(mapStore(operation)));\n\n if (\n tail.tailSequence !== current.log.tailSequence ||\n tail.tailDigest !== current.log.tailDigest\n )\n continue;\n const createdAtMillis = yield* Clock.currentTimeMillis;\n\n yield* deps.failpoint\n .hit(\"peer:before-prepared-append\")\n .pipe(Effect.mapError(mapStore(operation)));\n\n const appended = yield* deps.store\n .append(\n FencedAppendRequest.make({\n threadId,\n producerEpoch: tail.producerEpoch,\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(message.messageId),\n producerId: deps.producerId,\n records: [\n RecordEnvelope.make({\n recordId: Schema.decodeSync(RecordId)(message.messageId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(createdAtMillis),\n deploymentId: deps.deploymentId,\n payload: PeerMessagePrepared.make({\n messageId: message.messageId,\n encodedEnvelope,\n sourcePrincipal: principal,\n operation,\n deadlineAtMillis: createdAtMillis + window,\n }),\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], () => Effect.succeed(false)),\n Effect.mapError(mapStore(operation)),\n );\n\n if (!appended) continue;\n yield* deps.failpoint\n .hit(\"peer:after-prepared-append\")\n .pipe(Effect.mapError(mapStore(operation)));\n saved = {\n envelope,\n sourcePrincipal: principal,\n operation,\n createdAtMillis,\n deadlineAtMillis: createdAtMillis + window,\n };\n }\n\n const prepared = yield* prepareMessageDelivery({\n key: message,\n envelope: saved.envelope,\n createdAtMillis: saved.createdAtMillis,\n deadlineAtMillis: saved.deadlineAtMillis,\n }).pipe(\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(mapStore(operation)),\n );\n\n return status(yield* store.insert(prepared).pipe(Effect.mapError(mapStore(operation))));\n }\n\n return yield* failure(operation, \"capacity\");\n });\n\n const lookup = Effect.fn(\"MessagingHost.lookup\")(function* (\n request: PeerTarget & { readonly message: MessageRef },\n operation: \"inspect\" | \"retry\",\n ) {\n yield* authorize(operation, operation === \"inspect\" ? \"read\" : \"control\", request);\n\n const message = yield* Schema.decodeEffect(MessageRef)(request.message).pipe(\n Effect.mapError(() => failure(operation, \"invalid-reference\")),\n );\n\n if (message.ownerThreadId !== threadId) return yield* failure(operation, \"denied\");\n const store = yield* deliveries(operation);\n const row = yield* store.get(message).pipe(Effect.mapError(mapStore(operation)));\n\n if (row === null) return yield* failure(operation, \"not-found\");\n if (\n !Schema.is(MessageAdmission)(row.envelope.messageAdmission) ||\n row.envelope.messageAdmission.peerName !== request.name ||\n row.envelope.agentId !== request.target.id\n )\n return yield* failure(operation, \"invalid-reference\");\n yield* authorize(operation, operation === \"inspect\" ? \"read\" : \"control\", request, {\n threadId: row.envelope.threadId,\n agentId: row.envelope.agentId,\n });\n\n return { row, store };\n });\n\n return {\n context: authorize(\"context\", \"context\").pipe(\n Effect.map(\n (source): WorkerSource => toolSource ?? { _tag: \"programmatic\", ...source.address },\n ),\n ),\n send: (request) => send(request, \"send\"),\n reply: (request) => send(request, \"reply\"),\n inspect: (request) => lookup(request, \"inspect\").pipe(Effect.map(({ row }) => status(row))),\n retry: Effect.fn(\"MessagingHost.retry\")(function* (request) {\n const { row, store } = yield* lookup(request, \"retry\");\n\n yield* authorizeEnvelope(yield* proof(row.key), \"send\");\n const nowMillis = yield* Clock.currentTimeMillis;\n\n return status(\n yield* store\n .change(row.key, {\n _tag: \"Recover\",\n expectedVersion: row.version,\n nowMillis,\n deadlineAtMillis: nowMillis + (yield* lifetime),\n })\n .pipe(Effect.mapError(mapStore(\"retry\"))),\n );\n }),\n inbox: Effect.fn(\"MessagingHost.inbox\")(function* (request) {\n const current = yield* authorize(\"inbox\", \"read\", request);\n\n const limit = yield* Schema.decodeEffect(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n )(request.limit).pipe(Effect.mapError(() => failure(\"inbox\", \"capacity\")));\n\n let after = yield* Schema.decodeEffect(CanonicalSequence)(request.after ?? 0).pipe(\n Effect.mapError(() => failure(\"inbox\", \"invalid-reference\")),\n );\n\n const items: Array<(typeof InboxPage.Type)[\"items\"][number]> = [];\n\n while (after < current.log.tailSequence && items.length < limit) {\n const records = yield* Stream.runCollect(\n deps.store.read(ThreadRead.make({ threadId, afterSequence: after, limit: 1_024 })),\n ).pipe(Effect.mapError(() => failure(\"inbox\", \"storage\")));\n\n if (records.length === 0) break;\n for (const entry of records) {\n if (entry.sequence > current.log.tailSequence) break;\n after = entry.sequence;\n const payload = entry.record.payload;\n\n if (\n payload._tag === \"UserInputRecorded\" &&\n Schema.is(MessageAdmission)(payload.messageAdmission) &&\n payload.messageAdmission.sender.agentId === request.target.id\n ) {\n yield* authorize(\"inbox\", \"read\", request, payload.messageAdmission.sender);\n items.push({ sequence: entry.sequence, admission: payload.messageAdmission });\n }\n if (items.length >= limit) break;\n }\n }\n\n return { items, next: after < current.log.tailSequence ? after : null };\n }),\n };\n };\n\n return {\n acquire: Effect.fn(\"MessagingHost.acquire\")(function* (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n }) {\n const service = facet(request.sourceThreadId, request.principal);\n\n yield* service.context;\n\n return service;\n }),\n forTool: (source: WorkerSource, principal: Principal) =>\n facet(source.threadId, principal, source),\n validateAdmission: Effect.fn(\"MessagingHost.validateAdmission\")(function* (\n unvalidated: MessageAdmission,\n options: DurableSubmitOptions,\n agentId: AgentId,\n inputDigest: Digest,\n ) {\n const admission = yield* Schema.decodeEffect(MessageAdmission)(unvalidated).pipe(\n Effect.mapError(() => failure(\"send\", \"invalid-input\")),\n );\n\n const saved = yield* proof(admission.message);\n const envelope = saved.envelope;\n\n if (\n !Schema.is(MessageAdmission)(envelope.messageAdmission) ||\n !sameAdmission(envelope.messageAdmission, admission) ||\n envelope.threadId !== options.threadId ||\n envelope.agentId !== agentId ||\n envelope.inputDigest !== inputDigest ||\n envelope.deliveryPrincipal !== options.principal ||\n envelope.admissionKey !== options.idempotencyKey ||\n !definitionDigestsEqual(envelope.definitions, options.definitions)\n )\n return yield* failure(\"send\", \"denied\");\n yield* authorizeEnvelope(saved, \"send\");\n\n return admission;\n }),\n };\n});\n","import {\n Cause,\n Clock,\n Context,\n Crypto,\n DateTime,\n Duration,\n Effect,\n Option,\n Schema,\n Stream,\n} from \"effect\";\n\nimport type * as Agent from \"../../core/Agent.ts\";\nimport { AgentPolicy } from \"../../core/AgentPolicy.ts\";\nimport { Update, UpdateError } from \"../../core/AgentUpdates.ts\";\nimport { ThreadId, type AgentId, type SubmissionId } from \"../../core/Identifiers.ts\";\nimport { IdempotencyKey, Receipt } from \"../../core/Receipt.ts\";\nimport { SubagentDelegationCaps, SubagentGrant } from \"../../core/SubagentContract.ts\";\nimport {\n WorkerCompletion,\n FrameworkMessage,\n WorkerUpdate,\n WorkerError,\n WorkerHistoryEntry,\n type WorkerContext,\n WorkerRef,\n} from \"../../core/Worker.ts\";\nimport {\n type SubagentHost,\n type WorkerObservation,\n type WorkerReceiptRequest,\n type WorkerRunReport,\n} from \"../../engine/SubagentHost.ts\";\nimport { digestJson } from \"../Digest.ts\";\nimport type {\n DurableAbortFailure,\n DurableAwaitFailure,\n DurableSubmitFailure,\n DurableSubmitOptions,\n} from \"../DurableAgentRuntime.ts\";\nimport {\n DurableRuntimeFailpoint,\n type DurableRuntimeFailpointLocation,\n} from \"../DurableFailpoint.ts\";\nimport {\n MessageDeliveryDriver,\n MessageDeliveryStore,\n prepareMessageDelivery,\n} from \"../MessageDelivery.ts\";\nimport { PreparedInputAdmission } from \"../PreparedInputAdmission.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n type Digest,\n type DeploymentId,\n type ProducerId,\n RecordEnvelope,\n RecordId,\n WorkerAdmission,\n WorkerInputRequested,\n WorkerOrigin,\n WorkerOriginRecorded,\n WorkerInputCompleted,\n WorkerReportPrepared,\n WorkerReportRefused,\n WorkerReportingIntent,\n SubtreeBudgetReserved,\n PersistedJson,\n} from \"../Records.ts\";\nimport {\n type ScheduledInputFailure,\n ScheduledInputRefused,\n ScheduledInputRetryable,\n} from \"../Schedule.ts\";\nimport {\n SubmissionLedger,\n LedgerError,\n AbortCommand,\n type AbortIntent,\n type Principal,\n type Settlement,\n SubmissionLookupById,\n SubmissionLookupByKey,\n type SubmissionSnapshot,\n} from \"../SubmissionLedger.ts\";\nimport type { SubmissionStatus } from \"../SubmissionStatus.ts\";\nimport { PreparedInput } from \"../Subscription.ts\";\nimport {\n ThreadStore,\n FencedAppendRequest,\n ThreadExportRequest,\n ThreadRead,\n ThreadTailRequest,\n} from \"../ThreadStore.ts\";\nimport {\n WorkerBudgetAuthorizer,\n WorkerConcurrencyLimit,\n WorkerConcurrencyResolver,\n WorkerHostAuthorizer,\n WorkerHostConfig,\n WorkerPolicyResolver,\n type WorkerPolicyTarget,\n} from \"../WorkerHost.ts\";\nimport {\n definitionDigestsEqual,\n resolveDefinitionBinding,\n type ResolvedBinding,\n} from \"./agent-registration.ts\";\nimport { lastWorkerReportMessageId } from \"./agent-updates.ts\";\n\nconst failure = (operation: WorkerError[\"operation\"], reason: WorkerError[\"reason\"]) =>\n WorkerError.make({ operation, reason });\n\nconst storageFailure = (operation: WorkerError[\"operation\"]) => () => failure(operation, \"storage\");\n\nconst decode = <S extends Schema.Top>(\n schema: S,\n value: unknown,\n operation: WorkerError[\"operation\"],\n) =>\n Schema.decodeUnknownEffect(Schema.toType(schema))(value).pipe(\n Effect.mapError(() => failure(operation, \"corrupt\")),\n );\n\nconst sameOrigin = Schema.toEquivalence(WorkerOrigin);\nconst sameAdmission = Schema.toEquivalence(WorkerAdmission);\nconst sameReporting = Schema.toEquivalence(Schema.UndefinedOr(WorkerReportingIntent));\nconst sameJson = Schema.toEquivalence(PersistedJson);\nconst sameCaps = Schema.toEquivalence(SubagentDelegationCaps);\nconst samePolicy = Schema.toEquivalence(AgentPolicy);\n\nconst amountCaps = [\n [\"turns\", \"maxTurns\"],\n [\"toolCalls\", \"maxToolCalls\"],\n [\"durationMillis\", \"maxDurationMillis\"],\n [\"inputTokens\", \"maxInputTokens\"],\n [\"outputTokens\", \"maxOutputTokens\"],\n [\"costMicrousd\", \"maxCostMicrousd\"],\n [\"resultBytes\", \"maxResultBytes\"],\n] as const;\n\nconst sourceCaps = (policy: AgentPolicy): SubagentDelegationCaps =>\n SubagentDelegationCaps.make({\n maxTotalChildInvocations: policy.maxToolCalls,\n maxConcurrentChildren: policy.toolConcurrency,\n maxTurns: policy.maxTurns,\n maxToolCalls: policy.maxToolCalls,\n maxDurationMillis: Math.ceil(Duration.toMillis(policy.maxDuration)),\n maxResultBytes: Math.min(\n Number.MAX_SAFE_INTEGER,\n policy.toolResultBounds.maxBytes * policy.maxToolCalls,\n ),\n ...(policy.tokenBudget === undefined\n ? {}\n : { maxInputTokens: policy.tokenBudget, maxOutputTokens: policy.tokenBudget }),\n ...(policy.costBudgetMicrousd === undefined\n ? {}\n : { maxCostMicrousd: policy.costBudgetMicrousd }),\n });\n\nconst withinPolicy = (origin: WorkerOrigin, source: AgentPolicy, target: AgentPolicy): boolean => {\n const policy = origin.policy;\n const allocation = origin.budget.allocation;\n const caps = origin.budget.caps;\n const ceilings = sourceCaps(source);\n\n for (const [, name] of origin.budgetScope === \"worker-run\" ? [] : amountCaps) {\n if (caps[name] !== undefined && ceilings[name] !== undefined && caps[name] > ceilings[name])\n return false;\n }\n if (\n origin.budgetScope !== \"worker-run\" &&\n ((caps.maxTotalChildInvocations !== undefined &&\n caps.maxTotalChildInvocations > source.maxToolCalls) ||\n (caps.maxConcurrentChildren !== undefined &&\n caps.maxConcurrentChildren > source.toolConcurrency))\n )\n return false;\n const tokenCeiling = Math.min(source.tokenBudget ?? Infinity, target.tokenBudget ?? Infinity);\n\n const costCeiling = Math.min(\n source.costBudgetMicrousd ?? Infinity,\n target.costBudgetMicrousd ?? Infinity,\n );\n\n return (\n policy.maxTurns <= Math.min(allocation.turns, source.maxTurns, target.maxTurns) &&\n policy.maxToolCalls <=\n Math.min(allocation.toolCalls, source.maxToolCalls, target.maxToolCalls) &&\n Duration.toMillis(policy.maxDuration) <=\n Math.min(\n allocation.durationMillis,\n Duration.toMillis(source.maxDuration),\n Duration.toMillis(target.maxDuration),\n ) &&\n policy.toolConcurrency <= Math.min(source.toolConcurrency, target.toolConcurrency) &&\n policy.toolResultBounds.maxBytes <=\n Math.min(source.toolResultBounds.maxBytes, target.toolResultBounds.maxBytes) &&\n (tokenCeiling === Infinity ||\n (policy.tokenBudget !== undefined && policy.tokenBudget <= tokenCeiling)) &&\n (costCeiling === Infinity ||\n (policy.costBudgetMicrousd !== undefined && policy.costBudgetMicrousd <= costCeiling)) &&\n (source.tokenBudget === undefined ||\n (allocation.inputTokens > 0 &&\n allocation.outputTokens > 0 &&\n policy.tokenBudget !== undefined &&\n policy.tokenBudget <= allocation.inputTokens + allocation.outputTokens)) &&\n (source.costBudgetMicrousd === undefined ||\n (policy.costBudgetMicrousd !== undefined &&\n policy.costBudgetMicrousd <= allocation.costMicrousd))\n );\n};\n\nexport interface WorkerRuntimeOptions {\n readonly bindings: ReadonlyArray<ResolvedBinding>;\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n readonly settlementPollInterval: Duration.Duration;\n}\n\n/** Admission and cancellation enter the owning runtime, never the raw ledger. */\nexport class WorkerInputControl extends Context.Service<\n WorkerInputControl,\n {\n readonly submit: (envelope: PreparedInput) => Effect.Effect<Receipt, DurableSubmitFailure>;\n readonly status: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, DurableAwaitFailure | ScheduledInputFailure>;\n readonly abort: (command: AbortCommand) => Effect.Effect<AbortIntent, DurableAbortFailure>;\n }\n>()(\"@effect-agent/thread/internal/WorkerInputControl\") {}\n\n/** No in-memory ownership: every mutation is reserved in source canonical history with CAS. */\nexport const makeWorkerRuntime = Effect.fn(\"WorkerHost.make\")(function* (\n options: WorkerRuntimeOptions,\n) {\n const control = yield* WorkerInputControl;\n // A routed read may belong to another owner; capture it before exposing worker operations.\n const admission = yield* Effect.serviceOption(PreparedInputAdmission);\n\n const deps = {\n ...options,\n ...control,\n store: yield* ThreadStore,\n ledger: yield* SubmissionLedger,\n deliveries: yield* Effect.serviceOption(MessageDeliveryStore),\n crypto: yield* Crypto.Crypto,\n authorizer: yield* WorkerHostAuthorizer,\n budgetAuthorizer: yield* WorkerBudgetAuthorizer,\n policyResolver: yield* WorkerPolicyResolver,\n concurrencyResolver: yield* WorkerConcurrencyResolver,\n limits: yield* WorkerHostConfig,\n failpoint: yield* DurableRuntimeFailpoint,\n status: Option.getOrUndefined(admission)?.submissionStatus ?? control.status,\n };\n\n const withCrypto = <A, E>(effect: Effect.Effect<A, E, Crypto.Crypto>) =>\n Effect.provideService(effect, Crypto.Crypto, deps.crypto);\n\n const authorizeBudget = Effect.fn(\"WorkerHost.authorizeBudget\")(function* (\n origin: WorkerOrigin,\n principal: Principal,\n ) {\n if (origin.budgetScope !== \"worker-run\") return;\n // Independence changes accounting ownership, never delegation generations.\n if (origin.depth !== 1) return yield* failure(\"start\", \"denied\");\n\n yield* deps.budgetAuthorizer.authorize({\n source: origin.source,\n principal,\n worker: origin.worker,\n policy: origin.policy,\n budget: origin.budget,\n });\n });\n\n const read = (threadId: ThreadId, operation: WorkerError[\"operation\"]) =>\n deps.store\n .export(ThreadExportRequest.make({ threadId }))\n .pipe(Effect.mapError(storageFailure(operation)));\n\n const hit = (location: DurableRuntimeFailpointLocation, operation: WorkerError[\"operation\"]) =>\n deps.failpoint.hit(location).pipe(Effect.mapError(storageFailure(operation)));\n\n const append = Effect.fn(\"WorkerHost.append\")(\n function* (\n threadId: ThreadId,\n id: string,\n payload:\n | WorkerInputRequested\n | WorkerOriginRecorded\n | WorkerInputCompleted\n | WorkerReportPrepared\n | WorkerReportRefused\n | SubtreeBudgetReserved,\n current: Effect.Success<ReturnType<typeof read>>,\n phase: \"source\" | \"origin\" | \"completion\" | \"subtree\" | \"report\",\n ) {\n const operation = \"start\";\n const tail = yield* deps.store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n // Never append against a tail newer than the prefix whose capacity was checked.\n if (tail.tailSequence !== current.tailSequence || tail.tailDigest !== current.tailDigest)\n return false;\n yield* hit(`worker:before-${phase}-append`, operation);\n\n const result = yield* deps.store\n .append(\n FencedAppendRequest.make({\n threadId,\n producerEpoch: tail.producerEpoch,\n expectedTailSequence: current.tailSequence,\n expectedTailDigest: current.tailDigest,\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: deps.producerId,\n records: [\n RecordEnvelope.make({\n recordId: Schema.decodeSync(RecordId)(id),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(\n payload._tag === \"WorkerInputRequested\"\n ? payload.admission.createdAtMillis\n : payload._tag === \"WorkerOriginRecorded\"\n ? payload.origin.createdAtMillis\n : payload._tag === \"WorkerInputCompleted\"\n ? payload.completedAtMillis\n : yield* Clock.currentTimeMillis,\n ),\n deploymentId: deps.deploymentId,\n payload,\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], () => Effect.succeed(false)),\n );\n\n if (result) yield* hit(`worker:after-${phase}-append`, operation);\n\n return result;\n },\n Effect.mapError(storageFailure(\"start\")),\n );\n\n const requests = (records: Effect.Success<ReturnType<typeof read>>[\"records\"]) =>\n records.flatMap(({ record }) =>\n record.payload._tag === \"WorkerInputRequested\" ? [record.payload] : [],\n );\n\n const reportIntent = Effect.fn(\"WorkerHost.reportIntent\")(function* (\n source: ResolvedBinding,\n target: ResolvedBinding,\n delegationId: WorkerRef[\"delegationId\"],\n ): Effect.fn.Return<WorkerOrigin[\"reporting\"], WorkerError> {\n const reports = source.reporting?.filter((entry) => entry.delegationId === delegationId) ?? [];\n const report = reports[0];\n\n if (report === undefined) return undefined;\n if (\n reports.length !== 1 ||\n !Object.is(report.target, target.definition) ||\n (report.mode !== \"standard\" && !Object.is(report.input, source.definition.input)) ||\n (report.destination !== undefined && !Object.is(report.destination.target, source.definition))\n )\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n return {\n sourceDigests: source.digests,\n ...(report.mode === undefined ? {} : { mode: report.mode }),\n ...(report.destination === undefined\n ? {}\n : { destinationDelegationId: report.destination.delegationId }),\n };\n });\n\n const sourceAuthority = Effect.fn(\"WorkerHost.sourceAuthority\")(function* (\n threadId: ThreadId,\n submissionId?: SubmissionId,\n ) {\n const current = yield* read(threadId, \"start\");\n const created = current.records[0]?.record.payload;\n\n if (created?._tag !== \"ThreadCreated\") return yield* failure(\"start\", \"not-found\");\n\n const binding = deps.bindings.find(\n (entry) =>\n entry.agentId === created.agentId &&\n definitionDigestsEqual(entry.digests, created.definitions),\n );\n\n const worker = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const attached = current.records.find(\n ({ record }) => record.payload._tag === \"SubagentLineageRecorded\",\n )?.record.payload;\n\n const nested =\n worker?._tag === \"WorkerOriginRecorded\" || attached?._tag === \"SubagentLineageRecorded\";\n\n let ownerSubmission: SubmissionSnapshot | undefined;\n\n if (nested && submissionId === undefined) return yield* failure(\"start\", \"denied\");\n if (submissionId !== undefined) {\n const submission = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId }))\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n if (\n Option.isNone(submission) ||\n submission.value.threadId !== threadId ||\n (nested && submission.value.agentId !== created.agentId)\n )\n return yield* failure(\"start\", \"denied\");\n ownerSubmission = submission.value;\n if (\n worker?._tag === \"WorkerOriginRecorded\" &&\n (submission.value.workerAdmission === undefined ||\n !sameOrigin(submission.value.workerAdmission.origin, worker.origin))\n )\n return yield* failure(\"start\", \"denied\");\n if (\n attached?._tag === \"SubagentLineageRecorded\" &&\n (submission.value.parentLinkage?.parentSubmissionId !== attached.parentSubmissionId ||\n submission.value.parentLinkage.parentToolCallId !== attached.parentLink.parentToolCallId)\n )\n return yield* failure(\"start\", \"denied\");\n }\n\n if (worker?._tag === \"WorkerOriginRecorded\")\n return {\n current,\n binding,\n submission: ownerSubmission,\n policyOverride: Option.none<AgentPolicy>(),\n policy: worker.origin.policy,\n budget: worker.origin.budget,\n budgetScope: worker.origin.budgetScope,\n grant: worker.origin.grant,\n depth: worker.origin.depth,\n };\n if (attached?._tag === \"SubagentLineageRecorded\") {\n if (\n attached.policy === undefined ||\n attached.budget === undefined ||\n attached.grant === undefined\n )\n return yield* failure(\"start\", \"denied\");\n\n return {\n current,\n binding,\n submission: ownerSubmission,\n policyOverride: Option.none<AgentPolicy>(),\n policy: attached.policy,\n budget: attached.budget,\n budgetScope: undefined,\n grant: attached.grant,\n depth: attached.parentLink.depth,\n };\n }\n\n const ownerBinding =\n ownerSubmission === undefined\n ? undefined\n : deps.bindings.find(\n (entry) =>\n entry.agentId === ownerSubmission.agentId &&\n definitionDigestsEqual(entry.digests, ownerSubmission.agentDigests),\n );\n\n const selectedBinding = ownerBinding ?? binding;\n\n const changedRootAgent =\n ownerSubmission !== undefined && ownerSubmission.agentId !== created.agentId;\n\n // A root conversation may admit a new registered Agent after deployment.\n // Its immutable owner input selects authority; child lineage never changes.\n if (selectedBinding === undefined || (changedRootAgent && ownerBinding === undefined))\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n const selected = yield* deps.policyResolver.resolveSource({\n threadId,\n definition: selectedBinding.definition,\n definitions: ownerSubmission?.agentDigests ?? selectedBinding.digests,\n ...(ownerSubmission === undefined ? {} : { submission: ownerSubmission }),\n });\n\n if (Option.isSome(selected) && ownerSubmission !== undefined && ownerBinding === undefined)\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n const effectiveBinding =\n Option.isSome(selected) || changedRootAgent ? selectedBinding : binding;\n\n if (effectiveBinding === undefined) return yield* failure(\"start\", \"declaration-unavailable\");\n\n const policy = Option.isNone(selected)\n ? effectiveBinding.definition.policy\n : yield* decode(AgentPolicy, selected.value, \"start\");\n\n return {\n current,\n binding: effectiveBinding,\n submission: ownerSubmission,\n policyOverride: Option.map(selected, () => policy),\n policy,\n budget: undefined,\n budgetScope: undefined,\n grant: undefined,\n depth: 0,\n };\n });\n\n const resolveTargetPolicy = Effect.fn(\"WorkerHost.resolveTargetPolicy\")(function* (\n request: WorkerPolicyTarget,\n ) {\n const selected = yield* deps.policyResolver.resolveTarget(request);\n\n if (Option.isNone(selected)) return selected;\n const policy = yield* decode(AgentPolicy, selected.value, \"start\");\n\n if (request._tag === \"RetainedWorker\" && !samePolicy(policy, request.origin.policy))\n return yield* failure(\"start\", \"worker-mismatch\");\n\n return Option.some(policy);\n });\n\n const reserveSubtree = Effect.fn(\"WorkerHost.reserveSubtree\")(function* (\n sourceThreadId: ThreadId,\n requested: SubtreeBudgetReserved,\n ): Effect.fn.Return<void, WorkerError> {\n const payload = yield* decode(SubtreeBudgetReserved, requested, \"start\");\n const recordId = `subtree:${payload.reservationId}`;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const source = yield* sourceAuthority(sourceThreadId, payload.sourceSubmissionId);\n\n const previous = source.current.records.find(({ record }) => record.recordId === recordId)\n ?.record.payload;\n\n if (previous !== undefined) {\n if (\n previous._tag !== \"SubtreeBudgetReserved\" ||\n !Schema.toEquivalence(SubtreeBudgetReserved)(previous, payload)\n )\n return yield* failure(\"start\", \"idempotency-conflict\");\n\n return;\n }\n if (payload.depth !== source.depth + 1 || payload.depth > payload.grant.maxDepth)\n return yield* failure(\"start\", \"denied\");\n const inherited = source.grant;\n const lifetimes = inherited?.childLifetimes;\n\n if (\n inherited !== undefined &&\n (payload.depth > inherited.maxDepth ||\n payload.grant.maxDepth > inherited.maxDepth ||\n (lifetimes !== undefined && !lifetimes.includes(payload.lifetime)) ||\n payload.grant.allowedToolNames.some(\n (name) => !inherited.allowedToolNames.includes(name),\n ) ||\n (lifetimes !== undefined &&\n (payload.grant.childLifetimes ?? [\"attached\", \"background\"]).some(\n (lifetime) => !lifetimes.includes(lifetime),\n )))\n )\n return yield* failure(\"start\", \"denied\");\n\n const rows = source.current.records.flatMap(({ record }) =>\n record.payload._tag === \"SubtreeBudgetReserved\" &&\n record.payload.sourceSubmissionId === payload.sourceSubmissionId\n ? [record.payload]\n : [],\n );\n\n const caps = payload.budget.caps;\n\n if (rows.some((row) => !sameCaps(row.budget.caps, caps)))\n return yield* failure(\"start\", \"capacity\");\n\n const own = {\n turns: source.policy.maxTurns,\n toolCalls: source.policy.maxToolCalls,\n durationMillis: Math.ceil(Duration.toMillis(source.policy.maxDuration)),\n inputTokens: source.policy.tokenBudget ?? source.budget?.allocation.inputTokens ?? 0,\n outputTokens: source.policy.tokenBudget ?? source.budget?.allocation.outputTokens ?? 0,\n costMicrousd:\n source.policy.costBudgetMicrousd ?? source.budget?.allocation.costMicrousd ?? 0,\n resultBytes: source.policy.toolResultBounds.maxBytes,\n };\n\n const ceilings = sourceCaps(source.policy);\n const child = payload.policy;\n const allocation = payload.budget.allocation;\n\n if (\n child.maxTurns > Math.min(source.policy.maxTurns, allocation.turns) ||\n child.maxToolCalls > Math.min(source.policy.maxToolCalls, allocation.toolCalls) ||\n Duration.toMillis(child.maxDuration) >\n Math.min(Duration.toMillis(source.policy.maxDuration), allocation.durationMillis) ||\n child.toolConcurrency > source.policy.toolConcurrency ||\n child.toolResultBounds.maxBytes > source.policy.toolResultBounds.maxBytes ||\n (source.policy.tokenBudget !== undefined &&\n (child.tokenBudget === undefined ||\n child.tokenBudget > source.policy.tokenBudget ||\n child.tokenBudget > allocation.inputTokens + allocation.outputTokens)) ||\n (source.policy.costBudgetMicrousd !== undefined &&\n (child.costBudgetMicrousd === undefined ||\n child.costBudgetMicrousd >\n Math.min(source.policy.costBudgetMicrousd, allocation.costMicrousd)))\n )\n return yield* failure(\"start\", \"capacity\");\n for (const [, cap] of amountCaps) {\n if (caps[cap] !== undefined && ceilings[cap] !== undefined && caps[cap] > ceilings[cap])\n return yield* failure(\"start\", \"capacity\");\n }\n if (\n (caps.maxTotalChildInvocations ?? 0) > source.policy.maxToolCalls ||\n (caps.maxConcurrentChildren ?? 0) > source.policy.toolConcurrency\n )\n return yield* failure(\"start\", \"capacity\");\n const slots = 1 + (payload.budget.descendantInvocations ?? 0);\n\n const chargedSlots = rows.reduce(\n (sum, row) => sum + 1 + (row.budget.descendantInvocations ?? 0),\n slots,\n );\n\n const slotLimit = Math.min(\n caps.maxTotalChildInvocations ?? Infinity,\n source.budget === undefined\n ? source.policy.maxToolCalls\n : (source.budget.descendantInvocations ?? 0),\n );\n\n if (chargedSlots > slotLimit) return yield* failure(\"start\", \"capacity\");\n for (const [amount, cap] of amountCaps) {\n // Zero is the encoded absence of an allocation when this dimension is unconfigured.\n // It must not become a new cumulative token or dollar ceiling in a descendant.\n if (\n source.budgetScope === \"worker-run\" &&\n (amount === \"inputTokens\" || amount === \"outputTokens\" || amount === \"costMicrousd\") &&\n source.budget !== undefined &&\n source.budget.caps[cap] === undefined &&\n source.budget.allocation[amount] === 0 &&\n ceilings[cap] === undefined\n ) {\n const charged = rows.reduce(\n (sum, row) => sum + row.budget.allocation[amount],\n allocation[amount],\n );\n\n if (charged > (caps[cap] ?? Infinity)) return yield* failure(\"start\", \"capacity\");\n continue;\n }\n\n const residual =\n source.budget === undefined\n ? (ceilings[cap] ?? Infinity)\n : Math.max(0, source.budget.allocation[amount] - own[amount]);\n\n const limit = Math.min(caps[cap] ?? Infinity, residual);\n\n const charged = rows.reduce(\n (sum, row) => sum + row.budget.allocation[amount],\n payload.budget.allocation[amount],\n );\n\n if (charged > limit) return yield* failure(\"start\", \"capacity\");\n }\n\n // Include unreconciled reservations conservatively; only canonical completion frees an\n // active slot. A worker Thread consumes one slot even when multiple inputs safely join it.\n const completedWorkers = new Set<string>(\n source.current.records.flatMap(({ record }) =>\n record.payload._tag === \"WorkerInputCompleted\" ? [record.payload.messageId] : [],\n ),\n );\n\n const completedAttached = new Set<string>(\n source.current.records.flatMap(({ record }) =>\n record.payload._tag === \"SubagentJoined\" ? [record.payload.reservationId] : [],\n ),\n );\n\n const active = new Set(\n rows\n .filter((row) =>\n row.lifetime === \"background\"\n ? !completedWorkers.has(row.reservationId)\n : !completedAttached.has(row.reservationId),\n )\n .map((row) => row.childThreadId),\n );\n\n if (\n !active.has(payload.childThreadId) &&\n active.size >=\n Math.min(caps.maxConcurrentChildren ?? Infinity, source.policy.toolConcurrency)\n )\n return yield* failure(\"start\", \"capacity\");\n if (yield* append(sourceThreadId, recordId, payload, source.current, \"subtree\")) return;\n }\n\n return yield* failure(\"start\", \"storage\");\n });\n\n const reservation = Effect.fn(\"WorkerHost.reserveInput\")(function* (\n admission: WorkerAdmission,\n inputDigest: Digest,\n input: PersistedJson,\n principal: Principal,\n ): Effect.fn.Return<void, WorkerError> {\n const origin = admission.origin;\n const id = `worker-input:${admission.messageId}`;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const source = yield* sourceAuthority(origin.source.threadId, admission.sourceSubmissionId);\n const current = source.current;\n const rows = requests(current.records);\n const existing = current.records.find(({ record }) => record.recordId === id)?.record.payload;\n\n if (existing !== undefined) {\n if (\n existing._tag !== \"WorkerInputRequested\" ||\n existing.inputDigest !== inputDigest ||\n !sameAdmission(existing.admission, admission)\n )\n return yield* failure(\"start\", \"idempotency-conflict\");\n }\n const first = current.records[0]?.record.payload;\n\n if (first?._tag !== \"ThreadCreated\") return yield* failure(\"start\", \"denied\");\n\n const own = rows.filter(\n (row) => row.admission.origin.worker.threadId === origin.worker.threadId,\n );\n\n const origins = new Map(\n rows.map((row) => [row.admission.origin.worker.threadId, row.admission.origin]),\n );\n\n const prior = origins.get(origin.worker.threadId);\n\n if (\n prior === undefined &&\n (source.submission?.agentId ?? first.agentId) !== origin.source.agentId\n )\n return yield* failure(\"start\", \"denied\");\n if (prior !== undefined && !sameOrigin(prior, origin))\n return yield* failure(\"start\", \"worker-mismatch\");\n if (prior === undefined && admission.messageId !== origin.firstMessageId)\n return yield* failure(\"start\", \"not-found\");\n const caps = origin.budget.caps;\n\n const sourceBinding = source.binding;\n\n const targetBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.worker.targetAgentId &&\n definitionDigestsEqual(entry.digests, origin.targetDigests),\n );\n\n if (sourceBinding === undefined || targetBinding === undefined)\n return yield* failure(\"start\", \"declaration-unavailable\");\n yield* Schema.decodeEffect(Schema.toEncoded(targetBinding.definition.input))(input).pipe(\n Effect.mapError(() => failure(\"start\", \"corrupt\")),\n );\n\n const targetRequest = {\n definition: targetBinding.definition,\n definitions: targetBinding.digests,\n source: origin.source,\n };\n\n const selected = yield* resolveTargetPolicy(\n admission.messageId === origin.firstMessageId\n ? {\n ...targetRequest,\n _tag: \"InitialInput\",\n input,\n inputDigest,\n ...(source.submission === undefined ? {} : { sourceSubmission: source.submission }),\n }\n : { ...targetRequest, _tag: \"RetainedWorker\", origin: prior ?? origin },\n );\n\n const independent = origin.budgetScope === \"worker-run\";\n\n const targetPolicy = Option.isSome(selected)\n ? selected.value\n : independent\n ? targetBinding.definition.policy\n : AgentPolicy.resolve(\n targetBinding.definition.policyOverrides ?? targetBinding.definition.policy,\n source.policy,\n );\n\n // Captured authority is checked on replay too, before the retained reservation returns.\n // Static callers retain the old idempotent-return behavior.\n if (\n (existing === undefined || Option.isSome(selected)) &&\n !withinPolicy(origin, independent ? targetPolicy : source.policy, targetPolicy)\n )\n return yield* failure(\"start\", \"capacity\");\n if (existing !== undefined) return;\n const now = yield* Clock.currentTimeMillis;\n\n if (now >= origin.expiresAtMillis) return yield* failure(\"start\", \"capacity\");\n if (\n (prior === undefined && origins.size >= deps.limits.maxWorkersPerSource) ||\n own.filter((row) => row.admission.reportKind === admission.reportKind).length >=\n (admission.reportKind === \"update\"\n ? (deps.limits.maxUpdateInputsPerWorker ?? 256)\n : deps.limits.maxInputsPerWorker)\n )\n return yield* failure(\"start\", \"capacity\");\n if (\n prior === undefined &&\n !sameReporting(\n yield* reportIntent(sourceBinding, targetBinding, origin.worker.delegationId),\n origin.reporting,\n )\n )\n return yield* failure(\"start\", \"denied\");\n if (independent && source.depth !== 0) return yield* failure(\"start\", \"denied\");\n const ceilings = sourceCaps(source.policy);\n\n const conservedRows = rows.filter((row) => row.admission.origin.budgetScope !== \"worker-run\");\n\n const chargedRows =\n source.depth === 0\n ? conservedRows\n : conservedRows.filter(\n (row) => row.admission.sourceSubmissionId === admission.sourceSubmissionId,\n );\n\n // Independent origins do not belong to this pool. Preserve the retained conserved\n // origins' cap identity check separately from the current input's charge selection.\n if (\n !independent &&\n conservedRows.some((row) => !sameCaps(row.admission.origin.budget.caps, caps))\n )\n return yield* failure(\"start\", \"capacity\");\n if (\n !independent &&\n chargedRows.reduce(\n (sum, row) => sum + 1 + (row.admission.origin.budget.descendantInvocations ?? 0),\n 1 + (origin.budget.descendantInvocations ?? 0),\n ) > Math.min(caps.maxTotalChildInvocations ?? Infinity, source.policy.maxToolCalls)\n )\n return yield* failure(\"start\", \"capacity\");\n // Worker-owned Run usage is already durable in the destination's Run journal. Each\n // Receipt may join an existing Run, so admitting input must never mint an allowance.\n for (const [amount, cap] of independent ? [] : amountCaps) {\n const limit = Math.min(caps[cap] ?? Infinity, ceilings[cap] ?? Infinity);\n\n if (\n chargedRows.reduce(\n (sum, row) => sum + row.admission.origin.budget.allocation[amount],\n origin.budget.allocation[amount],\n ) > limit\n )\n return yield* failure(\"start\", \"capacity\");\n }\n\n // Child owners append acknowledgements before ledger finalization. This works through\n // routed canonical storage; source-local delivery rows are never read from a child owner.\n const completed = new Set(\n current.records.flatMap(({ record }) =>\n record.payload._tag === \"WorkerInputCompleted\" ? [record.payload.messageId] : [],\n ),\n );\n\n const pendingRows = rows.filter((row) => !completed.has(row.admission.messageId));\n const activeWorkers = new Set(pendingRows.map((row) => row.admission.origin.worker.threadId));\n\n const pendingOwn = pendingRows.filter(\n (row) =>\n row.admission.origin.worker.threadId === origin.worker.threadId &&\n row.admission.reportKind === admission.reportKind,\n ).length;\n\n // Resolve inside the source CAS loop: independently delivered starts must compete\n // against one canonical prefix. A conflict repeats both authority and capacity reads.\n const selectedConcurrency = yield* deps.concurrencyResolver.resolve({\n source: origin.source,\n worker: origin.worker,\n principal,\n ...(source.submission === undefined ? {} : { sourceSubmission: source.submission }),\n });\n\n const sourceConcurrency = Option.isSome(selectedConcurrency)\n ? (yield* decode(WorkerConcurrencyLimit, selectedConcurrency.value, \"start\"))\n .maxActiveWorkersPerSource\n : Infinity;\n\n if (\n pendingOwn >=\n (admission.reportKind === \"update\"\n ? (deps.limits.maxPendingUpdateInputsPerWorker ?? 32)\n : deps.limits.maxPendingInputsPerWorker) ||\n (!activeWorkers.has(origin.worker.threadId) &&\n activeWorkers.size >=\n Math.min(\n sourceConcurrency,\n deps.limits.maxActiveWorkersPerSource ?? source.policy.toolConcurrency,\n independent\n ? Infinity\n : Math.min(caps.maxConcurrentChildren ?? Infinity, source.policy.toolConcurrency),\n ))\n )\n return yield* WorkerError.make({ operation: \"start\", reason: \"capacity\", retryable: true });\n if (!independent)\n yield* reserveSubtree(\n origin.source.threadId,\n SubtreeBudgetReserved.make({\n reservationId: Schema.decodeSync(SubtreeBudgetReserved.fields.reservationId)(\n admission.messageId,\n ),\n ...(admission.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: admission.sourceSubmissionId }),\n childThreadId: origin.worker.threadId,\n lifetime: \"background\",\n depth: origin.depth,\n policy: origin.policy,\n grant: origin.grant,\n budget: origin.budget,\n }),\n );\n if (\n yield* append(\n origin.source.threadId,\n id,\n WorkerInputRequested.make({ admission, inputDigest }),\n current,\n \"source\",\n )\n )\n return;\n }\n\n return yield* failure(\"start\", \"storage\");\n });\n\n const ensureOrigin = Effect.fn(\"WorkerHost.ensureOrigin\")(function* (origin: WorkerOrigin) {\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* read(origin.worker.threadId, \"start\");\n\n const existing = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n if (existing?._tag === \"WorkerOriginRecorded\") {\n if (!sameOrigin(existing.origin, origin)) return yield* failure(\"start\", \"worker-mismatch\");\n\n return;\n }\n const first = current.records[0]?.record.payload;\n\n if (\n first?._tag !== \"ThreadCreated\" ||\n first.agentId !== origin.worker.targetAgentId ||\n !definitionDigestsEqual(first.definitions, origin.targetDigests) ||\n current.records.some(({ record }) => record.payload._tag === \"SubagentLineageRecorded\")\n )\n return yield* failure(\"start\", \"worker-mismatch\");\n if (\n yield* append(\n origin.worker.threadId,\n `worker-origin:${origin.worker.threadId}`,\n WorkerOriginRecorded.make({ origin }),\n current,\n \"origin\",\n )\n )\n return;\n }\n\n return yield* failure(\"start\", \"storage\");\n });\n\n const validateAdmission = Effect.fn(\"WorkerHost.validateAdmission\")(function* (\n unvalidated: WorkerAdmission,\n options: DurableSubmitOptions,\n agentId: Agent.AnyDefinition[\"id\"],\n inputDigest: Digest,\n input: PersistedJson,\n ) {\n const admission = yield* decode(WorkerAdmission, unvalidated, \"start\");\n\n if (admission.reportKind === \"update\") {\n if (!Schema.is(WorkerUpdate)(options.messageAdmission))\n return yield* failure(\"start\", \"denied\");\n yield* validateCompletion(options.messageAdmission, options, agentId, inputDigest);\n }\n\n yield* deps.authorizer.authorize({\n sourceThreadId: admission.origin.source.threadId,\n ...(admission.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: admission.sourceSubmissionId }),\n principal: options.principal,\n operation: \"start\",\n access: \"send\",\n worker: admission.origin.worker,\n });\n yield* authorizeBudget(admission.origin, options.principal);\n if (\n admission.origin.worker.threadId !== options.threadId ||\n admission.origin.worker.targetAgentId !== agentId ||\n !definitionDigestsEqual(admission.origin.targetDigests, options.definitions) ||\n options.idempotencyKey !== admission.messageId ||\n (admission.deliveryPrincipal !== undefined &&\n admission.deliveryPrincipal !== options.principal)\n )\n return yield* failure(\"start\", \"worker-mismatch\");\n yield* reservation(admission, inputDigest, input, options.principal);\n\n return admission;\n });\n\n const prepareUpdate = Effect.fn(\"WorkerHost.prepareUpdate\")(\n function* (update: Update, submission: SubmissionSnapshot, messageId: IdempotencyKey) {\n const origin = submission.workerAdmission?.origin;\n const intent = origin?.reporting;\n\n if (origin === undefined || intent?.mode !== \"standard\") return undefined;\n if (update.threadId !== submission.threadId || update.agentId !== origin.worker.targetAgentId)\n return yield* failure(\"followUp\", \"worker-mismatch\");\n\n const sourceBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.source.agentId &&\n definitionDigestsEqual(entry.digests, intent.sourceDigests),\n );\n\n const targetBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.worker.targetAgentId &&\n definitionDigestsEqual(entry.digests, origin.targetDigests),\n );\n\n const reports =\n sourceBinding?.reporting?.filter(\n (entry) => entry.delegationId === origin.worker.delegationId,\n ) ?? [];\n\n if (\n sourceBinding === undefined ||\n targetBinding === undefined ||\n reports.length !== 1 ||\n reports[0]?.mode !== \"standard\" ||\n reports[0].target !== targetBinding.definition ||\n !definitionDigestsEqual(submission.agentDigests, origin.targetDigests)\n )\n return yield* failure(\"followUp\", \"declaration-unavailable\");\n const sourceHistory = yield* read(origin.source.threadId, \"followUp\");\n\n const first = requests(sourceHistory.records).find(\n (row) => row.admission.messageId === origin.firstMessageId,\n );\n\n if (first === undefined || !sameOrigin(first.admission.origin, origin))\n return yield* failure(\"followUp\", \"corrupt\");\n\n const source = yield* sourceAuthority(\n origin.source.threadId,\n first.admission.sourceSubmissionId,\n );\n\n if (\n source.binding === undefined ||\n source.submission === undefined ||\n !definitionDigestsEqual(source.binding.digests, intent.sourceDigests)\n )\n return yield* failure(\"followUp\", \"declaration-unavailable\");\n\n const recorded = source.current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const receivingOrigin =\n recorded?._tag === \"WorkerOriginRecorded\" ? recorded.origin : undefined;\n\n if (source.depth !== 0 && receivingOrigin === undefined)\n return yield* failure(\"followUp\", \"denied\");\n const now = yield* Clock.currentTimeMillis;\n\n const deadlineAtMillis = Math.min(\n origin.expiresAtMillis,\n receivingOrigin?.expiresAtMillis ?? Infinity,\n );\n\n if (now >= deadlineAtMillis) return yield* failure(\"followUp\", \"denied\");\n const sourceSubmission = source.submission;\n\n const input = yield* Schema.decodeEffect(Schema.toEncoded(sourceBinding.definition.input))(\n source.submission.inputPayload,\n ).pipe(\n Effect.flatMap(() => Schema.decodeEffect(PersistedJson)(sourceSubmission.inputPayload)),\n Effect.mapError(() => failure(\"followUp\", \"corrupt\")),\n );\n\n let workerAdmission: WorkerAdmission | undefined;\n let principal = submission.principal;\n\n if (receivingOrigin !== undefined) {\n const retained = source.submission.workerAdmission;\n\n if (retained === undefined || !sameOrigin(retained.origin, receivingOrigin))\n return yield* failure(\"followUp\", \"denied\");\n principal = source.submission.principal;\n workerAdmission = {\n origin: receivingOrigin,\n reportKind: \"update\",\n messageId,\n parameters: retained.parameters,\n createdAtMillis: now,\n ...(retained.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: retained.sourceSubmissionId }),\n };\n }\n\n const sourceSubmissionId =\n receivingOrigin === undefined\n ? first.admission.sourceSubmissionId\n : workerAdmission?.sourceSubmissionId;\n\n const authorized = yield* deps.authorizer.authorize({\n sourceThreadId: receivingOrigin?.source.threadId ?? origin.source.threadId,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n principal,\n operation: \"followUp\",\n access: \"send\",\n worker: receivingOrigin?.worker ?? origin.worker,\n });\n\n const message = WorkerUpdate.make({\n _tag: \"WorkerUpdate\",\n schemaVersion: 1,\n worker: origin.worker,\n update,\n });\n\n const envelope: PreparedInput = {\n schemaVersion: 1,\n threadId: origin.source.threadId,\n deliveryPrincipal: authorized,\n agentId: origin.source.agentId,\n definitions: intent.sourceDigests,\n input,\n inputDigest: yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(\"followUp\")),\n ),\n admissionKey: messageId,\n authorization: { policyId: \"worker-report\", decisionId: messageId },\n messageAdmission: message,\n ...(workerAdmission === undefined\n ? {}\n : { workerAdmission: { ...workerAdmission, deliveryPrincipal: authorized } }),\n };\n\n return {\n messageId,\n envelope: yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.flatMap(Schema.decodeEffect(PersistedJson)),\n Effect.mapError(storageFailure(\"followUp\")),\n ),\n createdAtMillis: now,\n deadlineAtMillis,\n };\n },\n Effect.mapError((error) =>\n error.reason === \"storage\" || error.reason === \"corrupt\"\n ? LedgerError.make({ operation: \"worker-update\", message: error.reason })\n : UpdateError.make({ reason: error.reason === \"denied\" ? \"denied\" : \"unavailable\" }),\n ),\n );\n\n const reportRun = Effect.fn(\"WorkerHost.reportRun\")(function* (\n submission: SubmissionSnapshot,\n history: Effect.Success<ReturnType<typeof read>>,\n ): Effect.fn.Return<void, WorkerError> {\n const admission = submission.workerAdmission;\n const intent = admission?.origin.reporting;\n\n if (admission === undefined || intent === undefined) return;\n const origin = admission.origin;\n\n const member = history.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" &&\n record.payload.submissionId === submission.submissionId,\n )?.record.payload;\n\n if (member?._tag !== \"SubmissionSettled\") return yield* failure(\"inspect\", \"corrupt\");\n if (member.runId === undefined) return; // No actual Run means no fabricated report identity.\n const runId = member.runId;\n\n const host = history.records.find(\n ({ record }) => record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n )?.record.payload;\n\n if (host?._tag !== \"SubmissionSettled\") return yield* failure(\"inspect\", \"corrupt\");\n\n const messageId = yield* withCrypto(\n digestJson([\"worker-report\", submission.threadId, runId]),\n ).pipe(\n Effect.map((value) => Schema.decodeSync(IdempotencyKey)(`report:${value}`)),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n const recordId = `worker-report:${messageId}`;\n\n const prepare = Effect.fn(\"WorkerHost.prepareReport\")(function* (): Effect.fn.Return<\n WorkerReportPrepared | WorkerReportRefused,\n WorkerError\n > {\n const refused = (reason: WorkerReportRefused[\"reason\"]) =>\n WorkerReportRefused.make({ runId, messageId, reason });\n\n const sourceBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.source.agentId &&\n definitionDigestsEqual(entry.digests, intent.sourceDigests),\n );\n\n const targetBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.worker.targetAgentId &&\n definitionDigestsEqual(entry.digests, origin.targetDigests),\n );\n\n const reports =\n sourceBinding?.reporting?.filter(\n (entry) => entry.delegationId === origin.worker.delegationId,\n ) ?? [];\n\n const descriptor = reports[0];\n\n if (\n sourceBinding === undefined ||\n targetBinding === undefined ||\n descriptor === undefined ||\n reports.length !== 1 ||\n !Object.is(descriptor.target, targetBinding.definition) ||\n (descriptor.mode !== \"standard\" &&\n !Object.is(descriptor.input, sourceBinding.definition.input)) ||\n descriptor.mode !== intent.mode ||\n descriptor.destination?.delegationId !== intent.destinationDelegationId ||\n (descriptor.destination !== undefined &&\n !Object.is(descriptor.destination.target, sourceBinding.definition))\n )\n return refused(\"declaration-unavailable\");\n\n const selected = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: host.submissionId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (\n Option.isNone(selected) ||\n selected.value.threadId !== submission.threadId ||\n selected.value.receiptId !== host.receiptId ||\n selected.value.workerAdmission === undefined ||\n !sameOrigin(selected.value.workerAdmission.origin, origin)\n )\n return yield* failure(\"inspect\", \"corrupt\");\n const hostSubmission = selected.value;\n const hostAdmission = selected.value.workerAdmission;\n\n const sourceHistory = yield* read(origin.source.threadId, \"inspect\");\n\n const firstInput = requests(sourceHistory.records).find(\n (row) => row.admission.messageId === origin.firstMessageId,\n );\n\n if (firstInput === undefined || !sameOrigin(firstInput.admission.origin, origin))\n return yield* failure(\"inspect\", \"corrupt\");\n\n // Reporting stays with the original owner even when a later input came from another\n // source revision. Per-input parameters still belong to the settled Run.\n const source = yield* sourceAuthority(\n origin.source.threadId,\n firstInput.admission.sourceSubmissionId,\n );\n\n if (\n source.binding === undefined ||\n !definitionDigestsEqual(source.binding.digests, intent.sourceDigests)\n )\n return refused(\"declaration-unavailable\");\n\n const sourceOriginRecord = source.current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const sourceOrigin =\n sourceOriginRecord?._tag === \"WorkerOriginRecorded\" ? sourceOriginRecord.origin : undefined;\n\n if (source.depth !== 0 && sourceOrigin === undefined) return refused(\"destination\");\n if (\n descriptor.mode !== \"standard\" &&\n sourceOrigin !== undefined &&\n (descriptor.destination === undefined ||\n descriptor.destination.delegationId !== sourceOrigin.worker.delegationId ||\n descriptor.destination.target.id !== sourceOrigin.worker.targetAgentId)\n )\n return refused(\"destination\");\n if (sourceOrigin === undefined && descriptor.destination !== undefined)\n return refused(\"destination\");\n const now = yield* Clock.currentTimeMillis;\n\n const deadlineAtMillis = Math.min(\n origin.expiresAtMillis,\n sourceOrigin?.expiresAtMillis ?? Infinity,\n );\n\n if (now >= deadlineAtMillis) return refused(\"expired\");\n\n const context: WorkerContext = {\n source: origin.source,\n policy: source.policy,\n depth: source.depth,\n ...(source.grant === undefined ? {} : { grant: source.grant }),\n };\n\n const report: WorkerRunReport = {\n worker: origin.worker,\n context,\n observation: {\n _tag: \"Settled\",\n receipt: Receipt.make({\n threadId: hostSubmission.threadId,\n submissionId: hostSubmission.submissionId,\n receiptId: hostSubmission.receiptId,\n queueSequence: hostSubmission.queueSequence,\n }),\n runId,\n settlementId: host.settlementId,\n outcome: host.outcome,\n encodedParameters: hostAdmission.parameters,\n encodedResult: host.result ?? null,\n budgetExhausted: host.finishReason === \"budget-exhausted\",\n },\n };\n\n const projection = yield* Effect.suspend(() => descriptor.prepare(report)).pipe(\n Effect.timeout(\n Math.min(deps.limits.reportPreparationTimeoutMillis ?? 5_000, deadlineAtMillis - now),\n ),\n Effect.map((value) => ({ _tag: \"Prepared\" as const, value })),\n Effect.catchTag(\"WorkerReportPreparationFailure\", (error) =>\n Effect.succeed(refused(error.stage)),\n ),\n Effect.catchTag(\"TimeoutError\", () => Effect.succeed(refused(\"timeout\"))),\n Effect.catchCauseIf(\n (cause) => !Cause.hasInterrupts(cause),\n () => Effect.succeed(refused(\"defect\")),\n ),\n );\n\n if (projection._tag === \"WorkerReportRefused\") return projection;\n\n if (descriptor.mode === \"standard\") {\n const message = projection.value.message;\n\n if (source.submission === undefined || !Schema.is(WorkerCompletion)(message))\n return refused(\"input\");\n if (\n !Schema.toEquivalence(WorkerRef)(message.report.worker, origin.worker) ||\n !Schema.toEquivalence(Receipt)(message.report.receipt, report.observation.receipt) ||\n message.report.runId !== runId ||\n message.report.settlementId !== host.settlementId ||\n message.report.outcome !== host.outcome ||\n message.budgetExhausted !== report.observation.budgetExhausted\n )\n return refused(\"input\");\n } else if (projection.value.message !== undefined) return refused(\"input\");\n\n const reportInput =\n descriptor.mode === \"standard\"\n ? source.submission?.inputPayload\n : projection.value.encodedInput;\n\n const validated = yield* Schema.decodeEffect(\n Schema.toEncoded(sourceBinding.definition.input),\n )(reportInput).pipe(\n Effect.flatMap(() => Schema.decodeUnknownEffect(PersistedJson)(reportInput)),\n Effect.option,\n );\n\n if (Option.isNone(validated)) return refused(\"input\");\n const input = validated.value;\n\n const inputDigest = yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n let workerAdmission: WorkerAdmission | undefined;\n let principal = hostSubmission.principal;\n\n if (sourceOrigin !== undefined) {\n const ownerId =\n descriptor.mode === \"standard\"\n ? firstInput.admission.sourceSubmissionId\n : hostAdmission.sourceSubmissionId;\n\n if (ownerId === undefined) return refused(\"destination\");\n\n const sourceSnapshot = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: ownerId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (\n Option.isNone(sourceSnapshot) ||\n sourceSnapshot.value.threadId !== origin.source.threadId ||\n sourceSnapshot.value.workerAdmission === undefined ||\n !sameOrigin(sourceSnapshot.value.workerAdmission.origin, sourceOrigin)\n )\n return refused(\"destination\");\n\n const parameters = yield* Schema.decodeUnknownEffect(PersistedJson)(\n descriptor.mode === \"standard\"\n ? sourceSnapshot.value.workerAdmission.parameters\n : projection.value.encodedParameters,\n ).pipe(Effect.option);\n\n if (Option.isNone(parameters)) return refused(\"destination\");\n principal = sourceSnapshot.value.principal;\n workerAdmission = {\n origin: sourceOrigin,\n messageId,\n parameters: parameters.value,\n createdAtMillis: now,\n ...(sourceSnapshot.value.workerAdmission.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: sourceSnapshot.value.workerAdmission.sourceSubmissionId }),\n };\n }\n\n // Reporting remains owned by the original allocator, even when a later input joins\n // or starts another Run. Nested reports authorize the enclosing worker's source owner.\n const authorizationSourceSubmissionId =\n sourceOrigin === undefined\n ? firstInput.admission.sourceSubmissionId\n : workerAdmission?.sourceSubmissionId;\n\n const authorized = yield* deps.authorizer\n .authorize({\n sourceThreadId: sourceOrigin?.source.threadId ?? origin.source.threadId,\n ...(authorizationSourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: authorizationSourceSubmissionId }),\n principal,\n operation: \"followUp\",\n access: \"send\",\n worker: sourceOrigin?.worker ?? origin.worker,\n })\n .pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"WorkerError\", (error) =>\n error.reason === \"storage\" || error.reason === \"unavailable\"\n ? Effect.fail(error)\n : Effect.succeed(Option.none<Principal>()),\n ),\n );\n\n if (Option.isNone(authorized)) return refused(\"denied\");\n\n const envelope: PreparedInput = {\n schemaVersion: 1,\n threadId: origin.source.threadId,\n deliveryPrincipal: authorized.value,\n agentId: origin.source.agentId,\n definitions: intent.sourceDigests,\n input,\n inputDigest,\n admissionKey: messageId,\n authorization: { policyId: \"worker-report\", decisionId: messageId },\n ...(projection.value.message === undefined\n ? {}\n : { messageAdmission: projection.value.message }),\n ...(workerAdmission === undefined\n ? {}\n : { workerAdmission: { ...workerAdmission, deliveryPrincipal: authorized.value } }),\n };\n\n const encoded = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(PersistedJson)),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n return WorkerReportPrepared.make({\n runId,\n messageId,\n envelope: encoded,\n createdAtMillis: now,\n deadlineAtMillis,\n ...(lastWorkerReportMessageId(history.records) === undefined\n ? {}\n : { predecessor: lastWorkerReportMessageId(history.records) }),\n });\n });\n\n let decision: WorkerReportPrepared | WorkerReportRefused | undefined;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* read(submission.threadId, \"inspect\");\n\n const existing = current.records.find(({ record }) => record.recordId === recordId)?.record\n .payload;\n\n if (existing !== undefined) {\n if (\n (existing._tag !== \"WorkerReportPrepared\" && existing._tag !== \"WorkerReportRefused\") ||\n existing.runId !== runId ||\n existing.messageId !== messageId\n )\n return yield* failure(\"inspect\", \"corrupt\");\n decision = existing;\n break;\n }\n decision ??= yield* prepare();\n if (yield* append(submission.threadId, recordId, decision, current, \"report\")) break;\n if (attempt === 15) return yield* failure(\"inspect\", \"storage\");\n }\n if (decision?._tag !== \"WorkerReportPrepared\") return;\n if (Option.isNone(deps.deliveries)) return yield* failure(\"inspect\", \"unavailable\");\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(decision.envelope).pipe(\n Effect.mapError(() => failure(\"inspect\", \"corrupt\")),\n );\n\n const prepared = yield* withCrypto(\n prepareMessageDelivery({\n key: { ownerThreadId: submission.threadId, messageId },\n envelope,\n createdAtMillis: decision.createdAtMillis,\n deadlineAtMillis: decision.deadlineAtMillis,\n ...(decision.predecessor === undefined ? {} : { predecessor: decision.predecessor }),\n }),\n ).pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n // Until this insertion commits the child ledger stays nonterminal. Afterwards its independent\n // due index survives both child and source settlement, including Object eviction.\n yield* hit(\"worker:before-report-delivery\", \"inspect\");\n yield* deps.deliveries.value.insert(prepared).pipe(Effect.mapError(storageFailure(\"inspect\")));\n yield* hit(\"worker:after-report-delivery\", \"inspect\");\n });\n\n const completeInput = Effect.fn(\"WorkerHost.completeInput\")(function* (\n submission: SubmissionSnapshot,\n ) {\n const admission = submission.workerAdmission;\n\n if (admission === undefined) return;\n const child = yield* read(submission.threadId, \"inspect\");\n\n yield* reportRun(submission, child);\n\n const settledEnvelope = child.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" &&\n record.payload.submissionId === submission.submissionId,\n )?.record;\n\n const settled = settledEnvelope?.payload;\n\n if (\n settled?._tag !== \"SubmissionSettled\" ||\n settled.receiptId !== submission.receiptId ||\n settledEnvelope === undefined\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n const payload = WorkerInputCompleted.make({\n messageId: admission.messageId,\n workerThreadId: submission.threadId,\n submissionId: submission.submissionId,\n receiptId: submission.receiptId,\n settlementId: settled.settlementId,\n completedAtMillis: DateTime.toEpochMillis(settledEnvelope.createdAt),\n });\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const source = yield* read(admission.origin.source.threadId, \"inspect\");\n\n const existing = source.records.find(\n ({ record }) =>\n record.payload._tag === \"WorkerInputCompleted\" &&\n record.payload.messageId === admission.messageId,\n )?.record.payload;\n\n if (existing !== undefined) {\n if (\n existing._tag !== \"WorkerInputCompleted\" ||\n !Schema.toEquivalence(WorkerInputCompleted)(existing, payload)\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n return;\n }\n if (\n yield* append(\n admission.origin.source.threadId,\n `worker-completed:${admission.messageId}`,\n payload,\n source,\n \"completion\",\n )\n )\n return;\n }\n\n return yield* failure(\"inspect\", \"storage\");\n });\n\n const facet = (\n context: WorkerContext,\n principal: Principal,\n sourceSubmissionId?: SubmissionId,\n ): SubagentHost[\"Service\"] => {\n const authorize = (\n operation: WorkerError[\"operation\"],\n access: \"context\" | \"read\" | \"send\" | \"control\",\n worker?: WorkerRef,\n ) =>\n deps.authorizer.authorize({\n sourceThreadId: context.source.threadId,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n principal,\n operation,\n access,\n ...(worker === undefined ? {} : { worker }),\n });\n\n const binding = (target: Agent.AnyDefinition, operation: WorkerError[\"operation\"]) =>\n resolveDefinitionBinding(deps.bindings, target).pipe(\n Effect.mapError(() => failure(operation, \"declaration-unavailable\")),\n );\n\n const preparedTarget = Effect.fn(\"WorkerHost.preparedTarget\")(function* (\n target: Agent.AnyDefinition,\n encodedInput: unknown,\n ) {\n const resolved = yield* binding(target, \"start\");\n\n yield* Schema.decodeUnknownEffect(Schema.toEncoded(target.input))(encodedInput).pipe(\n Effect.mapError(() => failure(\"start\", \"corrupt\")),\n );\n const input = yield* decode(PersistedJson, encodedInput, \"start\");\n\n const inputDigest = yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(\"start\")),\n );\n\n const source = yield* sourceAuthority(context.source.threadId, sourceSubmissionId);\n\n const policy = yield* resolveTargetPolicy({\n _tag: \"InitialInput\",\n definition: resolved.definition,\n definitions: resolved.digests,\n source: context.source,\n ...(source.submission === undefined ? {} : { sourceSubmission: source.submission }),\n input,\n inputDigest,\n });\n\n return { resolved, source, policy };\n });\n\n const findOrigin = Effect.fn(\"WorkerHost.findOrigin\")(function* (\n worker: WorkerRef,\n target: Agent.AnyDefinition,\n operation: WorkerError[\"operation\"],\n ) {\n const resolved = yield* binding(target, operation);\n\n if (worker.targetAgentId !== target.id) return yield* failure(operation, \"worker-mismatch\");\n const source = yield* read(context.source.threadId, operation);\n\n const origin = requests(source.records).find(\n (row) => row.admission.origin.worker.threadId === worker.threadId,\n )?.admission.origin;\n\n if (origin === undefined) return yield* failure(operation, \"not-found\");\n if (\n origin.worker.delegationId !== worker.delegationId ||\n !definitionDigestsEqual(origin.targetDigests, resolved.digests)\n )\n return yield* failure(operation, \"worker-mismatch\");\n\n return origin;\n });\n\n const receiptInput = Effect.fn(\"WorkerHost.receiptInput\")(function* (\n request: WorkerReceiptRequest,\n operation: WorkerError[\"operation\"],\n ) {\n const origin = yield* findOrigin(request.worker, request.target, operation);\n const receipt = request.receipt;\n\n const snapshot = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: receipt.submissionId }))\n .pipe(Effect.mapError(storageFailure(operation)));\n\n if (Option.isNone(snapshot)) return yield* failure(operation, \"not-found\");\n const row = snapshot.value;\n\n if (\n row.threadId !== request.worker.threadId ||\n row.threadId !== receipt.threadId ||\n row.receiptId !== receipt.receiptId ||\n row.queueSequence !== receipt.queueSequence ||\n row.workerAdmission === undefined ||\n !sameOrigin(row.workerAdmission.origin, origin)\n )\n return yield* failure(operation, \"receipt-mismatch\");\n\n return row.workerAdmission;\n });\n\n const observation = Effect.fn(\"WorkerHost.observation\")(function* (\n request: WorkerReceiptRequest,\n admission: WorkerAdmission,\n settlement: Settlement,\n ): Effect.fn.Return<WorkerObservation, WorkerError> {\n const history = yield* read(request.worker.threadId, \"inspect\");\n\n const record = history.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" &&\n record.payload.submissionId === settlement.submissionId,\n )?.record.payload;\n\n if (\n record?._tag !== \"SubmissionSettled\" ||\n record.settlementId !== settlement.settlementId ||\n record.receiptId !== request.receipt.receiptId ||\n record.outcome !== settlement.outcome\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n const input = history.records.find(\n ({ record }) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.submissionId === settlement.submissionId,\n )?.record.payload;\n\n const inputRunId = input?._tag === \"UserInputRecorded\" ? input.runId : undefined;\n\n if (inputRunId !== undefined && record.runId !== undefined && inputRunId !== record.runId)\n return yield* failure(\"inspect\", \"corrupt\");\n const runId = record.runId ?? inputRunId;\n\n // The host settlement precedes the joined members and carries the Run's actual output.\n // Both identities come from canonical history; no foreign recovery or finalization is needed.\n const host =\n runId === undefined\n ? undefined\n : history.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n )?.record.payload;\n\n const result = host?._tag === \"SubmissionSettled\" ? host : record;\n\n if (result.outcome !== record.outcome) return yield* failure(\"inspect\", \"corrupt\");\n\n return {\n _tag: \"Settled\",\n receipt: request.receipt,\n settlementId: settlement.settlementId,\n ...(result.runId === undefined ? {} : { runId: result.runId }),\n outcome: settlement.outcome,\n encodedParameters: admission.parameters,\n encodedResult: result.result ?? null,\n budgetExhausted: result.finishReason === \"budget-exhausted\",\n };\n });\n\n const send = Effect.fn(\"WorkerHost.send\")(function* (\n origin: WorkerOrigin,\n messageId: IdempotencyKey,\n encodedInput: unknown,\n encodedParameters: unknown,\n principal: Principal,\n operation: \"start\" | \"followUp\",\n ) {\n if (Option.isNone(deps.deliveries)) return yield* failure(operation, \"unavailable\");\n const deliveries = deps.deliveries.value;\n const input = yield* decode(PersistedJson, encodedInput, operation);\n const parameters = yield* decode(PersistedJson, encodedParameters, operation);\n\n const inputDigest = yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(operation)),\n );\n\n const key = { ownerThreadId: context.source.threadId, messageId };\n const saved = yield* deliveries.get(key).pipe(Effect.mapError(storageFailure(operation)));\n\n if (saved !== null) {\n const metadata = saved.envelope.workerAdmission;\n\n if (\n metadata === undefined ||\n !sameOrigin(metadata.origin, origin) ||\n !sameJson(metadata.parameters, parameters) ||\n saved.envelope.inputDigest !== inputDigest ||\n !sameJson(saved.envelope.input, input)\n )\n return yield* failure(operation, \"idempotency-conflict\");\n if (saved.receipt !== null) return saved.receipt;\n } else {\n const now = yield* Clock.currentTimeMillis;\n\n if (now >= origin.expiresAtMillis) return yield* failure(operation, \"capacity\");\n\n const envelope: PreparedInput = {\n schemaVersion: 1,\n threadId: origin.worker.threadId,\n deliveryPrincipal: principal,\n agentId: origin.worker.targetAgentId,\n definitions: origin.targetDigests,\n input,\n inputDigest,\n admissionKey: messageId,\n authorization: { policyId: \"worker-host\", decisionId: messageId },\n workerAdmission: {\n origin,\n messageId,\n parameters,\n createdAtMillis: now,\n deliveryPrincipal: principal,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n },\n };\n\n const prepared = yield* withCrypto(\n prepareMessageDelivery({\n key,\n envelope,\n createdAtMillis: now,\n deadlineAtMillis: origin.expiresAtMillis,\n }),\n ).pipe(Effect.mapError(storageFailure(operation)));\n\n yield* deliveries\n .insert(prepared)\n .pipe(\n Effect.mapError((error) =>\n failure(\n operation,\n error._tag === \"MessageDeliveryError\" && error.reason === \"capacity\"\n ? \"capacity\"\n : \"storage\",\n ),\n ),\n );\n }\n\n // Direct callers and automatic pumps run the same claim/accept/refuse protocol. A\n // conclusive refusal is retained before it becomes visible to this caller.\n const processed = yield* MessageDeliveryDriver.pipe(\n Effect.flatMap((driver) => driver.process(key)),\n Effect.provide(MessageDeliveryDriver.layer({ batchSize: 1, concurrency: 1 })),\n Effect.provideService(MessageDeliveryStore, deliveries),\n Effect.provideService(PreparedInputAdmission, {\n submit: (prepared) =>\n deps\n .submit(prepared)\n .pipe(\n Effect.mapError((error) =>\n error._tag === \"AdmissionConflict\" || error._tag === \"AgentInputError\"\n ? ScheduledInputRefused.make({ code: error._tag })\n : error._tag === \"AdmissionPolicyError\" && error.reason === \"refused\"\n ? ScheduledInputRefused.make({ code: error.code })\n : ScheduledInputRetryable.make({ reason: \"storage\" }),\n ),\n ),\n submissionStatus: (receipt) =>\n deps\n .status(receipt)\n .pipe(Effect.mapError(() => ScheduledInputRetryable.make({ reason: \"storage\" }))),\n }),\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(storageFailure(operation)),\n );\n\n if (processed.receipt !== null) return processed.receipt;\n if (processed.status === \"refused\") {\n const reason = Schema.decodeUnknownOption(WorkerError.fields.reason)(\n processed.refusal?.startsWith(\"worker-\")\n ? processed.refusal.slice(\"worker-\".length)\n : processed.refusal === \"AdmissionConflict\"\n ? \"idempotency-conflict\"\n : processed.refusal === \"AgentInputError\"\n ? \"corrupt\"\n : undefined,\n );\n\n return yield* failure(\n operation,\n Option.getOrElse(reason, () => \"denied\"),\n );\n }\n\n // A live claim or a future delivery deadline is not a storage failure. Keep the\n // receipt-only success contract: retention alone does not mean the child started.\n return yield* failure(\n operation,\n processed.status === \"pending\" && processed.retry.lastFailure === null\n ? \"delivery-pending\"\n : \"storage\",\n );\n });\n\n const messageIdFor = (parts: ReadonlyArray<string>) =>\n withCrypto(digestJson(parts)).pipe(\n Effect.map((digest) => Schema.decodeSync(IdempotencyKey)(`worker:${digest}`)),\n Effect.mapError(storageFailure(\"start\")),\n );\n\n const summarize = Effect.fn(\"WorkerHost.summarize\")(function* (\n origin: WorkerOrigin,\n all: ReadonlyArray<WorkerInputRequested>,\n operation: \"list\" | \"inspect\",\n ) {\n yield* authorize(operation, \"read\", origin.worker);\n let latestReceipt: Receipt | null = null;\n let active = false;\n let starting = false;\n\n for (const row of all) {\n if (row.admission.origin.worker.threadId !== origin.worker.threadId) continue;\n\n const delivery = Option.isNone(deps.deliveries)\n ? null\n : yield* deps.deliveries.value\n .get({\n ownerThreadId: context.source.threadId,\n messageId: row.admission.messageId,\n })\n .pipe(Effect.mapError(storageFailure(operation)));\n\n const principal = row.admission.deliveryPrincipal ?? delivery?.envelope.deliveryPrincipal;\n\n const found =\n principal === undefined\n ? Option.none()\n : yield* deps.ledger\n .lookup(\n SubmissionLookupByKey.make({\n threadId: origin.worker.threadId,\n principal,\n idempotencyKey: row.admission.messageId,\n }),\n )\n .pipe(Effect.mapError(storageFailure(operation)));\n\n if (Option.isNone(found)) {\n if (delivery?.status !== \"refused\") starting = true;\n continue;\n }\n active ||= found.value.state !== \"settled\";\n if (latestReceipt === null || found.value.queueSequence > latestReceipt.queueSequence) {\n latestReceipt = {\n threadId: found.value.threadId,\n submissionId: found.value.submissionId,\n receiptId: found.value.receiptId,\n queueSequence: found.value.queueSequence,\n };\n }\n }\n\n return {\n worker: origin.worker,\n latestReceipt,\n state: active\n ? (\"active\" as const)\n : starting || latestReceipt === null\n ? (\"starting\" as const)\n : (\"idle\" as const),\n };\n });\n\n return {\n context: Effect.gen(function* () {\n yield* authorize(\"context\", \"context\");\n if (context.depth !== 0) return context;\n const source = yield* sourceAuthority(context.source.threadId, sourceSubmissionId);\n\n return {\n ...context,\n policy: Option.getOrElse(source.policyOverride, () => context.policy),\n };\n }),\n resolveTargetPolicy: Effect.fn(\"WorkerHost.resolvePreparedTargetPolicy\")(function* (request) {\n yield* authorize(\"start\", \"send\");\n\n return (yield* preparedTarget(request.target, request.encodedInput)).policy;\n }),\n start: Effect.fn(\"WorkerHost.start\")(function* (request) {\n const principal = yield* authorize(\"start\", \"send\");\n\n if (context.depth !== 0 && sourceSubmissionId === undefined)\n return yield* failure(\"start\", \"denied\");\n const prepared = yield* preparedTarget(request.target, request.encodedInput);\n const resolved = prepared.resolved;\n const sourcePolicy = Option.getOrElse(prepared.source.policyOverride, () => context.policy);\n\n const grant = yield* Schema.decodeUnknownEffect(SubagentGrant)(request.encodedGrant).pipe(\n Effect.mapError(() => failure(\"start\", \"corrupt\")),\n );\n\n const messageId = yield* messageIdFor([\n context.source.threadId,\n request.delegationId,\n request.idempotencyKey,\n ]);\n\n if (Option.isNone(deps.deliveries)) return yield* failure(\"start\", \"unavailable\");\n\n const existing = yield* deps.deliveries.value\n .get({ ownerThreadId: context.source.threadId, messageId })\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n const now = yield* Clock.currentTimeMillis;\n const previousOrigin = existing?.envelope.workerAdmission?.origin;\n const sourceBinding = prepared.source.binding;\n\n if (sourceBinding === undefined) return yield* failure(\"start\", \"declaration-unavailable\");\n\n const reporting =\n previousOrigin === undefined\n ? yield* reportIntent(sourceBinding, resolved, request.delegationId)\n : previousOrigin.reporting;\n\n if (reporting?.mode === \"standard\" && sourceSubmissionId === undefined)\n return yield* failure(\"start\", \"denied\");\n\n const origin = yield* decode(\n WorkerOrigin,\n {\n worker: {\n schemaVersion: 1,\n delegationId: request.delegationId,\n targetAgentId: request.target.id,\n threadId: Schema.decodeSync(ThreadId)(messageId),\n },\n source: existing?.envelope.workerAdmission?.origin.source ?? context.source,\n targetDigests: resolved.digests,\n policy: request.policy,\n budget: request.budget,\n ...(request.budgetScope === undefined ? {} : { budgetScope: request.budgetScope }),\n grant,\n depth: context.depth + 1,\n firstMessageId: messageId,\n createdAtMillis: existing?.envelope.workerAdmission?.origin.createdAtMillis ?? now,\n expiresAtMillis:\n existing?.envelope.workerAdmission?.origin.expiresAtMillis ??\n now + deps.limits.lifetimeMillis,\n ...(reporting === undefined ? {} : { reporting }),\n ...(request.toolCallAllowance === undefined\n ? {}\n : { toolCallAllowance: request.toolCallAllowance }),\n },\n \"start\",\n );\n\n yield* authorizeBudget(origin, principal);\n\n const targetPolicy = Option.isSome(prepared.policy)\n ? prepared.policy.value\n : origin.budgetScope === \"worker-run\"\n ? resolved.definition.policy\n : AgentPolicy.resolve(\n resolved.definition.policyOverrides ?? resolved.definition.policy,\n sourcePolicy,\n );\n\n if (\n !withinPolicy(\n origin,\n origin.budgetScope === \"worker-run\" ? targetPolicy : sourcePolicy,\n targetPolicy,\n )\n )\n return yield* failure(\"start\", \"capacity\");\n\n const receipt = yield* send(\n origin,\n messageId,\n request.encodedInput,\n request.encodedParameters,\n principal,\n \"start\",\n );\n\n return { worker: origin.worker, receipt };\n }),\n followUp: Effect.fn(\"WorkerHost.followUp\")(function* (request) {\n const principal = yield* authorize(\"followUp\", \"send\", request.worker);\n const origin = yield* findOrigin(request.worker, request.target, \"followUp\");\n\n yield* resolveTargetPolicy({\n _tag: \"RetainedWorker\",\n definition: request.target,\n definitions: origin.targetDigests,\n source: origin.source,\n origin,\n });\n\n yield* Schema.decodeUnknownEffect(Schema.toEncoded(request.target.input))(\n request.encodedInput,\n ).pipe(Effect.mapError(() => failure(\"followUp\", \"corrupt\")));\n\n const messageId = yield* messageIdFor([\n context.source.threadId,\n request.worker.threadId,\n \"followUp\",\n request.idempotencyKey,\n ]);\n\n return yield* send(\n origin,\n messageId,\n request.encodedInput,\n request.encodedParameters,\n principal,\n \"followUp\",\n );\n }),\n inspect: Effect.fn(\"WorkerHost.inspect\")(function* (request) {\n yield* authorize(\"inspect\", \"read\", request.worker);\n const admission = yield* receiptInput(request, \"inspect\");\n\n const status = yield* deps\n .status(request.receipt)\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n return status._tag === \"pending\"\n ? { _tag: \"Pending\" as const, receipt: request.receipt }\n : yield* observation(request, admission, status.settlement);\n }),\n summary: Effect.fn(\"WorkerHost.inspectWorker\")(function* (request) {\n yield* authorize(\"inspect\", \"read\", request.worker);\n const origin = yield* findOrigin(request.worker, request.target, \"inspect\");\n const source = yield* read(context.source.threadId, \"inspect\");\n\n return yield* summarize(origin, requests(source.records), \"inspect\");\n }),\n observe: (request) =>\n Stream.unwrap(\n Effect.gen(function* () {\n yield* authorize(\"observe\", \"read\", request.worker);\n yield* findOrigin(request.worker, request.target, \"observe\");\n const after = request.after ?? 0;\n\n if (!Number.isSafeInteger(after) || after < 0)\n return yield* failure(\"observe\", \"corrupt\");\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: request.worker.threadId }))\n .pipe(Effect.mapError(storageFailure(\"observe\")));\n\n return Stream.paginate(after, (cursor) =>\n Effect.gen(function* () {\n if (cursor >= tail.tailSequence) return [[], Option.none<number>()] as const;\n const limit = Math.min(256, tail.tailSequence - cursor);\n\n const page = yield* deps.store\n .read(\n ThreadRead.make({\n threadId: request.worker.threadId,\n afterSequence: Schema.decodeSync(CanonicalSequence)(cursor),\n limit,\n }),\n )\n .pipe(Stream.runCollect, Effect.mapError(storageFailure(\"observe\")));\n\n if (\n page.length === 0 ||\n page.length > limit ||\n page.some(\n (entry, index) =>\n entry.threadId !== request.worker.threadId ||\n entry.sequence !== cursor + index + 1,\n )\n )\n return yield* failure(\"observe\", \"corrupt\");\n\n const entries = yield* Effect.forEach(page, (entry) =>\n Schema.encodeEffect(RecordEnvelope)(entry.record).pipe(\n Effect.flatMap((record) =>\n Schema.decodeEffect(WorkerHistoryEntry)({\n sequence: entry.sequence,\n recordId: entry.record.recordId,\n record,\n }),\n ),\n Effect.mapError(() => failure(\"observe\", \"corrupt\")),\n ),\n );\n\n const next = cursor + page.length;\n\n return [\n entries,\n next >= tail.tailSequence ? Option.none<number>() : Option.some(next),\n ] as const;\n }),\n );\n }),\n ),\n await: Effect.fn(\"WorkerHost.await\")(function* (request) {\n yield* authorize(\"await\", \"read\", request.worker);\n const admission = yield* receiptInput(request, \"await\");\n\n while (true) {\n const status = yield* deps\n .status(request.receipt)\n .pipe(Effect.mapError(storageFailure(\"await\")));\n\n if (status._tag === \"settled\")\n return yield* observation(request, admission, status.settlement);\n // Poll the same host-routed read used by inspect. Interruption stops only this wait.\n yield* Effect.sleep(deps.settlementPollInterval);\n }\n }),\n list: Effect.fn(\"WorkerHost.list\")(function* (request) {\n yield* authorize(\"list\", \"read\");\n yield* binding(request.target, \"list\");\n if (!Number.isSafeInteger(request.limit) || request.limit < 1 || request.limit > 100)\n return yield* failure(\"list\", \"capacity\");\n const source = yield* read(context.source.threadId, \"list\");\n const all = requests(source.records);\n\n const origins = [\n ...new Map(\n all.map((row) => [row.admission.origin.worker.threadId, row.admission.origin]),\n ).values(),\n ]\n .filter(\n (origin) =>\n origin.worker.delegationId === request.delegationId &&\n origin.worker.targetAgentId === request.target.id &&\n (request.after === undefined || origin.worker.threadId > request.after),\n )\n .sort((left, right) => left.worker.threadId.localeCompare(right.worker.threadId));\n\n const selected = origins.slice(0, request.limit);\n\n const items = yield* Effect.forEach(selected, (origin) => summarize(origin, all, \"list\"));\n\n return {\n items,\n next:\n origins.length > selected.length\n ? (selected[selected.length - 1]?.worker.threadId ?? null)\n : null,\n };\n }),\n cancel: Effect.fn(\"WorkerHost.cancel\")(function* (request) {\n const principal = yield* authorize(\"cancel\", \"control\", request.worker);\n\n yield* receiptInput(request, \"cancel\");\n yield* deps\n .abort(\n AbortCommand.make({\n submissionId: request.receipt.submissionId,\n author: principal,\n reason: \"Worker owner requested cancellation of this Receipt\",\n }),\n )\n .pipe(\n Effect.mapError((error) =>\n error._tag === \"JoinedToHost\" ? error : failure(\"cancel\", \"storage\"),\n ),\n );\n }),\n };\n };\n\n const validateCompletion = Effect.fn(\"WorkerHost.validateCompletion\")(function* (\n unvalidated: FrameworkMessage,\n options: DurableSubmitOptions,\n agentId: AgentId,\n inputDigest: Digest,\n ) {\n const message = yield* Schema.decodeEffect(FrameworkMessage)(unvalidated).pipe(\n Effect.mapError(() => failure(\"followUp\", \"corrupt\")),\n );\n\n const child = yield* read(\n message._tag === \"WorkerCompletion\"\n ? message.report.worker.threadId\n : message.worker.threadId,\n \"followUp\",\n );\n\n const frozen =\n message._tag === \"WorkerCompletion\"\n ? child.records.flatMap(({ record }) =>\n record.payload._tag === \"WorkerReportPrepared\" &&\n record.payload.runId === message.report.runId\n ? [record.payload.envelope]\n : [],\n )[0]\n : child.records.flatMap(({ record }) =>\n record.payload._tag === \"AgentUpdateEmitted\" &&\n Schema.toEquivalence(Update)(record.payload.update, message.update) &&\n record.payload.delivery !== undefined\n ? [record.payload.delivery.envelope]\n : [],\n )[0];\n\n if (frozen === undefined) return yield* failure(\"followUp\", \"denied\");\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(frozen).pipe(\n Effect.mapError(() => failure(\"followUp\", \"corrupt\")),\n );\n\n if (\n !Schema.is(FrameworkMessage)(envelope.messageAdmission) ||\n !Schema.toEquivalence(FrameworkMessage)(envelope.messageAdmission, message) ||\n envelope.threadId !== options.threadId ||\n envelope.agentId !== agentId ||\n envelope.inputDigest !== inputDigest ||\n envelope.deliveryPrincipal !== options.principal ||\n envelope.admissionKey !== options.idempotencyKey ||\n !definitionDigestsEqual(envelope.definitions, options.definitions) ||\n !Schema.toEquivalence(Schema.UndefinedOr(WorkerAdmission))(\n envelope.workerAdmission,\n options.workerAdmission,\n )\n )\n return yield* failure(\"followUp\", \"denied\");\n\n const recorded = child.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n if (recorded?._tag !== \"WorkerOriginRecorded\" || recorded.origin.reporting?.mode !== \"standard\")\n return yield* failure(\"followUp\", \"denied\");\n const origin = recorded.origin;\n const source = yield* read(origin.source.threadId, \"followUp\");\n\n const first = requests(source.records).find(\n (row) => row.admission.messageId === origin.firstMessageId,\n );\n\n if (first === undefined || !sameOrigin(first.admission.origin, origin))\n return yield* failure(\"followUp\", \"denied\");\n const receiving = envelope.workerAdmission;\n\n const sourceSubmissionId =\n receiving === undefined ? first.admission.sourceSubmissionId : receiving.sourceSubmissionId;\n\n const principal = yield* deps.authorizer.authorize({\n sourceThreadId: receiving?.origin.source.threadId ?? origin.source.threadId,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n principal: options.principal,\n operation: \"followUp\",\n access: \"send\",\n worker: receiving?.origin.worker ?? origin.worker,\n });\n\n if (principal !== options.principal) return yield* failure(\"followUp\", \"denied\");\n\n return message;\n });\n\n const acquire = Effect.fn(\"WorkerHost.acquire\")(function* (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n readonly sourceSubmissionId?: SubmissionId;\n }) {\n const { sourceThreadId, principal } = request;\n\n yield* deps.authorizer.authorize({\n sourceThreadId,\n ...(request.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: request.sourceSubmissionId }),\n principal,\n operation: \"context\",\n access: \"context\",\n });\n const current = yield* read(sourceThreadId, \"context\");\n const created = current.records[0]?.record.payload;\n\n if (created?._tag !== \"ThreadCreated\") return yield* failure(\"context\", \"not-found\");\n\n const resolved = deps.bindings.find(\n (entry) =>\n entry.agentId === created.agentId &&\n definitionDigestsEqual(entry.digests, created.definitions),\n );\n\n if (resolved === undefined) return yield* failure(\"context\", \"declaration-unavailable\");\n\n const origin = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const attached = current.records.find(\n ({ record }) => record.payload._tag === \"SubagentLineageRecorded\",\n )?.record.payload;\n\n const retained =\n origin?._tag === \"WorkerOriginRecorded\"\n ? origin.origin\n : attached?._tag === \"SubagentLineageRecorded\"\n ? attached\n : undefined;\n\n const selected =\n request.sourceSubmissionId === undefined\n ? undefined\n : yield* sourceAuthority(sourceThreadId, request.sourceSubmissionId);\n\n return facet(\n {\n source: {\n _tag: \"programmatic\",\n threadId: sourceThreadId,\n agentId: selected?.submission?.agentId ?? created.agentId,\n },\n policy:\n retained?.policy ?? selected?.binding?.definition.policy ?? resolved.definition.policy,\n depth:\n origin?._tag === \"WorkerOriginRecorded\"\n ? origin.origin.depth\n : attached?._tag === \"SubagentLineageRecorded\"\n ? attached.parentLink.depth\n : 0,\n ...(retained?.grant === undefined ? {} : { grant: retained.grant }),\n },\n principal,\n request.sourceSubmissionId,\n );\n });\n\n return {\n facet,\n prepareUpdate,\n acquire,\n validateCompletion,\n validateAdmission,\n ensureOrigin,\n completeInput,\n reserveSubtree,\n };\n});\n","import type { Scope } from \"effect\";\nimport {\n Cause,\n Clock,\n Context,\n Crypto,\n DateTime,\n Deferred,\n Duration,\n Effect,\n Equal,\n Layer,\n Option,\n Ref,\n Schedule,\n Schema,\n Semaphore,\n Stream,\n} from \"effect\";\nimport { Prompt, type Tool } from \"effect/unstable/ai\";\n\nimport {\n type InputMessage,\n MessageAdmission,\n type MessagingError,\n} from \"../capabilities/Messaging.ts\";\nimport type * as Agent from \"../core/Agent.ts\";\nimport { type RunDispositionDeclaration, type InputPromptSource } from \"../core/Agent.ts\";\nimport {\n AgentApprovalDenied,\n AgentApprovalPending,\n AgentInputError,\n AgentToolAuthorizationDenied,\n PolicyLimit,\n} from \"../core/AgentError.ts\";\nimport { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport { UpdateError } from \"../core/AgentUpdates.ts\";\nimport {\n type ReceiptId,\n ThreadId,\n SubmissionId,\n ToolCallId,\n type AgentId,\n type AttemptId,\n type RunId,\n type TurnId,\n} from \"../core/Identifiers.ts\";\nimport { IdGenerator } from \"../core/IdGenerator.ts\";\nimport { Receipt } from \"../core/Receipt.ts\";\nimport { type ExhaustedLimit, type RunEvent } from \"../core/RunEvent.ts\";\nimport { RunPolicyUsage } from \"../core/RunPolicyUsage.ts\";\nimport {\n SubagentBudgetReservation,\n SubagentReservationAmounts,\n SubagentGrant,\n DelegationDepth,\n getToolExecutionKind,\n SubagentParentLink,\n} from \"../core/SubagentContract.ts\";\nimport { Selection, type Snapshot } from \"../core/ToolExposure.ts\";\nimport {\n type ModelCallUsage,\n InputTokenUsage,\n ModelUsageGroup,\n RunUsageSummary,\n ChildRunUsage,\n RunUsageReport,\n emptyRunTotals,\n unknownRunTotals,\n runTotalsFromSummary,\n sumRunTotals,\n summarizeModelUsage,\n OutputTokenUsage,\n} from \"../core/Usage.ts\";\nimport { FrameworkMessage } from \"../core/Worker.ts\";\nimport type { WorkerError } from \"../core/Worker.ts\";\nimport * as AgentRuntime from \"../engine/AgentRuntime.ts\";\nimport {\n AgentChildPending,\n renderInputPrompt,\n type AgentRuntimeRequirements,\n type AgentCompletionProjectionRequirements,\n type RuntimeBinding,\n} from \"../engine/AgentRuntime.ts\";\nimport { ContextCompactor, CompactionError } from \"../engine/ContextCompactor.ts\";\nimport { getToolExecutionClass, type ToolExecutionClassValue } from \"../engine/DurableStep.ts\";\nimport { MessagingHost } from \"../engine/MessagingHost.ts\";\nimport {\n CurrentToolFailureObserver,\n AgentUpdateAcceptance,\n ModelUsageAccounting,\n RunContextPreparation,\n RunToolAuthorization,\n RunToolScheduling,\n RunContextPreparationPassthrough,\n type RunContextPreparationError,\n type ChildEstablishStatus,\n type RunApprovalHook,\n type RunContextHook,\n type RunCostEstimator,\n type RunDurabilityHook,\n type RunInputCommand,\n type RunInputHook,\n type RunOptions,\n type RunSubagentEstablishRequest,\n type RunSubagentHook,\n type RunSubagentJoinRequest,\n type RunToolAuthorizationHook,\n type RunToolAuthorizationRequest,\n} from \"../engine/RunOptions.ts\";\nimport { SubagentHost } from \"../engine/SubagentHost.ts\";\nimport { ThreadHistory } from \"../engine/ThreadHistory.ts\";\nimport { RunToolVisibility } from \"../engine/ToolExposure.ts\";\nimport {\n type RetryCommand,\n ExplainedEvidence,\n ExplainedSubmission,\n ExplainedUnknownCall,\n IntegrityCheck,\n IntegrityReport,\n ObligationEntry,\n ObligationReport,\n RecoveryExplanation,\n RetryRefused,\n obligationSeverityOf,\n predictRecoveryDisposition,\n recoveryDecisionMeaning,\n type ObligationBlockedOn,\n type ObligationThresholds,\n} from \"./Admin.ts\";\nimport { digestJson, type DigestError } from \"./Digest.ts\";\nimport {\n DurableRuntimeFailpoint,\n type DurableRuntimeFailpointError,\n type DurableRuntimeFailpointLocation,\n} from \"./DurableFailpoint.ts\";\nimport {\n BindingUnavailable,\n compileRegistrations,\n definitionDigestsEqual,\n type AgentRegistration,\n type DurableBindingFailure,\n makeLegacyWorkerBinding,\n type ResolvedBinding,\n resolveDefinitionBinding,\n resolveWorkerBinding,\n} from \"./internal/agent-registration.ts\";\nimport { makeAgentUpdateRuntime } from \"./internal/agent-updates.ts\";\nimport { inspectForeignDiagnostic, safeUnknownString } from \"./internal/foreign-diagnostic.ts\";\nimport {\n JournalCheckpointSeed,\n RecoveryCheckpointState,\n RecoveryCheckpointContents,\n RECOVERY_ENGINE_VERSION,\n checkpointSuffixCompatible,\n} from \"./internal/journal-checkpoint.ts\";\nimport { makeJournalMetadata, type JournalMetadata } from \"./internal/journal-metadata.ts\";\nimport { makeMessagingRuntime } from \"./internal/messaging-host.ts\";\nimport { makeWorkerRuntime, WorkerInputControl } from \"./internal/worker-host.ts\";\nimport { WorkerRuntime } from \"./internal/worker-runtime.ts\";\nimport {\n OperationAuthorizationRequest,\n OperationAuthorizer,\n OperationDenied,\n} from \"./OperationAuthorizer.ts\";\nimport {\n type CanonicalRecordEnvelope,\n type CanonicalRecordPayload,\n type DeploymentId,\n type Digest,\n type ProducerId,\n AbortRequested,\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n CompactionCreated,\n ThreadCreated,\n DefinitionDigests,\n ModelResponseInterrupted,\n PersistedJson,\n ProducerEpoch,\n RecordEnvelope,\n RecordId,\n RepairAnnotated,\n RunStartedRecord,\n SettlementFailureDiagnostic,\n SubagentJoined,\n SubagentLineageRecorded,\n SubtreeBudgetReserved,\n SubagentRequested,\n SubagentStarted,\n SubmissionSettled,\n SubmissionSettledRecord,\n ToolApprovalDecided,\n ToolApprovalRequested,\n ToolCallPrepared,\n RunPolicyUsageReserved,\n ToolCallResolved,\n ToolCallSettled,\n ToolCallUnknown,\n ToolStepSettled,\n UserInputRecorded,\n WorkerAdmission,\n type ApprovalDecision,\n type SettlementOutcome,\n type ToolCallResolution,\n} from \"./Records.ts\";\nimport {\n classifyRecovery,\n DeclaredPendingBatchEvidence,\n OpenDelegationCallEvidence,\n OpenToolCallEvidence,\n PendingApprovalEvidence,\n RecoveryDecision,\n RecoveryEvidence,\n type DelegationAdmissionEvidence,\n type MarkUnknown as MarkUnknownDecision,\n type SettleAborted as SettleAbortedDecision,\n} from \"./Recovery.ts\";\nimport {\n RunJournalError,\n approvalDecisionBatchId,\n childThreadIdFor,\n childIdempotencyKeyFor,\n compactionBatchId,\n compactionRecordId,\n markUnknownBatchId,\n modelResponseInterruptedBatchId,\n modelResponseInterruptedRecordId,\n modelResponseRecordId,\n projectRunJournalStream,\n type JournalBoundary,\n runCompletedRecordId,\n runIdForSubmission,\n runStartedBatchId,\n runStartedRecordId,\n subagentJoinBatchId,\n subagentJoinedRecordId,\n subagentLineageBatchId,\n subagentLineageRecordId,\n subagentRequestedBatchId,\n subagentRequestedRecordId,\n subagentStartedBatchId,\n subagentStartedRecordId,\n toolApprovalDecisionRecordId,\n toolApprovalRequestRecordId,\n toolCallPreparedRecordId,\n toolCallResolutionBatchId,\n toolCallResolvedRecordId,\n toolCallResultBatchId,\n toolCallSettledRecordId,\n toolCallUnknownRecordId,\n toolStepSettledBatchId,\n toolStepSettledRecordId,\n turnApprovalsBatchId,\n turnCanonicalBatch,\n turnIdForRun,\n turnPreparedBatchId,\n turnResponseBatch,\n turnResultsBatch,\n} from \"./RunJournal.ts\";\nimport {\n type AdmissionFence,\n AdmissionPolicyError,\n type AbortIntent,\n AbortIntentRequest,\n type AdmissionConflict,\n type Claim,\n type JoinedToHost,\n type OwnershipLost,\n type RecoverySnapshot,\n type SettlementConflict,\n type SubmissionSnapshot,\n AbortCommand,\n AdmissionRequest,\n ApprovalDecisionCommand,\n ApprovalPendingSuspension,\n AttachChildToReservationRequest,\n BeginChildBudgetReleaseRequest,\n ChildBudgetReservationRequest,\n ChildReservationId,\n ChildSettledNotification,\n ClaimJoiningRequest,\n ClaimRequest,\n IdempotencyKey,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n MarkReadyRequest,\n MarkUnknownRequest,\n OwnershipToken,\n ParentLinkage,\n Principal,\n RecoverySnapshotRequest,\n ReleaseChildBudgetRequest,\n ReleaseOwnershipRequest,\n RenewOwnershipRequest,\n RevertJoiningRequest,\n SettlementFinalization,\n SettlementReservation,\n Settlement,\n SubmissionLedger,\n SubmissionLookupById,\n SubmissionLookupByKey,\n SuspendRequest,\n UnknownResolutionCommand,\n WaitingChild,\n WaitingForChildSuspension,\n submissionAbortBatchId,\n submissionAbortRecordId,\n submissionInputBatchId,\n submissionInputRecordId,\n submissionSettlementBatchId,\n submissionSettlementId,\n submissionSettlementRecordId,\n type AdmissionResult,\n type ApprovalConflict,\n type ApprovalDecisionIntent,\n type ChildBudgetReservationSnapshot,\n type JoinSnapshot,\n type UnknownResolutionConflict,\n type UnknownResolutionIntent,\n} from \"./SubmissionLedger.ts\";\nimport { PendingSubmission, SettledSubmission, type SubmissionStatus } from \"./SubmissionStatus.ts\";\nimport { verifyThreadInvariants } from \"./ThreadInvariants.ts\";\nimport {\n type AppendConflict,\n type ThreadNotMaterialized,\n type FenceRejected,\n ThreadExportRequest,\n ThreadMaterialization,\n ThreadObservation,\n ThreadRead,\n ThreadStore,\n ThreadStoreError,\n ThreadTailRequest,\n FencedAppendRequest,\n LoadCheckpointRequest,\n ThreadCheckpoint,\n SaveRecoveryCheckpointRequest,\n} from \"./ThreadStore.ts\";\nimport { PreparedToolCallEvidence, ToolReconciler } from \"./ToolReconciler.ts\";\nimport { WakeScheduler } from \"./WakeScheduler.ts\";\n\n// Capture the tracing call site once; each application still creates a fresh Attempt span.\nconst withThreadHeadSpan = Effect.withSpan(\"DurableAgentRuntime.processThreadHead\");\n\n/**\n * Instruction failure/requirement derivation mirroring the engine's `RuntimeBinding` defaults:\n * declaring them as generic DEFAULTS (instead of independent inference sites) keeps a plain\n * string-returning instruction function from widening both parameters to `unknown`.\n */\ntype InstructionResultOf<Instructions, Input> = Instructions extends (input: Input) => infer Result\n ? Result\n : Instructions;\n\ntype InstructionErrorOf<Instructions, Input> =\n InstructionResultOf<Instructions, Input> extends Effect.Effect<\n infer _Success,\n infer Error,\n infer _Requirements\n >\n ? Error\n : never;\n\ntype InstructionRequirementsOf<Instructions, Input> =\n InstructionResultOf<Instructions, Input> extends Effect.Effect<\n infer _Success,\n infer _Error,\n infer Requirements\n >\n ? Requirements\n : never;\n\nconst decodeBatchId = Schema.decodeSync(BatchId);\nconst decodeCanonicalSequence = Schema.decodeSync(CanonicalSequence);\nconst decodeRecordId = Schema.decodeSync(RecordId);\nconst decodeToolCallIdUnknown = Schema.decodeUnknownEffect(ToolCallId);\nconst ZERO_EPOCH = Schema.decodeSync(ProducerEpoch)(0);\nconst ZERO_SEQUENCE = decodeCanonicalSequence(0);\nconst READ_PAGE = 1_024;\n/** Stale-tail append retries per batch before the conflict propagates (see `appendBatch`). */\nconst MAX_APPEND_FENCE_REFRESHES = 8;\nconst MAX_FAILURE_MESSAGE_LENGTH = 16_384;\nconst RECONCILER_AUTHOR = \"reconciler\";\n/** Canonical `ToolApprovalDecided.resolver` for policy-auto decisions made by the delegate. */\nconst APPROVAL_POLICY_RESOLVER = \"approval-policy\";\n/** Ledger `ApprovalDecisionIntent.resolver` for the abort-driven suspension closure. */\nconst RECOVERY_RESOLVER = \"recovery\";\n/** Upper bound of one `drain(\"all\")` joining pass (`claimJoining.maxCount` must be positive). */\nconst MAX_JOIN_DRAIN = 32;\n/**\n * Token presented when reserving a joined Submission's settlement (plan §2.5). A `joined` lane is\n * never worker-claimable (WP2 claim rule), so no real ownership token can exist for it: the\n * ledger authorizes the reservation by the recorded host linkage and does not consult this value.\n */\nconst JOINED_SETTLEMENT_TOKEN = Schema.decodeSync(OwnershipToken)(\"ownership-joined-settlement\");\n\n/**\n * Placeholder token for the P7 §7(c) queued-abort settlement: an aborted, never-claimed,\n * still-queued `ready` Submission has no live ownership to fence against, so the ledger\n * authorizes its aborted reservation by the durable abort intent itself (the joined-settlement\n * pattern) and the presented token is not consulted.\n */\nconst QUEUED_ABORT_SETTLEMENT_TOKEN = Schema.decodeSync(OwnershipToken)(\n \"ownership-aborted-queued-settlement\",\n);\n\n/** Bound a hook-supplied approval reason to the canonical `BoundedText` persistence limits. */\nconst boundedApprovalReason = (reason: string | undefined, fallback: string): string => {\n const value = reason === undefined || reason.length === 0 ? fallback : reason;\n\n return value.length > MAX_FAILURE_MESSAGE_LENGTH\n ? value.slice(0, MAX_FAILURE_MESSAGE_LENGTH)\n : value;\n};\n\nconst boundedText = (value: string): string =>\n value.length > MAX_FAILURE_MESSAGE_LENGTH ? value.slice(0, MAX_FAILURE_MESSAGE_LENGTH) : value;\n\nconst decodePrincipalSync = Schema.decodeSync(Principal);\nconst decodeIdempotencyKeySync = Schema.decodeSync(IdempotencyKey);\nconst decodeChildReservationIdSync = Schema.decodeSync(ChildReservationId);\nconst decodeRecordIdSync = Schema.decodeSync(RecordId);\nconst decodeBatchIdSync = Schema.decodeSync(BatchId);\nconst decodeDefinitionDigests = Schema.decodeUnknownEffect(DefinitionDigests);\n\n/**\n * Deterministic parent-owned child budget reservation identity (spec\n * §12 step 2, D4): one reservation per (parent Run, parent Tool Call) pair,\n * so a replayed establishment converges on the one existing row (SUB-016).\n */\nexport const childReservationIdFor = (runId: RunId, toolCallId: ToolCallId): ChildReservationId =>\n decodeChildReservationIdSync(`subagent-reservation:${runId}:${toolCallId}`);\n\n/**\n * S2 fixes every attached durable child at delegation depth 1 (SUB-029\n * rejects all nested delegation at preflight), so recovery can rebuild the\n * child lineage from the canonical `SubagentRequested` record alone — the\n * record deliberately does not carry a depth field.\n */\nconst CHILD_DELEGATION_DEPTH: DelegationDepth = Schema.decodeSync(DelegationDepth)(1);\n\n/** Canonical `AbortRequested.author` of every propagated parent-abort command (spec §13.1). */\nconst SUBAGENT_ABORT_AUTHOR = \"subagent-parent-abort\";\n\n/** Keep this exact reason, including its historical citation: abort repair replays the same command. */\nconst SUBAGENT_ABORT_REASON =\n \"The parent Submission was aborted; request-abort-and-join propagates the durable abort intent to every attached child (spec/subagents.md 13.1)\";\n\n/**\n * The deterministic zero-consumed accounting decision frozen for a\n * provably-childless orphaned reservation (spec §13/§14: \"releases the\n * reservation exactly once\"). Constant so every repair pass freezes the SAME\n * decision — an identical `beginChildBudgetRelease` replay is a no-op.\n */\nconst ORPHAN_ZERO_CONSUMED_ACCOUNTING = Schema.decodeSync(PersistedJson)({\n basis: \"orphan-zero-consumed\",\n});\n\n/** The four parent-log/child-log subagent records of one Run, indexed per Tool Call. */\ninterface SubagentCallRecords {\n readonly requested: Map<ToolCallId, SubagentRequested>;\n readonly started: Map<ToolCallId, SubagentStarted>;\n readonly joined: Map<ToolCallId, SubagentJoined>;\n /** Declared Tool name per prepared call (delegation joins reuse it for `ToolCallSettled`). */\n readonly preparedNames: Map<ToolCallId, string>;\n}\n\n/** Pure fold of one Run's canonical subagent lifecycle records (plan §1.2). */\nconst subagentRecordsOf = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n runId: RunId,\n): SubagentCallRecords => {\n const requested = new Map<ToolCallId, SubagentRequested>();\n const started = new Map<ToolCallId, SubagentStarted>();\n const joined = new Map<ToolCallId, SubagentJoined>();\n const preparedNames = new Map<ToolCallId, string>();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n switch (payload._tag) {\n case \"SubagentRequested\": {\n if (payload.runId === runId) requested.set(payload.toolCallId, payload);\n break;\n }\n case \"SubagentStarted\": {\n if (payload.runId === runId) started.set(payload.toolCallId, payload);\n break;\n }\n case \"SubagentJoined\": {\n if (payload.runId === runId) joined.set(payload.toolCallId, payload);\n break;\n }\n case \"ToolCallPrepared\": {\n if (payload.runId === runId) preparedNames.set(payload.toolCallId, payload.toolName);\n break;\n }\n default: {\n break;\n }\n }\n }\n\n return { requested, started, joined, preparedNames };\n};\n\n/** Joined reports are canonical snapshots, keyed by child Run so replay cannot double charge. */\nconst childUsageReportsOf = (state: SubagentCallRecords): ReadonlyArray<ChildRunUsage> =>\n [...state.started.entries()].map(([toolCallId, child]) => {\n const joined = state.joined.get(toolCallId);\n\n return ChildRunUsage.make({\n runId: child.childRunId,\n report: RunUsageReport.make({\n usage: joined?.usage ?? unknownRunTotals(),\n delegatedUsage: joined?.delegatedUsage ?? unknownRunTotals(),\n }),\n });\n });\n\n/** Deterministic batch identity of one Thread's initial `ThreadCreated` append. */\nexport const threadCreatedBatchId = (threadId: ThreadId): BatchId =>\n decodeBatchId(`thread-created:${threadId}`);\n\n/** Deterministic record identity of one Thread's `ThreadCreated` record. */\nexport const threadCreatedRecordId = (threadId: ThreadId): RecordId =>\n decodeRecordId(`thread-created:${threadId}`);\n\n/** Deterministic batch identity of one executed recovery decision's audit append (DUR-013). */\nexport const recoveryRepairBatchId = (submissionId: SubmissionId, decisionTag: string): BatchId =>\n decodeBatchId(`repair:${submissionId}:${decisionTag}`);\n\n/** Deterministic record identity of one executed recovery decision's `RepairAnnotated` record. */\nexport const recoveryRepairRecordId = (submissionId: SubmissionId, decisionTag: string): RecordId =>\n decodeRecordId(`repair:${submissionId}:${decisionTag}`);\n\n/**\n * The durable identity returned once ledger admission, Thread materialization, and\n * readiness are committed (DUR-001). It is an identifier for observation and reattachment, not\n * an authorization capability.\n */\nexport { Receipt } from \"../core/Receipt.ts\";\n\n/** One executed (or deliberately deferred) recovery decision (durability §14, DUR-013). */\nexport class RecoveryReport extends Schema.Class<RecoveryReport>(\n \"@effect-agent/thread/RecoveryReport\",\n)({\n submissionId: SubmissionId,\n threadId: ThreadId,\n decision: RecoveryDecision,\n /**\n * `repaired` = executed; `deferred` = a claiming worker must finish it; `none` = settled;\n * `unknown` = the lane is durably blocked on an Unknown Outcome awaiting the authorized\n * DUR-017 resolution path — the settlement obligation stays visible while no worker permit\n * is consumed (durability §16).\n */\n disposition: Schema.Literals([\"repaired\", \"deferred\", \"none\", \"unknown\"]),\n}) {}\n\n/** Per-submission options accepted by `DurableAgentRuntime.submit` (D2). */\nexport interface DurableSubmitOptions {\n readonly threadId: ThreadId;\n readonly principal: Principal;\n readonly idempotencyKey: IdempotencyKey;\n readonly admissionGroup?: string;\n readonly admissionFence?: AdmissionFence;\n /** Host-prepared worker input; immutable origin and per-input projection parameters. */\n readonly workerAdmission?: WorkerAdmission;\n /** Peer provenance or a worker completion, verified against frozen canonical delivery proof. */\n readonly messageAdmission?: InputMessage;\n /** Application-computed digests of the Agent/Model/Toolkit definitions (see `digestDefinitions`). */\n readonly definitions: DefinitionDigests;\n}\n\nexport interface DurableObserveOptions {\n /** Resume the observation after an adapter-owned offset previously returned by `observe`. */\n readonly after?: CanonicalRecordEnvelope[\"offset\"] | undefined;\n}\n\n/** The structural slice of an Agent Binding that `submit` needs. */\nexport interface DurableSubmitAgent<InputSchema extends Schema.Top> {\n readonly definition: {\n readonly id: AgentId;\n readonly input: InputSchema;\n };\n}\n\nexport type DurableSubmitFailure =\n | AgentInputError\n | DigestError\n | AdmissionConflict\n | AdmissionPolicyError\n | LedgerError\n | ThreadStoreError\n | ThreadNotMaterialized\n | AppendConflict\n | FenceRejected\n | DurableRuntimeFailpointError;\n\nexport type DurableWorkerFailure =\n | AdmissionPolicyError\n | DigestError\n | LedgerError\n | OwnershipLost\n | SettlementConflict\n | ThreadStoreError\n | ThreadNotMaterialized\n | AppendConflict\n | FenceRejected\n | RunJournalError\n | DurableRuntimeFailpointError;\n\nexport type DurableAwaitFailure = LedgerError | SettlementConflict | OperationDenied;\n\n/** Typed failures from the public canonical progress boundary. */\nexport type DurableProgressFailure = ThreadStoreError | ThreadNotMaterialized | OperationDenied;\n\nexport type DurableAbortFailure =\n | OperationDenied\n | LedgerError\n | SettlementConflict\n | JoinedToHost\n | DurableRuntimeFailpointError;\n\n/**\n * Failure family of `resolveUnknown` (DUR-017, abort-shaped): the durable intent may conflict\n * with a divergent prior resolution, the Submission may already be settled, an `AbortSubmission`\n * resolution routes through the abort path (whose `JoinedToHost` conflict stays visible), and the\n * failpoint after the intent write is armable like every other durable mutation.\n */\nexport type DurableResolveFailure =\n | LedgerError\n | SettlementConflict\n | UnknownResolutionConflict\n | JoinedToHost\n | DurableRuntimeFailpointError;\n\n/**\n * Failure family of `resolveApproval` (plan §2.6, abort-shaped): the durable intent may conflict\n * with a divergent prior decision, and the Submission may already be settled. The ledger adapter\n * owns the crash boundaries of the intent write (`ledger:approval-decision:{before,after}`).\n */\nexport type DurableApprovalFailure = LedgerError | SettlementConflict | ApprovalConflict;\n\n/**\n * Failure family of the read-only `explain`/`explainThread` operations (P7 WP1): pure\n * observation over the two ports plus the evidence assembler's typed failures, and the\n * fail-closed `OperationDenied` when a host-supplied authorizer refuses.\n */\nexport type DurableExplainFailure =\n | LedgerError\n | ThreadStoreError\n | RunJournalError\n | OperationDenied;\n\n/**\n * Failure family of the read-only `verify` operation (P7 WP1). `ThreadNotMaterialized`\n * stays visible: verifying a Thread that does not exist is a caller error, not an empty\n * report.\n */\nexport type DurableVerifyFailure =\n | LedgerError\n | ThreadStoreError\n | ThreadNotMaterialized\n | OperationDenied;\n\n/**\n * Failure family of `retry` (P7 WP1): the scoped recovery execution carries the worker failure\n * family, refusals are typed (`RetryRefused` — settled work and lanes owned by the\n * resolveUnknown/resolveApproval paths), and denial is fail-closed.\n */\nexport type DurableRetryFailure = DurableWorkerFailure | RetryRefused | OperationDenied;\n\n/** Failure family of `scanObligations` (P7 WP1): ledger scan + canonical unknown-age reads. */\nexport type DurableObligationFailure = LedgerError | ThreadStoreError | OperationDenied;\n\n/**\n * Optional policy-auto approval delegate consulted by the durable approval hook (plan §2.6 step\n * 2) AFTER the recorded-decision lookup misses. An immediate `approved`/`denied` answer becomes\n * canonical (`ToolApprovalRequested` + `ToolApprovalDecided`, one atomic batch) before it is\n * honored; `unresolved` falls through to the durable suspension path. The default (`undefined`)\n * suspends every undecided approval durably until `resolveApproval` decides it — the fail-closed\n * posture. Adapt the P2 `ApprovalResolver` capability stack through\n * `@effect-agent/capabilities`' `toDurableRunApprovalHook`.\n */\nexport const DurableApprovalResolver: Context.Reference<RunApprovalHook<never, never> | undefined> =\n Context.Reference<RunApprovalHook<never, never> | undefined>(\n \"@effect-agent/thread/DurableApprovalResolver\",\n { defaultValue: () => undefined },\n );\n\n/**\n * Services a durable worker needs beyond the runtime's own Layer: the Agent Binding's inferred\n * requirements minus its supplied identity and history services. The coordinator provides\n * deterministic Run/Turn identity and journal-owned history because its coordinator owns all\n * durable reads and commits across Attempts.\n */\nexport type DurableWorkerRequirements<\n AgentValue extends Agent.Any,\n InstructionRequirements = never,\n> =\n | Exclude<\n AgentRuntimeRequirements<AgentValue, never, InstructionRequirements>,\n ThreadHistory | RunContextPreparation\n >\n | AgentCompletionProjectionRequirements<AgentValue>;\n\nexport interface DurableRuntimeConfigOptions {\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n /** `awaitSettlement` ledger re-check cadence when no wake arrives (default 500ms). */\n readonly settlementPollInterval?: Duration.Duration | undefined;\n /** Worker ownership-lease renewal cadence (default 10s; D5 lease default is 30s). */\n readonly leaseRenewalInterval?: Duration.Duration | undefined;\n /** Active-Run abort-intent poll cadence (default 500ms). */\n readonly abortPollInterval?: Duration.Duration | undefined;\n /** Deployment-owned model pricing authority, captured for every recoverable Run. */\n readonly estimateCostMicrousd?: RunCostEstimator | undefined;\n}\n\n/** Deployment-scoped identity and liveness cadences for the durable coordinator. */\nexport class DurableRuntimeConfig extends Context.Service<\n DurableRuntimeConfig,\n {\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n readonly settlementPollInterval: Duration.Duration;\n readonly leaseRenewalInterval: Duration.Duration;\n readonly abortPollInterval: Duration.Duration;\n readonly estimateCostMicrousd?: RunCostEstimator | undefined;\n }\n>()(\"@effect-agent/thread/DurableRuntimeConfig\") {\n static make(options: DurableRuntimeConfigOptions): (typeof DurableRuntimeConfig)[\"Service\"] {\n return {\n deploymentId: options.deploymentId,\n producerId: options.producerId,\n settlementPollInterval: options.settlementPollInterval ?? Duration.millis(500),\n leaseRenewalInterval: options.leaseRenewalInterval ?? Duration.seconds(10),\n abortPollInterval: options.abortPollInterval ?? Duration.millis(500),\n ...(options.estimateCostMicrousd === undefined\n ? {}\n : { estimateCostMicrousd: options.estimateCostMicrousd }),\n };\n }\n\n static layer(options: DurableRuntimeConfigOptions): Layer.Layer<DurableRuntimeConfig> {\n return Layer.succeed(DurableRuntimeConfig)(DurableRuntimeConfig.make(options));\n }\n}\n\n/** Terminal outcome an Attempt decided before terminalization (DUR-011). */\ntype AttemptOutcome = { readonly uncommittedModelUsage?: ReadonlyArray<ModelCallUsage> } & (\n | {\n readonly _tag: \"completed\";\n readonly result: PersistedJson;\n /** Schema-encoded application disposition, only for an ordinary completed Run. */\n readonly runDisposition?: PersistedJson;\n /** Set when the Run settled through the final-answer exhaustion resolution (RUN-018). */\n readonly finishReason?: \"budget-exhausted\";\n /** The dimension that bound; set exactly alongside `finishReason` (RUN-011). */\n readonly exhausted?: ExhaustedLimit;\n readonly usageSummary?: RunUsageSummary;\n }\n | {\n readonly _tag: \"failed\";\n readonly result: SettlementFailureDiagnostic;\n /** The typed limit of an `AgentPolicyError` failure; absent otherwise (RUN-011). */\n readonly policyLimit?: PolicyLimit;\n readonly usageSummary?: RunUsageSummary;\n }\n | { readonly _tag: \"aborted\"; readonly usageSummary?: RunUsageSummary }\n);\n\n/**\n * What one `runModel` pass produced: a terminal `AttemptOutcome` for terminalization, a\n * durable approval suspension (plan §2.6) — the unresolved call's canonical request is already\n * appended, NO settlement is owed by this pass, and `runAttempt` transitions the ledger — or a\n * durable `waitingForChild` suspension: every non-waiting\n * sibling result is already committed as a per-call late-settle batch and `runAttempt` executes\n * `ledger.suspend(WaitingForChild)`.\n */\ntype RunPhaseOutcome =\n | AttemptOutcome\n | { readonly _tag: \"yielded\" }\n | { readonly _tag: \"suspended\"; readonly toolCallId: ToolCallId }\n | { readonly _tag: \"suspendedChild\"; readonly children: AgentChildPending[\"children\"] };\n\nconst approvalSuspension = (toolCallId: ToolCallId): RunPhaseOutcome => ({\n _tag: \"suspended\",\n toolCallId,\n});\n\nconst childSuspension = (children: AgentChildPending[\"children\"]): RunPhaseOutcome => ({\n _tag: \"suspendedChild\",\n children,\n});\n\nconst abortedRunPhase = (usageSummary: RunUsageSummary): RunPhaseOutcome => ({\n _tag: \"aborted\",\n usageSummary,\n});\n\n/**\n * Internal marker separating coordinator infrastructure failures (fencing, storage, failpoints —\n * the Attempt aborts cleanly and the accepted work stays owed) from Agent Run failures (typed\n * engine errors — the Submission settles `failed`). Never exported: it exists only so the two\n * failure families cannot be confused inside the run phase.\n */\nclass CoordinatorHalt {\n readonly _tag = \"CoordinatorHalt\";\n constructor(readonly failure: DurableWorkerFailure) {}\n}\n\nconst PolicyFailure = Schema.TaggedStruct(\"AgentPolicyError\", {\n limit: PolicyLimit,\n});\n\nconst decodePolicyFailure = Schema.decodeUnknownOption(PolicyFailure);\n\nconst decodePolicyFailureSafely = (error: unknown) => {\n try {\n return decodePolicyFailure(error);\n } catch {\n return Option.none();\n }\n};\n\nconst agentApprovalPendingOption = (error: unknown): Option.Option<AgentApprovalPending> => {\n try {\n // Suspension authority is nominal. Schema.is/decode would accept a forged tagged object.\n return error instanceof AgentApprovalPending ? Option.some(error) : Option.none();\n } catch {\n return Option.none();\n }\n};\n\nconst agentChildPendingOption = (error: unknown): Option.Option<AgentChildPending> => {\n try {\n // Suspension authority is nominal. Schema.is/decode would accept a forged tagged object.\n return error instanceof AgentChildPending ? Option.some(error) : Option.none();\n } catch {\n return Option.none();\n }\n};\n\nconst errorMessageOf = (error: unknown): string => {\n const diagnostic = inspectForeignDiagnostic(error);\n\n return diagnostic.message ?? safeUnknownString(error, \"Unknown failure\");\n};\n\nconst errorTagOf = (error: unknown): string =>\n inspectForeignDiagnostic(error).tag ?? \"UnknownError\";\n\nconst nowUtc: Effect.Effect<DateTime.Utc> = Effect.map(Clock.currentTimeMillis, (millis) =>\n DateTime.toUtc(DateTime.makeUnsafe(millis)),\n);\n\nconst decodePrompt = Schema.decodeUnknownEffect(Prompt.Prompt);\nconst decodePersisted = Schema.decodeUnknownEffect(PersistedJson);\n\n/** One application Tool Call declared inside a canonical `ModelResponseRecorded`'s messages. */\ninterface DeclaredApplicationCall {\n readonly id: string;\n readonly name: string;\n /** Encoded JSON parameters exactly as canonical history carries them. */\n readonly params: unknown;\n readonly providerExecuted?: boolean;\n}\n\ninterface DeclaredToolCalls {\n readonly application: Array<DeclaredApplicationCall>;\n readonly all: Array<DeclaredApplicationCall>;\n readonly providerResults: Array<Prompt.ToolResultPart>;\n}\n\n/**\n * Pure inspection of every Tool Call declared in one canonical response. Provider-executed calls\n * retain their terminal results, while only application calls enter the durable prepared/settled\n * protocol and completion singleton invariant.\n */\nconst declaredToolCalls = Effect.fn(\"DurableAgentRuntime.declaredToolCalls\")(\n (messages: PersistedJson): Effect.Effect<DeclaredToolCalls, RunJournalError> =>\n decodePrompt(messages).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"ModelResponseRecorded messages are not Schema-encoded Prompt messages\",\n cause,\n }),\n ),\n Effect.flatMap((prompt) => {\n const application: Array<DeclaredApplicationCall> = [];\n const all: Array<DeclaredApplicationCall> = [];\n const providerResults: Array<Prompt.ToolResultPart> = [];\n\n for (const message of prompt.content) {\n if (message.role !== \"assistant\") continue;\n for (const part of message.content) {\n if (part.type === \"tool-result\" && part.providerExecuted) providerResults.push(part);\n if (part.type !== \"tool-call\") continue;\n all.push({\n id: part.id,\n name: part.name,\n params: part.params,\n providerExecuted: part.providerExecuted,\n });\n if (!part.providerExecuted) {\n application.push({ id: part.id, name: part.name, params: part.params });\n }\n }\n }\n\n const providerCalls = new Map(\n all.filter((call) => call.providerExecuted).map((call) => [call.id, call]),\n );\n\n const resultIds = new Set<string>();\n\n for (const result of providerResults) {\n if (providerCalls.get(result.id)?.name !== result.name || resultIds.has(result.id)) {\n return Effect.fail(\n RunJournalError.make({\n message: `Invalid canonical provider result ${result.id}`,\n }),\n );\n }\n resultIds.add(result.id);\n }\n for (const id of providerCalls.keys()) {\n if (!resultIds.has(id)) {\n return Effect.fail(\n RunJournalError.make({\n message: `Turn lacks canonical provider result for ${id}`,\n }),\n );\n }\n }\n\n return Effect.succeed({ application, all, providerResults });\n }),\n ),\n);\n\n/** Application calls alone drive durable preparation, settlement, and batch resume. */\nconst declaredApplicationCalls = Effect.fn(\"DurableAgentRuntime.declaredApplicationCalls\")(\n (messages: PersistedJson): Effect.Effect<Array<DeclaredApplicationCall>, RunJournalError> =>\n declaredToolCalls(messages).pipe(Effect.map(({ application }) => application)),\n);\n\n/** Rebuild the exact JSON text that the engine decoded from one terminal no-Tool response. */\nconst terminalAssistantText = Effect.fn(\"DurableAgentRuntime.terminalAssistantText\")(\n (messages: PersistedJson): Effect.Effect<string, RunJournalError> =>\n decodePrompt(messages).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"ModelResponseRecorded messages are not Schema-encoded Prompt messages\",\n cause,\n }),\n ),\n Effect.map((prompt) => {\n let text = \"\";\n\n for (const message of prompt.content) {\n if (message.role !== \"assistant\") continue;\n for (const part of message.content) {\n if (part.type === \"text\") text += part.text;\n }\n }\n\n return text;\n }),\n ),\n);\n\n/**\n * The declared-but-unsettled Tool batch of one Run's last committed Turn (§2.4 batch resume):\n * every declared call in canonical encoded form plus the recorded results of the calls that\n * already settled (results batch never committed, or per-call late settles from the resolution\n * path). `undefined` when the Run's journal ends at a complete Turn boundary.\n */\ninterface PendingToolBatch {\n readonly toolExposure?: Snapshot | undefined;\n readonly turn: number;\n readonly turnId: TurnId;\n readonly calls: ReadonlyArray<DeclaredApplicationCall>;\n readonly settled: ReadonlyArray<{\n readonly id: string;\n readonly result: PersistedJson;\n readonly isFailure: boolean;\n readonly budgetRejected?: true;\n readonly toolSelection?: Selection | undefined;\n }>;\n readonly declaredIds: ReadonlySet<string>;\n readonly responseRecordId: RecordId;\n /** The pending `ModelResponseRecorded.messages`: its pre-assistant slice is the resume's leading messages. */\n readonly messages: PersistedJson;\n}\n\ninterface AttemptAppendContext {\n readonly threadId: ThreadId;\n readonly producerEpoch: ProducerEpoch;\n readonly tailRef: Ref.Ref<{ readonly sequence: CanonicalSequence; readonly digest: Digest }>;\n /** Serializes every canonical append of one Attempt (run commits vs. the abort watcher). */\n readonly gate: Semaphore.Semaphore;\n}\n\n/** What the resuming worker knows about the ownership period it superseded (durability §9). */\ninterface AttemptLineage {\n readonly attemptId: AttemptId;\n /** The Thread-store fence BEFORE this Attempt advanced it (0 = no prior producer). */\n readonly supersededEpoch: ProducerEpoch;\n /** The canonical `input:{sid}` record existed before this Attempt started. */\n readonly inputWasRecorded: boolean;\n}\n\n/** Review of one Submission's open (prepared-without-outcome) ordinary Tool Calls (DUR-009). */\ninterface OpenCallReview {\n /** No proof either way: these calls must become Unknown Outcomes (never auto-replayed). */\n readonly uncertain: Array<OpenToolCallEvidence>;\n /** The reconciliation policy itself failed: stay open and blocked WITHOUT marking; retry later. */\n readonly unproven: Array<OpenToolCallEvidence>;\n /** Proven safe to re-execute (never-started / safe-retry / declared idempotent contract). */\n readonly retryable: Array<OpenToolCallEvidence>;\n /** Calls closed canonically with a recovered result (no handler execution). */\n readonly recovered: number;\n}\n\nconst make = Effect.fn(\"DurableAgentRuntime.make\")(function* (\n bindings: ReadonlyArray<ResolvedBinding>,\n) {\n const registeredBindings = [...bindings];\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const failpoint = yield* DurableRuntimeFailpoint;\n const config = yield* DurableRuntimeConfig;\n const crypto = yield* Crypto.Crypto;\n const reconciler = yield* ToolReconciler;\n const approvalResolver = yield* DurableApprovalResolver;\n\n // Capture independent host choices at acquisition so worker callers cannot replace them.\n const runContextPreparation = yield* Effect.serviceOption(RunContextPreparation).pipe(\n Effect.map(Option.getOrElse(() => RunContextPreparation.of({}))),\n );\n\n const runToolAuthorization = yield* RunToolAuthorization;\n\n const runToolVisibility = yield* RunToolVisibility;\n\n const runToolScheduling = yield* RunToolScheduling;\n\n const compactor = yield* Effect.serviceOption(ContextCompactor).pipe(\n Effect.flatMap(\n Option.match({\n onSome: Effect.succeed,\n onNone: () => Effect.provide(ContextCompactor, ContextCompactor.layer),\n }),\n ),\n );\n\n // Possession-default authorization reference (P7 WP1): the default allows everything —\n // exactly the pre-P7 service-possession boundary — and a host-supplied non-default Layer is\n // consulted fail-closed by observe, the admin operations, and the two resolution paths.\n const operationAuthorizer = yield* OperationAuthorizer;\n // RUN-036: capture once with the runtime, including explicit absence. A worker caller's ambient\n // observer must never replace this host choice on a fresh or replacement Attempt.\n const toolFailureObserver = yield* CurrentToolFailureObserver;\n\n const withCrypto = <A, E>(effect: Effect.Effect<A, E, Crypto.Crypto>): Effect.Effect<A, E> =>\n Effect.provideService(effect, Crypto.Crypto, crypto);\n\n const hit = (\n location: DurableRuntimeFailpointLocation,\n ): Effect.Effect<void, DurableRuntimeFailpointError> => failpoint.hit(location);\n\n const makeEnvelope = (\n recordId: RecordId,\n payload: CanonicalRecordPayload,\n ): Effect.Effect<RecordEnvelope> =>\n Effect.map(nowUtc, (createdAt) =>\n RecordEnvelope.make({\n recordId,\n family: \"thread\",\n schemaVersion: 1,\n createdAt,\n deploymentId: config.deploymentId,\n payload,\n }),\n );\n\n const materializeSettlement = (\n settlement: Settlement,\n record: RecordEnvelope | undefined,\n ): Settlement => {\n const common = {\n submissionId: settlement.submissionId,\n settlementId: settlement.settlementId,\n receiptId: settlement.receiptId,\n outcome: settlement.outcome,\n ...(settlement.failure === undefined ? {} : { failure: settlement.failure }),\n settledAt: settlement.settledAt,\n };\n\n const payload = record?.payload;\n\n if (\n payload === undefined ||\n payload._tag !== \"SubmissionSettled\" ||\n payload.submissionId !== settlement.submissionId ||\n payload.settlementId !== settlement.settlementId ||\n payload.receiptId !== settlement.receiptId ||\n payload.outcome !== settlement.outcome\n ) {\n return Settlement.make(common);\n }\n\n const canonical = {\n ...common,\n ...(payload.usageSummary === undefined ? {} : { usageSummary: payload.usageSummary }),\n };\n\n if (settlement.outcome !== \"completed\" || payload.runDisposition === undefined) {\n return Settlement.make(canonical);\n }\n\n return Settlement.make({\n ...canonical,\n runDisposition: payload.runDisposition,\n });\n };\n\n /** Re-readable, contiguous canonical prefix. Each traversal retains only the adapter's chunk. */\n const canonicalRange = (\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n afterSequence: CanonicalSequence = ZERO_SEQUENCE,\n ): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized> =>\n Stream.suspend(() => {\n let expected = afterSequence + 1;\n let after = afterSequence;\n\n const next = (): Stream.Stream<\n CanonicalRecordEnvelope,\n ThreadStoreError | ThreadNotMaterialized\n > =>\n Stream.suspend(() => {\n if (expected > throughSequence) return Stream.empty;\n const start = expected;\n const limit = Math.min(READ_PAGE, throughSequence - start + 1);\n\n const page = store\n .read(\n ThreadRead.make({\n threadId,\n limit,\n ...(after === 0 ? {} : { afterSequence: after }),\n }),\n )\n .pipe(\n Stream.mapEffect((envelope) => {\n if (envelope.sequence !== expected || expected >= start + limit) {\n return Effect.fail(\n ThreadStoreError.make({\n operation: \"read recovery history\",\n message: `Canonical history for ${threadId} is not contiguous: expected sequence ${expected}, received ${envelope.sequence}`,\n }),\n );\n }\n expected += 1;\n after = envelope.sequence;\n\n return Effect.succeed(envelope);\n }),\n );\n\n return Stream.concat(\n page,\n Stream.suspend(() =>\n expected === start + limit\n ? next()\n : Stream.fail(\n ThreadStoreError.make({\n operation: \"read recovery history\",\n message: `Canonical history for ${threadId} ended at ${after}; expected ${limit} records through sequence ${throughSequence}, received ${expected - start}`,\n }),\n ),\n ),\n );\n });\n\n return next();\n });\n\n /**\n * Retain addressed runs and their deterministic identities independently of payload claims.\n * Marker matching deliberately errs toward retaining malformed/conflicting identity evidence.\n */\n const controlRecords = (submissionIds: ReadonlyArray<SubmissionId>) => {\n const runIds = new Set(submissionIds.map(runIdForSubmission));\n const runMarkers = [...runIds].map((runId) => `:${runId}:`);\n\n const recordIds = new Set(\n submissionIds.flatMap((id) => [\n submissionInputRecordId(id),\n submissionAbortRecordId(id),\n submissionSettlementRecordId(id),\n runStartedRecordId(runIdForSubmission(id)),\n runCompletedRecordId(runIdForSubmission(id)),\n ]),\n );\n\n return ({ record }: CanonicalRecordEnvelope): boolean =>\n recordIds.has(record.recordId) ||\n runMarkers.some((marker) => record.recordId.includes(marker)) ||\n record.recordId.startsWith(\"subagent-lineage:\") ||\n record.payload._tag === \"SubagentLineageRecorded\" ||\n record.payload._tag === \"WorkerOriginRecorded\" ||\n (\"runId\" in record.payload &&\n record.payload.runId !== undefined &&\n runIds.has(record.payload.runId));\n };\n\n const readControl = Effect.fn(\"DurableAgentRuntime.readControl\")(function* (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n ) {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n const view = yield* recoveryView(threadId, tail.tailSequence, submissionIds);\n\n return yield* Stream.runCollect(\n view.canonical.pipe(Stream.filter(controlRecords(submissionIds))),\n );\n });\n\n /** A checkpoint is useful only for its explicitly retained submissions and exact definitions. */\n const recoveryView = Effect.fn(\"DurableAgentRuntime.recoveryView\")(function* (\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.fn.Return<\n {\n readonly canonical: Stream.Stream<\n CanonicalRecordEnvelope,\n ThreadStoreError | ThreadNotMaterialized\n >;\n readonly seed?: JournalCheckpointSeed;\n },\n ThreadStoreError | ThreadNotMaterialized\n > {\n const full = { canonical: canonicalRange(threadId, throughSequence) };\n\n if (store.recoveryCheckpoints === undefined) return full;\n\n const loaded = yield* store.recoveryCheckpoints\n .load(LoadCheckpointRequest.make({ threadId, atOrBeforeSequence: throughSequence }))\n .pipe(Effect.catchTag(\"CheckpointRejected\", () => Effect.succeed(Option.none())));\n\n if (Option.isNone(loaded)) return full;\n const checkpoint = loaded.value;\n\n if (\n checkpoint.engineVersion !== RECOVERY_ENGINE_VERSION ||\n checkpoint.threadId !== threadId ||\n checkpoint.throughSequence > throughSequence ||\n throughSequence - checkpoint.throughSequence > 4_096\n )\n return full;\n\n const decoded = yield* Schema.decodeUnknownEffect(RecoveryCheckpointContents)(\n checkpoint.state,\n ).pipe(Effect.option);\n\n if (Option.isNone(decoded)) return full;\n const { state, digest } = decoded.value;\n\n if (\n !submissionIds.every((id) => state.submissionIds.includes(id)) ||\n state.seed.runId !== runIdForSubmission(state.submissionId)\n )\n return full;\n\n const encoded = yield* Schema.encodeEffect(RecoveryCheckpointState)(state).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"decode recovery checkpoint\",\n message: \"Invalid recovery state\",\n cause,\n }),\n ),\n );\n\n const actualDigest = yield* withCrypto(digestJson(encoded)).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"decode recovery checkpoint\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n if (digest !== actualDigest) return full;\n\n const owner = yield* ledger\n .lookup(SubmissionLookupById.make({ submissionId: state.submissionId }))\n .pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recovery checkpoint compatibility\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n if (\n Option.isNone(owner) ||\n owner.value.threadId !== threadId ||\n owner.value.agentDigests.agent !== checkpoint.agentDefinitionDigest ||\n owner.value.agentDigests.model !== checkpoint.modelDigest ||\n owner.value.agentDigests.tools !== checkpoint.toolDigest\n )\n return full;\n const replacement = state.seed.compaction;\n\n if (\n replacement.threadId !== threadId ||\n replacement.sequence > checkpoint.throughSequence ||\n replacement.record.payload._tag !== \"CompactionCreated\" ||\n replacement.record.payload.kind === \"clear-tool-results\" ||\n replacement.record.payload.coversThrough < state.seed.throughSequence ||\n replacement.record.payload.coversThrough >= replacement.sequence ||\n state.records.some(\n (record) => record.threadId !== threadId || record.sequence > checkpoint.throughSequence,\n ) ||\n !state.records.some(\n (record) =>\n record.sequence === replacement.sequence &&\n record.record.recordId === replacement.record.recordId,\n )\n )\n return full;\n\n const suffix = yield* Stream.runCollect(\n canonicalRange(threadId, throughSequence, checkpoint.throughSequence),\n );\n\n if (!checkpointSuffixCompatible(state.seed, suffix, state.records)) return full;\n\n return { canonical: Stream.fromIterable([...state.records, ...suffix]), seed: state.seed };\n });\n\n const readAllTolerant = Effect.fn(\"DurableAgentRuntime.readAllTolerant\")(\n (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.Effect<\n { readonly records: ReadonlyArray<CanonicalRecordEnvelope>; readonly materialized: boolean },\n ThreadStoreError\n > =>\n readControl(threadId, submissionIds).pipe(\n Effect.map((records) => ({ records, materialized: true })),\n Effect.catchTag(\"ThreadNotMaterialized\", () =>\n Effect.succeed({ records: [], materialized: false }),\n ),\n ),\n );\n\n interface RecoveryHistorySnapshot {\n readonly records: ReadonlyArray<CanonicalRecordEnvelope>;\n readonly materialized: boolean;\n readonly throughSequence: CanonicalSequence;\n readonly submissionIds: ReadonlyArray<SubmissionId>;\n }\n\n /**\n * Read one exact canonical prefix. The authoritative tail captured by the caller bounds both\n * work and visibility: appends racing the read receive higher sequences and are deliberately\n * left for a later snapshot, while a short page or sequence gap fails typed before recovery\n * mutates anything. At most `ceil((through - after) / READ_PAGE)` store pages are requested.\n */\n const readCanonicalRange = Effect.fn(\"DurableAgentRuntime.readCanonicalRange\")(function* (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n throughSequence: CanonicalSequence,\n retain: (record: CanonicalRecordEnvelope) => boolean,\n ): Effect.fn.Return<Array<CanonicalRecordEnvelope>, ThreadStoreError | ThreadNotMaterialized> {\n return yield* Stream.runCollect(\n canonicalRange(threadId, throughSequence, afterSequence).pipe(Stream.filter(retain)),\n );\n });\n\n /**\n * Capture one strongly-consistent pass-start tail and read exactly that prefix. This snapshot\n * is disposable: `runRecovery` retains it only while processing the scan's contiguous group\n * for this Thread, retaining only the addressed runs' control evidence\n * and never survives the pass or an interruption/restart.\n */\n const readRecoveryHistory = Effect.fn(\"DurableAgentRuntime.readRecoveryHistory\")(function* (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.fn.Return<RecoveryHistorySnapshot, ThreadStoreError> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId })).pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"ThreadNotMaterialized\", () => Effect.succeed(Option.none())),\n );\n\n if (Option.isNone(tail))\n return { records: [], materialized: false, throughSequence: ZERO_SEQUENCE, submissionIds };\n\n const records = yield* recoveryView(threadId, tail.value.tailSequence, submissionIds).pipe(\n Effect.flatMap((view) =>\n Stream.runCollect(view.canonical.pipe(Stream.filter(controlRecords(submissionIds)))),\n ),\n Effect.catchTag(\"ThreadNotMaterialized\", (error) =>\n ThreadStoreError.make({\n operation: \"read recovery history\",\n message: `Thread ${threadId} disappeared after its recovery tail was captured`,\n cause: error,\n }),\n ),\n );\n\n return { records, materialized: true, throughSequence: tail.value.tailSequence, submissionIds };\n });\n\n /**\n * A recovery mutation that must distinguish a racing canonical append reads only the suffix\n * beyond its pass snapshot. The append-only prefix remains valid; no full-history retry is\n * needed, and malformed suffix pagination fails through the same typed boundary.\n */\n const refreshRecoveryHistory = Effect.fn(\"DurableAgentRuntime.refreshRecoveryHistory\")(function* (\n threadId: ThreadId,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n after: CanonicalSequence,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.fn.Return<ReadonlyArray<CanonicalRecordEnvelope>, DurableWorkerFailure> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n if (tail.tailSequence <= after) return records;\n\n const suffix = yield* readCanonicalRange(\n threadId,\n after,\n tail.tailSequence,\n controlRecords(submissionIds),\n ).pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (error) =>\n ThreadStoreError.make({\n operation: \"read recovery history\",\n message: `Thread ${threadId} disappeared after its recovery suffix tail was captured`,\n cause: error,\n }),\n ),\n );\n\n return [...records, ...suffix];\n });\n\n const knownRecordIdsOf = (records: ReadonlyArray<CanonicalRecordEnvelope>): Set<string> =>\n new Set(records.map((envelope) => envelope.record.recordId));\n\n const settlementPayloadFromRecord = Effect.fn(\"DurableAgentRuntime.settlementPayloadFromRecord\")(\n function* (\n record: RecordEnvelope,\n submissionId: SubmissionId,\n ): Effect.fn.Return<SubmissionSettledRecord, LedgerError> {\n const payload = record.payload;\n\n if (\n payload._tag !== \"SubmissionSettled\" ||\n payload.submissionId !== submissionId ||\n payload.settlementId !== submissionSettlementId(submissionId) ||\n record.recordId !== submissionSettlementRecordId(submissionId)\n ) {\n return yield* LedgerError.make({\n operation: \"settlementPayloadFromRecord\",\n message: `The reserved canonical record is not the exact Settlement for Submission ${submissionId}`,\n });\n }\n\n return payload;\n },\n );\n\n const canonicalSettlementRecord = Effect.fn(\"DurableAgentRuntime.canonicalSettlementRecord\")(\n function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n submissionId: SubmissionId,\n ): Effect.fn.Return<RecordEnvelope, LedgerError> {\n const record = records.find(\n (envelope) => envelope.record.recordId === submissionSettlementRecordId(submissionId),\n )?.record;\n\n if (record === undefined) {\n return yield* LedgerError.make({\n operation: \"canonicalSettlementRecord\",\n message: `Canonical history has no Settlement for Submission ${submissionId}`,\n });\n }\n yield* settlementPayloadFromRecord(record, submissionId);\n\n return record;\n },\n );\n\n /**\n * Fold structured recovery evidence from canonical records (plan §2.2). Canonical history is\n * the only recovery truth (DUR-015): open Tool Calls are `ToolCallPrepared` without a closing\n * `ToolCallSettled`/`ToolCallResolved`, a declared-pending batch is a committed tool-declaring\n * response with zero prepared and zero settled records for its Turn (the provably-safe\n * durability §15 window), approvals pend until a canonical decision exists, and joined-side\n * prompt coverage requires a host `ModelResponseRecorded` after the joined `input:{sid}` record.\n */\n const evidenceFor = Effect.fn(\"DurableAgentRuntime.evidenceFor\")(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n submissionId: SubmissionId,\n materialized: boolean,\n hostSubmissionId?: SubmissionId,\n ): Effect.fn.Return<RecoveryEvidence, RunJournalError | LedgerError> {\n const runId = runIdForSubmission(submissionId);\n\n const hostRunId =\n hostSubmissionId === undefined ? undefined : runIdForSubmission(hostSubmissionId);\n\n const inputId = submissionInputRecordId(submissionId);\n const abortId = submissionAbortRecordId(submissionId);\n const settlementId = submissionSettlementRecordId(submissionId);\n\n const hostSettlementId =\n hostSubmissionId === undefined ? undefined : submissionSettlementRecordId(hostSubmissionId);\n\n let inputRecorded = false;\n let inputSequence: CanonicalSequence | undefined;\n let abortRecorded = false;\n let subagentLineageRecorded = false;\n let recordedSettlementOutcome: SettlementOutcome | undefined;\n let hostSettlementOutcome: SettlementOutcome | undefined;\n let hostRespondedAfterInput = false;\n const prepared: Array<OpenToolCallEvidence> = [];\n const preparedKinds = new Map<RecordId, ToolCallPrepared[\"executionKind\"]>();\n const preparedTurns = new Set<number>();\n const settledIds = new Set<string>();\n const resolvedIds = new Set<string>();\n const requested: Array<PendingApprovalEvidence> = [];\n const decidedIds = new Set<string>();\n\n let lastResponse:\n | {\n readonly turn: number;\n readonly messages: PersistedJson;\n readonly toolExposure?: Snapshot | undefined;\n }\n | undefined;\n\n for (const envelope of records) {\n const recordId = envelope.record.recordId;\n const payload = envelope.record.payload;\n\n if (recordId === inputId) {\n inputRecorded = true;\n inputSequence = envelope.sequence;\n continue;\n }\n if (recordId === abortId) {\n abortRecorded = true;\n continue;\n }\n if (recordId === settlementId && payload._tag === \"SubmissionSettled\") {\n recordedSettlementOutcome = payload.outcome;\n continue;\n }\n if (\n hostSettlementId !== undefined &&\n recordId === hostSettlementId &&\n payload._tag === \"SubmissionSettled\"\n ) {\n hostSettlementOutcome = payload.outcome;\n continue;\n }\n switch (payload._tag) {\n case \"ToolCallPrepared\": {\n if (payload.runId !== runId) break;\n const identity = toolCallPreparedRecordId(runId, payload.turn, payload.toolCallId);\n\n if (preparedKinds.has(identity)) {\n return yield* RunJournalError.make({\n message: \"Duplicate canonical Tool preparation evidence\",\n });\n }\n preparedKinds.set(identity, payload.executionKind);\n prepared.push(\n OpenToolCallEvidence.make({\n toolCallId: payload.toolCallId,\n toolName: payload.toolName,\n turn: payload.turn,\n }),\n );\n preparedTurns.add(payload.turn);\n break;\n }\n case \"ToolCallSettled\": {\n if (payload.runId === runId) settledIds.add(payload.toolCallId);\n break;\n }\n case \"ToolCallResolved\": {\n if (payload.runId === runId) resolvedIds.add(payload.toolCallId);\n break;\n }\n case \"ToolApprovalRequested\": {\n if (payload.runId !== runId) break;\n requested.push(\n PendingApprovalEvidence.make({ toolCallId: payload.toolCallId, turn: payload.turn }),\n );\n break;\n }\n case \"ToolApprovalDecided\": {\n if (payload.runId === runId) decidedIds.add(payload.toolCallId);\n break;\n }\n case \"SubagentLineageRecorded\": {\n // Thread-level fact (one lineage record per child Thread, spec §11):\n // its presence gates the AwaitParentEstablishment row for parent-linked\n // Submissions; root Threads never carry it and never consult it.\n subagentLineageRecorded = true;\n break;\n }\n case \"ModelResponseRecorded\": {\n if (\n payload.runId === runId &&\n (lastResponse === undefined || payload.turn > lastResponse.turn)\n ) {\n lastResponse = {\n turn: payload.turn,\n messages: payload.messages,\n ...(payload.toolExposure === undefined ? {} : { toolExposure: payload.toolExposure }),\n };\n }\n if (\n hostRunId !== undefined &&\n payload.runId === hostRunId &&\n inputSequence !== undefined &&\n envelope.sequence > inputSequence\n ) {\n hostRespondedAfterInput = true;\n }\n break;\n }\n default: {\n break;\n }\n }\n }\n\n const allOpenCalls = prepared.filter(\n (call) => !settledIds.has(call.toolCallId) && !resolvedIds.has(call.toolCallId),\n );\n\n // Only canonical classification authorizes the idempotent establishment protocol.\n // A lifecycle record cannot silently upgrade an ordinary or unclassified preparation.\n const subagent = subagentRecordsOf(records, runId);\n\n const isPreparedDelegation = (call: OpenToolCallEvidence): boolean =>\n preparedKinds.get(toolCallPreparedRecordId(runId, call.turn, call.toolCallId)) ===\n \"delegation\";\n\n const openByCallId = new Map(\n allOpenCalls.filter(isPreparedDelegation).map((call) => [call.toolCallId, call]),\n );\n\n const delegationCallIds: Array<ToolCallId> = [];\n const seenDelegationIds = new Set<ToolCallId>();\n\n const noteDelegation = (toolCallId: ToolCallId): void => {\n if (seenDelegationIds.has(toolCallId)) return;\n seenDelegationIds.add(toolCallId);\n delegationCallIds.push(toolCallId);\n };\n\n for (const toolCallId of subagent.requested.keys()) noteDelegation(toolCallId);\n for (const toolCallId of subagent.started.keys()) noteDelegation(toolCallId);\n for (const toolCallId of subagent.joined.keys()) noteDelegation(toolCallId);\n for (const toolCallId of delegationCallIds) {\n const request = subagent.requested.get(toolCallId);\n\n if (\n request === undefined ||\n preparedKinds.get(toolCallPreparedRecordId(runId, request.turn, toolCallId)) !==\n \"delegation\"\n ) {\n return yield* RunJournalError.make({\n message: \"Subagent evidence conflicts with Tool preparation classification\",\n });\n }\n }\n for (const call of allOpenCalls) {\n if (isPreparedDelegation(call)) noteDelegation(call.toolCallId);\n }\n const openDelegationCalls: Array<OpenDelegationCallEvidence> = [];\n\n for (const toolCallId of delegationCallIds) {\n const open = openByCallId.get(toolCallId);\n const requestedRecord = subagent.requested.get(toolCallId);\n const startedRecord = subagent.started.get(toolCallId);\n // Authoritative admission tri-state for a requested-but-unstarted call (SUB-031): the\n // deterministic idempotency key queries the ledger directly — projection absence is\n // never proof of absence, and only a proven `not-admitted` permits an admission attempt.\n let admission: DelegationAdmissionEvidence | undefined;\n let childSubmissionId = startedRecord?.childSubmissionId;\n\n if (requestedRecord !== undefined && startedRecord === undefined) {\n const resolution = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId: requestedRecord.childThreadId,\n principal: decodePrincipalSync(requestedRecord.childPrincipal),\n idempotencyKey: decodeIdempotencyKeySync(requestedRecord.childIdempotencyKey),\n }),\n );\n\n switch (resolution._tag) {\n case \"NotAdmitted\": {\n admission = \"not-admitted\";\n break;\n }\n case \"Admitted\": {\n admission = \"admitted\";\n childSubmissionId = resolution.submission.submissionId;\n break;\n }\n case \"Indeterminate\": {\n admission = \"indeterminate\";\n break;\n }\n }\n }\n const childThreadId = startedRecord?.childThreadId ?? requestedRecord?.childThreadId;\n\n openDelegationCalls.push(\n OpenDelegationCallEvidence.make({\n toolCallId,\n toolName:\n open?.toolName ??\n subagent.preparedNames.get(toolCallId) ??\n requestedRecord?.delegationId ??\n \"delegate_unknown\",\n turn: open?.turn ?? requestedRecord?.turn ?? 1,\n requested: requestedRecord !== undefined,\n started: startedRecord !== undefined,\n joined: subagent.joined.has(toolCallId),\n ...(childThreadId === undefined ? {} : { childThreadId }),\n ...(childSubmissionId === undefined ? {} : { childSubmissionId }),\n ...(admission === undefined ? {} : { admission }),\n }),\n );\n }\n\n const isPreparedWorker = (call: OpenToolCallEvidence): boolean =>\n preparedKinds.get(toolCallPreparedRecordId(runId, call.turn, call.toolCallId)) ===\n \"orchestration\";\n\n const openWorkerCalls = allOpenCalls.filter(isPreparedWorker);\n\n const openToolCalls = allOpenCalls.filter(\n (call) => !isPreparedDelegation(call) && !isPreparedWorker(call),\n );\n\n let declaredPendingBatch: DeclaredPendingBatchEvidence | undefined;\n\n if (lastResponse !== undefined && !preparedTurns.has(lastResponse.turn)) {\n const declared = yield* declaredApplicationCalls(lastResponse.messages);\n\n if (declared.length > 0 && !declared.some((call) => settledIds.has(call.id))) {\n declaredPendingBatch = DeclaredPendingBatchEvidence.make({\n turn: lastResponse.turn,\n callCount: declared.length,\n });\n }\n }\n const approvalsPending = requested.filter((pending) => !decidedIds.has(pending.toolCallId));\n\n return RecoveryEvidence.make({\n threadMaterialized: materialized,\n inputRecorded,\n abortRecorded,\n subagentLineageRecorded,\n openToolCalls,\n openDelegationCalls,\n openWorkerCalls,\n approvalsPending,\n joinedInputCovered: hostSubmissionId === undefined ? true : hostRespondedAfterInput,\n ...(recordedSettlementOutcome === undefined ? {} : { recordedSettlementOutcome }),\n ...(declaredPendingBatch === undefined ? {} : { declaredPendingBatch }),\n ...(hostSettlementOutcome === undefined ? {} : { hostSettlementOutcome }),\n });\n });\n\n /**\n * The declared-but-unsettled Tool batch of the Run's LAST committed Turn (§2.4). Keyed on\n * SETTLED coverage deliberately: a call closed by a never-started/safe-retry `ToolCallResolved`\n * has authorized re-execution, so it stays in the resumed batch until its own `ToolCallSettled`\n * exists.\n */\n const pendingToolBatchFor = Effect.fn(\"DurableAgentRuntime.pendingToolBatchFor\")(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n runId: ReturnType<typeof runIdForSubmission>,\n completionTools: ReadonlyArray<string> = [],\n ): Effect.fn.Return<PendingToolBatch | undefined, RunJournalError> {\n let lastResponse:\n | {\n readonly turn: number;\n readonly messages: PersistedJson;\n readonly toolExposure?: Snapshot | undefined;\n }\n | undefined;\n\n const settledByCallId = new Map<\n string,\n {\n readonly result: PersistedJson;\n readonly isFailure: boolean;\n readonly budgetRejected?: true;\n readonly toolSelection?: Selection | undefined;\n }\n >();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ModelResponseRecorded\" && payload.runId === runId) {\n if (lastResponse === undefined || payload.turn > lastResponse.turn) {\n settledByCallId.clear();\n lastResponse = {\n turn: payload.turn,\n messages: payload.messages,\n ...(payload.toolExposure === undefined ? {} : { toolExposure: payload.toolExposure }),\n };\n }\n continue;\n }\n if (payload._tag === \"ToolCallSettled\" && payload.runId === runId) {\n settledByCallId.set(payload.toolCallId, {\n result: payload.result,\n isFailure: payload.isFailure,\n ...(payload.budgetRejected === true ? { budgetRejected: true } : {}),\n ...(payload.toolSelection === undefined ? {} : { toolSelection: payload.toolSelection }),\n });\n }\n }\n if (lastResponse === undefined) return undefined;\n const declared = yield* declaredToolCalls(lastResponse.messages);\n\n if (declared.application.length === 0) return undefined;\n const calls = declared.all;\n\n for (const part of declared.providerResults) {\n const result = yield* decodePersisted(part.result).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({ message: `Invalid canonical provider result ${part.id}`, cause }),\n ),\n );\n\n settledByCallId.set(part.id, { result, isFailure: part.isFailure });\n }\n\n const settled: Array<{\n id: string;\n result: PersistedJson;\n isFailure: boolean;\n budgetRejected?: true;\n toolSelection?: Selection | undefined;\n }> = [];\n\n for (const call of calls) {\n const recorded = settledByCallId.get(call.id);\n\n if (call.providerExecuted === true && recorded === undefined) {\n return yield* RunJournalError.make({\n message: `Pending Turn lacks canonical provider result for ${call.id}`,\n });\n }\n if (recorded !== undefined) {\n settled.push({ id: call.id, ...recorded });\n }\n }\n\n const completionCall = declared.application[0];\n\n const projectSettledCompletion =\n declared.application.length === 1 &&\n completionCall !== undefined &&\n completionTools.includes(completionCall.name) &&\n settledByCallId.get(completionCall.id)?.isFailure === false &&\n !records.some(\n ({ record }) => record.payload._tag === \"RunCompleted\" && record.payload.runId === runId,\n );\n\n if (settled.length >= calls.length && !projectSettledCompletion) return undefined;\n\n return {\n turn: lastResponse.turn,\n turnId: turnIdForRun(runId, lastResponse.turn),\n calls,\n settled,\n declaredIds: new Set(calls.map((call) => call.id)),\n responseRecordId: modelResponseRecordId(runId, lastResponse.turn),\n messages: lastResponse.messages,\n ...(lastResponse.toolExposure === undefined\n ? {}\n : { toolExposure: lastResponse.toolExposure }),\n };\n });\n\n /**\n * Records without the pending Turn's response and its partial results: the resumed Attempt's\n * canonical prompt boundary sits BEFORE the pending Turn, whose messages re-enter official\n * history through the engine's batch-resume continuation.\n */\n const withoutPendingBatch = (\n records: Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>,\n pending: PendingToolBatch,\n runId: ReturnType<typeof runIdForSubmission>,\n ): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized> =>\n records.pipe(\n Stream.filter((envelope) => {\n if (envelope.record.recordId === pending.responseRecordId) return false;\n const payload = envelope.record.payload;\n\n return !(\n payload._tag === \"ToolCallSettled\" &&\n payload.runId === runId &&\n pending.declaredIds.has(payload.toolCallId)\n );\n }),\n );\n\n /** Materialize without regressing a fence someone else already advanced. */\n const materializeAtLeast = (\n threadId: ThreadId,\n producerEpoch: ProducerEpoch,\n ): Effect.Effect<void, ThreadStoreError> =>\n store\n .materialize(ThreadMaterialization.make({ threadId, producerEpoch }))\n .pipe(Effect.catchTag(\"FenceRejected\", () => Effect.void));\n\n /**\n * Coordinator invariant: every Thread's first canonical record is `ThreadCreated`,\n * so `tailSequence >= 1` is the deterministic already-created check. A lost race (conflict or\n * fence) is verified against that invariant instead of being trusted blindly. An admitted\n * child can be claimed before it is runnable; that advances the shared storage fence without\n * appending anything. Re-read and retry that initialization race with the current fence.\n */\n const ensureThreadCreated = Effect.fn(\"DurableAgentRuntime.ensureThreadCreated\")(\n function* (\n threadId: ThreadId,\n agentId: AgentId,\n definitions: DefinitionDigests,\n ): Effect.fn.Return<\n void,\n ThreadStoreError | ThreadNotMaterialized | AppendConflict | FenceRejected\n > {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n if (tail.tailSequence > 0) return;\n\n const record = yield* makeEnvelope(\n threadCreatedRecordId(threadId),\n ThreadCreated.make({ agentId, definitions }),\n );\n\n yield* store\n .append(\n FencedAppendRequest.make({\n threadId,\n batch: CanonicalBatch.make({\n batchId: threadCreatedBatchId(threadId),\n producerId: config.producerId,\n records: [record],\n }),\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch: tail.producerEpoch,\n }),\n )\n .pipe(\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], (error) =>\n store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(\n Effect.flatMap((current) =>\n current.tailSequence > 0 ? Effect.void : Effect.fail(error),\n ),\n ),\n ),\n Effect.andThen(wake.notify(threadId)),\n Effect.asVoid,\n );\n },\n (effect) =>\n effect.pipe(\n Effect.retry({\n times: 7,\n while: (error) => error._tag === \"AppendConflict\" || error._tag === \"FenceRejected\",\n }),\n ),\n );\n\n const attemptContextFor = Effect.fn(\"DurableAgentRuntime.attemptContextFor\")(function* (\n threadId: ThreadId,\n producerEpoch: ProducerEpoch,\n ): Effect.fn.Return<AttemptAppendContext, ThreadStoreError | ThreadNotMaterialized> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n const tailRef = yield* Ref.make({ sequence: tail.tailSequence, digest: tail.tailDigest });\n const gate = yield* Semaphore.make(1);\n\n return { threadId, producerEpoch, tailRef, gate };\n });\n\n /**\n * Append context at the Thread's CURRENT fence, without a claim. Used only where no live\n * owner can exist (an `unknown` head is never claimable, WP2 claim rule): record-identity\n * dedupe absorbs a racing recovery process, and a fence advance defers to the advancing owner.\n */\n const attemptContextAtTail = Effect.fn(\"DurableAgentRuntime.attemptContextAtTail\")(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<AttemptAppendContext, ThreadStoreError | ThreadNotMaterialized> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n const tailRef = yield* Ref.make({ sequence: tail.tailSequence, digest: tail.tailDigest });\n const gate = yield* Semaphore.make(1);\n\n return { threadId, producerEpoch: tail.producerEpoch, tailRef, gate };\n });\n\n const appendBatch = (ctx: AttemptAppendContext, batch: CanonicalBatch) =>\n ctx.gate.withPermits(1)(\n Effect.gen(function* () {\n // Bounded fence refresh on a stale-tail conflict: `AppendConflict(reason: \"tail\")`\n // means this batch was NOT appended — another legitimate same-epoch writer advanced\n // the log after this context read its tail (a parent's establishment repair appending\n // the deterministic lineage/start records to a child Thread while the child's\n // own Attempt runs — routine when the child lives in its own Durable Object). The\n // retry re-reads the ACTUAL tail the conflict carries and re-appends under the SAME\n // epoch: a superseded epoch still fails `FenceRejected` (DUR-006 untouched) and the\n // batch/record identity dedupe absorbs true replays. Treating a stale-tail conflict\n // as \"already appended\" at the tolerant call sites would let a settlement finalize\n // WITHOUT its canonical record.\n for (let refresh = 0; ; refresh++) {\n const tail = yield* Ref.get(ctx.tailRef);\n\n const result = yield* store\n .append(\n FencedAppendRequest.make({\n threadId: ctx.threadId,\n batch,\n expectedTailSequence: tail.sequence,\n expectedTailDigest: tail.digest,\n producerEpoch: ctx.producerEpoch,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) =>\n conflict.reason === \"tail\" &&\n conflict.actualTailSequence !== undefined &&\n conflict.actualTailDigest !== undefined &&\n refresh < MAX_APPEND_FENCE_REFRESHES\n ? Effect.as(\n Ref.set(ctx.tailRef, {\n sequence: conflict.actualTailSequence,\n digest: conflict.actualTailDigest,\n }),\n undefined,\n )\n : Effect.fail(conflict),\n ),\n );\n\n if (result !== undefined) {\n yield* Ref.set(ctx.tailRef, {\n sequence: result.lastSequence,\n digest: result.tailDigest,\n });\n // Canonical storage is already committed. This hint may be lost or duplicated, but\n // it lets scoped progress waiters re-read promptly without making memory authoritative.\n yield* wake.notify(ctx.threadId);\n\n return result;\n }\n }\n }),\n );\n\n /** Append the canonical `AbortRequested` record; an identity conflict means it already exists. */\n const appendAbortRecord = Effect.fn(\"DurableAgentRuntime.appendAbortRecord\")(function* (\n ctx: AttemptAppendContext,\n intent: AbortIntent,\n ) {\n const envelope = yield* makeEnvelope(\n submissionAbortRecordId(intent.submissionId),\n AbortRequested.make({\n submissionId: intent.submissionId,\n author: intent.author,\n reason: intent.reason,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionAbortBatchId(intent.submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n });\n\n /**\n * Append the canonical `ToolCallUnknown` audit records for the given open calls, grouped into\n * one batch per Turn (batch `mark-unknown:{sid}:{turn}`). Canonical-only: the operational\n * ledger marking is a separate step so abort settlement can record the uncertainty WITHOUT\n * blocking the lane (durability §13: abort never asserts external rollback).\n */\n const appendUnknownRecords = Effect.fn(\"DurableAgentRuntime.appendUnknownRecords\")(function* (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n knownIds: Set<string>,\n calls: ReadonlyArray<OpenToolCallEvidence>,\n reason: string,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const runId = runIdForSubmission(submissionId);\n const byTurn = new Map<number, Array<OpenToolCallEvidence>>();\n\n for (const call of calls) {\n const group = byTurn.get(call.turn);\n\n if (group === undefined) byTurn.set(call.turn, [call]);\n else group.push(call);\n }\n for (const [turn, group] of byTurn) {\n const missing = group.filter(\n (call) => !knownIds.has(toolCallUnknownRecordId(runId, turn, call.toolCallId)),\n );\n\n const first = missing[0];\n\n if (first === undefined) continue;\n const envelopes: Array<RecordEnvelope> = [];\n\n for (const call of missing) {\n envelopes.push(\n yield* makeEnvelope(\n toolCallUnknownRecordId(runId, turn, call.toolCallId),\n ToolCallUnknown.make({\n runId,\n turn: call.turn,\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n reason,\n }),\n ),\n );\n }\n const head = envelopes[0];\n\n if (head === undefined) continue;\n // An identity conflict means another pass already recorded the same uncertainty.\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: markUnknownBatchId(submissionId, turn),\n producerId: config.producerId,\n records: [head, ...envelopes.slice(1)],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n for (const call of missing) {\n knownIds.add(toolCallUnknownRecordId(runId, turn, call.toolCallId));\n }\n }\n });\n\n /**\n * Close one open Tool Call canonically: the recovered result (when one exists) settles under\n * the per-call late-settle batch (`turn-results:{runId}:{turn}:{toolCallId}`), then the\n * `ToolCallResolved` audit records who authorized the closure and how (DUR-017). Record\n * identity dedupes double-settles across the batch path and this path; an `AppendConflict`\n * means an identical closure (modulo timestamp) already committed.\n */\n const appendClosedCall = Effect.fn(\"DurableAgentRuntime.appendClosedCall\")(function* (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n knownIds: Set<string>,\n call: OpenToolCallEvidence,\n closure: {\n readonly result?: { readonly value: PersistedJson; readonly isFailure: boolean } | undefined;\n readonly resolution: ToolCallResolution;\n readonly author: string;\n readonly reason: string;\n },\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const runId = runIdForSubmission(submissionId);\n\n const swallowIdentityConflict = (effect: ReturnType<typeof appendBatch>) =>\n effect.pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n\n if (closure.result !== undefined) {\n const settledId = toolCallSettledRecordId(runId, call.turn, call.toolCallId);\n\n if (!knownIds.has(settledId)) {\n const envelope = yield* makeEnvelope(\n settledId,\n ToolCallSettled.make({\n runId,\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n result: closure.result.value,\n isFailure: closure.result.isFailure,\n }),\n );\n\n yield* swallowIdentityConflict(\n appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: toolCallResultBatchId(runId, call.turn, call.toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ),\n );\n knownIds.add(settledId);\n }\n }\n const resolvedId = toolCallResolvedRecordId(runId, call.turn, call.toolCallId);\n\n if (!knownIds.has(resolvedId)) {\n const envelope = yield* makeEnvelope(\n resolvedId,\n ToolCallResolved.make({\n runId,\n toolCallId: call.toolCallId,\n resolution: closure.resolution,\n author: closure.author,\n reason: closure.reason,\n }),\n );\n\n yield* swallowIdentityConflict(\n appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: toolCallResolutionBatchId(submissionId, call.toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ),\n );\n knownIds.add(resolvedId);\n }\n });\n\n /**\n * Reconcile-then-mark (durability §10, DUR-009) over one Submission's open ordinary Tool Calls.\n *\n * Per open call, in order of authority: a durable DUR-017 resolution intent is applied\n * canonically (recovered results settle without execution; never-happened/safe-retry authorize\n * re-execution through the batch resume); a declared `idempotent` execution class is the\n * external idempotency contract and needs no proof; otherwise the registered `ToolReconciler`\n * is consulted — `NeverStarted`/`SafeToRetry` are point-in-time proofs (nothing is recorded;\n * every later pass re-proves them), `CompletedWithResult` becomes canonical supplier truth,\n * `Uncertain` collects for Unknown marking, and a reconciler FAILURE is no proof at all (the\n * call stays open and blocked without being marked). Nothing here ever executes a handler.\n */\n const reconcileOpenCalls = Effect.fn(\"DurableAgentRuntime.reconcileOpenCalls\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n snapshot: RecoverySnapshot,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n openCalls: ReadonlyArray<OpenToolCallEvidence>,\n knownIds: Set<string>,\n executionClassFor: (toolName: string) => ToolExecutionClassValue | undefined,\n ): Effect.fn.Return<OpenCallReview, DurableWorkerFailure> {\n const submissionId = submission.submissionId;\n const runId = runIdForSubmission(submissionId);\n const preparedByCallId = new Map<string, ToolCallPrepared>();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ToolCallPrepared\" && payload.runId === runId) {\n preparedByCallId.set(payload.toolCallId, payload);\n }\n }\n const intents = new Map<string, UnknownResolutionIntent>();\n\n for (const intent of snapshot.unknownResolutions) {\n intents.set(intent.toolCallId, intent);\n }\n const review: OpenCallReview = { uncertain: [], unproven: [], retryable: [], recovered: 0 };\n let recovered = 0;\n\n for (const call of openCalls) {\n const intent = intents.get(call.toolCallId);\n\n if (intent !== undefined) {\n switch (intent.resolution._tag) {\n case \"AbortSubmission\": {\n // The paired abort intent settles the Submission; the SettleAborted executor\n // records the `ToolCallUnknown` audit — nothing resolves here (durability §13).\n continue;\n }\n case \"CompletedWithResult\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n result: {\n value: intent.resolution.result,\n isFailure: intent.resolution.isFailure,\n },\n resolution: intent.resolution.isFailure\n ? \"failed-with-error\"\n : \"completed-with-result\",\n author: intent.author,\n reason: intent.reason,\n });\n recovered += 1;\n continue;\n }\n case \"NeverHappened\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n resolution: \"never-started\",\n author: intent.author,\n reason: intent.reason,\n });\n review.retryable.push(call);\n continue;\n }\n case \"SafeToRetry\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n resolution: \"safe-retry\",\n author: intent.author,\n reason: intent.reason,\n });\n review.retryable.push(call);\n continue;\n }\n }\n }\n if (executionClassFor(call.toolName) === \"idempotent\") {\n // The annotation IS the declared external idempotency contract (ADR-0004): recovery may\n // re-execute without reconciliation proof; duplicate external effects stay observable.\n review.retryable.push(call);\n continue;\n }\n const prepared = preparedByCallId.get(call.toolCallId);\n\n if (prepared === undefined) {\n // Open evidence without its prepared record is unreadable state: stay blocked,\n // never guess (fail-closed).\n review.unproven.push(call);\n continue;\n }\n\n const reconciled = yield* reconciler\n .reconcile(\n PreparedToolCallEvidence.make({\n threadId: submission.threadId,\n submissionId,\n runId,\n turn: prepared.turn,\n toolCallId: prepared.toolCallId,\n toolName: prepared.toolName,\n parameters: prepared.parameters,\n parametersDigest: prepared.parametersDigest,\n }),\n )\n .pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"ToolReconcilerError\", () => Effect.succeed(Option.none())),\n );\n\n if (Option.isNone(reconciled)) {\n review.unproven.push(call);\n continue;\n }\n const decision = reconciled.value;\n\n switch (decision._tag) {\n case \"CompletedWithResult\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n result: { value: decision.result, isFailure: decision.isFailure },\n resolution: decision.isFailure ? \"failed-with-error\" : \"completed-with-result\",\n author: RECONCILER_AUTHOR,\n reason: \"A registered reconciliation policy recovered the external outcome\",\n });\n recovered += 1;\n continue;\n }\n case \"NeverStarted\":\n case \"SafeToRetry\": {\n review.retryable.push(call);\n continue;\n }\n case \"Uncertain\": {\n review.uncertain.push(call);\n continue;\n }\n }\n }\n\n return { ...review, recovered };\n });\n\n /**\n * Record the Unknown Outcomes durably: canonical `ToolCallUnknown` audit records FIRST\n * (history is the recovery truth, DUR-015), then the ownership-free ledger marking that blocks\n * the lane until the authorized DUR-017 resolution path covers every marked call.\n */\n const markCallsUnknown = Effect.fn(\"DurableAgentRuntime.markCallsUnknown\")(function* (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n knownIds: Set<string>,\n calls: ReadonlyArray<OpenToolCallEvidence>,\n reason: string,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const first = calls[0];\n\n if (first === undefined) return;\n yield* appendUnknownRecords(ctx, submissionId, knownIds, calls, reason);\n yield* ledger.markUnknown(\n MarkUnknownRequest.make({\n submissionId,\n toolCallIds: [first.toolCallId, ...calls.slice(1).map((call) => call.toolCallId)],\n reason,\n }),\n );\n });\n\n /**\n * Plan step 2: append the deterministic `UserInputRecorded` record (batch idempotency makes it\n * exactly-once canonical, DUR-007) and mark it applied. When canonical history already carries\n * the record — an earlier Attempt crashed after its append — only the ledger marker is repaired\n * (DUR-015/DUR-016).\n */\n const applyCanonicalInput = Effect.fn(\"DurableAgentRuntime.applyCanonicalInput\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n inputApplied: RecoverySnapshot[\"inputApplied\"],\n ) {\n const submissionId = submission.submissionId;\n const recordId = submissionInputRecordId(submissionId);\n const existing = records.find((envelope) => envelope.record.recordId === recordId);\n\n if (existing !== undefined) {\n if (inputApplied === undefined) {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n submissionId,\n ownershipToken,\n recordId,\n sequence: existing.sequence,\n }),\n );\n }\n\n return;\n }\n\n const envelope = yield* makeEnvelope(\n recordId,\n UserInputRecorded.make({\n submissionId,\n kind: \"user\",\n runId: runIdForSubmission(submissionId),\n input: submission.inputPayload,\n ...(submission.messageAdmission === undefined\n ? {}\n : { messageAdmission: submission.messageAdmission }),\n }),\n );\n\n const result = yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionInputBatchId(submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n\n yield* hit(\"input:after-canonical-append\");\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n submissionId,\n ownershipToken,\n recordId,\n sequence: result.firstSequence,\n }),\n );\n });\n\n const canonicalRunStartFromRecords = Effect.fn(\n \"DurableAgentRuntime.canonicalRunStartFromRecords\",\n )(function* (records: ReadonlyArray<CanonicalRecordEnvelope>, runId: RunId) {\n const recordId = runStartedRecordId(runId);\n\n const starts = records.filter(\n ({ record }) => record.payload._tag === \"RunStarted\" && record.payload.runId === runId,\n );\n\n const existing = records.find(({ record }) => record.recordId === recordId);\n\n if (\n starts.length > 1 ||\n (starts.length === 1 && starts[0]?.record.recordId !== recordId) ||\n (existing !== undefined &&\n (existing.record.payload._tag !== \"RunStarted\" || existing.record.payload.runId !== runId))\n ) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has conflicting start evidence`,\n });\n }\n\n return existing?.record;\n });\n\n const ensureRunStarted = Effect.fn(\"DurableAgentRuntime.ensureRunStarted\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n maxDurationMillis: number,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n ) {\n const runId = runIdForSubmission(submission.submissionId);\n const recordId = runStartedRecordId(runId);\n const existing = yield* canonicalRunStartFromRecords(records, runId);\n let start: RecordEnvelope;\n\n if (existing !== undefined && existing.payload._tag === \"RunStarted\") {\n if (existing.payload.maxDurationMillis !== maxDurationMillis) {\n return yield* RunJournalError.make({\n message: `Run ${runId} started with a ${existing.payload.maxDurationMillis}ms duration allowance; the replacement Binding supplies ${maxDurationMillis}ms`,\n });\n }\n start = existing;\n } else {\n const executionStarted = records.some(\n ({ record: { payload } }) =>\n payload._tag !== \"UserInputRecorded\" && \"runId\" in payload && payload.runId === runId,\n );\n\n if (executionStarted) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has execution records but no canonical start; reset incompatible private-development data`,\n });\n }\n start = yield* makeEnvelope(\n recordId,\n RunStartedRecord.make({ runId, maxDurationMillis, policyAccountingVersion: 1 }),\n );\n yield* hit(\"run:before-start-append\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: runStartedBatchId(runId),\n producerId: config.producerId,\n records: [start],\n }),\n );\n yield* hit(\"run:after-start-append\");\n }\n\n return {\n startedAt: start.createdAt,\n deadline: DateTime.addDuration(start.createdAt, Duration.millis(maxDurationMillis)),\n };\n });\n\n /**\n * Settle ONE joined Submission with its host Run's outcome (plan §2.5, DUR-002: every accepted\n * Submission is owed its own settlement). The same recoverable reserve → append → finalize\n * sequence as `terminalize`, with two joined-specific rules: the canonical record's `runId` is\n * the HOST Run (the joined input was consumed there), and the reservation is authorized by the\n * recorded host linkage instead of lane ownership — a `joined` lane is never worker-claimable,\n * so no ownership token can exist for it. Each step is idempotent; recovery completes any\n * prefix (`AppendReservedSettlement` / `FinalizeLedgerFromHistory` / `SettleJoinedWithHost`).\n */\n /**\n * Cross-lane drive-forward after one child Submission settles (spec §12 step 10): the child's\n * canonical Settlement is already durable, so the idempotent `recordChildSettled` wake is the\n * durable notification — `suspended(WaitingForChild) → input-applied` once every listed child\n * settled — and the parent-lane wake hint is liveness only. Invoked after the exact canonical\n * append but BEFORE child ledger finalization: once a child may become terminal, its parent's\n * durable marker and maintenance generation already exist. Finalization replays the same\n * notification for single-store parent re-suspension races; `ResumeWaitingParent` remains the\n * repair for older data and any already-recorded canonical settlement.\n */\n const notifyParentOfChildSettlement = Effect.fn(\n \"DurableAgentRuntime.notifyParentOfChildSettlement\",\n )(function* (submission: SubmissionSnapshot): Effect.fn.Return<void, LedgerError> {\n if (submission.workerAdmission?.origin.reporting?.mode === \"standard\")\n yield* updateRuntime.repair(submission.threadId).pipe(\n Effect.mapError(() =>\n LedgerError.make({\n operation: \"update-delivery\",\n message: \"Update delivery remains pending\",\n }),\n ),\n );\n yield* workerRuntime\n .completeInput(submission)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-completion\", message: cause.reason }),\n ),\n );\n const linkage = submission.parentLinkage;\n\n if (linkage === undefined) return;\n yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: linkage.parentSubmissionId,\n childSubmissionId: submission.submissionId,\n }),\n );\n\n const parent = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: linkage.parentSubmissionId }),\n );\n\n if (Option.isSome(parent)) {\n yield* wake.notify(parent.value.threadId);\n }\n });\n\n const settleOneJoined = Effect.fn(\"DurableAgentRuntime.settleOneJoined\")(function* (\n ctx: AttemptAppendContext,\n hostSettlement: SubmissionSettledRecord,\n joined: RecoverySnapshot,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n const hostSubmissionId = hostSettlement.submissionId;\n const outcome = hostSettlement.outcome;\n const submission = joined.submission;\n const submissionId = submission.submissionId;\n const settlementId = submissionSettlementId(submissionId);\n let record: RecordEnvelope;\n\n if (joined.reservation !== undefined) {\n // A prior pass already reserved the exact outcome: re-append the STORED record so the\n // batch replay is byte-identical (DUR-011).\n record = joined.reservation.record;\n } else {\n const payload = yield* Schema.decodeEffect(SubmissionSettledRecord)(\n SubmissionSettled.make({\n submissionId,\n settlementId,\n receiptId: submission.receiptId,\n outcome,\n runId: runIdForSubmission(hostSubmissionId),\n ...(hostSettlement.outcome === \"failed\" ? { result: hostSettlement.result } : {}),\n }),\n ).pipe(Effect.orDie);\n\n const envelope = yield* makeEnvelope(submissionSettlementRecordId(submissionId), payload);\n // The envelope was constructed from validated parts, so an encode failure is a defect.\n const encoded = yield* Schema.encodeEffect(RecordEnvelope)(envelope).pipe(Effect.orDie);\n const recordDigest = yield* withCrypto(digestJson(encoded));\n\n const reserved = yield* ledger\n .reserveSettlement(\n SettlementReservation.make({\n submissionId,\n ownershipToken: JOINED_SETTLEMENT_TOKEN,\n settlementId,\n outcome,\n record: envelope,\n recordDigest,\n }),\n )\n .pipe(\n // A racing pass reserved first (its envelope differs only by `createdAt`): the\n // stored reservation with the same host-derived outcome is the exact record owed.\n Effect.catchTag(\"SettlementConflict\", (conflict) =>\n Effect.gen(function* () {\n const current = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n const reservation = current.reservation;\n\n if (reservation === undefined || reservation.outcome !== outcome) {\n return yield* conflict;\n }\n\n return reservation;\n }),\n ),\n );\n\n record = reserved.record;\n yield* hit(\"terminalize:after-reserve\");\n }\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionSettlementBatchId(submissionId),\n producerId: config.producerId,\n records: [record],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"terminalize:after-canonical-append\");\n yield* notifyParentOfChildSettlement(submission);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({ submissionId, settlementId }),\n );\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission);\n\n return settlement;\n });\n\n /**\n * Terminalize joined-settlement loop (plan §2.5): after the host's own reserve → append →\n * finalize, every Submission joined to the host settles with the host outcome. `terminalizing`\n * rows are a prior pass's crashed joined settlement (reservation committed, finalize lost) and\n * complete here too; `joining` rows were never consumed and are recovery's to revert, and\n * settled rows are done. A crash anywhere in the loop leaves a classifiable prefix\n * (`SettleJoinedWithHost` / `AppendReservedSettlement` finish the rest).\n */\n const settleJoinedSubmissions = Effect.fn(\"DurableAgentRuntime.settleJoinedSubmissions\")(\n function* (\n ctx: AttemptAppendContext,\n hostSettlement: SubmissionSettledRecord,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const hostSubmissionId = hostSettlement.submissionId;\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: hostSubmissionId }),\n );\n\n for (const join of snapshot.joins) {\n if (join.state !== \"joined\" && join.state !== \"terminalizing\") continue;\n\n const joinedSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: join.submissionId }),\n );\n\n if (joinedSnapshot.submission.state === \"settled\") continue;\n yield* settleOneJoined(ctx, hostSettlement, joinedSnapshot);\n }\n },\n );\n\n /**\n * Terminalization (durability §12, DUR-011): reserve the single exact settlement record, append\n * that exact record canonically, finalize the ledger, release the lane, and hint waiters.\n * Submissions joined to this host Run settle with the host outcome immediately after\n * (plan §2.5); recovery completes any prefix of that loop.\n */\n const terminalize = Effect.fn(\"DurableAgentRuntime.terminalize\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n outcome: AttemptOutcome,\n includeRunId: boolean,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n const submissionId = submission.submissionId;\n const settlementId = submissionSettlementId(submissionId);\n\n const payload = yield* Schema.decodeEffect(SubmissionSettledRecord)(\n SubmissionSettled.make({\n submissionId,\n settlementId,\n receiptId: submission.receiptId,\n outcome: outcome._tag,\n ...(includeRunId ? { runId: runIdForSubmission(submissionId) } : {}),\n ...(outcome._tag === \"aborted\" ? {} : { result: outcome.result }),\n ...(includeRunId &&\n outcome._tag === \"completed\" &&\n outcome.finishReason === undefined &&\n outcome.runDisposition !== undefined\n ? { runDisposition: outcome.runDisposition }\n : {}),\n ...(outcome._tag === \"completed\" && outcome.finishReason !== undefined\n ? { finishReason: outcome.finishReason }\n : {}),\n ...(outcome._tag === \"completed\" && outcome.exhausted !== undefined\n ? { exhausted: outcome.exhausted }\n : {}),\n ...(outcome._tag === \"failed\" && outcome.policyLimit !== undefined\n ? { policyLimit: outcome.policyLimit }\n : {}),\n ...(outcome.usageSummary === undefined ? {} : { usageSummary: outcome.usageSummary }),\n ...(includeRunId &&\n outcome.uncommittedModelUsage !== undefined &&\n outcome.uncommittedModelUsage.length > 0\n ? { uncommittedModelUsage: outcome.uncommittedModelUsage }\n : {}),\n }),\n ).pipe(Effect.orDie);\n\n const record = yield* makeEnvelope(submissionSettlementRecordId(submissionId), payload);\n // The envelope was constructed from validated parts, so an encode failure is a defect.\n const encoded = yield* Schema.encodeEffect(RecordEnvelope)(record).pipe(Effect.orDie);\n const recordDigest = yield* withCrypto(digestJson(encoded));\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const reserved = yield* ledger.reserveSettlement(\n SettlementReservation.make({\n submissionId,\n ownershipToken,\n settlementId,\n outcome: outcome._tag,\n record,\n recordDigest,\n }),\n );\n\n yield* hit(\"terminalize:after-reserve\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionSettlementBatchId(submissionId),\n producerId: config.producerId,\n records: [reserved.record],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"terminalize:after-canonical-append\");\n yield* notifyParentOfChildSettlement(submission);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({ submissionId, settlementId }),\n );\n\n const canonicalSettlement = yield* settlementPayloadFromRecord(reserved.record, submissionId);\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission);\n yield* settleJoinedSubmissions(ctx, canonicalSettlement);\n\n return materializeSettlement(settlement, reserved.record);\n });\n\n /** Complete a previously reserved settlement: append the EXACT reserved record, then finalize. */\n const completeReservation = Effect.fn(\"DurableAgentRuntime.completeReservation\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n reservation: NonNullable<RecoverySnapshot[\"reservation\"]>,\n alreadyRecorded: boolean,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n if (!alreadyRecorded) {\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionSettlementBatchId(submission.submissionId),\n producerId: config.producerId,\n records: [reservation.record],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"terminalize:after-canonical-append\");\n }\n yield* notifyParentOfChildSettlement(submission);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: submission.submissionId,\n settlementId: reservation.settlementId,\n }),\n );\n\n const canonicalSettlement = yield* settlementPayloadFromRecord(\n reservation.record,\n submission.submissionId,\n );\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission);\n yield* settleJoinedSubmissions(ctx, canonicalSettlement);\n\n return materializeSettlement(settlement, reservation.record);\n });\n\n /** Canonical settlement exists: rebuild the ledger from history, never the reverse (DUR-015). */\n const finalizeFromHistory = Effect.fn(\"DurableAgentRuntime.finalizeFromHistory\")(function* (\n submission: SubmissionSnapshot,\n record: RecordEnvelope,\n ): Effect.fn.Return<Settlement, LedgerError | SettlementConflict> {\n const canonicalSettlement = yield* settlementPayloadFromRecord(record, submission.submissionId);\n\n yield* notifyParentOfChildSettlement(submission);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: submission.submissionId,\n settlementId: canonicalSettlement.settlementId,\n }),\n );\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission);\n\n return materializeSettlement(settlement, snapshot.reservation?.record);\n });\n\n /**\n * Durable abort of owned work: canonical `AbortRequested` first, then `ToolCallUnknown` audit\n * records for every open ordinary Tool Call (abort settles the obligation but never asserts\n * external rollback, durability §13), then settle aborted.\n */\n const settleAborted = Effect.fn(\"DurableAgentRuntime.settleAborted\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n intent: AbortIntent,\n evidence: RecoveryEvidence,\n knownIds: Set<string>,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n if (!evidence.abortRecorded) {\n yield* appendAbortRecord(ctx, intent);\n }\n if (evidence.openToolCalls.length > 0) {\n yield* appendUnknownRecords(\n ctx,\n submission.submissionId,\n knownIds,\n evidence.openToolCalls,\n \"The Submission was aborted while this ordinary Tool call had no canonical outcome; abort never asserts external rollback\",\n );\n }\n\n return yield* terminalize(\n ctx,\n submission,\n tokenRef,\n { _tag: \"aborted\" },\n evidence.inputRecorded,\n );\n });\n\n /** Map a ledger conflict outside `DurableWorkerFailure` into the coordinator failure family. */\n const conflictToLedgerError =\n (operation: string) =>\n (conflict: { readonly _tag: string; readonly message?: string }): LedgerError =>\n LedgerError.make({\n operation,\n message: `${conflict._tag}${conflict.message === undefined ? \"\" : `: ${conflict.message}`}`,\n cause: conflict,\n });\n\n /**\n * Append the child Thread's immutable lineage record (spec §12 step 6, §11): its own\n * single-record batch under `subagent-lineage:{childThreadId}` so the generic\n * `thread-created:{cid}` batch identity is never contradicted. Idempotent by record\n * identity; a racing append is re-proved from the log. A claim of the admitted child may\n * advance only its fence, so bounded retries acquire the current tail before appending.\n */\n const ensureChildLineage = Effect.fn(\"DurableAgentRuntime.ensureChildLineage\")(\n function* (\n parent: SubmissionSnapshot,\n request: SubagentRequested,\n childRecords: ReadonlyArray<CanonicalRecordEnvelope>,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const recordId = subagentLineageRecordId(request.childThreadId);\n\n if (childRecords.some((envelope) => envelope.record.recordId === recordId)) return;\n\n const envelope = yield* makeEnvelope(\n recordId,\n SubagentLineageRecorded.make({\n parentLink: SubagentParentLink.make({\n delegationId: request.delegationId,\n parentAgentId: parent.agentId,\n parentThreadId: parent.threadId,\n parentRunId: request.runId,\n parentToolCallId: request.toolCallId,\n depth: request.depth ?? CHILD_DELEGATION_DEPTH,\n }),\n parentSubmissionId: parent.submissionId,\n childDefinitionDigests: request.targetDigests,\n childInputDigest: request.childInputDigest,\n grantDigest: request.grantDigest,\n ...(request.toolCallAllowance === undefined\n ? {}\n : { toolCallAllowance: request.toolCallAllowance }),\n ...(request.policy === undefined ? {} : { policy: request.policy }),\n ...(request.budget === undefined ? {} : { budget: request.budget }),\n ...(request.grant === undefined ? {} : { grant: request.grant }),\n }),\n );\n\n const tail = yield* store.inspectTail(\n ThreadTailRequest.make({ threadId: request.childThreadId }),\n );\n\n yield* store\n .append(\n FencedAppendRequest.make({\n threadId: request.childThreadId,\n batch: CanonicalBatch.make({\n batchId: subagentLineageBatchId(request.childThreadId),\n producerId: config.producerId,\n records: [envelope],\n }),\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch: tail.producerEpoch,\n }),\n )\n .pipe(\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], (error) =>\n // A racing establishment pass (or the child's own claimed worker) advanced the\n // log; the deterministic identity means the record either exists or the next\n // pass re-proves it — verify instead of trusting the race blindly.\n readControl(request.childThreadId, []).pipe(\n Effect.flatMap((current) =>\n current.some((candidate) => candidate.record.recordId === recordId)\n ? Effect.void\n : Effect.fail(error),\n ),\n ),\n ),\n Effect.andThen(wake.notify(request.childThreadId)),\n Effect.asVoid,\n );\n },\n (effect) =>\n effect.pipe(\n Effect.retry({\n times: 7,\n while: (error) => error._tag === \"AppendConflict\" || error._tag === \"FenceRejected\",\n }),\n ),\n );\n\n /** Where one idempotent child admission pass ended (spec §12 steps 4-8). */\n type ChildAdmissionOutcome =\n | {\n readonly _tag: \"established\";\n readonly childSubmissionId: SubmissionId;\n readonly receiptId: ReceiptId;\n }\n | { readonly _tag: \"indeterminate\"; readonly reason: string };\n\n /**\n * Complete (or replay) the child-admission half of establishment from the canonical\n * `SubagentRequested` payload alone — no live delegation handler is required (D3): the\n * `resolveAdmission` tri-state gate (SUB-031), the idempotency-keyed `admit` with immutable\n * parent linkage, child Thread materialization plus the immutable lineage record, and\n * readiness. Every step is get-or-create; a replay converges on the one existing child\n * (SUB-016) and an `indeterminate` answer NEVER admits a second child.\n */\n const establishChildFromRequest = Effect.fn(\"DurableAgentRuntime.establishChildFromRequest\")(\n function* (\n parent: SubmissionSnapshot,\n request: SubagentRequested,\n allowAdmission = true,\n ): Effect.fn.Return<ChildAdmissionOutcome, DurableWorkerFailure> {\n const principal = decodePrincipalSync(request.childPrincipal);\n const idempotencyKey = decodeIdempotencyKeySync(request.childIdempotencyKey);\n\n const resolution = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId: request.childThreadId,\n principal,\n idempotencyKey,\n }),\n );\n\n let childSubmissionId: SubmissionId;\n let receiptId: ReceiptId;\n\n switch (resolution._tag) {\n case \"Indeterminate\": {\n return { _tag: \"indeterminate\", reason: resolution.reason };\n }\n case \"NotAdmitted\": {\n if (!allowAdmission) {\n return {\n _tag: \"indeterminate\",\n reason: \"The expired parent cannot admit a new child\",\n };\n }\n\n const admitted: AdmissionResult = yield* ledger\n .admit(\n AdmissionRequest.make({\n threadId: request.childThreadId,\n principal,\n idempotencyKey,\n agentId: request.targetAgentId,\n agentDigests: request.targetDigests,\n deploymentId: config.deploymentId,\n inputPayload: request.childInput,\n inputDigest: request.childInputDigest,\n parentLinkage: ParentLinkage.make({\n parentSubmissionId: parent.submissionId,\n parentToolCallId: request.toolCallId,\n }),\n }),\n )\n .pipe(\n Effect.catchTag(\n \"AdmissionConflict\",\n conflictToLedgerError(\"establishChildFromRequest\"),\n ),\n );\n\n childSubmissionId = admitted.submissionId;\n receiptId = admitted.receiptId;\n break;\n }\n case \"Admitted\": {\n // The one existing child: verify the immutable admission facts against the canonical\n // request before reattaching — a divergent row can never be \"the same child\"\n // (fail-closed; identifiers are never capabilities, D10).\n const child = resolution.submission;\n const linkage = child.parentLinkage;\n\n if (\n child.agentId !== request.targetAgentId ||\n !definitionDigestsEqual(child.agentDigests, request.targetDigests) ||\n child.inputDigest !== request.childInputDigest ||\n linkage === undefined ||\n linkage.parentSubmissionId !== parent.submissionId ||\n linkage.parentToolCallId !== request.toolCallId\n ) {\n return yield* LedgerError.make({\n operation: \"establishChildFromRequest\",\n message: `The admitted child ${child.submissionId} diverges from the canonical SubagentRequested record for Tool Call ${request.toolCallId}; establishment fails closed (SUB-016)`,\n });\n }\n childSubmissionId = child.submissionId;\n receiptId = child.receiptId;\n break;\n }\n }\n yield* hit(\"subagent:after-admit\");\n yield* materializeAtLeast(request.childThreadId, ZERO_EPOCH);\n yield* ensureThreadCreated(\n request.childThreadId,\n request.targetAgentId,\n request.targetDigests,\n );\n const childRead = yield* readAllTolerant(request.childThreadId, []);\n\n yield* ensureChildLineage(parent, request, childRead.records);\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: childSubmissionId }));\n yield* hit(\"subagent:after-child-ready\");\n yield* wake.notify(request.childThreadId);\n\n return { _tag: \"established\", childSubmissionId, receiptId };\n },\n );\n\n /**\n * Bounded usage summary rebuilt from canonical child evidence (D11 structural dimensions).\n * The two finite counters always satisfy the persistence bounds, so a decode failure is a\n * defect (`orDie`), matching the file's `annotateRepair` pattern for provably-valid inputs.\n */\n const childUsageSummaryOf = (\n childRecords: ReadonlyArray<CanonicalRecordEnvelope>,\n childRunId: RunId,\n ): Effect.Effect<PersistedJson> => {\n let turns = 0;\n let toolCalls = 0;\n\n for (const envelope of childRecords) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ModelResponseRecorded\" && payload.runId === childRunId) turns += 1;\n if (payload._tag === \"ToolCallSettled\" && payload.runId === childRunId) toolCalls += 1;\n }\n\n return decodePersisted({ turns, toolCalls }).pipe(Effect.orDie);\n };\n\n /** The coordinator's bounded `{errorTag, message}` projection of a non-completed child. */\n const boundedChildFailureResult = (\n payload: SubmissionSettledRecord,\n childSubmissionId: SubmissionId,\n ): Effect.Effect<PersistedJson> => {\n if (payload.outcome === \"failed\") {\n return Effect.succeed(payload.result);\n }\n\n return decodePersisted({\n errorTag: \"SubagentAborted\",\n message: `Attached child ${childSubmissionId} settled aborted`,\n }).pipe(Effect.orDie);\n };\n\n /** One verified child Settlement, ready to join (spec §12 join steps 1-3). */\n interface VerifiedChildSettlement {\n readonly outcome: SettlementOutcome;\n /** Child terminal output for `completed`; the bounded `{errorTag, message}` projection otherwise. */\n readonly encodedResult: PersistedJson;\n readonly settlement: SubmissionSettledRecord;\n readonly childRecords: ReadonlyArray<CanonicalRecordEnvelope>;\n }\n\n const verifiedChildUsage = Effect.fn(\"DurableAgentRuntime.verifiedChildUsage\")(function* (\n verified: VerifiedChildSettlement,\n childRunId: RunId,\n ) {\n const reports = childUsageReportsOf(subagentRecordsOf(verified.childRecords, childRunId));\n\n const delegatedUsage = yield* sumRunTotals(\n reports.flatMap(({ report }) => [report.usage, report.delegatedUsage]),\n ).pipe(Effect.catchTag(\"UsageAggregationError\", () => Effect.succeed(unknownRunTotals())));\n\n return RunUsageReport.make({\n usage:\n verified.settlement.usageSummary === undefined\n ? unknownRunTotals()\n : runTotalsFromSummary(verified.settlement.usageSummary),\n delegatedUsage,\n });\n });\n\n type ChildVerification =\n | { readonly _tag: \"verified\"; readonly value: VerifiedChildSettlement }\n | { readonly _tag: \"mismatch\"; readonly message: string };\n\n /**\n * §1.6 join verification, fail-closed (SUB-019/SUB-023, D10): the child's CANONICAL\n * Settlement and lineage records are read from the child Thread Log — cached ledger\n * state never fabricates a Settlement — and every identity/digest is checked against the\n * canonical `SubagentRequested` payload: Parent Link identity, target agent, stored\n * definition digests, input/grant digests, settlement identity, and the settlement record\n * digest pinned by the child's reservation. Any mismatch is a typed verification failure.\n */\n const verifySettledChild = Effect.fn(\"DurableAgentRuntime.verifySettledChild\")(function* (\n parent: SubmissionSnapshot,\n request: SubagentRequested,\n childSubmissionId: SubmissionId,\n ): Effect.fn.Return<ChildVerification, DurableWorkerFailure> {\n const mismatch = (message: string): ChildVerification => ({ _tag: \"mismatch\", message });\n\n // The child's lane state crosses the store boundary through `lookup` — a status check on\n // the child's owning ledger — because recovery snapshots are lane-local by construction:\n // on Cloudflare the child Thread lives in a different Durable Object whose\n // operational rows are not readable across the boundary (deployment §11). The child's\n // CANONICAL Settlement, read below from its Thread Log, remains the only\n // cross-lane verification authority (spec §12 join step 1, SUB-019, DUR-015).\n const childLookup = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: childSubmissionId }),\n );\n\n if (Option.isNone(childLookup)) {\n return yield* LedgerError.make({\n operation: \"verifySettledChild\",\n message: `Attached child ${childSubmissionId} is unknown to its owning Submission Ledger`,\n });\n }\n const child = childLookup.value;\n\n if (child.threadId !== request.childThreadId) {\n return mismatch(\"The child Thread does not match the intended child identity\");\n }\n if (child.agentId !== request.targetAgentId) {\n return mismatch(\"The child Agent identity does not match the declared delegation target\");\n }\n if (!definitionDigestsEqual(child.agentDigests, request.targetDigests)) {\n return mismatch(\"The child definition digests do not match the stored target digests\");\n }\n if (child.inputDigest !== request.childInputDigest) {\n return mismatch(\"The child input digest does not match the canonical request\");\n }\n const linkage = child.parentLinkage;\n\n if (\n linkage === undefined ||\n linkage.parentSubmissionId !== parent.submissionId ||\n linkage.parentToolCallId !== request.toolCallId\n ) {\n return mismatch(\"The child admission linkage does not name this parent Tool Call\");\n }\n const childRecords = yield* readControl(request.childThreadId, [child.submissionId]);\n\n const lineageEnvelope = childRecords.find(\n (envelope) => envelope.record.recordId === subagentLineageRecordId(request.childThreadId),\n );\n\n const lineage = lineageEnvelope?.record.payload;\n\n if (lineage === undefined || lineage._tag !== \"SubagentLineageRecorded\") {\n return mismatch(\"The child Thread carries no immutable lineage record\");\n }\n if (\n lineage.parentLink.delegationId !== request.delegationId ||\n lineage.parentLink.parentAgentId !== parent.agentId ||\n lineage.parentLink.parentThreadId !== parent.threadId ||\n lineage.parentLink.parentRunId !== request.runId ||\n lineage.parentLink.parentToolCallId !== request.toolCallId ||\n lineage.parentLink.depth !== (request.depth ?? CHILD_DELEGATION_DEPTH) ||\n lineage.parentSubmissionId !== parent.submissionId\n ) {\n return mismatch(\"The child Parent Link does not name exactly this parent Run and Tool Call\");\n }\n if (\n !definitionDigestsEqual(lineage.childDefinitionDigests, request.targetDigests) ||\n lineage.childInputDigest !== request.childInputDigest ||\n lineage.grantDigest !== request.grantDigest ||\n lineage.toolCallAllowance !== request.toolCallAllowance ||\n !Equal.equals(lineage.policy, request.policy) ||\n !Equal.equals(lineage.budget, request.budget) ||\n !Equal.equals(lineage.grant, request.grant)\n ) {\n return mismatch(\"The child lineage digests or allowance do not match the canonical request\");\n }\n\n const settlementEnvelope = childRecords.find(\n (envelope) => envelope.record.recordId === submissionSettlementRecordId(childSubmissionId),\n );\n\n const settlement = settlementEnvelope?.record.payload;\n\n if (settlement === undefined || settlement._tag !== \"SubmissionSettled\") {\n return mismatch(\"The child has no canonical Settlement record\");\n }\n if (\n settlement.submissionId !== childSubmissionId ||\n settlement.settlementId !== submissionSettlementId(childSubmissionId) ||\n settlement.receiptId !== child.receiptId\n ) {\n return mismatch(\"The child Settlement identity does not match the child Receipt\");\n }\n // No parent-side crosscheck against the child's settlement RESERVATION row exists here:\n // the reservation lives in the child's own store, invisible across the Object boundary on\n // Cloudflare, and its byte-identity with the canonical record is the child store's own\n // conformance-tested reserve→append→finalize invariant (DUR-011) — never a parent\n // obligation. The canonical Settlement verified above is the sole cross-lane authority.\n if (settlement.outcome === \"completed\" && settlement.result === undefined) {\n return mismatch(\"The completed child Settlement carries no terminal output\");\n }\n\n const encodedResult =\n settlement.outcome === \"completed\" && settlement.result !== undefined\n ? settlement.result\n : yield* boundedChildFailureResult(settlement, childSubmissionId);\n\n return {\n _tag: \"verified\",\n value: { outcome: settlement.outcome, encodedResult, settlement, childRecords },\n };\n });\n\n /**\n * Apply the frozen accounting decision to one reservation (spec §12 join step 6, DUR-015):\n * `beginChildBudgetRelease` freezes it exactly once (an identical replay is a no-op) and\n * `releaseChildBudget` applies it exactly once — budget stays unavailable until repair, never\n * available twice.\n */\n const applyReservationRelease = Effect.fn(\"DurableAgentRuntime.applyReservationRelease\")(\n function* (\n reservationId: ChildReservationId,\n accounting: PersistedJson,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n yield* ledger\n .beginChildBudgetRelease(BeginChildBudgetReleaseRequest.make({ reservationId, accounting }))\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"beginChildBudgetRelease\"),\n ),\n );\n yield* hit(\"subagent:after-release-pending\");\n yield* ledger\n .releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId }))\n .pipe(\n Effect.catchTag(\"ChildReservationConflict\", conflictToLedgerError(\"releaseChildBudget\")),\n );\n yield* hit(\"subagent:after-release\");\n },\n );\n\n /**\n * Release a provably-childless reservation exactly once (spec §13 \"reservation exists,\n * request absent\"): freeze the deterministic zero-consumed decision — a conflict means a\n * different decision already froze first, and the release below applies THAT frozen decision.\n */\n const releaseOrphanReservation = Effect.fn(\"DurableAgentRuntime.releaseOrphanReservation\")(\n function* (reservationId: ChildReservationId): Effect.fn.Return<void, DurableWorkerFailure> {\n yield* ledger\n .beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: ORPHAN_ZERO_CONSUMED_ACCOUNTING,\n }),\n )\n .pipe(\n Effect.catchTag(\"ChildReservationConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-release-pending\");\n yield* ledger\n .releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId }))\n .pipe(\n Effect.catchTag(\"ChildReservationConflict\", conflictToLedgerError(\"releaseChildBudget\")),\n );\n yield* hit(\"subagent:after-release\");\n },\n );\n\n /**\n * Join a settled child after parent abort or expiry without running application handlers.\n * The canonical child outcome stays intact; the parent result records why it cannot continue.\n */\n const joinSettledChildForClosedParent = Effect.fn(\n \"DurableAgentRuntime.joinSettledChildForClosedParent\",\n )(function* (\n ctx: AttemptAppendContext,\n parent: SubmissionSnapshot,\n knownIds: Set<string>,\n subagent: SubagentCallRecords,\n reservation: ChildBudgetReservationSnapshot,\n toolCallId: ToolCallId,\n childSubmissionId: SubmissionId,\n reason: \"aborted\" | \"duration\",\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const runId = runIdForSubmission(parent.submissionId);\n const request = subagent.requested.get(toolCallId);\n\n if (request === undefined) {\n return yield* LedgerError.make({\n operation: \"joinSettledChildForClosedParent\",\n message: `Tool Call ${toolCallId} has an attached child but no canonical SubagentRequested record`,\n });\n }\n const joinedRecordId = subagentJoinedRecordId(runId, toolCallId);\n let finalAccounting: PersistedJson;\n const existing = subagent.joined.get(toolCallId);\n\n if (existing !== undefined) {\n finalAccounting = existing.finalAccounting;\n } else {\n const verification = yield* verifySettledChild(parent, request, childSubmissionId);\n\n if (verification._tag === \"mismatch\") {\n return yield* LedgerError.make({\n operation: \"joinSettledChildForClosedParent\",\n message: `Child Settlement verification failed for Tool Call ${toolCallId}: ${verification.message}`,\n });\n }\n const verified = verification.value;\n\n // Static-shape projections; a bounds failure is a defect, matching `annotateRepair`.\n const boundedResult = yield* decodePersisted({\n errorTag: reason === \"aborted\" ? \"SubagentParentAborted\" : \"SubagentParentDurationExceeded\",\n message: boundedText(\n `The parent Submission ${reason === \"aborted\" ? \"aborted\" : \"exceeded its duration\"}; attached child ${childSubmissionId} settled ${verified.outcome}`,\n ),\n }).pipe(Effect.orDie);\n\n finalAccounting = yield* decodePersisted({\n basis: reason === \"aborted\" ? \"aborted-conservative\" : \"duration-conservative\",\n allocation: reservation.allocation,\n }).pipe(Effect.orDie);\n const childRunId = runIdForSubmission(childSubmissionId);\n\n yield* hit(\"subagent:before-join-append\");\n\n const joinedPayload = SubagentJoined.make({\n runId,\n toolCallId,\n childSubmissionId,\n childSettlementId: verified.settlement.settlementId,\n childOutcome: verified.outcome,\n childResultDigest: yield* withCrypto(digestJson(verified.settlement.result ?? null)),\n projectedResultDigest: yield* withCrypto(digestJson(boundedResult)),\n usageSummary: yield* childUsageSummaryOf(verified.childRecords, childRunId),\n ...(yield* verifiedChildUsage(verified, childRunId)),\n reservationId: reservation.reservationId,\n finalAccounting,\n });\n\n const settledRecordId = toolCallSettledRecordId(runId, request.turn, toolCallId);\n const joinedEnvelope = yield* makeEnvelope(joinedRecordId, joinedPayload);\n\n const settledEnvelope = yield* makeEnvelope(\n settledRecordId,\n ToolCallSettled.make({\n runId,\n toolCallId,\n toolName: subagent.preparedNames.get(toolCallId) ?? request.delegationId,\n result: boundedResult,\n isFailure: true,\n }),\n );\n\n if (!knownIds.has(joinedRecordId)) {\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentJoinBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [joinedEnvelope, settledEnvelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(joinedRecordId);\n knownIds.add(settledRecordId);\n subagent.joined.set(toolCallId, joinedPayload);\n yield* hit(\"subagent:after-join-append\");\n }\n }\n yield* applyReservationRelease(reservation.reservationId, finalAccounting);\n });\n\n /**\n * Complete every joined-but-unreleased reservation BEFORE the parent settles (spec §12 join\n * step 6): the canonical `SubagentJoined` accounting authorizes the release (DUR-015), and a\n * parent that settled first would strand the repair — a settled lane classifies `NoAction`.\n * Returns whether any reservation remains unreleased (a reserved row without a canonical\n * join), which must block the settlement (spec §13: a parent never settles across an open\n * child obligation).\n */\n const completeJoinedReleases = Effect.fn(\"DurableAgentRuntime.completeJoinedReleases\")(function* (\n submission: SubmissionSnapshot,\n ): Effect.fn.Return<boolean, DurableWorkerFailure> {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n if (snapshot.childReservations.length === 0) return false;\n const records = yield* readControl(submission.threadId, [submission.submissionId]);\n const subagent = subagentRecordsOf(records, runIdForSubmission(submission.submissionId));\n let open = false;\n\n for (const reservation of snapshot.childReservations) {\n if (reservation.status === \"released\") continue;\n const joined = subagent.joined.get(reservation.parentToolCallId);\n\n if (joined !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, joined.finalAccounting);\n continue;\n }\n if (reservation.status === \"releasePending\" && reservation.accounting !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, reservation.accounting);\n continue;\n }\n open = true;\n }\n\n return open;\n });\n\n /** Release unused reservations or repair and join existing children, never admit new work. */\n const reconcileExpiredChildren = Effect.fn(\"DurableAgentRuntime.reconcileExpiredChildren\")(\n function* (\n ctx: AttemptAppendContext,\n parent: SubmissionSnapshot,\n ownershipToken: OwnershipToken,\n ) {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: parent.submissionId }),\n );\n\n const records = yield* readControl(parent.threadId, [parent.submissionId]);\n const runId = runIdForSubmission(parent.submissionId);\n const pending = yield* pendingToolBatchFor(records, runId);\n const knownIds = knownRecordIdsOf(records);\n const subagent = subagentRecordsOf(records, runId);\n\n for (const reservation of snapshot.childReservations) {\n const toolCallId = reservation.parentToolCallId;\n\n if (reservation.status !== \"reserved\" || subagent.joined.has(toolCallId)) continue;\n let started = subagent.started.get(toolCallId);\n const request = subagent.requested.get(toolCallId);\n\n if (\n started === undefined &&\n request === undefined &&\n reservation.childSubmissionId === undefined\n ) {\n yield* releaseOrphanReservation(reservation.reservationId);\n continue;\n }\n const call = pending?.calls.find((candidate) => candidate.id === toolCallId);\n\n if (\n pending === undefined ||\n call === undefined ||\n request === undefined ||\n subagent.preparedNames.get(toolCallId) !== call.name ||\n request.delegationId !== call.name ||\n reservation.parentSubmissionId !== parent.submissionId ||\n request.reservationId !== reservation.reservationId ||\n request.reservationDigest !== reservation.allocationDigest ||\n request.turn !== pending.turn ||\n request.turnId !== pending.turnId\n ) {\n return yield* LedgerError.make({\n operation: \"reconcileExpiredChildren\",\n message: `Tool Call ${toolCallId} has inconsistent canonical child request evidence`,\n });\n }\n if (started === undefined) {\n const resolution = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId: request.childThreadId,\n principal: decodePrincipalSync(request.childPrincipal),\n idempotencyKey: decodeIdempotencyKeySync(request.childIdempotencyKey),\n }),\n );\n\n if (resolution._tag === \"Indeterminate\") continue;\n if (resolution._tag === \"NotAdmitted\") {\n if (reservation.childSubmissionId !== undefined) {\n return yield* LedgerError.make({\n operation: \"reconcileExpiredChildren\",\n message: `Tool Call ${toolCallId} has an attachment but no admitted child`,\n });\n }\n yield* releaseOrphanReservation(reservation.reservationId);\n continue;\n }\n // Finish only the already-admitted child's materialization and readiness. A second\n // authoritative lookup must still never turn a stale observation into a new admission.\n const admission = yield* establishChildFromRequest(parent, request, false);\n\n if (admission._tag === \"indeterminate\") continue;\n started = SubagentStarted.make({\n runId,\n toolCallId,\n childThreadId: request.childThreadId,\n childSubmissionId: admission.childSubmissionId,\n childReceiptId: admission.receiptId,\n childRunId: runIdForSubmission(admission.childSubmissionId),\n });\n const startRecordId = subagentStartedRecordId(runId, toolCallId);\n const envelope = yield* makeEnvelope(startRecordId, started);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentStartedBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n knownIds.add(startRecordId);\n subagent.started.set(toolCallId, started);\n yield* hit(\"subagent:after-start-append\");\n }\n\n const child = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: started.childSubmissionId }),\n );\n\n if (\n Option.isNone(child) ||\n (reservation.childSubmissionId !== undefined &&\n reservation.childSubmissionId !== started.childSubmissionId) ||\n request.childThreadId !== started.childThreadId ||\n started.childThreadId !== child.value.threadId ||\n started.childReceiptId !== child.value.receiptId ||\n started.childRunId !== runIdForSubmission(started.childSubmissionId)\n ) {\n return yield* LedgerError.make({\n operation: \"reconcileExpiredChildren\",\n message: `Tool Call ${call.id} has inconsistent canonical child attachment evidence`,\n });\n }\n yield* ledger\n .attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: reservation.reservationId,\n ownershipToken,\n childSubmissionId: started.childSubmissionId,\n }),\n )\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"attachChildToReservation\"),\n ),\n );\n if (child.value.state !== \"settled\") continue;\n yield* joinSettledChildForClosedParent(\n ctx,\n parent,\n knownIds,\n subagent,\n reservation,\n started.toolCallId,\n started.childSubmissionId,\n \"duration\",\n );\n }\n },\n );\n\n /** Where the request-abort-and-join pass over attached children ended (spec §13.1). */\n type ChildAbortDisposition = \"clear\" | \"waiting\" | \"blocked\";\n\n /**\n * Request-abort-and-join over every attached child of an aborting parent (spec §13.1,\n * SUB-022): joined-but-unreleased reservations finish their idempotent release; settled\n * children join coordinator-side; nonterminal children receive the ONE idempotent durable\n * abort command (the recorded `AbortIntent` row IS the propagation marker, DUR-012) and the\n * parent suspends `waitingForChild` for their joins; an admitted-but-unlinked child is\n * reattached first; a provably-childless reservation releases exactly once; an indeterminate\n * admission blocks honestly — never a second admission, never a fabricated settlement.\n */\n const abortAttachedChildren = Effect.fn(\"DurableAgentRuntime.abortAttachedChildren\")(function* (\n ctx: AttemptAppendContext,\n parent: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n knownIds: Set<string>,\n ): Effect.fn.Return<ChildAbortDisposition, DurableWorkerFailure> {\n const submissionId = parent.submissionId;\n const runId = runIdForSubmission(submissionId);\n\n while (true) {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n if (snapshot.childReservations.length === 0) return \"clear\";\n const records = yield* readControl(parent.threadId, [parent.submissionId]);\n\n for (const envelope of records) knownIds.add(envelope.record.recordId);\n const subagent = subagentRecordsOf(records, runId);\n const waiting: Array<WaitingChild> = [];\n let blocked = false;\n\n for (const reservation of snapshot.childReservations) {\n if (reservation.status === \"released\") continue;\n const toolCallId = reservation.parentToolCallId;\n const joined = subagent.joined.get(toolCallId);\n\n if (joined !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, joined.finalAccounting);\n continue;\n }\n if (reservation.status === \"releasePending\") {\n // The decision is already frozen (join or orphan): finish the idempotent release —\n // NEVER re-freeze, a divergent second decision would conflict.\n yield* applyReservationRelease(\n reservation.reservationId,\n reservation.accounting ?? ORPHAN_ZERO_CONSUMED_ACCOUNTING,\n );\n continue;\n }\n const request = subagent.requested.get(toolCallId);\n\n let childSubmissionId =\n subagent.started.get(toolCallId)?.childSubmissionId ?? reservation.childSubmissionId;\n\n if (childSubmissionId === undefined) {\n if (request === undefined) {\n // Reservation without a canonical request under abort: provably childless —\n // release the unused allocation exactly once (spec §13/§14).\n yield* releaseOrphanReservation(reservation.reservationId);\n continue;\n }\n const admission = yield* establishChildFromRequest(parent, request);\n\n if (admission._tag === \"indeterminate\") {\n // A child may exist: never release, settle, or re-admit until the authoritative\n // owner answers (SUB-031).\n blocked = true;\n continue;\n }\n childSubmissionId = admission.childSubmissionId;\n }\n\n const child = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: childSubmissionId }),\n );\n\n if (Option.isNone(child)) {\n return yield* LedgerError.make({\n operation: \"abortAttachedChildren\",\n message: `Attached child ${childSubmissionId} is unknown to the ledger`,\n });\n }\n if (child.value.state === \"settled\") {\n yield* joinSettledChildForClosedParent(\n ctx,\n parent,\n knownIds,\n subagent,\n reservation,\n toolCallId,\n childSubmissionId,\n \"aborted\",\n );\n continue;\n }\n yield* ledger\n .requestAbort(\n AbortCommand.make({\n submissionId: childSubmissionId,\n author: SUBAGENT_ABORT_AUTHOR,\n reason: SUBAGENT_ABORT_REASON,\n }),\n )\n .pipe(\n // The child settled concurrently: the one winning Settlement joins on the next\n // pass of this loop (spec §13 \"child terminal races abort\").\n Effect.catchTags({\n SettlementConflict: () => Effect.void,\n JoinedToHost: conflictToLedgerError(\"abortAttachedChildren\"),\n }),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-child-abort-intent\");\n yield* wake.notify(child.value.threadId);\n waiting.push(WaitingChild.make({ toolCallId, childSubmissionId }));\n }\n if (blocked) return \"blocked\";\n const first = waiting[0];\n\n if (first === undefined) return \"clear\";\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId,\n ownershipToken,\n reason: WaitingForChildSuspension.make({ children: [first, ...waiting.slice(1)] }),\n }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (suspension === \"suspended\") return \"waiting\";\n // Every listed child settled before the suspend committed: loop to join the winners.\n }\n });\n\n const failureOutcome = (error: unknown): Effect.Effect<AttemptOutcome> =>\n Schema.decodeEffect(SettlementFailureDiagnostic)({\n errorTag: errorTagOf(error).slice(0, 256) || \"UnknownError\",\n message: errorMessageOf(error).slice(0, MAX_FAILURE_MESSAGE_LENGTH),\n }).pipe(\n // The exact diagnostic Schema admits no raw Cause, stack, or provider payload.\n Effect.orDie,\n Effect.map((result) => ({\n _tag: \"failed\" as const,\n result,\n // A hard-rail policy failure keeps its typed limit durable (RUN-011):\n // the bounded message stays diagnostic, never the dimension authority.\n ...Option.match(decodePolicyFailureSafely(error), {\n onNone: () => ({}),\n onSome: ({ limit }) => ({ policyLimit: limit }),\n }),\n })),\n );\n\n const halt = <A, R>(\n effect: Effect.Effect<A, DurableWorkerFailure, R>,\n ): Effect.Effect<A, CoordinatorHalt, R> =>\n Effect.mapError(effect, (failure) => new CoordinatorHalt(failure));\n\n /**\n * Superseding-Attempt interruption audit (durability §9): appended at most once per superseded\n * fence epoch before this Attempt re-invokes the model. It deliberately over-approximates — a\n * prior ownership period that ended cleanly between commits still gets one — because durable\n * state cannot distinguish a mid-stream provider loss from a crash between boundaries, and the\n * honest direction is to record that duplicate provider cost is possible, never to hide it.\n */\n const appendInterruptedAudit = Effect.fn(\"DurableAgentRuntime.appendInterruptedAudit\")(function* (\n ctx: AttemptAppendContext,\n runId: ReturnType<typeof runIdForSubmission>,\n lineage: AttemptLineage,\n knownIds: Set<string>,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const recordId = modelResponseInterruptedRecordId(runId, lineage.supersededEpoch);\n\n if (knownIds.has(recordId)) return;\n\n const envelope = yield* makeEnvelope(\n recordId,\n ModelResponseInterrupted.make({\n runId,\n supersededEpoch: lineage.supersededEpoch,\n attemptId: lineage.attemptId,\n reason:\n \"A prior ownership period ended without a canonical settlement; any in-flight model response was lost and the model may be re-invoked (duplicate provider cost is observable)\",\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: modelResponseInterruptedBatchId(runId, lineage.supersededEpoch),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(recordId);\n });\n\n /**\n * Plan step 3 (+6): drive `AgentRuntime.stream` with history rebuilt by the run journal, commit\n * each Turn canonically through the fenced append, watch for durable abort intent, and keep the\n * ownership lease renewed. Engine Run failures settle `failed`; coordinator failures abort the\n * Attempt cleanly with the obligation still owed.\n *\n * Phase 5 commit shape (plan §2.1): a tool-declaring Turn splits into a RESPONSE batch\n * (committed by the engine's `commitResponse` hook at the finish part — pending steering plus\n * the response messages, creating the durability §15 provably-safe window), the durable\n * approval preflight (§2.6 — recorded decisions replay deterministically, unresolved requests\n * become canonical and suspend the Attempt), an optional PREPARED batch (before any handler\n * starts), and a RESULTS batch at the next TurnStarted/RunCompleted/RunFailed seam. A completed\n * no-tool Turn atomically adds its `RunCompleted` marker to the P4 single-batch shape. When the\n * journal ends mid-batch,\n * `RunOptions.resume` replays the declared batch without re-invoking the model (§2.4).\n */\n const runModel = <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined =\n undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n canonical: Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>,\n canonicalThrough: CanonicalSequence,\n journalSeed: JournalCheckpointSeed | undefined,\n journalMetadata: JournalMetadata | undefined,\n lineage: AttemptLineage,\n approvalDecisions: ReadonlyArray<ApprovalDecisionIntent>,\n runTiming: { readonly startedAt: DateTime.Utc; readonly deadline: DateTime.Utc },\n yieldAfter?: DateTime.Utc,\n ) =>\n Effect.gen(function* () {\n const submissionId = submission.submissionId;\n const runId = runIdForSubmission(submissionId);\n const boundaries: Array<JournalBoundary> = [];\n\n const journal = yield* projectRunJournalStream(\n canonical,\n runId,\n (boundary) => boundaries.push(boundary),\n journalSeed,\n journalMetadata,\n );\n\n const saveRecoveryCheckpoint = Effect.fn(\"DurableAgentRuntime.saveRecoveryCheckpoint\")(\n function* (compactionId: RecordId): Effect.fn.Return<void, DurableWorkerFailure> {\n if (store.recoveryCheckpoints === undefined) return;\n const tail = yield* Ref.get(ctx.tailRef);\n\n const source = Stream.concat(\n canonical,\n canonicalRange(ctx.threadId, tail.sequence, canonicalThrough),\n );\n\n let compaction: CanonicalRecordEnvelope | undefined;\n let latestResponse: CanonicalSequence | undefined;\n let firstSequence = journalSeed?.firstSequence;\n const orchestrationCalls = new Set<string>();\n\n yield* Stream.runForEach(source, (entry) =>\n Effect.sync(() => {\n const payload = entry.record.payload;\n\n if (entry.record.recordId === compactionId) compaction = entry;\n if (!(\"runId\" in payload) || payload.runId !== runId) return;\n firstSequence ??= entry.sequence;\n if (payload._tag === \"ModelResponseRecorded\") latestResponse = entry.sequence;\n if (\n payload._tag === \"ToolCallPrepared\" &&\n (payload.executionKind === \"delegation\" ||\n payload.executionKind === \"orchestration\")\n )\n orchestrationCalls.add(payload.toolCallId);\n }),\n );\n if (\n compaction === undefined ||\n compaction.record.payload._tag !== \"CompactionCreated\" ||\n compaction.record.payload.kind === \"clear-tool-results\"\n )\n return;\n const replacement = compaction;\n const covered = compaction.record.payload.coversThrough;\n\n const retiredThrough = decodeCanonicalSequence(\n Math.min(covered, (latestResponse ?? covered + 1) - 1),\n );\n\n if (retiredThrough <= (journalSeed?.throughSequence ?? 0)) return;\n\n const retired = yield* projectRunJournalStream(\n source.pipe(Stream.filter((entry) => entry.sequence <= retiredThrough)),\n runId,\n undefined,\n journalSeed,\n );\n\n const detailed = yield* summarizeModelUsage(\n retired.usage.modelUsage,\n retired.usage.summarizedModelUsage,\n ).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Retired usage exceeds accounting bounds\", cause }),\n ),\n );\n\n const protectedContext = retired.protectedContext ?? journal.protectedContext;\n // The first native rollover may precede this Attempt's first journal snapshot response.\n const current = yield* projectRunJournalStream(source, runId, undefined, journalSeed);\n const protectedMessages = protectedContext ?? current.protectedContext;\n\n const encodedContext =\n protectedMessages === undefined\n ? undefined\n : yield* Schema.encodeEffect(Prompt.Prompt)(protectedMessages).pipe(\n Effect.flatMap(decodePersisted),\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Cannot checkpoint protected context\", cause }),\n ),\n );\n\n let frontier = journalSeed?.frontier;\n\n const retained = yield* Stream.runCollect(\n source.pipe(\n Stream.filter((entry) => {\n if (entry.sequence > retiredThrough) return true;\n const payload = entry.record.payload;\n\n if (payload._tag === \"ModelResponseRecorded\" || payload._tag === \"ToolCallSettled\")\n frontier = { sequence: entry.sequence, tag: payload._tag };\n if (\n payload._tag === \"ThreadCreated\" ||\n payload._tag === \"SubagentLineageRecorded\" ||\n payload._tag === \"WorkerOriginRecorded\"\n )\n return true;\n if (!(\"runId\" in payload) || payload.runId !== runId) return false;\n if (\"toolCallId\" in payload && orchestrationCalls.has(payload.toolCallId))\n return true;\n switch (payload._tag) {\n case \"ModelResponseRecorded\":\n case \"ToolCallPrepared\":\n case \"ToolCallSettled\":\n case \"ToolCallUnknown\":\n case \"ToolCallResolved\":\n case \"ToolApprovalRequested\":\n case \"ToolApprovalDecided\":\n case \"CompactionCreated\":\n case \"RunPolicyUsageReserved\":\n return false;\n default:\n return true;\n }\n }),\n ),\n );\n\n const ids = new Set<SubmissionId>([submissionId]);\n\n for (const {\n record: { payload },\n } of retained)\n if (payload._tag === \"UserInputRecorded\" && payload.submissionId !== undefined)\n ids.add(payload.submissionId);\n\n const validated = yield* Effect.try({\n try: () =>\n RecoveryCheckpointState.make({\n schemaVersion: 1,\n policyAccountingVersion: 1,\n submissionId,\n submissionIds: [...ids],\n seed: JournalCheckpointSeed.make({\n runId,\n throughSequence: retiredThrough,\n ...(firstSequence === undefined ? {} : { firstSequence }),\n committedTurns: retired.committedTurns,\n ...(retired.toolSelection === undefined\n ? {}\n : { toolSelection: retired.toolSelection }),\n policyUsage: retired.policyUsage,\n modelCalls: retired.usage.modelCalls,\n unobservedModelCalls: retired.usage.unobservedModelCalls ?? 0,\n inputTokens: retired.usage.inputTokens,\n outputTokens: retired.usage.outputTokens,\n lastInputTokens: retired.usage.lastInputTokens,\n lastOutputTokens: retired.usage.lastOutputTokens,\n costMicrousd: retired.usage.costMicrousd,\n summarizedModelUsage: detailed,\n ...(current.contextWindowId === undefined\n ? {}\n : { contextWindowId: current.contextWindowId }),\n ...(frontier === undefined ? {} : { frontier }),\n ...(encodedContext === undefined ? {} : { protectedContext: encodedContext }),\n compaction: replacement,\n }),\n records: retained,\n }),\n catch: (cause) =>\n RunJournalError.make({ message: \"Recovery checkpoint exceeds cache bounds\", cause }),\n }).pipe(Effect.option);\n\n // Capacity is a cache eligibility limit, never a reason to truncate canonical evidence.\n if (Option.isNone(validated)) return;\n\n // Removing proof must not make a previously invalid historical compaction valid.\n // Check the disposable projection against the canonical source before publishing it.\n const replayed = yield* projectRunJournalStream(\n Stream.fromIterable(retained),\n runId,\n undefined,\n validated.value.seed,\n ).pipe(Effect.option);\n\n if (Option.isNone(replayed)) return;\n const candidate = replayed.value;\n const equalPrompt = Schema.toEquivalence(Prompt.Prompt);\n\n if (\n !equalPrompt(current.prompt, candidate.prompt) ||\n !equalPrompt(current.historyBefore, candidate.historyBefore) ||\n !Schema.toEquivalence(Schema.optional(Prompt.Prompt))(\n current.protectedContext,\n candidate.protectedContext,\n ) ||\n current.contextWindowId !== candidate.contextWindowId ||\n current.pendingContextToolCallId !== candidate.pendingContextToolCallId ||\n !Schema.toEquivalence(Schema.optional(Selection))(\n current.toolSelection,\n candidate.toolSelection,\n ) ||\n current.committedTurns !== candidate.committedTurns ||\n !Schema.toEquivalence(RunPolicyUsage)(current.policyUsage, candidate.policyUsage) ||\n (\n [\n \"modelCalls\",\n \"inputTokens\",\n \"outputTokens\",\n \"lastInputTokens\",\n \"lastOutputTokens\",\n \"costMicrousd\",\n ] as const\n ).some((field) => current.usage[field] !== candidate.usage[field]) ||\n (current.usage.unobservedModelCalls ?? 0) !==\n (candidate.usage.unobservedModelCalls ?? 0)\n )\n return;\n\n const summaries = yield* Effect.forEach([current, candidate], (projection) =>\n summarizeModelUsage(projection.usage.modelUsage, projection.usage.summarizedModelUsage),\n ).pipe(Effect.option);\n\n if (\n Option.isNone(summaries) ||\n summaries.value[0] === undefined ||\n summaries.value[1] === undefined ||\n !Schema.toEquivalence(RunUsageSummary)(summaries.value[0], summaries.value[1])\n )\n return;\n\n const encoded = yield* Schema.encodeEffect(RecoveryCheckpointState)(validated.value).pipe(\n Effect.option,\n );\n\n if (Option.isNone(encoded)) return;\n const digest = yield* withCrypto(digestJson(encoded.value));\n\n // JSON serialization duplicates shared in-memory references without weakening the\n // persisted depth/node/byte guard (which rejects cyclic/shared object graphs).\n const contents = yield* Schema.encodeEffect(\n Schema.fromJsonString(RecoveryCheckpointContents),\n )(RecoveryCheckpointContents.make({ state: validated.value, digest })).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(Schema.fromJsonString(PersistedJson))),\n Effect.option,\n );\n\n if (Option.isNone(contents)) return;\n\n const checkpoint = ThreadCheckpoint.make({\n schemaVersion: 1,\n threadId: ctx.threadId,\n throughSequence: tail.sequence,\n tailDigest: tail.digest,\n engineVersion: RECOVERY_ENGINE_VERSION,\n agentDefinitionDigest: submission.agentDigests.agent,\n modelDigest: submission.agentDigests.model,\n toolDigest: submission.agentDigests.tools,\n state: contents.value,\n createdAt: replacement.record.createdAt,\n });\n\n yield* hit(\"checkpoint:before-save\");\n yield* store.recoveryCheckpoints\n .save(\n SaveRecoveryCheckpointRequest.make({ checkpoint, producerEpoch: ctx.producerEpoch }),\n )\n .pipe(Effect.catchTag(\"CheckpointRejected\", () => Effect.void));\n yield* hit(\"checkpoint:after-save\");\n },\n );\n\n const childLineage = records.find(\n ({ record }) => record.recordId === subagentLineageRecordId(submission.threadId),\n )?.record.payload;\n\n const inheritedGrant =\n submission.workerAdmission?.origin.grant ??\n (childLineage?._tag === \"SubagentLineageRecorded\" ? childLineage.grant : undefined);\n\n const delegationDepth =\n submission.workerAdmission?.origin.depth ??\n (childLineage?._tag === \"SubagentLineageRecorded\" ? childLineage.parentLink.depth : 0);\n\n // worker-run origins supply a frozen ceiling, not usage credit. Only this native\n // host Run's journal owns usage; joined inputs and replacement Attempts keep its RunId.\n const inheritedBudget =\n submission.workerAdmission?.origin.budget ??\n (childLineage?._tag === \"SubagentLineageRecorded\" ? childLineage.budget : undefined);\n\n if (\n submission.parentLinkage !== undefined &&\n (childLineage?._tag !== \"SubagentLineageRecorded\" ||\n childLineage.parentSubmissionId !== submission.parentLinkage.parentSubmissionId ||\n childLineage.parentLink.parentToolCallId !== submission.parentLinkage.parentToolCallId ||\n !definitionDigestsEqual(childLineage.childDefinitionDigests, submission.agentDigests) ||\n childLineage.childInputDigest !== submission.inputDigest)\n ) {\n return yield* RunJournalError.make({\n message: \"The child Run has no matching canonical lineage and execution bounds\",\n });\n }\n\n const pending = yield* pendingToolBatchFor(\n records,\n runId,\n agent.definition.completionFromTools?.map((declaration) => declaration.tool),\n );\n\n const resumeProjection =\n pending === undefined\n ? journal\n : yield* projectRunJournalStream(\n withoutPendingBatch(canonical, pending, runId),\n runId,\n undefined,\n journalSeed,\n );\n\n const tools: Record<string, Tool.Any> = agent.definition.toolkit.tools;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag !== \"ToolCallPrepared\" || payload.runId !== runId) continue;\n const tool = tools[payload.toolName];\n\n const kind = tool === undefined ? \"ordinary\" : getToolExecutionKind(tool.annotations);\n\n if (tool === undefined || (payload.executionKind ?? \"ordinary\") !== kind) {\n return yield* RunJournalError.make({\n message: `Prepared Tool ${payload.toolCallId} classification conflicts with the resolved binding`,\n });\n }\n }\n\n const knownIds = knownRecordIdsOf(records);\n const stepOutputs = new Map<string, PersistedJson>();\n\n // Derive replay identity from the recorded tuple, never from its historical ID format.\n // This preserves committed Step outputs when reading legacy colon-separated record IDs.\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ToolStepSettled\" && payload.runId === runId) {\n stepOutputs.set(\n toolStepSettledRecordId(runId, payload.toolCallId, payload.stepName),\n payload.output,\n );\n }\n }\n // Recorded approval authority (plan §2.6): canonical `ToolApprovalDecided` records are the\n // deterministic decision source across Attempts; durable `resolveApproval` intents become\n // canonical before they are honored; requested Turns pin the Turn-shared approval batch\n // identity so a later append never contradicts a committed batch.\n const canonicalApprovalDecisions = new Map<string, ApprovalDecision>();\n const approvalRequestedTurns = new Set<number>();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ToolApprovalDecided\" && payload.runId === runId) {\n canonicalApprovalDecisions.set(payload.toolCallId, payload.decision);\n } else if (payload._tag === \"ToolApprovalRequested\" && payload.runId === runId) {\n approvalRequestedTurns.add(payload.turn);\n }\n }\n const approvalIntents = new Map<string, ApprovalDecisionIntent>();\n\n for (const intent of approvalDecisions) {\n approvalIntents.set(intent.toolCallId, intent);\n }\n // Joined queued input (plan §2.5): canonical facts for the prompt-coverage rule, computed\n // once per Attempt from the same strongly consistent read as the journal. A joined\n // `input:{sid}` record is prompt-covered iff a host `ModelResponseRecorded` committed\n // after it — commit 1 of every later Turn carries all pending steering (D8 extension), so\n // covered inputs are already inside the journal prompt and must never re-deliver.\n const joinedInputEnvelopes = new Map<string, CanonicalRecordEnvelope>();\n let lastHostResponseSequence: CanonicalSequence | undefined;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (\n payload._tag === \"UserInputRecorded\" &&\n payload.runId === runId &&\n payload.submissionId !== undefined &&\n payload.submissionId !== submissionId\n ) {\n joinedInputEnvelopes.set(payload.submissionId, envelope);\n } else if (payload._tag === \"ModelResponseRecorded\" && payload.runId === runId) {\n if (\n lastHostResponseSequence === undefined ||\n envelope.sequence > lastHostResponseSequence\n ) {\n lastHostResponseSequence = envelope.sequence;\n }\n }\n }\n\n // RUN-023: per-Turn usage staged by the engine's `noteTurnUsage` for the\n // Turn's canonical response record (keyed by CANONICAL turn number).\n const stagedToolExposure = new Map<number, Snapshot>();\n const stagedToolSelections = new Map<string, Selection>();\n\n const stagedUsage = new Map<\n number,\n {\n readonly inputTokens: number;\n readonly outputTokens: number;\n readonly costMicrousd: number;\n readonly modelUsage: ReadonlyArray<ModelCallUsage>;\n }\n >();\n\n // Staging also backs the cumulative summary; keep it intact and track canonical prefixes.\n const committedUsageLengths = new Map<number, number>();\n\n const recordCommittedUsage = (batch: CanonicalBatch) => {\n for (const record of batch.records) {\n if (record.payload._tag !== \"ModelResponseRecorded\") continue;\n const payload = record.payload;\n\n committedUsageLengths.set(\n payload.turn,\n Math.max(committedUsageLengths.get(payload.turn) ?? 0, payload.modelUsage?.length ?? 0),\n );\n }\n };\n\n const uncommittedModelUsage = () =>\n [...stagedUsage.entries()].flatMap(([turn, usage]) =>\n usage.modelUsage.slice(committedUsageLengths.get(turn) ?? 0),\n );\n\n // Like stagedUsage, these counts remain relative to the initial journal snapshot.\n const stagedUnobservedCalls = new Map<number, number>();\n\n let interruptedUsage = records.some(\n ({ record }) =>\n record.payload._tag === \"ModelResponseInterrupted\" && record.payload.runId === runId,\n );\n\n const checkedUsageTotal = (\n field: string,\n value: number,\n ): Effect.Effect<number, RunJournalError> =>\n Schema.decodeEffect(Schema.Natural)(value).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run usage summary exceeds safe-integer bounds at ${field}`,\n cause,\n }),\n ),\n );\n\n const addUsageTotal = (field: string, left: number, right: number) =>\n checkedUsageTotal(field, left + right);\n\n const subtractUsageTotal = (field: string, left: number, right: number) =>\n checkedUsageTotal(field, left - right);\n\n const currentUsageSummary = (): Effect.Effect<RunUsageSummary, RunJournalError> =>\n Effect.gen(function* () {\n const stagedCalls = [...stagedUsage.values()].flatMap((usage) => usage.modelUsage);\n let unobservedModelCalls = journal.usage.unobservedModelCalls ?? 0;\n\n for (const count of stagedUnobservedCalls.values()) {\n unobservedModelCalls = yield* addUsageTotal(\n \"unobservedModelCalls\",\n unobservedModelCalls,\n count,\n );\n }\n const detailedCalls = [...journal.usage.modelUsage, ...stagedCalls];\n\n const detailed = yield* summarizeModelUsage(\n detailedCalls,\n journal.usage.summarizedModelUsage,\n ).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"Run detailed usage exceeds safe-integer accounting bounds\",\n cause,\n }),\n ),\n );\n\n let inputTokens = journal.usage.inputTokens;\n let outputTokens = journal.usage.outputTokens;\n let costMicrousd = journal.usage.costMicrousd;\n\n for (const usage of stagedUsage.values()) {\n inputTokens = yield* addUsageTotal(\"inputTokens\", inputTokens, usage.inputTokens);\n outputTokens = yield* addUsageTotal(\"outputTokens\", outputTokens, usage.outputTokens);\n costMicrousd = yield* addUsageTotal(\"costMicrousd\", costMicrousd, usage.costMicrousd);\n }\n\n const modelCalls = yield* addUsageTotal(\n \"modelCalls\",\n journal.usage.modelCalls,\n stagedCalls.length,\n );\n\n const legacyCalls = yield* subtractUsageTotal(\n \"legacy.modelCalls\",\n modelCalls,\n detailed.modelCalls,\n );\n\n const legacyInput = yield* subtractUsageTotal(\n \"legacy.inputTokens\",\n inputTokens,\n detailed.inputTokens.total,\n );\n\n const legacyOutput = yield* subtractUsageTotal(\n \"legacy.outputTokens\",\n outputTokens,\n detailed.outputTokens.total,\n );\n\n const legacyCost = yield* subtractUsageTotal(\n \"legacy.costMicrousd\",\n costMicrousd,\n detailed.costMicrousd,\n );\n\n if (legacyCalls === 0 && (legacyInput !== 0 || legacyOutput !== 0 || legacyCost !== 0)) {\n return yield* RunJournalError.make({\n message: \"Run aggregate usage has legacy totals without a legacy model call\",\n });\n }\n const byModel = [...detailed.byModel];\n\n if (legacyCalls > 0) {\n const existingIndex = byModel.findIndex(\n (group) =>\n group.provider === \"unknown\" &&\n group.model === \"legacy-record\" &&\n group.responseModel === undefined &&\n group.serviceTier === undefined &&\n group.pricingVersion === undefined,\n );\n\n const existing = existingIndex < 0 ? undefined : byModel[existingIndex];\n\n const legacyGroup = ModelUsageGroup.make({\n provider: \"unknown\",\n model: \"legacy-record\",\n modelCalls: yield* addUsageTotal(\n \"byModel.modelCalls\",\n existing?.modelCalls ?? 0,\n legacyCalls,\n ),\n inputTokens: InputTokenUsage.make({\n total: yield* addUsageTotal(\n \"byModel.inputTokens.total\",\n existing?.inputTokens.total ?? 0,\n legacyInput,\n ),\n uncached: yield* addUsageTotal(\n \"byModel.inputTokens.uncached\",\n existing?.inputTokens.uncached ?? 0,\n legacyInput,\n ),\n cacheRead: existing?.inputTokens.cacheRead ?? 0,\n cacheWrite: existing?.inputTokens.cacheWrite ?? 0,\n }),\n outputTokens: OutputTokenUsage.make({\n total: yield* addUsageTotal(\n \"byModel.outputTokens.total\",\n existing?.outputTokens.total ?? 0,\n legacyOutput,\n ),\n text: yield* addUsageTotal(\n \"byModel.outputTokens.text\",\n existing?.outputTokens.text ?? 0,\n legacyOutput,\n ),\n reasoning: existing?.outputTokens.reasoning ?? 0,\n }),\n costMicrousd: yield* addUsageTotal(\n \"byModel.costMicrousd\",\n existing?.costMicrousd ?? 0,\n legacyCost,\n ),\n });\n\n if (existingIndex < 0) byModel.push(legacyGroup);\n else byModel[existingIndex] = legacyGroup;\n }\n\n const uncached = yield* addUsageTotal(\n \"inputTokens.uncached\",\n detailed.inputTokens.uncached,\n legacyInput,\n );\n\n const text = yield* addUsageTotal(\n \"outputTokens.text\",\n detailed.outputTokens.text,\n legacyOutput,\n );\n\n return RunUsageSummary.make({\n modelCalls,\n inputTokens: InputTokenUsage.make({\n total: inputTokens,\n // Legacy aggregate inputs are conservatively classified as uncached.\n uncached,\n cacheRead: detailed.inputTokens.cacheRead,\n cacheWrite: detailed.inputTokens.cacheWrite,\n }),\n outputTokens: OutputTokenUsage.make({\n total: outputTokens,\n text,\n reasoning: detailed.outputTokens.reasoning,\n }),\n costMicrousd,\n byModel,\n unobservedModelCalls,\n usageStatus:\n legacyCalls > 0 || unobservedModelCalls > 0 || interruptedUsage\n ? detailed.usageStatus === \"unknown\"\n ? \"unknown\"\n : \"partial\"\n : detailed.usageStatus,\n pricingStatus:\n legacyCalls > 0 || unobservedModelCalls > 0 || interruptedUsage\n ? detailed.pricingStatus === \"unknown\"\n ? \"unknown\"\n : \"partial\"\n : detailed.pricingStatus,\n });\n });\n\n const recordedCompletion = records.find(\n (envelope) => envelope.record.recordId === runCompletedRecordId(runId),\n )?.record.payload;\n\n if (recordedCompletion !== undefined) {\n if (recordedCompletion._tag !== \"RunCompleted\" || recordedCompletion.runId !== runId) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has an invalid terminal completion marker`,\n });\n }\n\n const response = [...records]\n .reverse()\n .find(\n (envelope) =>\n envelope.record.payload._tag === \"ModelResponseRecorded\" &&\n envelope.record.payload.runId === runId,\n )?.record.payload;\n\n if (response?._tag !== \"ModelResponseRecorded\") {\n return yield* RunJournalError.make({\n message: `Run ${runId} has a terminal completion marker without a response`,\n });\n }\n const declared = yield* declaredToolCalls(response.messages);\n const calls = declared.application;\n\n let expectedOutput: {\n readonly encoded: Schema.Json;\n readonly decoded: OutputSchema[\"Type\"];\n };\n\n if (calls.length > 0) {\n const completion = agent.definition.completion;\n const call = calls[0];\n\n const actionCompletion = agent.definition.completionFromTools?.find(\n (declaration) => declaration.tool === call?.name,\n );\n\n const settled =\n call === undefined\n ? undefined\n : records.find(\n (envelope) =>\n envelope.record.payload._tag === \"ToolCallSettled\" &&\n envelope.record.payload.runId === runId &&\n envelope.record.payload.toolCallId === call.id,\n )?.record.payload;\n\n if (\n calls.length !== 1 ||\n call === undefined ||\n (call.name !== completion?.tool && actionCompletion === undefined) ||\n settled?._tag !== \"ToolCallSettled\" ||\n settled.toolName !== call.name ||\n settled.isFailure\n ) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has a terminal completion marker without one successful declared completion Tool result`,\n });\n }\n\n const projected = yield* (\n actionCompletion !== undefined\n ? AgentRuntime.projectCompletionFromToolOutput(\n agent,\n actionCompletion,\n call.params,\n settled.result,\n )\n : completion !== undefined\n ? Effect.map(\n AgentRuntime.projectCompletionOutput(\n agent,\n completion,\n call.params,\n settled.result,\n ),\n Option.some,\n )\n : Effect.succeed(Option.none())\n ).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} completion Tool output failed recovery projection`,\n cause,\n }),\n ),\n );\n\n if (Option.isNone(projected)) {\n return yield* RunJournalError.make({\n message: `Run ${runId} completion Tool declined its recorded terminal output`,\n });\n }\n expectedOutput = projected.value;\n } else {\n const responseText = yield* terminalAssistantText(response.messages);\n\n expectedOutput = yield* AgentRuntime.decodeFinalOutput(agent, responseText).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} final response output failed recovery decoding`,\n cause,\n }),\n ),\n );\n }\n\n const boundedExpectedOutput = yield* decodePersisted(expectedOutput.encoded).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} reconstructed output exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const [expectedOutputDigest, recordedOutputDigest] = yield* Effect.all([\n withCrypto(digestJson(boundedExpectedOutput)),\n withCrypto(digestJson(recordedCompletion.output)),\n ]).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} completion output comparison failed`,\n cause,\n }),\n ),\n );\n\n if (expectedOutputDigest !== recordedOutputDigest) {\n return yield* RunJournalError.make({\n message: `Run ${runId} terminal completion output disagrees with its canonical response or Tool result`,\n });\n }\n\n const expectedRunDisposition =\n recordedCompletion.finishReason === \"budget-exhausted\"\n ? undefined\n : yield* AgentRuntime.encodeRunDisposition(agent, expectedOutput.decoded).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} run disposition failed recovery projection`,\n cause,\n }),\n ),\n );\n\n if (\n (expectedRunDisposition === undefined) !==\n (recordedCompletion.runDisposition === undefined)\n ) {\n return yield* RunJournalError.make({\n message: `Run ${runId} terminal run disposition disagrees with its reconstructed output`,\n });\n }\n if (\n expectedRunDisposition !== undefined &&\n recordedCompletion.runDisposition !== undefined\n ) {\n const boundedExpectedRunDisposition = yield* decodePersisted(expectedRunDisposition).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} reconstructed run disposition exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const [expectedRunDispositionDigest, recordedRunDispositionDigest] = yield* Effect.all([\n withCrypto(digestJson(boundedExpectedRunDisposition)),\n withCrypto(digestJson(recordedCompletion.runDisposition)),\n ]).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} run disposition comparison failed`,\n cause,\n }),\n ),\n );\n\n if (expectedRunDispositionDigest !== recordedRunDispositionDigest) {\n return yield* RunJournalError.make({\n message: `Run ${runId} terminal run disposition disagrees with its reconstructed output`,\n });\n }\n }\n\n return {\n _tag: \"completed\" as const,\n result: recordedCompletion.output,\n ...(recordedCompletion.runDisposition === undefined\n ? {}\n : { runDisposition: recordedCompletion.runDisposition }),\n ...(recordedCompletion.finishReason === undefined\n ? {}\n : { finishReason: recordedCompletion.finishReason }),\n ...(recordedCompletion.exhausted === undefined\n ? {}\n : { exhausted: recordedCompletion.exhausted }),\n usageSummary: yield* currentUsageSummary(),\n };\n }\n // Summaries cover only prior Runs. Pruning and rollover also map fully settled\n // current-Run records and preserves the canonical instruction/input block during replay.\n let ownerFirstSequence: CanonicalSequence | undefined;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (\"runId\" in payload && payload.runId === runId) {\n ownerFirstSequence = envelope.sequence;\n break;\n }\n }\n /** Pre-existing joins of this host Run, loaded lazily at the first drain seam. */\n let joinBacklog: ReadonlyArray<JoinSnapshot> | undefined;\n /** Joined inputs already handed to the engine during THIS Attempt (never re-deliver). */\n const deliveredJoinInputs = new Set<string>();\n // Canonical encoded parameters per declared call, for the approval request digest: seeded\n // by `commitResponse` (which the engine invokes before approval preflight) and by the\n // resumed batch's declared calls.\n const encodedParamsByCallId = new Map<string, unknown>();\n // Declared Tool name per call: the subagent join/sibling-settle appends rebuild exact\n // `ToolCallSettled` records outside the engine's results commit, so the declared name must\n // be recoverable per call id (seeded from canonical prepared records, the resumed batch,\n // and every `commitResponse`).\n const declaredNamesByCallId = new Map<string, string>();\n // Canonical subagent lifecycle state of this Run (SUB-016): seeded from canonical records,\n // advanced by the establish/join hook closures below, and consulted on every replay so an\n // identical establishment converges on the one existing child.\n const subagentState = subagentRecordsOf(records, runId);\n\n for (const [callId, name] of subagentState.preparedNames) {\n declaredNamesByCallId.set(callId, name);\n }\n if (pending !== undefined) {\n for (const call of pending.calls) {\n encodedParamsByCallId.set(call.id, call.params);\n declaredNamesByCallId.set(call.id, call.name);\n }\n }\n // Task #12 (WP1 `resume.leadingMessages`): the pending canonical response's messages\n // BEFORE its first assistant message — Turn-1 evaluated instructions + input, or steering\n // committed inside the pending record — re-enter official history through the engine so\n // the resumed live model context does not silently drop them.\n let resumeLeadingMessages: Prompt.Prompt | undefined;\n let resumeResponseMessages: Prompt.Prompt | undefined;\n\n if (pending !== undefined) {\n const pendingMessages = yield* decodePrompt(pending.messages).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message:\n \"Pending ModelResponseRecorded messages are not Schema-encoded Prompt messages\",\n cause,\n }),\n ),\n );\n\n const firstAssistant = pendingMessages.content.findIndex(\n (message) => message.role === \"assistant\",\n );\n\n if (firstAssistant > 0) {\n resumeLeadingMessages = Prompt.fromMessages(\n pendingMessages.content.slice(0, firstAssistant),\n );\n }\n if (firstAssistant >= 0) {\n resumeResponseMessages = Prompt.fromMessages(\n pendingMessages.content.slice(firstAssistant),\n );\n }\n }\n\n let currentToolTurn: { readonly turn: number; readonly turnId: TurnId } | undefined =\n pending === undefined ? undefined : { turn: pending.turn, turnId: pending.turnId };\n\n // Terminal sibling results observed from the Run event stream, keyed by Tool Call id: the\n // suspension seam commits each settled non-waiting sibling as a per-call late-settle batch\n // BEFORE the `waitingForChild` suspension so no sibling effect is lost to it (plan §2).\n const siblingResults = new Map<\n string,\n { readonly toolCallId: ToolCallId; readonly result: unknown; readonly isFailure: boolean }\n >();\n\n const budgetRejectedCalls = new Set<string>();\n // Step-hook coordinator failures are re-wrapped by the engine as `DurableStepError` in the\n // handler channel; this side channel preserves the original failure so the Attempt aborts\n // (obligation still owed) instead of settling the Run `failed` on an infrastructure fault.\n const haltRef = yield* Ref.make<DurableWorkerFailure | undefined>(undefined);\n const yieldSignal = yield* Deferred.make<void>();\n\n const recordHalt = <A, R>(\n effect: Effect.Effect<A, DurableWorkerFailure, R>,\n ): Effect.Effect<A, CoordinatorHalt, R> =>\n effect.pipe(\n Effect.tapError((failure) => Ref.set(haltRef, failure)),\n Effect.mapError((failure) => new CoordinatorHalt(failure)),\n );\n\n interface RunState {\n readonly baseLen: number | undefined;\n readonly lastCommitLen: number;\n readonly history: Prompt.Prompt | undefined;\n readonly pendingTurn: { readonly turn: number; readonly turnId: TurnId } | undefined;\n readonly completedOutput: PersistedJson | undefined;\n readonly completedRunDisposition: PersistedJson | undefined;\n readonly completedFinishReason: \"budget-exhausted\" | undefined;\n readonly completedExhausted: ExhaustedLimit | undefined;\n }\n\n const stateRef = yield* Ref.make<RunState>({\n baseLen: undefined,\n lastCommitLen: 0,\n history: undefined,\n pendingTurn: undefined,\n completedOutput: undefined,\n completedRunDisposition: undefined,\n completedFinishReason: undefined,\n completedExhausted: undefined,\n });\n\n const turnCounter = yield* Ref.make(journal.committedTurns);\n\n const idGenerator: (typeof IdGenerator)[\"Service\"] = {\n nextThreadId: Effect.succeed(submission.threadId),\n nextRunId: Effect.succeed(runId),\n nextTurnId: Ref.modify(turnCounter, (turn) => [turnIdForRun(runId, turn + 1), turn + 1]),\n };\n\n // Track live Prompt boundaries only. The journal owns durable per-Turn commits and recovery;\n // successful-run ThreadHistory retention cannot replace those incremental commits.\n const onHistory = (history: Prompt.Prompt): Effect.Effect<void> =>\n Ref.update(stateRef, (state) =>\n state.baseLen === undefined\n ? {\n ...state,\n baseLen: history.content.length,\n // A fresh Run's first commit starts at the engine-provided history boundary so\n // the evaluated instruction + user messages become canonical inside Turn 1 (D8).\n // A resumed Run's boundary is the engine's re-evaluated initial prompt: those\n // messages are already canonical inside the original Turn 1 and never re-enter\n // (a pending batch resume always implies at least one committed Turn).\n lastCommitLen:\n journal.committedTurns === 0\n ? journal.historyBefore.content.length\n : history.content.length,\n history,\n }\n : { ...state, history },\n );\n\n // On resume the model must see the canonical prompt (committed Turns included) plus what\n // THIS Attempt appended — never the engine's re-appended instructions + input. For a batch\n // resume the canonical boundary excludes the pending Turn: its messages re-enter official\n // history through the engine's continuation and ride the slice after `baseLen`.\n const resumeContext: RunContextHook<never, never> = {\n prepare: ({ source }) =>\n Ref.get(stateRef).pipe(\n Effect.map((state) => ({\n prompt: Prompt.fromMessages([\n ...resumeProjection.prompt.content,\n ...source.content.slice(state.baseLen ?? source.content.length),\n ]),\n })),\n ),\n };\n\n const externalContext = runContextPreparation.hook;\n\n const preparedContext: RunContextHook<RunContextPreparationError, never> | undefined =\n externalContext === undefined\n ? journal.committedTurns === 0\n ? undefined\n : resumeContext\n : {\n prepare: (request) =>\n (journal.committedTurns === 0\n ? Effect.succeed({ prompt: request.source })\n : resumeContext.prepare(request)\n ).pipe(\n Effect.flatMap(({ prompt }) =>\n externalContext.prepare({\n ...request,\n source: prompt,\n }),\n ),\n ),\n };\n\n const durability: RunDurabilityHook<CoordinatorHalt | CompactionError, never> = {\n noteToolExposure: (turn, snapshot) =>\n Effect.sync(() => {\n stagedToolExposure.set(turn, snapshot);\n }),\n reservePolicyUsage: (usage) =>\n recordHalt(\n Effect.gen(function* () {\n const recordId = decodeRecordIdSync(\n `policy:${runId}:${usage.programmaticToolCalls}:${usage.finalizationUsed}`,\n );\n\n if (knownIds.has(recordId)) return;\n\n const record = yield* makeEnvelope(\n recordId,\n RunPolicyUsageReserved.make({ runId, ...usage }),\n );\n\n yield* hit(\"policy:before-reservation-append\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: decodeBatchIdSync(recordId),\n producerId: config.producerId,\n records: [record],\n }),\n );\n knownIds.add(recordId);\n yield* hit(\"policy:after-reservation-append\");\n }),\n ),\n commitResponse: (commit) =>\n recordHalt(\n Effect.gen(function* () {\n const canonicalTurn = commit.turn;\n\n currentToolTurn = { turn: canonicalTurn, turnId: commit.turnId };\n for (const call of commit.calls) {\n encodedParamsByCallId.set(call.toolCallId, call.parameters);\n declaredNamesByCallId.set(call.toolCallId, call.toolName);\n }\n const responseId = modelResponseRecordId(runId, canonicalTurn);\n\n if (knownIds.has(responseId)) return;\n const state = yield* Ref.get(stateRef);\n const history = state.history;\n\n if (history === undefined) {\n return yield* RunJournalError.make({\n message: `Turn ${canonicalTurn} committed a response before official history advanced`,\n });\n }\n // D8 extension (decision point 6): the pending slice — evaluated instructions +\n // input for Turn 1, queued steering for later Turns — becomes canonical as the\n // leading messages of this response batch.\n const pendingSlice = history.content.slice(state.lastCommitLen);\n const createdAt = yield* nowUtc;\n\n const batch = yield* withCrypto(\n turnResponseBatch({\n toolExposure: commit.toolExposure,\n runId,\n turn: canonicalTurn,\n turnId: commit.turnId,\n appended: [...pendingSlice, ...commit.responseMessages.content],\n producerId: config.producerId,\n deploymentId: config.deploymentId,\n createdAt,\n ...(canonicalTurn === 1 && pendingSlice.length > 0\n ? { runScopedPrefixLength: pendingSlice.length }\n : {}),\n usage: stagedUsage.get(canonicalTurn),\n unobservedModelCalls: stagedUnobservedCalls.get(canonicalTurn),\n }),\n );\n\n yield* appendBatch(ctx, batch);\n recordCommittedUsage(batch);\n for (const record of batch.records) knownIds.add(record.recordId);\n yield* hit(\"turn:after-response-append\");\n }),\n ),\n prepareToolCalls: (calls) =>\n recordHalt(\n Effect.gen(function* () {\n const first = calls[0];\n\n if (first === undefined) return;\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: \"Tool Calls were prepared before any canonical response commit\",\n });\n }\n // The prepared batch is atomic: one canonical record implies all of them, so a\n // batch-identity replay (resume) is skipped wholesale.\n if (knownIds.has(toolCallPreparedRecordId(runId, turnInfo.turn, first.toolCallId))) {\n return;\n }\n const preparedRecords: Array<RecordEnvelope> = [];\n\n for (const call of calls) {\n const parameters = yield* decodePersisted(call.parameters).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Tool Call ${call.toolCallId} parameters exceed canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const parametersDigest = yield* withCrypto(digestJson(parameters));\n\n preparedRecords.push(\n yield* makeEnvelope(\n toolCallPreparedRecordId(runId, turnInfo.turn, call.toolCallId),\n ToolCallPrepared.make({\n runId,\n turnId: turnInfo.turnId,\n turn: turnInfo.turn,\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n parameters,\n parametersDigest,\n executionKind: call.executionKind,\n }),\n ),\n );\n }\n const head = preparedRecords[0];\n\n if (head === undefined) return;\n yield* hit(\"tools:before-prepared-append\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: turnPreparedBatchId(runId, turnInfo.turn),\n producerId: config.producerId,\n records: [head, ...preparedRecords.slice(1)],\n }),\n );\n for (const record of preparedRecords) knownIds.add(record.recordId);\n yield* hit(\"tools:after-prepared-append\");\n }),\n ),\n step: {\n lookup: (key) =>\n Effect.sync(() => {\n const output = stepOutputs.get(\n toolStepSettledRecordId(runId, key.toolCallId, key.stepName),\n );\n\n return output === undefined ? Option.none() : Option.some({ encodedOutput: output });\n }),\n commit: (key, encodedOutput) =>\n recordHalt(\n Effect.gen(function* () {\n const recordId = toolStepSettledRecordId(runId, key.toolCallId, key.stepName);\n\n if (knownIds.has(recordId)) return;\n\n const output = yield* decodePersisted(encodedOutput).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Durable Step ${key.stepName} output exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const outputDigest = yield* withCrypto(digestJson(output));\n\n const envelope = yield* makeEnvelope(\n recordId,\n ToolStepSettled.make({\n runId,\n toolCallId: key.toolCallId,\n stepName: key.stepName,\n output,\n outputDigest,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: toolStepSettledBatchId(runId, key.toolCallId, key.stepName),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n knownIds.add(recordId);\n stepOutputs.set(recordId, output);\n yield* hit(\"step:after-step-append\");\n }),\n ),\n },\n noteTurnUsage: (usage) =>\n Effect.sync(() => {\n // Accumulate, never replace: a compaction summarizer and the\n // Turn's own response stage into the same canonical Turn.\n const key = usage.turn;\n const prior = stagedUsage.get(key);\n\n stagedUsage.set(key, {\n inputTokens: (prior?.inputTokens ?? 0) + usage.usage.inputTokens.total,\n outputTokens: (prior?.outputTokens ?? 0) + usage.usage.outputTokens.total,\n costMicrousd: (prior?.costMicrousd ?? 0) + usage.usage.costMicrousd,\n modelUsage: [...(prior?.modelUsage ?? []), usage.usage],\n });\n }),\n commitCompaction: (commit) =>\n Effect.gen(function* () {\n const canonicalTurn = commit.turn;\n const recordId = compactionRecordId(runId, canonicalTurn, commit.kind);\n\n if (knownIds.has(recordId)) {\n return yield* CompactionError.make({\n message: \"Compaction is already committed for this Turn and kind\",\n });\n }\n\n let sourceJournal = journal;\n let sourceBoundaries = boundaries;\n\n if (commit.kind !== \"summarize\") {\n // Results must be canonical before pruning or rollover can cover them. Newly committed\n // compactions remain overlays on this Attempt's append-only source, so omit those\n // overlays while reconstructing the exact source-to-record mapping.\n yield* recordHalt(commitPendingTurn);\n const tail = yield* Ref.get(ctx.tailRef);\n\n sourceBoundaries = [];\n sourceJournal = yield* recordHalt(\n projectRunJournalStream(\n Stream.concat(\n canonical,\n canonicalRange(ctx.threadId, tail.sequence, canonicalThrough),\n ).pipe(\n Stream.filter(\n (envelope) =>\n envelope.record.payload._tag !== \"CompactionCreated\" ||\n envelope.sequence <= canonicalThrough,\n ),\n ),\n runId,\n (boundary) => sourceBoundaries.push(boundary),\n journalSeed,\n ),\n );\n }\n\n // Summaries use the initial prior-Run boundaries; pruning and rollover also admit\n // complete current-Run boundaries from the fresh canonical source above.\n const coverable = sourceBoundaries.filter(\n (boundary) =>\n commit.kind !== \"summarize\" ||\n ownerFirstSequence === undefined ||\n boundary.sequence < ownerFirstSequence,\n );\n\n if (coverable.length === 0) {\n return yield* CompactionError.make({\n message:\n commit.kind === \"rollover\"\n ? \"Durable rollover requires complete canonical records\"\n : \"Durable compaction requires eligible canonical records\",\n });\n }\n\n // Compare each visible message once. A transformed source can authorize only its\n // exact canonical prefix; no per-candidate rereads or full encoded Prompt copies.\n let matchingPrefix = 0;\n let requiredThrough = 0;\n const comparisonLimit = Math.min(sourceJournal.prompt.content.length, commit.through);\n\n for (let index = 0; index < commit.through; index += 1) {\n const message = commit.source.content[index];\n\n if (\n message !== undefined &&\n (commit.kind === \"clear-tool-results\"\n ? message.role === \"tool\"\n : message.role !== \"system\")\n )\n requiredThrough = index + 1;\n if (index >= comparisonLimit || index !== matchingPrefix || message === undefined)\n continue;\n const canonicalMessage = sourceJournal.prompt.content[index];\n\n if (canonicalMessage === undefined) continue;\n\n const encode = (entry: Prompt.Message) =>\n Schema.encodeEffect(Prompt.Message)(entry).pipe(\n Effect.mapError((cause) =>\n CompactionError.make({\n message: \"Could not encode the canonical compaction prefix\",\n cause,\n }),\n ),\n );\n\n const left = yield* encode(canonicalMessage);\n const right = yield* encode(message);\n\n if (JSON.stringify(left) === JSON.stringify(right)) matchingPrefix += 1;\n }\n\n let lastCovered: JournalBoundary | undefined;\n\n for (let index = 0; index < coverable.length; index += 1) {\n const candidate = coverable[index];\n\n if (candidate === undefined) continue;\n const following = coverable[index + 1];\n\n if (following !== undefined && following.tag !== \"ModelResponseRecorded\") continue;\n\n const length = candidate.promptLength;\n\n if (length === 0 || length > commit.through) continue;\n if (length < requiredThrough || length > matchingPrefix) continue;\n lastCovered = candidate;\n }\n if (lastCovered === undefined) {\n return yield* CompactionError.make({\n message:\n commit.kind === \"rollover\"\n ? \"Rollover coverage cannot be mapped to complete canonical records\"\n : \"Compaction coverage cannot be mapped to complete canonical records\",\n });\n }\n const coveredSequence = lastCovered.sequence;\n\n if (\n commit.kind !== \"summarize\" &&\n sourceBoundaries.some(\n (boundary) =>\n boundary.incomplete === true &&\n boundary.terminalPriorRun !== true &&\n boundary.sequence <= coveredSequence,\n )\n ) {\n return yield* CompactionError.make({\n message: \"Compaction cannot cover an incomplete Tool batch\",\n });\n }\n if (commit.kind === \"summarize\" && (commit.summary ?? \"\").trim().length === 0) {\n return yield* CompactionError.make({\n message: \"A summarize compaction commit carried no summary\",\n });\n }\n\n const payload = yield* Schema.decodeEffect(CompactionCreated)({\n _tag: \"CompactionCreated\",\n runId,\n turn: canonicalTurn,\n kind: commit.kind,\n coversThrough: lastCovered.sequence,\n ...(commit.kind === \"summarize\" ? { summary: commit.summary } : {}),\n ...(commit.kind === \"rollover\" && commit.handoff !== undefined\n ? { handoff: commit.handoff }\n : {}),\n }).pipe(\n Effect.mapError((cause) =>\n CompactionError.make({\n message: \"Compaction decision exceeds canonical persistence bounds\",\n cause,\n }),\n ),\n );\n\n const envelope = yield* recordHalt(makeEnvelope(recordId, payload));\n\n yield* recordHalt(hit(\"compaction:before-canonical-append\"));\n yield* recordHalt(\n appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: compactionBatchId(runId, canonicalTurn, commit.kind),\n producerId: config.producerId,\n records: [envelope],\n }),\n ),\n );\n knownIds.add(recordId);\n yield* recordHalt(hit(\"compaction:after-canonical-append\"));\n if (commit.kind !== \"clear-tool-results\")\n yield* recordHalt(saveRecoveryCheckpoint(recordId));\n }),\n };\n\n /** Digest of one declared call's canonical encoded parameters (same family as prepared). */\n const approvalParametersDigest = (\n toolCallId: string,\n ): Effect.Effect<Digest, DurableWorkerFailure> =>\n Effect.gen(function* () {\n if (!encodedParamsByCallId.has(toolCallId)) {\n return yield* RunJournalError.make({\n message: `Tool Call ${toolCallId} requested approval before its response commit`,\n });\n }\n\n const parameters = yield* decodePersisted(encodedParamsByCallId.get(toolCallId)).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Tool Call ${toolCallId} parameters exceed canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n return yield* withCrypto(digestJson(parameters));\n });\n\n /**\n * Append the canonical approval records for one declared call: the `ToolApprovalRequested`\n * record — plus the immediate `ToolApprovalDecided` for a policy-auto or intent-backed\n * decision, one atomic batch — or the decision alone when the request is already canonical.\n * Batch identity: the Turn's FIRST canonical approval append owns\n * `turn-approvals:{runId}:{turn}`; later appends of the same Turn (across suspension\n * cycles) use deterministic per-call batches so committed batch content is never\n * contradicted; decision-only appends use `approval-decision:{sid}:{toolCallId}`. Record\n * identity dedupes every replay; an identity conflict means another pass already committed\n * the same records.\n */\n const appendApprovalRecords = (\n turnInfo: { readonly turn: number; readonly turnId: TurnId },\n toolCallId: ToolCallId,\n toolName: string,\n decided:\n | {\n readonly decision: ApprovalDecision;\n readonly resolver: string;\n readonly reason: string;\n }\n | undefined,\n ): Effect.Effect<void, DurableWorkerFailure> =>\n Effect.gen(function* () {\n const requestRecordId = toolApprovalRequestRecordId(runId, turnInfo.turn, toolCallId);\n const decisionRecordId = toolApprovalDecisionRecordId(runId, turnInfo.turn, toolCallId);\n const envelopes: Array<RecordEnvelope> = [];\n const appendRequest = !knownIds.has(requestRecordId);\n\n if (appendRequest) {\n const parametersDigest = yield* approvalParametersDigest(toolCallId);\n\n envelopes.push(\n yield* makeEnvelope(\n requestRecordId,\n ToolApprovalRequested.make({\n runId,\n turnId: turnInfo.turnId,\n turn: turnInfo.turn,\n toolCallId,\n toolName,\n parametersDigest,\n }),\n ),\n );\n }\n if (decided !== undefined && !knownIds.has(decisionRecordId)) {\n envelopes.push(\n yield* makeEnvelope(\n decisionRecordId,\n ToolApprovalDecided.make({\n runId,\n turn: turnInfo.turn,\n toolCallId,\n decision: decided.decision,\n resolver: decided.resolver,\n reason: decided.reason,\n }),\n ),\n );\n }\n const head = envelopes[0];\n\n if (head !== undefined) {\n const batchId = appendRequest\n ? approvalRequestedTurns.has(turnInfo.turn)\n ? decodeBatchId(`approval-request:${runId}:${turnInfo.turn}:${toolCallId}`)\n : turnApprovalsBatchId(runId, turnInfo.turn)\n : approvalDecisionBatchId(submissionId, toolCallId);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId,\n producerId: config.producerId,\n records: [head, ...envelopes.slice(1)],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n for (const record of envelopes) knownIds.add(record.recordId);\n }\n if (appendRequest) {\n approvalRequestedTurns.add(turnInfo.turn);\n yield* hit(\"approval:after-request-append\");\n }\n if (decided !== undefined) {\n canonicalApprovalDecisions.set(toolCallId, decided.decision);\n }\n });\n\n /**\n * Durable approval hook (plan §2.6). Resolution order per declared call: (1) a canonical\n * `ToolApprovalDecided` record — the deterministic decision authority across Attempts;\n * (2) a durable `resolveApproval` intent, appended canonically before it is honored;\n * (3) the optional policy-auto delegate, whose immediate decision becomes canonical\n * (request + decision, one atomic batch) before it is honored; (4) otherwise the canonical\n * `ToolApprovalRequested` record is appended and the call reports unresolved — with the\n * request canonical, \"waiting for explicit approval\" is a safe durable boundary\n * (durability §8), the engine raises `AgentApprovalPending`, and the Attempt suspends\n * without settling. A denied decision fails the Run through the engine's\n * `AgentApprovalDenied` path with the denial already canonical.\n */\n const approval: RunApprovalHook<CoordinatorHalt, never> = {\n request: (request) =>\n recordHalt(\n Effect.gen(function* () {\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: `Tool Call ${request.toolCallId} requested approval before any canonical response commit`,\n });\n }\n const toolCallId = request.toolCallId;\n const canonical = canonicalApprovalDecisions.get(toolCallId);\n\n if (canonical !== undefined) {\n return canonical === \"approved\"\n ? { _tag: \"approved\" as const }\n : { _tag: \"denied\" as const };\n }\n const intent = approvalIntents.get(toolCallId);\n\n if (intent !== undefined) {\n yield* appendApprovalRecords(turnInfo, toolCallId, request.toolName, {\n decision: intent.decision,\n resolver: intent.resolver,\n reason: intent.reason,\n });\n\n return intent.decision === \"approved\"\n ? { _tag: \"approved\" as const, reason: intent.reason }\n : { _tag: \"denied\" as const, reason: intent.reason };\n }\n if (approvalResolver !== undefined) {\n const delegated = yield* approvalResolver.request(request);\n\n if (delegated._tag !== \"unresolved\") {\n yield* appendApprovalRecords(turnInfo, toolCallId, request.toolName, {\n decision: delegated._tag,\n resolver: APPROVAL_POLICY_RESOLVER,\n reason: boundedApprovalReason(\n delegated.reason,\n \"The configured approval policy decided immediately\",\n ),\n });\n\n return delegated;\n }\n }\n yield* appendApprovalRecords(turnInfo, toolCallId, request.toolName, undefined);\n\n return {\n _tag: \"unresolved\" as const,\n reason:\n \"The approval request is canonical and awaits a durable resolveApproval decision\",\n };\n }),\n ),\n };\n\n /**\n * Joining/Joined queued input hook (plan §2.5, DUR-016). At every engine drain seam:\n *\n * 1. Reattach first — pre-existing joins whose canonical `input:{sid}` record is not yet\n * prompt-covered re-deliver WITHOUT re-appending (record identity is the dedupe);\n * covered inputs are already inside the journal prompt. A `joining` row whose input is\n * canonical only lost its marker: it is repaired from history under the host's live\n * ownership (DUR-015). A `joining` row WITHOUT canonical input was never consumed and\n * is recovery's to revert — the hook never guesses at it (fail-closed).\n * 2. Claim fresh — `claimJoining` atomically transitions the contiguous ready prefix of\n * strictly-later queue sequences to `joining` under the host's ownership token (no\n * epoch bump; an admitted-not-ready row breaks the prefix). Per fresh claim: honor a\n * pre-consumption abort intent by reverting (revert-then-abort), else append the\n * deterministic `UserInputRecorded` (batch `submission-input:{sid}`, record\n * `input:{sid}`, `runId` = host Run, kind `steering`) → `join:after-canonical-append`\n * → `markJoined` → hand the engine the `RunInputCommand`.\n *\n * Delivered input is `steering`: the engine appends it to official history at the seam,\n * so the next Turn's response commit makes it model-visible canonically — exactly the\n * prompt-coverage rule recovery relies on.\n */\n const renderJoinedInput = ({\n input: encodedInput,\n messageAdmission,\n }: Pick<UserInputRecorded, \"input\" | \"messageAdmission\">) =>\n Effect.gen(function* () {\n if (Schema.is(FrameworkMessage)(messageAdmission))\n return yield* Schema.encodeEffect(Schema.fromJsonString(FrameworkMessage))(\n messageAdmission,\n ).pipe(\n Effect.mapError(() =>\n AgentInputError.make({ message: \"Invalid worker completion message\" }),\n ),\n );\n const inputPrompt = agent.definition.inputPrompt;\n\n if (inputPrompt === undefined) {\n return yield* renderInputPrompt(undefined, encodedInput, encodedInput);\n }\n\n const decodedInput = yield* Schema.decodeEffect(agent.definition.input)(\n encodedInput,\n ).pipe(\n Effect.mapError((cause) =>\n AgentInputError.make({\n message: cause.message,\n }),\n ),\n );\n\n return yield* renderInputPrompt(inputPrompt, decodedInput, encodedInput);\n });\n\n const input: RunInputHook<\n CoordinatorHalt | Agent.Failure<typeof agent>,\n Agent.DefinitionRequirements<(typeof agent)[\"definition\"]>\n > = {\n drain: (policy) =>\n Effect.gen(function* () {\n const joinedInputs = yield* recordHalt(\n Effect.gen(function* () {\n const limit = policy === \"one\" ? 1 : MAX_JOIN_DRAIN;\n\n const joinedInputs: Array<Pick<UserInputRecorded, \"input\" | \"messageAdmission\">> =\n [];\n\n if (joinBacklog === undefined) {\n const hostSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n joinBacklog = hostSnapshot.joins;\n }\n for (const join of joinBacklog) {\n if (joinedInputs.length >= limit) break;\n const joinId = join.submissionId;\n\n if (deliveredJoinInputs.has(joinId)) continue;\n if (join.state !== \"joining\" && join.state !== \"joined\") continue;\n const existing = joinedInputEnvelopes.get(joinId);\n\n if (existing === undefined) continue;\n if (join.state === \"joining\") {\n // Canonical input without its joined marker (crash between the append and\n // `markJoined`): repair the marker from history before reattaching.\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: joinId,\n ownershipToken,\n recordId: existing.record.recordId,\n sequence: existing.sequence,\n }),\n );\n }\n deliveredJoinInputs.add(joinId);\n if (\n lastHostResponseSequence !== undefined &&\n lastHostResponseSequence > existing.sequence\n ) {\n continue;\n }\n const payload = existing.record.payload;\n\n if (payload._tag !== \"UserInputRecorded\") continue;\n joinedInputs.push(payload);\n }\n if (joinedInputs.length < limit) {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const claims = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: submission.threadId,\n hostSubmissionId: submissionId,\n ownershipToken,\n maxCount: limit - joinedInputs.length,\n }),\n );\n\n if (claims.length > 0) {\n yield* hit(\"join:after-claim\");\n }\n for (const claim of claims) {\n const claimSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: claim.submissionId }),\n );\n\n if (claimSnapshot.abortIntent !== undefined) {\n // Aborted before the host consumed the input: honor the intent by\n // returning the claim to ready (revert-then-abort, plan §2.5); it settles\n // aborted once it heads the lane.\n yield* ledger.revertJoining(\n RevertJoiningRequest.make({ submissionId: claim.submissionId }),\n );\n continue;\n }\n const recordId = submissionInputRecordId(claim.submissionId);\n let sequence: CanonicalSequence;\n const existing = joinedInputEnvelopes.get(claim.submissionId);\n\n if (existing !== undefined) {\n // Defensive reattach: the exact record is already canonical, so only the\n // marker and the delivery remain (DUR-016 — never a duplicate append).\n sequence = existing.sequence;\n } else {\n const envelope = yield* makeEnvelope(\n recordId,\n UserInputRecorded.make({\n submissionId: claim.submissionId,\n kind: \"steering\",\n runId,\n input: claim.inputPayload,\n ...(claimSnapshot.submission.messageAdmission === undefined\n ? {}\n : { messageAdmission: claimSnapshot.submission.messageAdmission }),\n }),\n );\n\n const result = yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionInputBatchId(claim.submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n\n sequence = result.firstSequence;\n knownIds.add(recordId);\n yield* hit(\"join:after-canonical-append\");\n }\n // Re-read the token: the concurrent lease renewal may rotate it mid-batch.\n const markToken = yield* Ref.get(tokenRef);\n\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: claim.submissionId,\n ownershipToken: markToken,\n recordId,\n sequence,\n }),\n );\n deliveredJoinInputs.add(claim.submissionId);\n joinedInputs.push({\n input: claim.inputPayload,\n ...(claimSnapshot.submission.messageAdmission === undefined\n ? {}\n : { messageAdmission: claimSnapshot.submission.messageAdmission }),\n });\n }\n }\n\n return joinedInputs;\n }),\n );\n\n return yield* Effect.forEach(joinedInputs, (joinedInput) =>\n renderJoinedInput(joinedInput).pipe(\n Effect.map((input): RunInputCommand => ({\n kind: \"steering\",\n input,\n })),\n ),\n );\n }),\n };\n\n /**\n * Durable child establishment: `establish` performs or replays\n * the idempotent get-or-create establishment protocol under the\n * parent's ownership fence and reports where the one child stands; `join` appends the\n * atomic `[SubagentJoined, ToolCallSettled]` settlement batch (SUB-019) and applies the\n * reservation release. Both use the halt side channel exactly like the durability/step\n * hooks: the engine wraps a `CoordinatorHalt` into `SubagentDurabilityError` in the\n * handler channel while the Attempt aborts with the original infrastructure failure.\n */\n const establishmentGate = yield* Semaphore.make(1);\n\n const establishSubagent = (\n request: RunSubagentEstablishRequest,\n ): Effect.Effect<ChildEstablishStatus, CoordinatorHalt> =>\n recordHalt(\n Effect.gen(function* () {\n const toolCallId = request.toolCallId;\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} established before any canonical response commit`,\n });\n }\n\n const denied = (errorTag: string, message: string): ChildEstablishStatus => ({\n _tag: \"denied\",\n errorTag,\n message: boundedText(message),\n });\n\n let requestedPayload = subagentState.requested.get(toolCallId);\n\n if (requestedPayload === undefined) {\n // FIRST establishment of this call: fix every digest fail-closed BEFORE any\n // durable mutation, then reserve → append the canonical request (spec §12\n // steps 2-3). Replays below proceed from the canonical record instead — the\n // recorded request, not the re-computed handler values, is the establishment\n // authority (SUB-016/SUB-018).\n if (request.depth !== delegationDepth + 1) {\n return denied(\n \"SubagentDepthUnsupported\",\n `The child depth must be exactly one greater than its source depth ${delegationDepth}`,\n );\n }\n\n // Resolve the exact declaration through ordinary host registration. Recovery\n // below uses the already-persisted request, never a newer registration.\n let targetDigests = request.targetDigests;\n\n if (request.target !== undefined) {\n if (request.target.id !== request.targetAgentId) {\n return denied(\n \"SubagentBindingUnavailable\",\n \"The child target identity differs from its Definition\",\n );\n }\n\n const binding = yield* resolveDefinitionBinding(\n registeredBindings,\n request.target,\n ).pipe(Effect.result);\n\n if (binding._tag === \"Failure\") {\n return denied(\"SubagentBindingUnavailable\", binding.failure.message);\n }\n if (\n targetDigests !== undefined &&\n (targetDigests.agent !== binding.success.digests.agent ||\n targetDigests.model !== binding.success.digests.model ||\n targetDigests.tools !== binding.success.digests.tools)\n ) {\n return denied(\n \"SubagentDigestsInvalid\",\n \"The explicit child digests differ from its exact registration\",\n );\n }\n targetDigests = binding.success.digests;\n }\n\n const decodedDigests = yield* decodeDefinitionDigests(targetDigests).pipe(\n Effect.option,\n );\n\n if (Option.isNone(decodedDigests)) {\n return denied(\n \"SubagentDigestsInvalid\",\n \"The declared child Binding digests are not valid stored digests\",\n );\n }\n\n const childInput = yield* decodePersisted(request.encodedChildInput).pipe(\n Effect.option,\n );\n\n if (Option.isNone(childInput)) {\n return denied(\n \"SubagentInputUnpersistable\",\n \"The prepared child input does not satisfy the canonical persistence bounds\",\n );\n }\n const grant = yield* decodePersisted(request.encodedGrant).pipe(Effect.option);\n\n const allocation = yield* decodePersisted(request.encodedAllocation).pipe(\n Effect.option,\n );\n\n if (Option.isNone(grant) || Option.isNone(allocation)) {\n return denied(\n \"SubagentDeclarationUnpersistable\",\n \"The delegation grant or allocation does not satisfy the canonical persistence bounds\",\n );\n }\n const decodedGrant = Schema.decodeUnknownOption(SubagentGrant)(grant.value);\n\n if (Option.isNone(decodedGrant))\n return denied(\"SubagentGrantInvalid\", \"The child authority grant is invalid\");\n if (request.policy === undefined || request.budget === undefined)\n return denied(\n \"SubagentBudgetInvalid\",\n \"New durable children require their full execution policy and subtree allocation\",\n );\n if (\n request.toolCallAllowance !== undefined &&\n !Schema.is(SubagentRequested.fields.toolCallAllowance)(request.toolCallAllowance)\n ) {\n return denied(\n \"SubagentAllowanceInvalid\",\n \"The child Tool Call allowance must be a positive integer\",\n );\n }\n if (request.policy !== undefined && !Schema.is(AgentPolicy)(request.policy)) {\n return denied(\"SubagentPolicyInvalid\", \"The resolved child policy is invalid\");\n }\n if (request.budget !== undefined) {\n if (!Schema.is(SubagentBudgetReservation)(request.budget)) {\n return denied(\"SubagentBudgetInvalid\", \"The shared delegation budget is invalid\");\n }\n\n const decodedAllocation = Schema.decodeUnknownOption(SubagentReservationAmounts)(\n allocation.value,\n );\n\n if (\n Option.isNone(decodedAllocation) ||\n !Equal.equals(decodedAllocation.value, request.budget.allocation)\n ) {\n return denied(\n \"SubagentBudgetInvalid\",\n \"The reserved allocation differs from its budget declaration\",\n );\n }\n const { caps, allocation: requested } = request.budget;\n const prior = [...subagentState.requested.values()];\n\n if (\n prior.some(\n (entry) => entry.budget === undefined || !Equal.equals(entry.budget.caps, caps),\n )\n ) {\n return denied(\n \"SubagentParentBudgetConflict\",\n \"Delegations in one parent Run must share the same caps\",\n );\n }\n if (\n caps.maxTotalChildInvocations !== undefined &&\n prior.reduce(\n (sum, entry) => sum + 1 + (entry.budget?.descendantInvocations ?? 0),\n 1 + (request.budget.descendantInvocations ?? 0),\n ) > caps.maxTotalChildInvocations\n ) {\n return denied(\n \"SubagentBudgetExhausted\",\n \"The parent Run exhausted its child invocation budget\",\n );\n }\n const active = prior.filter((entry) => !subagentState.joined.has(entry.toolCallId));\n\n if (\n caps.maxConcurrentChildren !== undefined &&\n active.length >= caps.maxConcurrentChildren\n ) {\n return denied(\n \"SubagentBudgetExhausted\",\n \"The parent Run exhausted its concurrent child budget\",\n );\n }\n\n const dimensions = [\n [\"turns\", \"maxTurns\"],\n [\"toolCalls\", \"maxToolCalls\"],\n [\"durationMillis\", \"maxDurationMillis\"],\n [\"inputTokens\", \"maxInputTokens\"],\n [\"outputTokens\", \"maxOutputTokens\"],\n [\"costMicrousd\", \"maxCostMicrousd\"],\n [\"resultBytes\", \"maxResultBytes\"],\n ] as const;\n\n const accounting = Schema.Struct({ consumed: SubagentReservationAmounts });\n\n for (const [amount, cap] of dimensions) {\n const limit = caps[cap];\n\n if (limit === undefined) continue;\n let consumed = requested[amount];\n\n for (const entry of prior) {\n const joined = subagentState.joined.get(entry.toolCallId);\n\n const observed =\n joined === undefined\n ? Option.none()\n : Schema.decodeUnknownOption(accounting)(joined.finalAccounting);\n\n consumed += Option.isSome(observed)\n ? observed.value.consumed[amount]\n : (entry.budget?.allocation[amount] ?? limit);\n }\n if (consumed > limit) {\n return denied(\n \"SubagentBudgetExhausted\",\n `The parent Run exhausted its shared ${amount} budget`,\n );\n }\n }\n }\n const childInputDigest = yield* withCrypto(digestJson(childInput.value));\n const grantDigest = yield* withCrypto(digestJson(grant.value));\n const allocationDigest = yield* withCrypto(digestJson(allocation.value));\n const reservationId = childReservationIdFor(runId, toolCallId);\n const ownershipToken = yield* Ref.get(tokenRef);\n\n // Top-level attached declarations retain their independent explicit pool. A\n // child with an ancestor allocation shares its residual with both lifetimes.\n const subtree =\n delegationDepth === 0\n ? undefined\n : yield* workerRuntime\n .reserveSubtree(\n submission.threadId,\n SubtreeBudgetReserved.make({\n reservationId,\n sourceSubmissionId: submissionId,\n childThreadId: childThreadIdFor(submissionId, toolCallId),\n lifetime: \"attached\",\n depth: request.depth,\n policy: request.policy,\n grant: decodedGrant.value,\n budget: request.budget,\n }),\n )\n .pipe(Effect.result);\n\n if (subtree?._tag === \"Failure\") {\n if (subtree.failure.reason === \"storage\")\n return yield* LedgerError.make({\n operation: \"reserve-subtree\",\n message: \"Subtree reservation is unavailable\",\n });\n\n return denied(\n \"SubagentBudgetExhausted\",\n `The subtree reservation was refused: ${subtree.failure.reason}`,\n );\n }\n\n yield* ledger\n .reserveChildBudget(\n ChildBudgetReservationRequest.make({\n reservationId,\n parentSubmissionId: submissionId,\n parentToolCallId: toolCallId,\n ownershipToken,\n allocation: allocation.value,\n allocationDigest,\n }),\n )\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"reserveChildBudget\"),\n ),\n );\n yield* hit(\"subagent:after-reserve\");\n requestedPayload = SubagentRequested.make({\n runId,\n turnId: turnInfo.turnId,\n turn: turnInfo.turn,\n toolCallId,\n delegationId: request.delegationId,\n targetAgentId: request.targetAgentId,\n targetDigests: decodedDigests.value,\n childInput: childInput.value,\n childInputDigest,\n grantDigest,\n grant: decodedGrant.value,\n depth: request.depth,\n reservationId,\n reservationDigest: allocationDigest,\n childThreadId: childThreadIdFor(submissionId, toolCallId),\n childPrincipal: submission.principal,\n childIdempotencyKey: childIdempotencyKeyFor(runId, toolCallId),\n ...(request.toolCallAllowance === undefined\n ? {}\n : { toolCallAllowance: request.toolCallAllowance }),\n ...(request.policy === undefined ? {} : { policy: request.policy }),\n ...(request.budget === undefined ? {} : { budget: request.budget }),\n });\n const requestRecordId = subagentRequestedRecordId(runId, toolCallId);\n\n if (!knownIds.has(requestRecordId)) {\n const envelope = yield* makeEnvelope(requestRecordId, requestedPayload);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentRequestedBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(requestRecordId);\n }\n subagentState.requested.set(toolCallId, requestedPayload);\n yield* hit(\"subagent:after-request-append\");\n }\n // Steps 4-8: resolveAdmission-gated admission with immutable parent linkage,\n // child materialization + lineage, readiness, Receipt (SUB-016/SUB-017/SUB-031).\n const admission = yield* establishChildFromRequest(submission, requestedPayload);\n\n if (admission._tag === \"indeterminate\") {\n // Wait-and-retry, never a second admission: the Attempt aborts with the\n // obligation still owed and the next pass re-queries the authoritative owner.\n return yield* LedgerError.make({\n operation: \"establishSubagent\",\n message: `Child admission for Tool Call ${toolCallId} is indeterminate (${admission.reason}); retrying without a second admission (SUB-031)`,\n });\n }\n const childRunId = runIdForSubmission(admission.childSubmissionId);\n // Step 9: the start link is appended only after the child Receipt exists (SUB-017).\n let startedPayload = subagentState.started.get(toolCallId);\n\n if (startedPayload === undefined) {\n startedPayload = SubagentStarted.make({\n runId,\n toolCallId,\n childThreadId: requestedPayload.childThreadId,\n childSubmissionId: admission.childSubmissionId,\n childReceiptId: admission.receiptId,\n childRunId,\n });\n const startRecordId = subagentStartedRecordId(runId, toolCallId);\n\n if (!knownIds.has(startRecordId)) {\n const envelope = yield* makeEnvelope(startRecordId, startedPayload);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentStartedBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(startRecordId);\n }\n subagentState.started.set(toolCallId, startedPayload);\n yield* hit(\"subagent:after-start-append\");\n } else if (startedPayload.childSubmissionId !== admission.childSubmissionId) {\n return yield* LedgerError.make({\n operation: \"establishSubagent\",\n message: `The canonical SubagentStarted record names child ${startedPayload.childSubmissionId} but admission resolved ${admission.childSubmissionId}; establishment fails closed (SUB-016)`,\n });\n }\n const attachToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: decodeChildReservationIdSync(requestedPayload.reservationId),\n ownershipToken: attachToken,\n childSubmissionId: startedPayload.childSubmissionId,\n }),\n )\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"attachChildToReservation\"),\n ),\n );\n\n const identity = {\n childThreadId: startedPayload.childThreadId,\n childSubmissionId: startedPayload.childSubmissionId,\n childRunId: startedPayload.childRunId,\n receiptId: startedPayload.childReceiptId,\n };\n\n const child = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: startedPayload.childSubmissionId }),\n );\n\n if (Option.isNone(child)) {\n return yield* LedgerError.make({\n operation: \"establishSubagent\",\n message: `Established child ${startedPayload.childSubmissionId} is unknown to the ledger`,\n });\n }\n if (child.value.state !== \"settled\") {\n return { _tag: \"waiting\" as const, ...identity };\n }\n\n // §1.6: the child already settled — verify Parent Link, target, digests, and the\n // settlement record fail-closed before handing the outcome to the handler.\n const verification = yield* verifySettledChild(\n submission,\n requestedPayload,\n startedPayload.childSubmissionId,\n );\n\n if (verification._tag === \"mismatch\") {\n return denied(\"SubagentVerificationFailed\", verification.message);\n }\n\n return {\n _tag: \"settled\" as const,\n ...identity,\n outcome: verification.value.outcome,\n encodedResult: verification.value.encodedResult,\n ...(yield* verifiedChildUsage(verification.value, startedPayload.childRunId)),\n // The child Settlement's honest exhaustion marker (RUN-018)\n // rides to the parent handler so the delegation can surface a\n // budget-truncated partial to the orchestrator (SUB-034).\n ...(verification.value.settlement.finishReason === undefined\n ? {}\n : { finishReason: verification.value.settlement.finishReason }),\n };\n }).pipe(establishmentGate.withPermits(1)),\n );\n\n const joinSubagent = (\n request: RunSubagentJoinRequest,\n ): Effect.Effect<void, CoordinatorHalt> =>\n recordHalt(\n Effect.gen(function* () {\n const toolCallId = request.toolCallId;\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} joined before any canonical response commit`,\n });\n }\n const requestedPayload = subagentState.requested.get(toolCallId);\n const startedPayload = subagentState.started.get(toolCallId);\n\n if (requestedPayload === undefined || startedPayload === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} joined without canonical establishment records`,\n });\n }\n const reservationId = decodeChildReservationIdSync(requestedPayload.reservationId);\n const joinedRecordId = subagentJoinedRecordId(runId, toolCallId);\n let finalAccounting: PersistedJson;\n const existingJoined = subagentState.joined.get(toolCallId);\n\n if (existingJoined !== undefined) {\n // The atomic join batch is already canonical: only the reservation release below\n // may remain (spec §12 join step 6 — the canonical record is the replay source).\n finalAccounting = existingJoined.finalAccounting;\n } else {\n const encodedResult = yield* decodePersisted(request.encodedResult).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `The projected result of Tool Call ${toolCallId} exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const accounting = yield* decodePersisted(request.encodedAccounting).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `The join accounting of Tool Call ${toolCallId} exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const verification = yield* verifySettledChild(\n submission,\n requestedPayload,\n startedPayload.childSubmissionId,\n );\n\n if (verification._tag === \"mismatch\") {\n return yield* LedgerError.make({\n operation: \"joinSubagent\",\n message: `Child Settlement verification failed for Tool Call ${toolCallId}: ${verification.message}`,\n });\n }\n const verified = verification.value;\n const toolName = declaredNamesByCallId.get(toolCallId);\n\n if (toolName === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} joined without a declared Tool name`,\n });\n }\n\n yield* hit(\"subagent:before-join-append\");\n\n const joinedPayload = SubagentJoined.make({\n runId,\n toolCallId,\n childSubmissionId: startedPayload.childSubmissionId,\n childSettlementId: verified.settlement.settlementId,\n childOutcome: verified.outcome,\n childResultDigest: yield* withCrypto(\n digestJson(verified.settlement.result ?? null),\n ),\n projectedResultDigest: yield* withCrypto(digestJson(encodedResult)),\n usageSummary: yield* childUsageSummaryOf(\n verified.childRecords,\n startedPayload.childRunId,\n ),\n ...(yield* verifiedChildUsage(verified, startedPayload.childRunId)),\n reservationId: requestedPayload.reservationId,\n finalAccounting: accounting,\n });\n\n const settledRecordId = toolCallSettledRecordId(runId, turnInfo.turn, toolCallId);\n const joinedEnvelope = yield* makeEnvelope(joinedRecordId, joinedPayload);\n\n const settledEnvelope = yield* makeEnvelope(\n settledRecordId,\n ToolCallSettled.make({\n runId,\n toolCallId,\n toolName,\n result: encodedResult,\n isFailure: request.isFailure,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentJoinBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [joinedEnvelope, settledEnvelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(joinedRecordId);\n knownIds.add(settledRecordId);\n subagentState.joined.set(toolCallId, joinedPayload);\n finalAccounting = accounting;\n yield* hit(\"subagent:after-join-append\");\n }\n yield* applyReservationRelease(reservationId, finalAccounting);\n }),\n );\n\n const subagent: RunSubagentHook<CoordinatorHalt, never> = {\n establish: establishSubagent,\n join: joinSubagent,\n };\n\n const toolAuthorization: RunToolAuthorizationHook = {\n authorize: (request: RunToolAuthorizationRequest) =>\n inheritedGrant !== undefined &&\n !inheritedGrant.allowedToolNames.includes(request.call.toolName)\n ? Effect.succeed({\n _tag: \"denied\",\n reason: \"Tool exceeds the worker's immutable grant\",\n })\n : runToolAuthorization.authorize({\n ...request,\n // Preserve the admitted wire value even when an Agent Schema's decode/encode\n // pair normalizes differently on a second pass.\n input: submission.inputPayload,\n ...(Schema.is(FrameworkMessage)(submission.messageAdmission)\n ? { frameworkMessage: submission.messageAdmission }\n : {}),\n }),\n };\n\n const options: RunOptions<\n | CoordinatorHalt\n | CompactionError\n | RunContextPreparationError\n | Agent.Failure<typeof agent>,\n Agent.DefinitionRequirements<(typeof agent)[\"definition\"]>\n > = {\n threadId: submission.threadId,\n runId,\n history: pending === undefined ? journal.historyBefore : resumeProjection.historyBefore,\n onHistory,\n input,\n ...(Schema.is(FrameworkMessage)(submission.messageAdmission)\n ? { frameworkMessage: submission.messageAdmission }\n : {}),\n approval,\n toolAuthorization,\n ...(journal.toolSelection === undefined ? {} : { toolSelection: journal.toolSelection }),\n durability,\n subagent,\n delegationDepth,\n ...(inheritedGrant === undefined ? {} : { subagentGrant: inheritedGrant }),\n ...(inheritedBudget === undefined ? {} : { subagentBudget: inheritedBudget }),\n ...(submission.workerAdmission?.origin.budgetScope === undefined\n ? {}\n : { subagentBudgetScope: submission.workerAdmission.origin.budgetScope }),\n runStartedAt: runTiming.startedAt,\n durationDeadline: runTiming.deadline,\n ...(submission.workerAdmission === undefined\n ? {}\n : {\n toolCallAllowance: submission.workerAdmission.origin.toolCallAllowance,\n }),\n ...(submission.parentLinkage !== undefined &&\n childLineage?._tag === \"SubagentLineageRecorded\"\n ? { toolCallAllowance: childLineage.toolCallAllowance }\n : {}),\n ...(pending === undefined\n ? {}\n : {\n resume: {\n turn: pending.turn,\n turnId: pending.turnId,\n calls: pending.calls,\n settled: pending.settled,\n ...(pending.toolExposure === undefined\n ? {}\n : { toolExposure: pending.toolExposure }),\n ...(resumeLeadingMessages === undefined\n ? {}\n : { leadingMessages: resumeLeadingMessages }),\n ...(resumeResponseMessages === undefined\n ? {}\n : { responseMessages: resumeResponseMessages }),\n },\n }),\n ...(preparedContext === undefined ? {} : { context: preparedContext }),\n beforeTurn: () =>\n Effect.gen(function* () {\n // Preparation may resolve the next Model from canonical Tool results or invoke\n // a compaction Model. Publish the completed Turn before either can observe it.\n yield* recordHalt(commitPendingTurn);\n\n if (\n yieldAfter !== undefined &&\n (yield* Clock.currentTimeMillis) >= DateTime.toEpochMillis(yieldAfter)\n ) {\n yield* Deferred.succeed(yieldSignal, undefined);\n\n // The successful signal wins the outer race and closes the stream Scope;\n // no synthetic engine RunFailed event or terminal Settlement is produced.\n return yield* Effect.never;\n }\n }),\n ...(runContextPreparation.transientContext === undefined\n ? {}\n : { transientContext: runContextPreparation.transientContext }),\n ...(config.estimateCostMicrousd === undefined\n ? {}\n : { estimateCostMicrousd: config.estimateCostMicrousd }),\n resumeUsage: {\n ...journal.usage,\n ...journal.policyUsage,\n ...(journal.usage.modelCalls === 0 &&\n (journal.usage.unobservedModelCalls ?? 0) === 0 &&\n !records.some(\n ({ record }) =>\n record.payload._tag === \"ModelResponseInterrupted\" && record.payload.runId === runId,\n )\n ? emptyRunTotals()\n : runTotalsFromSummary(yield* currentUsageSummary())),\n children: childUsageReportsOf(subagentState),\n },\n ...(journal.contextWindowId === undefined\n ? {}\n : { initialContextWindowId: journal.contextWindowId }),\n ...(journal.protectedContext === undefined\n ? {}\n : { protectedContext: journal.protectedContext }),\n ...(journal.pendingContextToolCallId === undefined\n ? {}\n : { pendingContextToolCallId: journal.pendingContextToolCallId }),\n };\n\n const commitPendingTurn: Effect.Effect<void, DurableWorkerFailure> = Effect.gen(function* () {\n const state = yield* Ref.get(stateRef);\n const history = state.history;\n\n if (state.pendingTurn === undefined || history === undefined) return;\n let appended = history.content.slice(state.lastCommitLen);\n\n if (appended.length === 0) return;\n const canonicalTurn = state.pendingTurn.turn;\n const createdAt = yield* nowUtc;\n let committedLen = history.content.length;\n\n const completedRun =\n state.completedOutput === undefined\n ? undefined\n : {\n output: state.completedOutput,\n ...(state.completedRunDisposition === undefined\n ? {}\n : { runDisposition: state.completedRunDisposition }),\n ...(state.completedFinishReason === undefined\n ? {}\n : { finishReason: state.completedFinishReason }),\n ...(state.completedExhausted === undefined\n ? {}\n : { exhausted: state.completedExhausted }),\n };\n\n if (knownIds.has(modelResponseRecordId(runId, canonicalTurn))) {\n // The response is already durable (commit 1 of the split shape): only the results\n // batch remains. The slice is [response messages…, tool message, trailing input…]:\n // this commit's canonical coverage ends at the batch's Tool message — messages drained\n // at the post-batch seam stay pending and become the leading messages of the NEXT\n // response batch (decision point 6 / D8), never silently dropped.\n for (let index = appended.length - 1; index >= 0; index -= 1) {\n if (appended[index]?.role === \"tool\") {\n committedLen = state.lastCommitLen + index + 1;\n appended = appended.slice(0, index + 1);\n break;\n }\n }\n // Already-canonical per-call settles (late settles from the resolution path, or\n // resume-injected results) are excluded by record identity.\n const remaining: Array<Prompt.Message> = [];\n const resultParts: Array<Prompt.ToolResultPart> = [];\n let toolParts = 0;\n\n for (const message of appended) {\n if (message.role !== \"tool\") {\n remaining.push(message);\n continue;\n }\n\n const parts = message.content.filter(\n (part): part is Prompt.ToolResultPart =>\n part.type === \"tool-result\" &&\n !knownIds.has(`tool-settled:${runId}:${canonicalTurn}:${part.id}`),\n );\n\n if (parts.length === 0) continue;\n toolParts += parts.length;\n resultParts.push(...parts);\n remaining.push(Prompt.makeMessage(\"tool\", { content: parts }));\n }\n\n const settledCompletionPart =\n completedRun === undefined || toolParts > 0\n ? undefined\n : appended\n .flatMap((message) => (message.role === \"tool\" ? message.content : []))\n .find(\n (part) =>\n part.type === \"tool-result\" &&\n !part.isFailure &&\n agent.definition.completionFromTools?.some(\n (declaration) => declaration.tool === part.name,\n ),\n );\n\n if (settledCompletionPart?.type === \"tool-result\") {\n resultParts.push(settledCompletionPart);\n remaining.push(Prompt.makeMessage(\"tool\", { content: [settledCompletionPart] }));\n }\n\n if (toolParts > 0 || settledCompletionPart !== undefined) {\n const completion = agent.definition.completion;\n const completionPart = resultParts[0];\n\n const runCompletion =\n resultParts.length === 1 &&\n (completionPart?.name === completion?.tool ||\n agent.definition.completionFromTools?.some(\n (declaration) => declaration.tool === completionPart?.name,\n )) &&\n completionPart.isFailure !== true &&\n completedRun !== undefined\n ? completedRun\n : undefined;\n\n const batch = yield* turnResultsBatch({\n toolSelections: stagedToolSelections,\n budgetRejectedCalls,\n runId,\n turn: canonicalTurn,\n turnId: state.pendingTurn.turnId,\n appended: remaining,\n producerId: config.producerId,\n deploymentId: config.deploymentId,\n createdAt,\n ...(runCompletion === undefined ? {} : { runCompletion }),\n });\n\n // A recovered external receipt is already canonical. Commit only the terminal\n // marker at the same results boundary; never duplicate or rewrite its result.\n let pendingBatch = batch;\n\n if (settledCompletionPart !== undefined) {\n const completionRecord = batch.records.find(\n (record) => record.payload._tag === \"RunCompleted\",\n );\n\n if (completionRecord === undefined || knownIds.has(completionRecord.recordId)) {\n return yield* RunJournalError.make({\n message: \"Recovered action completion has no new terminal record\",\n });\n }\n pendingBatch = CanonicalBatch.make({ ...batch, records: [completionRecord] });\n }\n\n yield* appendBatch(ctx, pendingBatch);\n for (const record of pendingBatch.records) knownIds.add(record.recordId);\n yield* hit(\"turn:after-results-append\");\n }\n } else {\n // No durable response commit: the P4 single-batch shape (no-tool Turns).\n const runScopedPrefixLength =\n canonicalTurn === 1\n ? appended.findIndex((message) => message.role === \"assistant\")\n : -1;\n\n const batch = yield* withCrypto(\n turnCanonicalBatch({\n toolExposure: stagedToolExposure.get(canonicalTurn),\n toolSelections: stagedToolSelections,\n budgetRejectedCalls,\n runId,\n turn: canonicalTurn,\n turnId: state.pendingTurn.turnId,\n appended,\n producerId: config.producerId,\n deploymentId: config.deploymentId,\n createdAt,\n ...(runScopedPrefixLength > 0 ? { runScopedPrefixLength } : {}),\n ...(completedRun === undefined ? {} : { runCompletion: completedRun }),\n usage: stagedUsage.get(canonicalTurn),\n unobservedModelCalls: stagedUnobservedCalls.get(canonicalTurn),\n }),\n );\n\n yield* appendBatch(ctx, batch);\n recordCommittedUsage(batch);\n for (const record of batch.records) knownIds.add(record.recordId);\n yield* hit(\"turn:after-canonical-append\");\n }\n yield* Ref.update(stateRef, (current) => ({\n ...current,\n lastCommitLen: committedLen,\n pendingTurn: undefined,\n }));\n });\n\n const recordCompleted = (\n output: unknown,\n finishReason: \"completed\" | \"model-stop\" | \"budget-exhausted\",\n exhausted: ExhaustedLimit | undefined,\n runDisposition: unknown,\n ): Effect.Effect<void, DurableWorkerFailure> =>\n Effect.gen(function* () {\n const result = yield* Schema.decodeUnknownEffect(PersistedJson)(output).pipe(\n Effect.mapError((cause): DurableWorkerFailure =>\n LedgerError.make({\n operation: \"recordCompleted\",\n message: \"Run output exceeds canonical persistence bounds\",\n cause,\n }),\n ),\n );\n\n if (finishReason === \"budget-exhausted\" && runDisposition !== undefined) {\n return yield* LedgerError.make({\n operation: \"recordCompleted\",\n message: \"A budget-exhausted Run cannot declare an application run disposition\",\n });\n }\n\n const persistedRunDisposition =\n runDisposition === undefined\n ? undefined\n : yield* Schema.decodeUnknownEffect(PersistedJson)(runDisposition).pipe(\n Effect.mapError((cause): DurableWorkerFailure =>\n LedgerError.make({\n operation: \"recordCompleted\",\n message: \"Run disposition exceeds canonical persistence bounds\",\n cause,\n }),\n ),\n );\n\n yield* Ref.update(stateRef, (state) => ({\n ...state,\n completedOutput: result,\n completedRunDisposition: persistedRunDisposition,\n completedFinishReason: finishReason === \"budget-exhausted\" ? finishReason : undefined,\n // The pair travels together or not at all (RUN-011 fail-safe): a\n // divergent event never persists a lone dimension.\n completedExhausted: finishReason === \"budget-exhausted\" ? exhausted : undefined,\n }));\n });\n\n const handleEvent = (event: RunEvent): Effect.Effect<void, DurableWorkerFailure> => {\n switch (event._tag) {\n case \"TurnStarted\": {\n // Suspension owns only this Turn's siblings. Earlier results are already canonical\n // under their original Turn and must never be re-recorded with a later Turn id.\n return commitPendingTurn.pipe(\n Effect.andThen(\n Effect.sync(() => {\n siblingResults.clear();\n stagedToolSelections.clear();\n }),\n ),\n );\n }\n case \"TurnCompleted\": {\n const turnId = event.turnId ?? turnIdForRun(runId, event.turn);\n\n return Ref.update(stateRef, (state) => ({\n ...state,\n pendingTurn: { turn: event.turn, turnId },\n }));\n }\n case \"RunCompleted\": {\n return recordCompleted(\n event.output,\n event.finishReason,\n event.exhausted,\n event.runDisposition,\n ).pipe(\n // The terminal state is available while the final canonical\n // batch is built, so its RunCompleted marker commits atomically\n // with either the no-tool response or the completion Tool result.\n Effect.andThen(commitPendingTurn),\n );\n }\n case \"RunFailed\": {\n // Preserve a completed-and-advanced final Turn for audit before the Run settles failed.\n return commitPendingTurn;\n }\n case \"ToolCallSucceeded\": {\n if (!event.providerExecuted && event.toolSelection !== undefined)\n stagedToolSelections.set(event.toolCallId, event.toolSelection);\n // Collected for the waitingForChild suspension seam: a batch that suspends never\n // reaches its results commit, so each settled sibling result is committed there as\n // a per-call late-settle batch instead (plan §2 step 2).\n if (!event.providerExecuted) {\n siblingResults.set(event.toolCallId, {\n toolCallId: event.toolCallId,\n result: event.result,\n isFailure: false,\n });\n }\n\n return Effect.void;\n }\n case \"ToolCallFailed\": {\n if (event.budgetRejected === true) budgetRejectedCalls.add(event.toolCallId);\n // Only the bounded diagnostics survive the event stream for a failed sibling; the\n // per-call late-settle carries this same bounded `{errorTag, message}` projection.\n if (!event.providerExecuted) {\n siblingResults.set(event.toolCallId, {\n toolCallId: event.toolCallId,\n result: { errorTag: event.errorTag, message: boundedText(event.message) },\n isFailure: true,\n });\n }\n\n return Effect.void;\n }\n default: {\n return Effect.void;\n }\n }\n };\n\n /**\n * The waitingForChild suspension seam (plan §2 steps 1-4): every non-waiting sibling of\n * the suspending batch has settled — commit each terminal sibling result as a per-call\n * late-settle batch (`turn-results:{runId}:{turn}:{toolCallId}`) in the batch's declared\n * order, so no sibling effect is lost to the suspension and the resumed batch injects\n * them via `resume.settled`. Record identity dedupes results already canonical (joined\n * delegation calls, resume-injected siblings).\n */\n const commitSiblingLateSettles = (\n children: AgentChildPending[\"children\"],\n ): Effect.Effect<void, DurableWorkerFailure> =>\n Effect.gen(function* () {\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) return;\n const waitingIds = new Set<string>(children.map((child) => child.toolCallId));\n\n // Declared order first (SUB-013's commit-order rule), then any residue in arrival order.\n const ordered = [\n ...[...declaredNamesByCallId.keys()].filter((callId) => siblingResults.has(callId)),\n ...[...siblingResults.keys()].filter((callId) => !declaredNamesByCallId.has(callId)),\n ];\n\n for (const callId of ordered) {\n if (waitingIds.has(callId)) continue;\n const settled = siblingResults.get(callId);\n\n if (settled === undefined) continue;\n const toolCallId = settled.toolCallId;\n const recordId = toolCallSettledRecordId(runId, turnInfo.turn, toolCallId);\n\n if (knownIds.has(recordId)) continue;\n const toolName = declaredNamesByCallId.get(callId);\n\n if (toolName === undefined) {\n return yield* RunJournalError.make({\n message: `Settled sibling ${toolCallId} has no declared Tool name at the suspension seam`,\n });\n }\n\n const result = yield* decodePersisted(settled.result).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Sibling result ${toolCallId} exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const envelope = yield* makeEnvelope(\n recordId,\n ToolCallSettled.make({\n runId,\n toolCallId,\n toolName,\n result,\n isFailure: settled.isFailure,\n ...(stagedToolSelections.get(toolCallId) === undefined\n ? {}\n : { toolSelection: stagedToolSelections.get(toolCallId) }),\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: toolCallResultBatchId(runId, turnInfo.turn, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(recordId);\n yield* hit(\"subagent:after-sibling-settle\");\n }\n });\n\n // Durability §9: the superseding Attempt records the interruption BEFORE re-invoking the\n // model. A batch resume never re-invokes the model for the pending Turn, so it is exempt.\n if (\n pending === undefined &&\n lineage.inputWasRecorded &&\n lineage.supersededEpoch >= 1 &&\n lineage.supersededEpoch < ctx.producerEpoch\n ) {\n yield* appendInterruptedAudit(ctx, runId, lineage, knownIds);\n interruptedUsage = true;\n }\n\n const consume = Stream.runForEach(\n AgentRuntime.streamWithUsageAccountingUnknown(agent, submission.inputPayload, options).pipe(\n Stream.provideService(AgentUpdateAcceptance, {\n accept: (update) =>\n updateRuntime\n .emit({\n updateId: update.updateId,\n value: update.value,\n submission,\n runId,\n producerEpoch: ctx.producerEpoch,\n definitions: submission.agentDigests,\n })\n .pipe(\n Effect.catchTag([\"LedgerError\", \"DurableRuntimeFailpointError\"], (failure) =>\n // Preserve the original infrastructure failure at the coordinator boundary;\n // the engine's next event must not commit this Tool's failure as an outcome.\n Ref.set(haltRef, failure).pipe(\n Effect.andThen(Effect.fail(UpdateError.make({ reason: \"storage\" }))),\n ),\n ),\n ),\n }),\n Stream.provideService(ModelUsageAccounting, {\n noteIncompleteUsage: (turn) =>\n Effect.sync(() => {\n stagedUnobservedCalls.set(turn, (stagedUnobservedCalls.get(turn) ?? 0) + 1);\n }),\n }),\n Stream.provide(ThreadHistory.layer),\n Stream.provideService(SubagentHost.forTool, (source) =>\n source.threadId !== submission.threadId ||\n source.agentId !== submission.agentId ||\n source.runId !== runId\n ? SubagentHost.unavailable\n : workerRuntime.facet(\n {\n source,\n policy: agent.definition.policy,\n depth: delegationDepth,\n ...(inheritedGrant === undefined ? {} : { grant: inheritedGrant }),\n },\n submission.principal,\n submission.submissionId,\n ),\n ),\n Stream.provideService(MessagingHost.forTool, (source) =>\n source.threadId !== submission.threadId ||\n source.agentId !== submission.agentId ||\n source.runId !== runId\n ? MessagingHost.unavailable\n : messagingRuntime.forTool(source, submission.principal),\n ),\n Stream.provideService(CurrentToolFailureObserver, toolFailureObserver),\n Stream.provideService(RunToolVisibility, runToolVisibility),\n Stream.provideService(RunToolScheduling, runToolScheduling),\n Stream.provideService(ContextCompactor, compactor),\n Stream.provideService(RunContextPreparation, runContextPreparation),\n ),\n (event) =>\n halt(\n Effect.gen(function* () {\n // A broker reports hook failures as Tool preflight data. The coordinator's recorded\n // infrastructure halt must win before any subsequent event commits that Tool outcome.\n const failure = yield* Ref.get(haltRef);\n\n if (failure !== undefined) return yield* Effect.fail(failure);\n yield* handleEvent(event);\n }),\n ),\n ).pipe(Effect.as({ _tag: \"run\" as const }));\n\n // Durable §13: the abort command becomes canonical (serialized on the append gate) BEFORE\n // the Run fiber is interrupted by losing the race.\n const abortWatcher = halt(\n Effect.gen(function* () {\n while (true) {\n yield* Effect.sleep(config.abortPollInterval);\n\n const intent = yield* ledger.readAbortIntent(AbortIntentRequest.make({ submissionId }));\n\n if (intent === undefined) continue;\n yield* appendAbortRecord(ctx, intent);\n\n return { _tag: \"aborted\" as const };\n }\n }),\n );\n\n // Liveness only: the lease keeps the claim visible; correctness stays with the epoch fence.\n // OwnershipLost ends the race and interrupts the Run fiber cleanly.\n const renewal = halt(\n Effect.repeat(\n Effect.gen(function* () {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const renewal = yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({ submissionId, ownershipToken }),\n );\n\n yield* Ref.set(tokenRef, renewal.ownershipToken);\n }).pipe(Effect.uninterruptible),\n { schedule: Schedule.spaced(config.leaseRenewalInterval) },\n ).pipe(Effect.andThen(Effect.never)),\n );\n\n const execution = Effect.raceFirst(consume, Effect.raceFirst(abortWatcher, renewal));\n\n const raced = (\n yieldAfter === undefined\n ? execution\n : Effect.raceFirst(\n execution,\n Deferred.await(yieldSignal).pipe(Effect.as({ _tag: \"yielded\" as const })),\n )\n ).pipe(Effect.provideService(IdGenerator, idGenerator));\n\n const result = yield* raced.pipe(\n Effect.catch(\n (\n error,\n ): Effect.Effect<\n | { readonly _tag: \"failedRun\"; readonly outcome: AttemptOutcome }\n | { readonly _tag: \"suspendedRun\"; readonly toolCallId: ToolCallId }\n | {\n readonly _tag: \"suspendedChildRun\";\n readonly children: AgentChildPending[\"children\"];\n },\n DurableWorkerFailure\n > => {\n if (error instanceof CoordinatorHalt) {\n return Effect.fail(error.failure);\n }\n const approvalPending = agentApprovalPendingOption(error);\n\n if (Option.isSome(approvalPending)) {\n // Durable approval suspension (plan §2.6): the approval hook already made the\n // request canonical; `runAttempt` owns the ledger transition. The engine decoded\n // the declared call id before raising the suspension, so a failure is a defect.\n return decodeToolCallIdUnknown(approvalPending.value.toolCallId).pipe(\n Effect.orDie,\n Effect.map((toolCallId) => ({ _tag: \"suspendedRun\" as const, toolCallId })),\n );\n }\n const childPending = agentChildPendingOption(error);\n\n if (Option.isSome(childPending)) {\n // Durable waitingForChild suspension (spec §12 step 10): every non-waiting\n // sibling settled before the Run terminated; commit their results as per-call\n // late-settle batches FIRST so no sibling effect is lost, then let `runAttempt`\n // own the ledger transition.\n return commitSiblingLateSettles(childPending.value.children).pipe(\n Effect.map(() => ({\n _tag: \"suspendedChildRun\" as const,\n children: childPending.value.children,\n })),\n );\n }\n\n return Effect.gen(function* () {\n // A recorded halt means a coordinator mutation failed inside a Tool handler\n // (the engine re-wraps step-hook and subagent-hook errors): abort the Attempt\n // with the original infrastructure failure instead of settling the Run failed.\n const halted = yield* Ref.get(haltRef);\n\n if (halted !== undefined) {\n return yield* halted;\n }\n\n // Settlement keeps only a bounded diagnostic. Report the live failure here,\n // after excluding suspensions, so hosts retain its cause and stack exactly\n // once per failed Run; reading or retrying its receipt never reports again.\n if (\n !(error instanceof AgentApprovalDenied) &&\n !(error instanceof AgentToolAuthorizationDenied)\n )\n yield* Effect.logError(\"Agent run failed\", Cause.fail(error)).pipe(\n Effect.annotateLogs({\n agentId: agent.definition.id,\n runId,\n threadId: ctx.threadId,\n submissionId,\n attemptId: lineage.attemptId,\n }),\n );\n\n return {\n _tag: \"failedRun\" as const,\n outcome: yield* failureOutcome(error),\n };\n });\n },\n ),\n );\n\n if (result._tag === \"yielded\") return result;\n if (result._tag === \"suspendedRun\") return approvalSuspension(result.toolCallId);\n if (result._tag === \"suspendedChildRun\") return childSuspension(result.children);\n if (result._tag === \"aborted\") {\n return {\n ...abortedRunPhase(yield* currentUsageSummary()),\n uncommittedModelUsage: uncommittedModelUsage(),\n };\n }\n if (result._tag === \"failedRun\") {\n const failed: RunPhaseOutcome = {\n ...result.outcome,\n usageSummary: yield* currentUsageSummary(),\n uncommittedModelUsage: uncommittedModelUsage(),\n };\n\n return failed;\n }\n const state = yield* Ref.get(stateRef);\n\n if (state.completedOutput === undefined) {\n return yield* LedgerError.make({\n operation: \"runModel\",\n message: \"Agent Run stream ended without RunCompleted\",\n });\n }\n\n const completed: RunPhaseOutcome = {\n _tag: \"completed\",\n result: state.completedOutput,\n ...(state.completedRunDisposition === undefined\n ? {}\n : { runDisposition: state.completedRunDisposition }),\n ...(state.completedFinishReason === undefined\n ? {}\n : { finishReason: state.completedFinishReason }),\n ...(state.completedFinishReason === undefined || state.completedExhausted === undefined\n ? {}\n : { exhausted: state.completedExhausted }),\n usageSummary: yield* currentUsageSummary(),\n uncommittedModelUsage: uncommittedModelUsage(),\n };\n\n return completed;\n });\n\n /**\n * One ownership period over the claimed lane head. The step order mirrors the pure recovery\n * classifier's decision table, so a fresh Attempt and a recovering Attempt take the same path\n * through the same idempotent steps. Returns `Option.none` when the lane is durably blocked\n * (Unknown Outcomes, or a durable approval suspension) — no settlement occurs and the\n * obligation stays owed.\n */\n const runAttempt = <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined =\n undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n registeredAgent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n threadId: ThreadId,\n claim: Claim,\n tokenRef: Ref.Ref<OwnershipToken>,\n yieldAfter?: DateTime.Utc,\n ) =>\n Effect.gen(function* () {\n const submissionId = claim.submissionId;\n\n // The Thread-store fence BEFORE this Attempt advances it identifies the superseded\n // ownership period for the durability §9 interruption audit.\n const supersededEpoch = yield* store.inspectTail(ThreadTailRequest.make({ threadId })).pipe(\n Effect.map((tail) => tail.producerEpoch),\n Effect.catchTag(\"ThreadNotMaterialized\", () => Effect.succeed(ZERO_EPOCH)),\n );\n\n // Advance the Thread-store fence to this Attempt's epoch (idempotent when equal).\n yield* store.materialize(\n ThreadMaterialization.make({ threadId, producerEpoch: claim.producerEpoch }),\n );\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n const submission = snapshot.submission;\n\n yield* ensureThreadCreated(threadId, submission.agentId, submission.agentDigests);\n if (submission.workerAdmission?.origin.reporting?.mode === \"standard\")\n yield* updateRuntime.repair(threadId);\n if (submission.workerAdmission !== undefined) {\n yield* workerRuntime\n .ensureOrigin(submission.workerAdmission.origin)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason }),\n ),\n );\n }\n if (submission.state === \"admitted\") {\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId }));\n }\n const ctx = yield* attemptContextFor(threadId, claim.producerEpoch);\n\n let controlThrough = (yield* store.inspectTail(ThreadTailRequest.make({ threadId })))\n .tailSequence;\n\n const initialThrough = controlThrough;\n const initialView = yield* recoveryView(threadId, initialThrough, [submissionId]);\n\n let journalMetadata =\n initialView.seed === undefined\n ? makeJournalMetadata(runIdForSubmission(submissionId))\n : undefined;\n\n const retainControl = controlRecords([submissionId]);\n\n const collectControl = (record: CanonicalRecordEnvelope): boolean => {\n // Compaction payloads may carry large summaries or handoffs. Keep their metadata\n // scoped to ordinary projection, never retained across this Attempt's model waits.\n if (record.record.payload._tag === \"CompactionCreated\") journalMetadata = undefined;\n else journalMetadata?.add(record);\n\n return retainControl(record);\n };\n\n let records: ReadonlyArray<CanonicalRecordEnvelope> = yield* Stream.runCollect(\n initialView.canonical.pipe(Stream.filter(collectControl)),\n );\n\n // The append-only prefix remains valid for this Attempt. Retain only this Run's control\n // evidence and validate each newly visible suffix against its own captured tail.\n const refreshControl = Effect.fn(\"DurableAgentRuntime.refreshAttemptControl\")(function* (\n throughSequence?: CanonicalSequence,\n ) {\n const through =\n throughSequence ??\n (yield* store.inspectTail(ThreadTailRequest.make({ threadId }))).tailSequence;\n\n if (through > controlThrough) {\n const suffix = yield* readCanonicalRange(\n threadId,\n controlThrough,\n through,\n collectControl,\n );\n\n records = [...records, ...suffix];\n controlThrough = through;\n }\n\n return records;\n });\n\n const workerOrigin = records\n .map((envelope) => envelope.record.payload)\n .find((payload) => payload._tag === \"WorkerOriginRecorded\")?.origin;\n\n if (\n workerOrigin !== undefined &&\n (submission.workerAdmission === undefined ||\n !Schema.toEquivalence(WorkerAdmission.fields.origin)(\n workerOrigin,\n submission.workerAdmission.origin,\n ))\n ) {\n return yield* RunJournalError.make({\n message: \"Worker input does not match its immutable Thread origin\",\n });\n }\n\n const childPolicy =\n workerOrigin?.policy ??\n records\n .map((envelope) => envelope.record.payload)\n .find((payload) => payload._tag === \"SubagentLineageRecorded\")?.policy;\n\n const agent =\n childPolicy === undefined\n ? registeredAgent\n : {\n ...registeredAgent,\n definition: { ...registeredAgent.definition, policy: childPolicy },\n };\n\n const evidence = yield* evidenceFor(records, submissionId, true, snapshot.hostSubmissionId);\n const knownIds = knownRecordIdsOf(records);\n\n if (evidence.recordedSettlementOutcome !== undefined) {\n const record = yield* canonicalSettlementRecord(records, submissionId);\n const settlement = yield* finalizeFromHistory(submission, record);\n const canonicalSettlement = yield* settlementPayloadFromRecord(record, submissionId);\n\n yield* settleJoinedSubmissions(ctx, canonicalSettlement);\n\n return Option.some(settlement);\n }\n if (snapshot.reservation !== undefined) {\n return Option.some(\n yield* completeReservation(ctx, submission, snapshot.reservation, false),\n );\n }\n if (snapshot.abortIntent !== undefined) {\n // request-abort-and-join (spec §13.1, SUB-022): propagate the durable abort to every\n // nonterminal attached child, join every settled child coordinator-side, and settle\n // aborted ONLY once no child obligation stays open. A waiting/blocked disposition ends\n // the ownership period without settling — the obligation stays owed.\n const disposition = yield* abortAttachedChildren(ctx, submission, tokenRef, knownIds);\n\n if (disposition === \"waiting\") {\n return Option.none<Settlement>();\n }\n if (disposition === \"blocked\") {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(ReleaseOwnershipRequest.make({ submissionId, ownershipToken }))\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return Option.none<Settlement>();\n }\n\n return Option.some(\n yield* settleAborted(ctx, submission, tokenRef, snapshot.abortIntent, evidence, knownIds),\n );\n }\n yield* applyCanonicalInput(ctx, submission, tokenRef, records, snapshot.inputApplied);\n\n const savedRunTiming = yield* ensureRunStarted(\n ctx,\n submission,\n Duration.toMillis(agent.definition.policy.maxDuration),\n yield* refreshControl(),\n );\n\n const runTiming =\n workerOrigin === undefined\n ? savedRunTiming\n : {\n ...savedRunTiming,\n deadline: DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(savedRunTiming.deadline),\n workerOrigin.expiresAtMillis,\n ),\n ),\n };\n\n let expiredChildObligation = false;\n\n if ((yield* Clock.currentTimeMillis) >= DateTime.toEpochMillis(runTiming.deadline)) {\n yield* reconcileExpiredChildren(ctx, submission, yield* Ref.get(tokenRef));\n expiredChildObligation = yield* completeJoinedReleases(submission);\n }\n\n // Recheck after duration interruption too: that Attempt may have prepared new ordinary calls.\n const ordinaryCallsResolved = Effect.gen(function* () {\n const reconciliationRecords = yield* refreshControl();\n\n const reconciliationSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n const reconciliationEvidence = yield* evidenceFor(\n reconciliationRecords,\n submissionId,\n true,\n reconciliationSnapshot.hostSubmissionId,\n );\n\n if (reconciliationEvidence.openToolCalls.length === 0) return true;\n for (const envelope of reconciliationRecords) knownIds.add(envelope.record.recordId);\n const tools: Record<string, Tool.Any> = agent.definition.toolkit.tools;\n\n const review = yield* reconcileOpenCalls(\n ctx,\n submission,\n reconciliationSnapshot,\n reconciliationRecords,\n reconciliationEvidence.openToolCalls,\n knownIds,\n (toolName) => {\n const tool = tools[toolName];\n\n return tool === undefined ? undefined : getToolExecutionClass(tool);\n },\n );\n\n if (review.uncertain.length > 0 || review.unproven.length > 0) {\n if (review.uncertain.length > 0) {\n yield* markCallsUnknown(\n ctx,\n submissionId,\n knownIds,\n review.uncertain,\n \"An ordinary Tool call may have executed without a canonical outcome\",\n );\n }\n // The lane is blocked (marked Unknown, or the reconciliation policy itself failed):\n // release the claim without settling — the accepted-work obligation stays owed.\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(ReleaseOwnershipRequest.make({ submissionId, ownershipToken }))\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return false;\n }\n\n return true;\n });\n\n if (!expiredChildObligation && !(yield* ordinaryCallsResolved))\n return Option.none<Settlement>();\n\n const lineage: AttemptLineage = {\n attemptId: claim.attemptId,\n supersededEpoch,\n inputWasRecorded: evidence.inputRecorded,\n };\n\n let approvalDecisionIntents = snapshot.approvalDecisions;\n\n while (true) {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n const canonical = Stream.concat(\n initialView.canonical,\n canonicalRange(threadId, tail.tailSequence, initialThrough),\n );\n\n const currentRecords = yield* refreshControl(tail.tailSequence);\n\n const outcome = yield* runModel(\n agent,\n ctx,\n submission,\n tokenRef,\n currentRecords,\n canonical,\n tail.tailSequence,\n initialView.seed,\n journalMetadata?.snapshot(),\n lineage,\n approvalDecisionIntents,\n runTiming,\n yieldAfter,\n );\n\n if (outcome._tag === \"yielded\") return Option.none();\n if (outcome._tag === \"suspendedChild\") {\n // Durable waitingForChild suspension (spec §12 step 10, SUB-030): the sibling\n // late-settles are already canonical; the ledger transition ends the ownership\n // period WITHOUT settling and the lane consumes no worker permit while each listed\n // child runs on its own Thread lane. A child settlement racing ahead of the\n // suspend transaction returns `resume-immediately`: the declared batch replays under\n // this same claim and the handler joins the settled child.\n const [firstChild, ...restChildren] = outcome.children;\n\n const waitingChildren: readonly [WaitingChild, ...Array<WaitingChild>] = [\n WaitingChild.make({\n toolCallId: firstChild.toolCallId,\n childSubmissionId: firstChild.childSubmissionId,\n }),\n ...restChildren.map((child) =>\n WaitingChild.make({\n toolCallId: child.toolCallId,\n childSubmissionId: child.childSubmissionId,\n }),\n ),\n ];\n\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId,\n ownershipToken,\n reason: WaitingForChildSuspension.make({ children: waitingChildren }),\n }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n for (const child of outcome.children) {\n yield* wake.notify(child.childThreadId);\n }\n if (suspension === \"suspended\") {\n return Option.none<Settlement>();\n }\n continue;\n }\n if (outcome._tag === \"suspended\") {\n // Durable approval suspension (plan §2.6): the ledger transition ends the ownership\n // period WITHOUT settling — the accepted-work obligation stays owed while the lane\n // consumes no worker permit. A decision that raced ahead of the suspend transaction\n // returns `resume-immediately`: the declared batch replays under this same claim with\n // the fresh decision intents (no model re-invocation — the response is canonical).\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId,\n ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [outcome.toolCallId] }),\n }),\n );\n\n yield* hit(\"approval:after-suspend\");\n if (suspension === \"suspended\") {\n return Option.none<Settlement>();\n }\n approvalDecisionIntents = (yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n )).approvalDecisions;\n continue;\n }\n if (outcome._tag === \"aborted\") {\n // The abort watcher ended the Run while attached children may still be open:\n // request-abort-and-join before the aborted settlement (spec §13.1).\n const disposition = yield* abortAttachedChildren(ctx, submission, tokenRef, knownIds);\n\n if (disposition === \"waiting\") {\n return Option.none<Settlement>();\n }\n if (disposition === \"blocked\") {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(ReleaseOwnershipRequest.make({ submissionId, ownershipToken }))\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return Option.none<Settlement>();\n }\n\n return Option.some(yield* terminalize(ctx, submission, tokenRef, outcome, true));\n }\n // Canonical joins drive their reservation release BEFORE the parent settles (a settled\n // lane would strand the repair); a reserved row WITHOUT a canonical join is an open\n // attached-child obligation and the parent never settles across it (spec §13).\n if (outcome._tag === \"failed\" && outcome.policyLimit === \"duration\") {\n yield* reconcileExpiredChildren(ctx, submission, yield* Ref.get(tokenRef));\n }\n const openObligation = yield* completeJoinedReleases(submission);\n\n if (openObligation) {\n if (outcome._tag === \"failed\") {\n // Release the claim and leave the lane to recovery classification.\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(ReleaseOwnershipRequest.make({ submissionId, ownershipToken }))\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return Option.none<Settlement>();\n }\n\n // A completed Run with an unjoined reservation is structurally unreachable (the\n // delegation Tool Call settles only through the atomic join batch): fail closed\n // with the obligation visibly owed instead of settling across it.\n return yield* LedgerError.make({\n operation: \"runAttempt\",\n message: `Submission ${submissionId} completed with an unjoined child budget reservation; the settlement is withheld fail-closed (spec 13)`,\n });\n }\n if (\n outcome._tag === \"failed\" &&\n outcome.policyLimit === \"duration\" &&\n !(yield* ordinaryCallsResolved)\n ) {\n return Option.none<Settlement>();\n }\n\n return Option.some(yield* terminalize(ctx, submission, tokenRef, outcome, true));\n }\n }).pipe(Effect.scoped);\n\n /**\n * Framework-owned Schema-stable `ChildCompatibilityFailure` Settlement for a parent-linked\n * child whose exact Binding cannot be resolved at claim time (spec §11, SUB-023/SUB-032): no\n * application code runs, the child never executes, and the parent joins the bounded failure\n * through the normal verification path. A pre-existing reservation or canonical settlement is\n * completed instead of re-decided.\n */\n const settleChildCompatibility = Effect.fn(\"DurableAgentRuntime.settleChildCompatibility\")(\n function* (\n claim: Claim,\n submission: SubmissionSnapshot,\n failure: DurableBindingFailure,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n yield* ensureThreadCreated(submission.threadId, submission.agentId, submission.agentDigests);\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const tokenRef = yield* Ref.make(claim.ownershipToken);\n const records = yield* readControl(submission.threadId, [submission.submissionId]);\n\n const recorded = records.some(\n (envelope) =>\n envelope.record.recordId === submissionSettlementRecordId(submission.submissionId),\n );\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n if (snapshot.reservation !== undefined) {\n // An earlier pass already reserved the one exact outcome: complete it, never re-decide.\n return yield* completeReservation(ctx, submission, snapshot.reservation, recorded);\n }\n\n const result = yield* Schema.decodeEffect(SettlementFailureDiagnostic)({\n errorTag: \"ChildCompatibilityFailure\",\n message: boundedText(failure.message),\n }).pipe(Effect.orDie);\n\n return yield* terminalize(ctx, submission, tokenRef, { _tag: \"failed\", result }, false);\n },\n );\n\n /**\n * Drain one Thread lane under claim-time Binding resolution (plan §1.7): every claimed\n * head resolves through the selected private binding path before any code runs. A refusal\n * writes the framework `ChildCompatibilityFailure` Settlement for a\n * parent-linked child and surfaces the typed refusal (after releasing the claim) for a root —\n * a worker never runs a claimed head against different code (SUB-023).\n */\n type CapturedWorkerBinding = Effect.Success<ReturnType<typeof makeLegacyWorkerBinding>>;\n\n // Register cleanup before any interruptible work can observe a granted claim. The token\n // reference is shared with renewal, so cleanup never releases with a superseded token.\n const acquireClaim = Effect.fn(\"DurableAgentRuntime.acquireClaim\")(function* (\n threadId: ThreadId,\n ) {\n const claimed = yield* ledger.claim(\n ClaimRequest.make({ threadId, producerId: config.producerId }),\n );\n\n if (Option.isNone(claimed)) return Option.none();\n const claim = claimed.value;\n const tokenRef = yield* Ref.make(claim.ownershipToken);\n\n yield* Effect.addFinalizer(() =>\n Ref.get(tokenRef).pipe(\n Effect.flatMap((ownershipToken) =>\n ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({ submissionId: claim.submissionId, ownershipToken }),\n ),\n ),\n Effect.catchTag(\"OwnershipLost\", () => Effect.void),\n Effect.catchTag(\"LedgerError\", () =>\n Effect.logWarning(\n \"Attempt ownership release failed; lease recovery remains required\",\n ).pipe(Effect.annotateLogs({ submissionId: claim.submissionId })),\n ),\n ),\n );\n\n return Option.some({ claim, tokenRef });\n }, Effect.uninterruptible);\n\n const processThreadHead = (\n resolve: (\n submission: SubmissionSnapshot,\n ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure>,\n threadId: ThreadId,\n options?: { readonly yieldAfter?: DateTime.Utc },\n ): Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n Effect.scoped(\n Effect.gen(function* () {\n const claimed = yield* acquireClaim(threadId);\n\n if (Option.isNone(claimed)) return Option.none();\n const { claim, tokenRef } = claimed.value;\n\n const attributes = {\n threadId,\n submissionId: claim.submissionId,\n attemptId: claim.attemptId,\n };\n\n yield* Effect.annotateCurrentSpan(attributes);\n yield* Effect.annotateLogsScoped(attributes);\n yield* hit(\"claim:after-claim\");\n\n const found = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: claim.submissionId }),\n );\n\n if (Option.isNone(found)) {\n return yield* LedgerError.make({\n operation: \"processThreadHead\",\n message: `Claimed unknown Submission ${claim.submissionId}`,\n });\n }\n const submission = found.value;\n\n // The claim head rule legally grants an `admitted` head, so the worker path\n // enforces the same AwaitParentEstablishment discipline as the recovery classifier —\n // a parent-linked child whose Thread lacks its canonical lineage record is not\n // runnable yet (the parent's idempotent establishment appends lineage BEFORE\n // readiness, SUB-016).\n // Release the claim, nudge the parent lane, and leave the child to establishment.\n if (submission.parentLinkage !== undefined && submission.state === \"admitted\") {\n const read = yield* readAllTolerant(threadId, []);\n\n const lineageRecorded = read.records.some(\n (envelope) => envelope.record.payload._tag === \"SubagentLineageRecorded\",\n );\n\n if (!lineageRecorded) {\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: claim.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n const parent = yield* ledger.lookup(\n SubmissionLookupById.make({\n submissionId: submission.parentLinkage.parentSubmissionId,\n }),\n );\n\n if (Option.isSome(parent)) {\n yield* wake.notify(parent.value.threadId);\n }\n\n return Option.none();\n }\n }\n\n const resolution = yield* resolve(submission).pipe(\n Effect.map((binding) => ({ _tag: \"resolved\" as const, binding })),\n Effect.catchTags({\n BindingUnavailable: (failure) => Effect.succeed({ _tag: \"refused\" as const, failure }),\n BindingDigestMismatch: (failure) =>\n Effect.succeed({ _tag: \"refused\" as const, failure }),\n }),\n );\n\n if (resolution._tag === \"refused\") {\n if (submission.parentLinkage !== undefined) {\n return Option.some(\n yield* settleChildCompatibility(claim, submission, resolution.failure),\n );\n }\n\n // Root Submission: release the claim and surface the typed refusal — the obligation\n // stays visible and no different code ever runs (spec §11).\n return yield* resolution.failure;\n }\n\n return yield* resolution.binding.attempt(\n (agent, attemptThreadId, attemptClaim) =>\n runAttempt(agent, attemptThreadId, attemptClaim, tokenRef, options?.yieldAfter),\n threadId,\n claim,\n );\n }),\n ).pipe(withThreadHeadSpan);\n\n const drainThread = (\n resolve: (\n submission: SubmissionSnapshot,\n ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure>,\n threadId: ThreadId,\n ): Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n Effect.gen(function* () {\n const settlements: Array<Settlement> = [];\n\n while (true) {\n const settlement = yield* processThreadHead(resolve, threadId);\n\n if (Option.isNone(settlement)) {\n // The head is durably blocked (Unknown Outcome, approval suspension, or a\n // waitingForChild suspension): the lane frees its worker permit while the settlement\n // obligation stays visible (durability §16, plan §2.6, SUB-030).\n return settlements;\n }\n settlements.push(settlement.value);\n }\n });\n\n const processThreadImpl = <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined =\n undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n threadId: ThreadId,\n ) =>\n Effect.gen(function* () {\n // The legacy single-binding worker is a singleton resolver (plan §1.7): identity-exact —\n // a claimed head with a different Agent never runs against this binding (the latent P4\n // gap) — and digest-transparent, because this call site registers no digest authority.\n const binding = yield* makeLegacyWorkerBinding(agent);\n\n return yield* drainThread(\n (submission) =>\n submission.agentId === binding.agentId\n ? Effect.succeed(binding)\n : Effect.fail(\n BindingUnavailable.make({\n agentId: submission.agentId,\n message: `This worker is bound to Agent ${binding.agentId}; the claimed head belongs to Agent ${submission.agentId} (SUB-023)`,\n }),\n ),\n threadId,\n );\n });\n\n const processThreadResolvedImpl = (\n threadId: ThreadId,\n ): Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n drainThread(\n (submission) =>\n resolveWorkerBinding(registeredBindings, submission.agentId, submission.agentDigests),\n threadId,\n );\n\n const processThreadHeadImpl = (\n threadId: ThreadId,\n options?: { readonly yieldAfter?: DateTime.Utc },\n ): Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n processThreadHead(\n (submission) =>\n resolveWorkerBinding(registeredBindings, submission.agentId, submission.agentDigests),\n threadId,\n options,\n );\n\n const claimFor = Effect.fn(\"DurableAgentRuntime.claimFor\")(function* (\n submission: SubmissionSnapshot,\n ): Effect.fn.Return<Option.Option<Claim>, LedgerError | OwnershipLost, Scope.Scope> {\n const head = yield* Stream.runHead(\n ledger.scanNonterminal.pipe(Stream.filter((entry) => entry.threadId === submission.threadId)),\n );\n\n if (Option.isNone(head) || head.value.submissionId !== submission.submissionId) {\n return Option.none();\n }\n const claimed = yield* acquireClaim(submission.threadId);\n\n if (Option.isNone(claimed)) return Option.none();\n if (claimed.value.claim.submissionId !== submission.submissionId) {\n // FIFO: only the lane head is claimable; this Submission must wait for the head.\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: claimed.value.claim.submissionId,\n ownershipToken: claimed.value.claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return Option.none();\n }\n\n return Option.some(claimed.value.claim);\n });\n\n /**\n * DUR-013 audit: one deterministic `RepairAnnotated` record per executed (submission, decision)\n * pair. Conflicts mean the annotation is already canonical (or a newer epoch owns the lane), so\n * they never fail the already-idempotent repair itself.\n */\n const annotateRepair = (\n threadId: ThreadId,\n submissionId: SubmissionId,\n decision: RecoveryDecision,\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n const encodedDecision = yield* Schema.encodeEffect(RecoveryDecision)(decision).pipe(\n Effect.orDie,\n );\n\n const details = yield* Schema.decodeEffect(PersistedJson)(encodedDecision).pipe(Effect.orDie);\n\n const envelope = yield* makeEnvelope(\n recoveryRepairRecordId(submissionId, decision._tag),\n RepairAnnotated.make({ reason: `recovery:${decision._tag}`, details }),\n );\n\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n yield* store.append(\n FencedAppendRequest.make({\n threadId,\n batch: CanonicalBatch.make({\n batchId: recoveryRepairBatchId(submissionId, decision._tag),\n producerId: config.producerId,\n records: [envelope],\n }),\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch: tail.producerEpoch,\n }),\n );\n yield* wake.notify(threadId);\n }).pipe(Effect.ignore);\n\n const settleAbortedForRecovery = Effect.fn(\"DurableAgentRuntime.settleAbortedForRecovery\")(\n function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n _decision: SettleAbortedDecision,\n ): Effect.fn.Return<\"repaired\" | \"deferred\", DurableWorkerFailure, Scope.Scope> {\n const intent = snapshot.abortIntent;\n\n if (intent === undefined) return \"deferred\";\n const submission = snapshot.submission;\n\n if (submission.state === \"suspended\" && snapshot.suspension !== undefined) {\n if (snapshot.suspension.reason._tag === \"WaitingForChild\") {\n // The classifier reaches SettleAborted only when every attached-child obligation is\n // closed (open ones route to PropagateChildAbort/ResumeWaitingParent, spec §13.1), so\n // every listed child is provably settled: replay the idempotent wake to make the\n // suspended lane claimable, then settle aborted below. A wake the adapter cannot yet\n // verify defers honestly instead of guessing.\n const woken = yield* Effect.gen(function* () {\n for (const child of snapshot.suspension?.reason._tag === \"WaitingForChild\"\n ? snapshot.suspension.reason.children\n : []) {\n yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: submission.submissionId,\n childSubmissionId: child.childSubmissionId,\n }),\n );\n }\n\n return true;\n }).pipe(Effect.catchTag(\"LedgerError\", () => Effect.succeed(false)));\n\n if (!woken) return \"deferred\";\n } else {\n // A suspended head is never worker-claimable (WP2 claim rule), so the aborted\n // settlement first closes the suspension: every undecided call of the stored reason\n // gets a durable DENIED decision, which wakes the lane (`suspended → input-applied`)\n // without ever resuming the batch — the abort intent settles the Submission before\n // any Run resumes. A raced real decision also covers the reason, so its conflict is\n // absorbed.\n const decided = new Set(\n snapshot.approvalDecisions.map((decision) => decision.toolCallId),\n );\n\n for (const toolCallId of snapshot.suspension.reason.toolCallIds) {\n if (decided.has(toolCallId)) continue;\n yield* ledger\n .recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: submission.submissionId,\n toolCallId,\n decision: \"denied\",\n resolver: RECOVERY_RESOLVER,\n reason:\n \"The Submission was aborted while durably suspended; the pending approval closes denied so the aborted settlement can commit\",\n }),\n )\n .pipe(\n Effect.catchTag(\"ApprovalConflict\", () => Effect.void),\n Effect.asVoid,\n );\n }\n }\n }\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) {\n // P7 §7(c): an aborted, never-claimed, still-queued `ready` Submission settles NOW\n // instead of waiting to head the lane — settlement order of never-run work is not\n // execution order (DUR-004 bounds execution; DUR-012 allows settling inactive\n // accepted work without an Attempt). The appends run at the current tail with the\n // durable abort intent as the reservation authority; any racing owner's fence\n // advance (or a concurrent joining claim) defers honestly to the next pass.\n if (submission.state === \"ready\" && snapshot.ownership === undefined) {\n return yield* Effect.gen(function* () {\n yield* materializeAtLeast(submission.threadId, ZERO_EPOCH);\n yield* ensureThreadCreated(\n submission.threadId,\n submission.agentId,\n submission.agentDigests,\n );\n const ctx = yield* attemptContextAtTail(submission.threadId);\n const tokenRef = yield* Ref.make(QUEUED_ABORT_SETTLEMENT_TOKEN);\n\n yield* settleAborted(\n ctx,\n submission,\n tokenRef,\n intent,\n evidence,\n knownRecordIdsOf(records),\n );\n\n return \"repaired\" as const;\n }).pipe(\n Effect.catchTags({\n FenceRejected: () => Effect.succeed(\"deferred\" as const),\n AppendConflict: () => Effect.succeed(\"deferred\" as const),\n OwnershipLost: () => Effect.succeed(\"deferred\" as const),\n }),\n );\n }\n\n return \"deferred\";\n }\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n yield* ensureThreadCreated(submission.threadId, submission.agentId, submission.agentDigests);\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const tokenRef = yield* Ref.make(claim.ownershipToken);\n\n yield* settleAborted(ctx, submission, tokenRef, intent, evidence, knownRecordIdsOf(records));\n\n return \"repaired\";\n },\n );\n\n /**\n * Execute the reconcile-then-mark flow for a `MarkUnknown` decision (plan §2.2). The recovery\n * pass has no Agent Binding, so no execution-class annotation is visible here — every call\n * without a durable intent or reconciler proof stays fail-closed uncertain. A lane whose open\n * calls all closed reports `repaired`; provably-retryable calls defer to a worker's batch\n * resume; the rest become Unknown Outcomes and report the `unknown` disposition.\n */\n const markUnknownForRecovery = Effect.fn(\"DurableAgentRuntime.markUnknownForRecovery\")(function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n decision: MarkUnknownDecision,\n ): Effect.fn.Return<\"repaired\" | \"deferred\" | \"unknown\", DurableWorkerFailure, Scope.Scope> {\n const submission = snapshot.submission;\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const knownIds = knownRecordIdsOf(records);\n // The classifier's decision lists ONLY ordinary open calls (S2: an open delegation call\n // never marks Unknown — its establishment is idempotent and routes through the Subagent\n // rows), so reconciliation is scoped to exactly those ids.\n const markableIds = new Set<string>(decision.openToolCallIds);\n\n const review = yield* reconcileOpenCalls(\n ctx,\n submission,\n snapshot,\n records,\n evidence.openToolCalls.filter((call) => markableIds.has(call.toolCallId)),\n knownIds,\n () => undefined,\n );\n\n let disposition: \"repaired\" | \"deferred\" | \"unknown\";\n\n if (review.uncertain.length > 0) {\n yield* markCallsUnknown(\n ctx,\n submission.submissionId,\n knownIds,\n review.uncertain,\n decision.reason,\n );\n disposition = \"unknown\";\n } else if (review.unproven.length > 0 || review.retryable.length > 0) {\n disposition = \"deferred\";\n } else {\n disposition = \"repaired\";\n }\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return disposition;\n });\n\n /**\n * Apply covering DUR-017 resolution intents canonically and wake the lane. The `unknown` head\n * is never claimable, so the appends run unfenced at the current tail (no live owner can\n * exist); the wake itself is the ledger's idempotent re-check on intent replay (WP2), so a\n * crash anywhere in this pass converges on the next one.\n */\n const applyUnknownResolutionsForRecovery = Effect.fn(\n \"DurableAgentRuntime.applyUnknownResolutionsForRecovery\",\n )(function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n ): Effect.fn.Return<\"repaired\" | \"deferred\", DurableWorkerFailure> {\n const submission = snapshot.submission;\n const ctx = yield* attemptContextAtTail(submission.threadId);\n const knownIds = knownRecordIdsOf(records);\n\n const applied = yield* reconcileOpenCalls(\n ctx,\n submission,\n snapshot,\n records,\n evidence.openToolCalls,\n knownIds,\n () => undefined,\n ).pipe(\n Effect.as(true),\n // A fence advance mid-pass means another owner took the Thread: defer to it.\n Effect.catchTag(\"FenceRejected\", () => Effect.succeed(false)),\n );\n\n if (!applied) return \"deferred\";\n for (const intent of snapshot.unknownResolutions) {\n // Replaying the stored intent re-checks the covering wake idempotently (WP2 contract).\n yield* ledger\n .recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: intent.submissionId,\n toolCallId: intent.toolCallId,\n author: intent.author,\n reason: intent.reason,\n resolution: intent.resolution,\n }),\n )\n .pipe(\n Effect.catchTag(\"UnknownResolutionConflict\", (error) =>\n LedgerError.make({\n operation: \"applyUnknownResolutions\",\n message: `Replaying the stored resolution intent for ${error.toolCallId} diverged`,\n cause: error,\n }),\n ),\n );\n }\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n });\n\n /**\n * Repair a lost durable suspension from canonical history (plan §2.6, crash between the\n * canonical `ToolApprovalRequested` append and the ledger `suspend` transition): the lane is\n * claimable but the Run cannot proceed without a decision, so the executor claims it and moves\n * it to `suspended` — the ledger op ends the ownership period itself — reporting `repaired`.\n * Nothing executes and nothing settles. A lane that is already suspended has nothing to\n * repair: it waits durably for the authorized `resolveApproval` path, consuming no worker\n * permit, and stays `deferred`. Decisions that raced ahead of the repair leave the lane to a\n * worker's batch resume (`deferred`).\n */\n const awaitApprovalForRecovery = Effect.fn(\"DurableAgentRuntime.awaitApprovalForRecovery\")(\n function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n ): Effect.fn.Return<\"repaired\" | \"deferred\", DurableWorkerFailure, Scope.Scope> {\n const submission = snapshot.submission;\n\n if (submission.state === \"suspended\") return \"deferred\";\n const decided = new Set(snapshot.approvalDecisions.map((decision) => decision.toolCallId));\n\n const undecided = evidence.approvalsPending.filter(\n (pending) => !decided.has(pending.toolCallId),\n );\n\n const first = undecided[0];\n\n if (first === undefined) return \"deferred\";\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n const outcome = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: ApprovalPendingSuspension.make({\n toolCallIds: [\n first.toolCallId,\n ...undecided.slice(1).map((pending) => pending.toolCallId),\n ],\n }),\n }),\n );\n\n yield* hit(\"approval:after-suspend\");\n if (outcome === \"resume-immediately\") {\n // Decisions raced in between the snapshot read and the suspend transaction: nothing to\n // repair — release the claim so a worker resumes the declared batch.\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return \"deferred\";\n }\n\n return \"repaired\";\n },\n );\n\n /**\n * Defensive branch for a `suspended` lane whose canonical approval requests are all decided\n * (the classifier's `ResumeSuspended`). Under this coordinator the state is unreachable: the\n * covering `recordApprovalDecision` wakes the lane atomically inside the adapter (WP2), and a\n * decision racing ahead of `suspend` returns `resume-immediately` without ever suspending. The\n * executor therefore only re-hints the lane and reports `deferred`, keeping the obligation\n * visible instead of guessing at a wake the ledger port does not offer.\n */\n const resumeSuspendedForRecovery = Effect.fn(\"DurableAgentRuntime.resumeSuspendedForRecovery\")(\n function* (snapshot: RecoverySnapshot): Effect.fn.Return<\"deferred\", DurableWorkerFailure> {\n yield* wake.notify(snapshot.submission.threadId);\n\n return \"deferred\";\n },\n );\n\n const executeRecoveryDecision = Effect.fn(\"DurableAgentRuntime.executeRecoveryDecision\")(\n function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n decision: RecoveryDecision,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n history: RecoveryHistorySnapshot,\n ): Effect.fn.Return<\n \"repaired\" | \"deferred\" | \"none\" | \"unknown\",\n DurableWorkerFailure,\n Scope.Scope\n > {\n const submission = snapshot.submission;\n const runId = runIdForSubmission(submission.submissionId);\n const start = yield* canonicalRunStartFromRecords(records, runId);\n\n if (\n start?.payload._tag === \"RunStarted\" &&\n start.payload.runId === runId &&\n (yield* Clock.currentTimeMillis) >=\n DateTime.toEpochMillis(start.createdAt) + start.payload.maxDurationMillis &&\n (decision._tag === \"CompleteChildAdmission\" ||\n decision._tag === \"RepairSubagentStartLink\" ||\n decision._tag === \"AwaitChildAdmissionResolution\" ||\n (decision._tag === \"MarkUnknown\" &&\n snapshot.childReservations.some((reservation) => reservation.status !== \"released\")))\n ) {\n // A closed admission window must release provably-unused reservations or restore the\n // existing child's link. Do this before ordinary Unknown Outcomes make the lane\n // unclaimable, and never let binding-free recovery admit new work after expiry.\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n\n yield* reconcileExpiredChildren(ctx, submission, claim.ownershipToken);\n const open = yield* completeJoinedReleases(submission);\n\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return open ? \"deferred\" : \"repaired\";\n }\n switch (decision._tag) {\n case \"NoAction\": {\n return \"none\";\n }\n case \"ResumeFromTurnBoundary\":\n case \"ResumePendingToolBatch\": {\n // Resumption needs the Agent Binding: a claiming worker resumes from the committed\n // boundary (the declared batch resumes without model re-invocation, durability §15).\n return \"deferred\";\n }\n case \"MarkUnknown\": {\n return yield* markUnknownForRecovery(snapshot, evidence, records, decision);\n }\n case \"ApplyUnknownResolutions\": {\n return yield* applyUnknownResolutionsForRecovery(snapshot, evidence, records);\n }\n case \"AwaitUnknownResolution\": {\n // The lane stays durably blocked awaiting the authorized DUR-017 resolution path;\n // the settlement obligation stays visible, nothing replays.\n return \"unknown\";\n }\n case \"AwaitApprovalDecision\": {\n return yield* awaitApprovalForRecovery(snapshot, evidence);\n }\n case \"ResumeSuspended\": {\n return yield* resumeSuspendedForRecovery(snapshot);\n }\n case \"RevertJoining\": {\n // `joining` without a canonical `input:{sid}` record: the host never consumed the\n // input, so the claim returns to ready and is delivered exactly once later\n // (DUR-016). Ownership-free by contract; the wake hint reopens the lane.\n yield* ledger.revertJoining(\n RevertJoiningRequest.make({ submissionId: submission.submissionId }),\n );\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"RepairJoinMarker\": {\n const hostSubmissionId = snapshot.hostSubmissionId;\n\n if (hostSubmissionId === undefined) return \"deferred\";\n\n const inputEnvelope = records.find(\n (envelope) =>\n envelope.record.recordId === submissionInputRecordId(submission.submissionId),\n );\n\n if (inputEnvelope === undefined) return \"deferred\";\n if (evidence.hostSettlementOutcome !== undefined) {\n // The host settled while the marker was lost, so no host ownership can ever repair\n // it. The coverage rule decides honestly (DUR-016): an uncovered input was never\n // consumed by the host and returns to ready to run as its own Run (the canonical\n // `input:{sid}` record reattaches through the ordinary input-marker repair); a\n // covered-but-unmarked input is unreachable under this coordinator (`markJoined`\n // always precedes delivery), so it stays visible instead of being guessed at.\n if (!evidence.joinedInputCovered) {\n yield* ledger.revertJoining(\n RevertJoiningRequest.make({ submissionId: submission.submissionId }),\n );\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n\n return \"deferred\";\n }\n\n // `markJoined` is fenced by the HOST lane's ownership: claim the host head, repair\n // the marker from history (DUR-015), and release. A live host defers to that host's\n // own drain-seam repair.\n const host = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: hostSubmissionId }),\n );\n\n if (Option.isNone(host)) return \"deferred\";\n const claimed = yield* claimFor(host.value);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n recordId: inputEnvelope.record.recordId,\n sequence: inputEnvelope.sequence,\n }),\n );\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: hostSubmissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"SettleJoinedWithHost\": {\n const hostSubmissionId = snapshot.hostSubmissionId;\n\n if (hostSubmissionId === undefined) return \"deferred\";\n const hostRecord = yield* canonicalSettlementRecord(records, hostSubmissionId);\n const hostSettlement = yield* settlementPayloadFromRecord(hostRecord, hostSubmissionId);\n // The host settled canonically, so no live owner can exist for this lane (a joined\n // head is never claimable): the joined settlement completes unfenced at the current\n // tail, deferring to any racing fence advance.\n const ctx = yield* attemptContextAtTail(submission.threadId);\n\n const applied = yield* settleOneJoined(ctx, hostSettlement, snapshot).pipe(\n Effect.as(true),\n Effect.catchTag(\"FenceRejected\", () => Effect.succeed(false)),\n );\n\n return applied ? \"repaired\" : \"deferred\";\n }\n case \"AwaitHostSettlement\": {\n // The joined input reattaches through the host Run's resume (prompt-coverage rule);\n // hint the shared lane and keep the obligation visible.\n yield* wake.notify(submission.threadId);\n\n return \"deferred\";\n }\n case \"CompleteMaterialization\":\n case \"RepairReadiness\": {\n yield* materializeAtLeast(submission.threadId, ZERO_EPOCH);\n yield* ensureThreadCreated(\n submission.threadId,\n submission.agentId,\n submission.agentDigests,\n );\n if (submission.workerAdmission !== undefined) {\n yield* workerRuntime\n .ensureOrigin(submission.workerAdmission.origin)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason }),\n ),\n );\n }\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: submission.submissionId }));\n\n return \"repaired\";\n }\n case \"ApplyInput\":\n case \"RepairInputMarker\": {\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n yield* ensureThreadCreated(\n submission.threadId,\n submission.agentId,\n submission.agentDigests,\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const tokenRef = yield* Ref.make(claim.ownershipToken);\n\n const currentRecords = yield* refreshRecoveryHistory(\n submission.threadId,\n records,\n history.throughSequence,\n history.submissionIds,\n );\n\n yield* applyCanonicalInput(\n ctx,\n submission,\n tokenRef,\n currentRecords,\n snapshot.inputApplied,\n );\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return \"repaired\";\n }\n case \"AppendReservedSettlement\": {\n const reservation = snapshot.reservation;\n\n if (reservation === undefined) return \"deferred\";\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) {\n // P7 §7(c) crash replay: a queued-abort settlement that committed its reservation\n // but lost the append/finalize completes at the current tail — the aborted,\n // never-claimed row still holds no live ownership, so no claim can ever exist\n // for it while it stays queued behind the head.\n if (\n reservation.outcome === \"aborted\" &&\n snapshot.abortIntent !== undefined &&\n snapshot.ownership === undefined\n ) {\n const ctx = yield* attemptContextAtTail(submission.threadId);\n\n return yield* completeReservation(\n ctx,\n submission,\n reservation,\n evidence.recordedSettlementOutcome !== undefined,\n ).pipe(\n Effect.as(\"repaired\" as const),\n Effect.catchTags({\n FenceRejected: () => Effect.succeed(\"deferred\" as const),\n AppendConflict: () => Effect.succeed(\"deferred\" as const),\n }),\n );\n }\n\n return \"deferred\";\n }\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n\n yield* completeReservation(\n ctx,\n submission,\n reservation,\n evidence.recordedSettlementOutcome !== undefined,\n );\n\n return \"repaired\";\n }\n case \"FinalizeLedgerFromHistory\": {\n const record = yield* canonicalSettlementRecord(records, submission.submissionId);\n\n yield* finalizeFromHistory(submission, record);\n\n return \"repaired\";\n }\n case \"SettleAborted\": {\n return yield* settleAbortedForRecovery(snapshot, evidence, records, decision);\n }\n case \"CompleteChildAdmission\": {\n // Binding-free (D3): the canonical `SubagentRequested` payload carries the encoded\n // child input, intended identity, and every digest, so admission completes without a\n // live delegation handler — one child, same Receipt on every replay (SUB-016).\n const subagent = subagentRecordsOf(records, runIdForSubmission(submission.submissionId));\n const requestedPayload = subagent.requested.get(decision.toolCallId);\n\n if (requestedPayload === undefined) return \"deferred\";\n const admission = yield* establishChildFromRequest(submission, requestedPayload);\n\n return admission._tag === \"indeterminate\" ? \"deferred\" : \"repaired\";\n }\n case \"RepairSubagentStartLink\": {\n // Resolve the SAME child by its deterministic idempotency key, complete any missing\n // materialization/lineage/readiness, then append the exact deterministic\n // `SubagentStarted` link and reattach the reservation under the parent fence\n // (spec §13, SUB-016/SUB-017).\n const runId = runIdForSubmission(submission.submissionId);\n const subagent = subagentRecordsOf(records, runId);\n const requestedPayload = subagent.requested.get(decision.toolCallId);\n\n if (requestedPayload === undefined) return \"deferred\";\n const admission = yield* establishChildFromRequest(submission, requestedPayload);\n\n if (admission._tag === \"indeterminate\") return \"deferred\";\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const knownIds = knownRecordIdsOf(records);\n const startRecordId = subagentStartedRecordId(runId, decision.toolCallId);\n\n if (!knownIds.has(startRecordId)) {\n const envelope = yield* makeEnvelope(\n startRecordId,\n SubagentStarted.make({\n runId,\n toolCallId: decision.toolCallId,\n childThreadId: requestedPayload.childThreadId,\n childSubmissionId: admission.childSubmissionId,\n childReceiptId: admission.receiptId,\n childRunId: runIdForSubmission(admission.childSubmissionId),\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentStartedBatchId(runId, decision.toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-start-append\");\n }\n yield* ledger\n .attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: decodeChildReservationIdSync(requestedPayload.reservationId),\n ownershipToken: claim.ownershipToken,\n childSubmissionId: admission.childSubmissionId,\n }),\n )\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"attachChildToReservation\"),\n ),\n );\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n yield* wake.notify(requestedPayload.childThreadId);\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"EnsureWaitingForChild\": {\n // Restore the lost `waitingForChild` checkpoint (spec §14 \"after parent start, before\n // waitingForChild checkpoint\"): claim the lane and suspend it — the ledger op ends the\n // ownership period itself, so the lane holds no worker permit while each child runs\n // on its own lane. Never spawns a replacement invocation (SUB-018/SUB-030).\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: WaitingForChildSuspension.make({ children: decision.children }),\n }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (suspension === \"resume-immediately\") {\n // Every listed child already settled: leave the joins to a claiming worker's batch\n // resume (they need the parent Binding and its result projection).\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return \"deferred\";\n }\n\n return \"repaired\";\n }\n case \"ResumeWaitingParent\": {\n // Every relevant child is provably settled: replay the idempotent ownership-free wake\n // (a dropped wake is never a lost obligation) so a claiming worker resumes the\n // declared batch and joins each child's canonical Settlement (spec §13).\n for (const child of decision.children) {\n yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: submission.submissionId,\n childSubmissionId: child.childSubmissionId,\n }),\n );\n }\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"ApplyJoinAccounting\": {\n // Budget release incomplete after a canonical join: replay the accounting decision\n // FROM the canonical `SubagentJoined` record — budget stays unavailable until repair,\n // never available twice (spec §12 join step 6, DUR-015).\n const reservation = snapshot.childReservations.find(\n (row) => row.reservationId === decision.reservationId,\n );\n\n if (reservation === undefined) return \"deferred\";\n if (reservation.status === \"released\") return \"repaired\";\n const subagent = subagentRecordsOf(records, runIdForSubmission(submission.submissionId));\n const joinedPayload = subagent.joined.get(decision.toolCallId);\n\n if (joinedPayload !== undefined) {\n yield* applyReservationRelease(decision.reservationId, joinedPayload.finalAccounting);\n\n return \"repaired\";\n }\n if (reservation.status === \"releasePending\" && reservation.accounting !== undefined) {\n // The decision is already frozen: finish the idempotent release — never re-freeze.\n yield* applyReservationRelease(decision.reservationId, reservation.accounting);\n\n return \"repaired\";\n }\n\n return \"deferred\";\n }\n case \"PropagateChildAbort\": {\n // Request-abort-and-join (spec §13.1): the ONE idempotent durable abort command per\n // nonterminal child — the recorded child `AbortIntent` row IS the propagation marker,\n // so the replayed command returns it unchanged (DUR-012) — while the parent stays (or\n // becomes) suspended `waitingForChild` for the joins.\n for (const child of decision.children) {\n yield* ledger\n .requestAbort(\n AbortCommand.make({\n submissionId: child.childSubmissionId,\n author: SUBAGENT_ABORT_AUTHOR,\n reason: SUBAGENT_ABORT_REASON,\n }),\n )\n .pipe(\n // The child settled concurrently: its one winning Settlement joins next pass.\n Effect.catchTags({\n SettlementConflict: () => Effect.void,\n JoinedToHost: conflictToLedgerError(\"PropagateChildAbort\"),\n }),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-child-abort-intent\");\n\n const childRow = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: child.childSubmissionId }),\n );\n\n if (Option.isSome(childRow)) {\n yield* wake.notify(childRow.value.threadId);\n }\n }\n if (submission.state !== \"suspended\") {\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: WaitingForChildSuspension.make({ children: decision.children }),\n }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (suspension === \"resume-immediately\") {\n // Every child settled while suspending: the next pass joins the winners.\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n }\n }\n\n return \"repaired\";\n }\n case \"ReleaseOrphanChildReservation\": {\n // Provably childless reservations release exactly once (spec §13/§14): freeze the\n // deterministic zero-consumed decision, then apply it idempotently.\n for (const reservationId of decision.reservationIds) {\n yield* releaseOrphanReservation(reservationId);\n }\n\n return \"repaired\";\n }\n case \"AwaitChildAdmissionResolution\": {\n // Wait-and-retry (SUB-031): the evidence assembler re-queries the authoritative owner\n // with the deterministic idempotency key on every recovery pass; an indeterminate\n // answer never permits a second admission and holds no worker permit.\n return \"deferred\";\n }\n case \"AwaitChildSettlement\": {\n // The parent lane stays dormant `waitingForChild` (SUB-030): the child's Settlement\n // wakes it durably through `recordChildSettled`; an unresolved ordinary Tool inside\n // the child keeps the parent here honestly with the obligation visible (SUB-021).\n return \"deferred\";\n }\n case \"AwaitParentEstablishment\": {\n // The child lane defers its own materialization/readiness repair until the\n // parent's idempotent establishment appends the immutable lineage record — a child\n // never runs a Turn before its lineage is canonical. A droppable wake hint nudges the\n // parent lane, whose own recovery re-drives establishment (CompleteChildAdmission /\n // RepairSubagentStartLink); the deterministic child identity makes every replay\n // converge on this one child (SUB-016).\n const parent = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: decision.parentSubmissionId }),\n );\n\n if (Option.isSome(parent)) {\n yield* wake.notify(parent.value.threadId);\n }\n\n return \"deferred\";\n }\n }\n },\n );\n\n const recoverSnapshot = Effect.fn(\"DurableAgentRuntime.recoverSnapshot\")(function* (\n submission: SubmissionSnapshot,\n history: RecoveryHistorySnapshot,\n ): Effect.fn.Return<RecoveryReport, DurableWorkerFailure> {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n // A racing steering link can name a host outside the pass's nonterminal group. Read that\n // host from the same verified prefix, without changing this snapshot's visibility.\n if (\n snapshot.hostSubmissionId !== undefined &&\n !history.submissionIds.includes(snapshot.hostSubmissionId)\n ) {\n const hostId = snapshot.hostSubmissionId;\n const hostView = yield* recoveryView(submission.threadId, history.throughSequence, [hostId]);\n\n const hostRecords = yield* Stream.runCollect(\n hostView.canonical.pipe(Stream.filter(controlRecords([hostId]))),\n );\n\n const merged = new Map(history.records.map((entry) => [entry.sequence, entry]));\n\n for (const entry of hostRecords) merged.set(entry.sequence, entry);\n history = {\n ...history,\n records: [...merged.values()].sort((left, right) => left.sequence - right.sequence),\n submissionIds: [...history.submissionIds, snapshot.hostSubmissionId],\n };\n }\n\n const evidence = yield* evidenceFor(\n history.records,\n submission.submissionId,\n history.materialized,\n snapshot.hostSubmissionId,\n );\n\n const decision = classifyRecovery(snapshot, evidence);\n\n // Untouched ready input belongs to the worker's first claim. Running attempts and\n // canonical appends with a missing marker still take their classified repair path.\n const disposition =\n decision._tag === \"ApplyInput\" && snapshot.submission.state === \"ready\"\n ? \"deferred\"\n : yield* Effect.scoped(\n executeRecoveryDecision(snapshot, evidence, decision, history.records, history),\n );\n\n if (disposition === \"repaired\") {\n yield* annotateRepair(submission.threadId, submission.submissionId, decision);\n }\n\n return RecoveryReport.make({\n submissionId: submission.submissionId,\n threadId: submission.threadId,\n decision,\n disposition,\n });\n });\n\n const recoverSubmission = Effect.fn(\"DurableAgentRuntime.recoverSubmission\")(function* (\n submissionId: SubmissionId,\n ): Effect.fn.Return<RecoveryReport, DurableWorkerFailure> {\n const found = yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n\n if (Option.isNone(found)) {\n return yield* LedgerError.make({\n operation: \"recoverSubmission\",\n message: `Unknown Submission ${submissionId}`,\n });\n }\n\n const history = yield* readRecoveryHistory(found.value.threadId, [submissionId]);\n\n if (history.materialized && found.value.workerAdmission?.origin.reporting?.mode === \"standard\")\n yield* updateRuntime.repair(found.value.threadId);\n\n return yield* recoverSnapshot(found.value, history);\n });\n\n const runRecoveryImpl = Effect.fn(\"DurableAgentRuntime.runRecovery\")(\n function* (): Effect.fn.Return<ReadonlyArray<RecoveryReport>, DurableWorkerFailure> {\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const reports: Array<RecoveryReport> = [];\n // SubmissionLedger guarantees `(threadId, queueSequence)` order. Capture and retain\n // one verified canonical prefix only for the current contiguous Thread group: read\n // work is one tail inspection plus `ceil(passStartTail / READ_PAGE)` pages per Thread\n // rather than multiplied by its nonterminal Submission count, and the prefix becomes\n // unreachable before the next Thread is read.\n let index = 0;\n\n while (index < nonterminal.length) {\n const first = nonterminal[index];\n\n if (first === undefined) break;\n const submissionIds: Array<SubmissionId> = [];\n let hasStandardReporting = false;\n\n for (let offset = index; offset < nonterminal.length; offset += 1) {\n const entry = nonterminal[offset];\n\n if (entry === undefined || entry.threadId !== first.threadId) break;\n submissionIds.push(entry.submissionId);\n hasStandardReporting ||= entry.workerAdmission?.origin.reporting?.mode === \"standard\";\n }\n const history = yield* readRecoveryHistory(first.threadId, submissionIds);\n\n if (history.materialized && hasStandardReporting)\n yield* updateRuntime.repair(first.threadId);\n\n while (index < nonterminal.length) {\n const submission = nonterminal[index];\n\n if (submission === undefined || submission.threadId !== first.threadId) {\n break;\n }\n reports.push(yield* recoverSnapshot(submission, history));\n index += 1;\n }\n }\n\n return reports;\n },\n );\n\n const submit = Effect.fn(\"DurableAgentRuntime.submit\")(function* <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ): Effect.fn.Return<Receipt, DurableSubmitFailure, InputSchema[\"EncodingServices\"]> {\n const encodedInput = yield* Schema.encodeEffect(agent.definition.input)(input).pipe(\n Effect.mapError((cause) =>\n AgentInputError.make({ message: `Unable to encode Agent input: ${cause.message}` }),\n ),\n );\n\n const inputPayload = yield* Schema.decodeUnknownEffect(PersistedJson)(encodedInput).pipe(\n Effect.mapError(() =>\n AgentInputError.make({\n message: \"Agent input does not satisfy the canonical persistence bounds\",\n }),\n ),\n );\n\n const inputDigest = yield* withCrypto(digestJson(inputPayload));\n\n const workerAdmission =\n options.workerAdmission === undefined\n ? undefined\n : yield* workerRuntime\n .validateAdmission(\n options.workerAdmission,\n options,\n agent.definition.id,\n inputDigest,\n inputPayload,\n )\n .pipe(\n Effect.mapError((cause) =>\n AdmissionPolicyError.make({\n reason:\n cause.reason === \"storage\" || cause.reason === \"unavailable\"\n ? \"unavailable\"\n : cause.reason === \"capacity\" &&\n cause.retryable === true &&\n Schema.is(FrameworkMessage)(options.messageAdmission)\n ? \"occupied\"\n : \"refused\",\n code: `worker-${cause.reason}`,\n }),\n ),\n );\n\n const pendingMessage = options.messageAdmission;\n\n const messageAdmission =\n pendingMessage === undefined\n ? undefined\n : yield* Effect.suspend((): Effect.Effect<InputMessage, MessagingError | WorkerError> =>\n Schema.is(MessageAdmission)(pendingMessage)\n ? messagingRuntime.validateAdmission(\n pendingMessage,\n options,\n agent.definition.id,\n inputDigest,\n )\n : workerRuntime.validateCompletion(\n pendingMessage,\n options,\n agent.definition.id,\n inputDigest,\n ),\n ).pipe(\n Effect.mapError((cause) =>\n AdmissionPolicyError.make({\n reason:\n cause.reason === \"storage\" || cause.reason === \"unavailable\"\n ? \"unavailable\"\n : \"refused\",\n code: `message-${cause.reason}`,\n }),\n ),\n );\n\n const admitted = yield* ledger.admit(\n yield* Schema.decodeEffect(AdmissionRequest)({\n threadId: options.threadId,\n principal: options.principal,\n idempotencyKey: options.idempotencyKey,\n ...(options.admissionGroup === undefined ? {} : { admissionGroup: options.admissionGroup }),\n ...(options.admissionFence === undefined ? {} : { admissionFence: options.admissionFence }),\n agentId: agent.definition.id,\n agentDigests: options.definitions,\n deploymentId: config.deploymentId,\n inputPayload,\n inputDigest,\n ...(workerAdmission === undefined\n ? {}\n : {\n workerAdmission: yield* Schema.encodeEffect(WorkerAdmission)(workerAdmission).pipe(\n Effect.mapError(() =>\n LedgerError.make({\n operation: \"submit\",\n message: \"Worker admission cannot be encoded\",\n }),\n ),\n ),\n }),\n ...(messageAdmission === undefined ? {} : { messageAdmission }),\n }).pipe(\n Effect.mapError(() =>\n LedgerError.make({\n operation: \"submit\",\n message: \"Admission fields do not satisfy the ledger contract\",\n }),\n ),\n ),\n );\n\n yield* hit(\"submit:after-admit\");\n\n const receipt = Receipt.make({\n receiptId: admitted.receiptId,\n submissionId: admitted.submissionId,\n threadId: options.threadId,\n queueSequence: admitted.queueSequence,\n });\n\n // A replay of an already-ready Submission resumes by returning the original Receipt;\n // an admitted-but-not-ready Submission (ours or a crashed predecessor's) is completed here.\n if (admitted.replayed && admitted.state !== \"admitted\") {\n return receipt;\n }\n yield* materializeAtLeast(options.threadId, ZERO_EPOCH);\n yield* ensureThreadCreated(options.threadId, agent.definition.id, options.definitions);\n if (workerAdmission !== undefined) {\n yield* workerRuntime\n .ensureOrigin(workerAdmission.origin)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason }),\n ),\n );\n }\n yield* hit(\"submit:after-materialize\");\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n yield* wake.notify(options.threadId);\n\n return receipt;\n });\n\n const authorizeSettlement = (receipt: Receipt) =>\n operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"awaitSettlement\",\n threadId: receipt.threadId,\n submissionId: receipt.submissionId,\n }),\n );\n\n const submitRegistered = Effect.fn(\"DurableAgentRuntime.submitRegistered\")(function* <\n InputSchema extends Schema.Top,\n >(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: Omit<DurableSubmitOptions, \"definitions\">,\n ) {\n const binding = yield* resolveDefinitionBinding(registeredBindings, agent.definition);\n\n return yield* submit(agent, input, { ...options, definitions: binding.digests });\n });\n\n const readSubmissionStatus = Effect.fn(\"DurableAgentRuntime.readSubmissionStatus\")(function* (\n receipt: Receipt,\n ): Effect.fn.Return<SubmissionStatus, DurableAwaitFailure> {\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: receipt.submissionId }),\n );\n\n if (Option.isNone(snapshot)) {\n return yield* LedgerError.make({\n operation: \"awaitSettlement\",\n message: `Unknown Submission ${receipt.submissionId}`,\n });\n }\n if (\n snapshot.value.threadId !== receipt.threadId ||\n snapshot.value.receiptId !== receipt.receiptId ||\n snapshot.value.queueSequence !== receipt.queueSequence\n ) {\n return yield* OperationDenied.make({\n operation: \"awaitSettlement\",\n reason: \"Receipt does not match the authorized Submission\",\n threadId: receipt.threadId,\n submissionId: receipt.submissionId,\n });\n }\n if (snapshot.value.state !== \"settled\") return PendingSubmission.make({});\n\n // Finalization replay reads the canonical outcome without changing settledAt.\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: receipt.submissionId,\n settlementId: submissionSettlementId(receipt.submissionId),\n }),\n );\n\n const recovery = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: receipt.submissionId }),\n );\n\n return SettledSubmission.make({\n settlement: materializeSettlement(settlement, recovery.reservation?.record),\n });\n });\n\n const submissionStatus = Effect.fn(\"DurableAgentRuntime.submissionStatus\")(function* (\n receipt: Receipt,\n ): Effect.fn.Return<SubmissionStatus, DurableAwaitFailure> {\n yield* authorizeSettlement(receipt);\n\n return yield* readSubmissionStatus(receipt);\n });\n\n const settlementRecord = Effect.fn(\"DurableAgentRuntime.settlementRecord\")(function* (\n receipt: Receipt,\n ) {\n yield* authorizeSettlement(receipt);\n const status = yield* readSubmissionStatus(receipt);\n\n if (status._tag !== \"settled\") {\n return yield* LedgerError.make({\n operation: \"settlementRecord\",\n message: \"Submission has not settled\",\n });\n }\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: receipt.submissionId }),\n );\n\n if (snapshot.reservation === undefined) {\n return yield* LedgerError.make({\n operation: \"settlementRecord\",\n message: \"Settlement has no canonical reservation\",\n });\n }\n\n const record = yield* settlementPayloadFromRecord(\n snapshot.reservation.record,\n receipt.submissionId,\n );\n\n if (\n record.receiptId !== receipt.receiptId ||\n record.settlementId !== status.settlement.settlementId ||\n record.outcome !== status.settlement.outcome\n ) {\n return yield* LedgerError.make({\n operation: \"settlementRecord\",\n message: \"Canonical Settlement disagrees with the receipt or finalized outcome\",\n });\n }\n\n return record;\n });\n\n const awaitSettlement = Effect.fn(\"DurableAgentRuntime.awaitSettlement\")(function* (\n receipt: Receipt,\n ): Effect.fn.Return<Settlement, DurableAwaitFailure> {\n // Authorization lasts for this wait, as it does for one observe subscription.\n yield* authorizeSettlement(receipt);\n while (true) {\n const status = yield* readSubmissionStatus(receipt);\n\n if (status._tag === \"settled\") return status.settlement;\n // Wake delivery is a pure liveness hint; the ledger poll below guarantees progress.\n yield* Effect.raceFirst(\n Stream.runDrain(\n wake.wakes.pipe(\n Stream.filter((threadId) => threadId === receipt.threadId),\n Stream.take(1),\n ),\n ),\n Effect.sleep(config.settlementPollInterval),\n );\n }\n });\n\n const awaitProgress = Effect.fn(\"DurableAgentRuntime.awaitProgress\")(function* (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n ): Effect.fn.Return<void, DurableProgressFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"observe\",\n threadId,\n }),\n );\n yield* Effect.scoped(\n Effect.gen(function* () {\n // Registration MUST precede the authoritative read. A notify between this acquisition\n // and parking completes the returned one-shot Effect, so neither subscribe/check nor\n // check/park can lose progress.\n const awaitHint = yield* wake.subscribe(threadId);\n\n const committed = yield* Stream.runHead(\n store.read(\n ThreadRead.make({\n threadId,\n afterSequence,\n limit: 1,\n }),\n ),\n );\n\n if (Option.isSome(committed)) return;\n // A wake is only a hint. The caller re-reads canonical records after this returns.\n yield* awaitHint;\n }),\n );\n });\n\n const observe = (receipt: Receipt, options?: DurableObserveOptions) =>\n Stream.unwrap(\n operationAuthorizer\n .authorize(\n OperationAuthorizationRequest.make({\n operation: \"observe\",\n threadId: receipt.threadId,\n submissionId: receipt.submissionId,\n }),\n )\n .pipe(\n Effect.as(\n store.observe(\n ThreadObservation.make({\n threadId: receipt.threadId,\n ...(options?.after === undefined ? {} : { afterOffset: options.after }),\n }),\n ),\n ),\n ),\n );\n\n const abort = Effect.fn(\"DurableAgentRuntime.abort\")(function* (\n command: AbortCommand,\n ): Effect.fn.Return<AbortIntent, DurableAbortFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"abort\",\n submissionId: command.submissionId,\n }),\n );\n const intent = yield* ledger.requestAbort(command);\n\n yield* hit(\"abort:after-intent\");\n\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (Option.isSome(snapshot)) {\n yield* wake.notify(snapshot.value.threadId);\n }\n\n return intent;\n });\n\n /**\n * DUR-017 resolution surface (abort-shaped, plan §2.2): the durable ledger intent commits\n * first; the canonical `ToolCallResolved` (+ `ToolCallSettled` for a recovered result) is\n * appended by the recovery pass or the next owning Attempt. An `AbortSubmission` resolution\n * routes into the existing abort path — the unknown calls stay recorded and abort never\n * asserts external rollback (durability §13). Possession of this service plus the mandatory\n * author/reason audit fields is the Phase 5 authorization boundary, identical to `abort`; the\n * authenticated operator surface is a P7 deliverable.\n */\n const resolveUnknown = Effect.fn(\"DurableAgentRuntime.resolveUnknown\")(function* (\n command: UnknownResolutionCommand,\n ): Effect.fn.Return<UnknownResolutionIntent, DurableResolveFailure | OperationDenied> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"resolveUnknown\",\n submissionId: command.submissionId,\n }),\n );\n const intent = yield* ledger.recordUnknownResolution(command);\n\n yield* hit(\"resolve:after-intent\");\n if (command.resolution._tag === \"AbortSubmission\") {\n yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: command.submissionId,\n author: command.author,\n reason: command.reason,\n }),\n );\n }\n\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (Option.isSome(snapshot)) {\n yield* wake.notify(snapshot.value.threadId);\n }\n\n return intent;\n });\n\n /**\n * Durable approval decision surface (plan §2.6, abort-shaped): the ledger intent commits\n * first — idempotent per (submission, tool call), with a typed `ApprovalConflict` on a\n * divergent re-decision — and the adapter transitions `suspended → input-applied` atomically\n * once every pending call of the stored suspension reason is decided; the wake hint then lets\n * a worker resume the declared batch through the batch-resume seam (no model re-invocation).\n * The canonical `ToolApprovalDecided` record is appended by the resuming Attempt's approval\n * hook before the decision is honored — never here. A denied decision fails the Run through\n * the engine's `AgentApprovalDenied` path (denial-terminal, P2 policy default). Possession of\n * this service plus the mandatory resolver/reason audit fields is the Phase 5 authorization\n * boundary, identical to `abort`; the authenticated operator surface is a P7 deliverable.\n */\n const resolveApproval = Effect.fn(\"DurableAgentRuntime.resolveApproval\")(function* (\n command: ApprovalDecisionCommand,\n ): Effect.fn.Return<ApprovalDecisionIntent, DurableApprovalFailure | OperationDenied> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"resolveApproval\",\n submissionId: command.submissionId,\n }),\n );\n const intent = yield* ledger.recordApprovalDecision(command);\n\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (Option.isSome(snapshot)) {\n yield* wake.notify(snapshot.value.threadId);\n }\n\n return intent;\n });\n\n // -------------------------------------------------------------------------\n // P7 administrative operations (plan §3): explain/verify/retry/wake/scanObligations over the\n // SAME two ports the coordinator already owns, so they behave identically on DN and DC.\n // -------------------------------------------------------------------------\n\n /** Whole non-negative seconds between a recorded instant and Effect Clock-now. */\n const ageSecondsSince = (instant: DateTime.Utc, nowMillis: number): number =>\n Math.max(0, Math.floor((nowMillis - DateTime.toEpochMillis(instant)) / 1_000));\n\n const lookupKnownSubmission = Effect.fn(\"DurableAgentRuntime.lookupKnownSubmission\")(function* (\n operation: string,\n submissionId: SubmissionId,\n ): Effect.fn.Return<SubmissionSnapshot, LedgerError> {\n const found = yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n\n if (Option.isNone(found)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown Submission ${submissionId}`,\n });\n }\n\n return found.value;\n });\n\n /**\n * Read-only explanation of one Submission: the same snapshot + tolerant canonical read +\n * pure classification the recovery pass performs, packaged WITHOUT executing anything —\n * assembling it performs zero writes (P7 exit gate: operators explain recovery state without\n * editing storage).\n */\n const explainSubmission = Effect.fn(\"DurableAgentRuntime.explainSubmission\")(function* (\n submission: SubmissionSnapshot,\n ): Effect.fn.Return<RecoveryExplanation, LedgerError | ThreadStoreError | RunJournalError> {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n const read = yield* readRecoveryHistory(submission.threadId, [\n submission.submissionId,\n ...(snapshot.hostSubmissionId === undefined ? [] : [snapshot.hostSubmissionId]),\n ]);\n\n const evidence = yield* evidenceFor(\n read.records,\n submission.submissionId,\n read.materialized,\n snapshot.hostSubmissionId,\n );\n\n const decision = classifyRecovery(snapshot, evidence);\n const nowMillis = yield* Clock.currentTimeMillis;\n const explainedAt = yield* nowUtc;\n const runId = runIdForSubmission(submission.submissionId);\n const resolvedIds = new Set(snapshot.unknownResolutions.map((intent) => intent.toolCallId));\n const unknownCalls: Array<ExplainedUnknownCall> = [];\n\n for (const envelope of read.records) {\n const payload = envelope.record.payload;\n\n if (payload._tag !== \"ToolCallUnknown\" || payload.runId !== runId) continue;\n unknownCalls.push(\n ExplainedUnknownCall.make({\n toolCallId: payload.toolCallId,\n toolName: payload.toolName,\n reason: payload.reason,\n recordedAt: envelope.record.createdAt,\n resolved: resolvedIds.has(payload.toolCallId),\n }),\n );\n }\n const row = snapshot.submission;\n\n return RecoveryExplanation.make({\n submission: ExplainedSubmission.make({\n submissionId: row.submissionId,\n threadId: row.threadId,\n state: row.state,\n queueSequence: row.queueSequence,\n createdAt: row.createdAt,\n ageSeconds: ageSecondsSince(row.createdAt, nowMillis),\n ...(row.readyAt === undefined\n ? {}\n : { readyAt: row.readyAt, readyAgeSeconds: ageSecondsSince(row.readyAt, nowMillis) }),\n ...(row.parentLinkage === undefined ? {} : { parentLinkage: row.parentLinkage }),\n }),\n evidence: ExplainedEvidence.make({\n threadMaterialized: evidence.threadMaterialized,\n inputRecorded: evidence.inputRecorded,\n abortRecorded: evidence.abortRecorded,\n openToolCalls: evidence.openToolCalls,\n openDelegationCalls: evidence.openDelegationCalls,\n approvalsPending: evidence.approvalsPending,\n unknownCalls,\n approvalDecisions: snapshot.approvalDecisions,\n unknownResolutions: snapshot.unknownResolutions,\n childAttachments: snapshot.childAttachments,\n joins: snapshot.joins,\n ...(evidence.recordedSettlementOutcome === undefined\n ? {}\n : { recordedSettlementOutcome: evidence.recordedSettlementOutcome }),\n ...(snapshot.hostSubmissionId === undefined\n ? {}\n : { hostSubmissionId: snapshot.hostSubmissionId }),\n ...(snapshot.suspension === undefined ? {} : { suspension: snapshot.suspension }),\n ...(snapshot.abortIntent === undefined ? {} : { abortIntent: snapshot.abortIntent }),\n }),\n decision,\n decisionMeaning: recoveryDecisionMeaning(decision._tag),\n disposition: predictRecoveryDisposition(decision, snapshot),\n explainedAt,\n });\n });\n\n const explain = Effect.fn(\"DurableAgentRuntime.explain\")(function* (\n submissionId: SubmissionId,\n ): Effect.fn.Return<RecoveryExplanation, DurableExplainFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"explain\", submissionId }),\n );\n const submission = yield* lookupKnownSubmission(\"explain\", submissionId);\n\n return yield* explainSubmission(submission);\n });\n\n const explainThread = Effect.fn(\"DurableAgentRuntime.explainThread\")(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<ReadonlyArray<RecoveryExplanation>, DurableExplainFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"explain\", threadId }),\n );\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const explanations: Array<RecoveryExplanation> = [];\n\n for (const submission of nonterminal) {\n if (submission.threadId !== threadId) continue;\n explanations.push(yield* explainSubmission(submission));\n }\n\n return explanations;\n });\n\n const verifyImpl = Effect.fn(\"DurableAgentRuntime.verify\")(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<IntegrityReport, DurableVerifyFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"verify\", threadId }),\n );\n const exported = yield* store.export(ThreadExportRequest.make({ threadId }));\n // Lane rows: the nonterminal scan plus every Submission the canonical log itself names —\n // the ledger port scans nonterminal work only, and canonical history is the authority for\n // everything settled (DUR-015).\n const rows = new Map<SubmissionId, SubmissionSnapshot>();\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n\n for (const submission of nonterminal) {\n if (submission.threadId === threadId) {\n rows.set(submission.submissionId, submission);\n }\n }\n const named = new Set<SubmissionId>();\n\n for (const envelope of exported.records) {\n const payload = envelope.record.payload;\n\n if (\n payload._tag === \"UserInputRecorded\" ||\n payload._tag === \"SubmissionSettled\" ||\n payload._tag === \"AbortRequested\"\n ) {\n if (payload.submissionId !== undefined) named.add(payload.submissionId);\n }\n }\n for (const submissionId of named) {\n if (rows.has(submissionId)) continue;\n const found = yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n\n if (Option.isSome(found) && found.value.threadId === threadId) {\n rows.set(submissionId, found.value);\n }\n }\n\n // The latest stored checkpoint binds against the report; a typed load rejection IS an\n // integrity finding rather than an operation failure.\n const checkpointLoad:\n | { readonly _tag: \"loaded\"; readonly checkpoint: ThreadCheckpoint | undefined }\n | { readonly _tag: \"rejected\"; readonly reason: string }\n | { readonly _tag: \"unsupported\" } =\n store.checkpoints === undefined\n ? { _tag: \"unsupported\" }\n : yield* store.checkpoints.load(LoadCheckpointRequest.make({ threadId })).pipe(\n Effect.map((checkpoint) => ({\n _tag: \"loaded\" as const,\n checkpoint: Option.getOrUndefined(checkpoint),\n })),\n Effect.catchTag(\"CheckpointRejected\", (rejected) =>\n Effect.succeed({ _tag: \"rejected\" as const, reason: rejected.reason }),\n ),\n );\n\n const report = yield* verifyThreadInvariants({\n export: exported,\n submissions: [...rows.values()],\n checkpointsSupported: checkpointLoad._tag !== \"unsupported\",\n ...(checkpointLoad._tag === \"loaded\" && checkpointLoad.checkpoint !== undefined\n ? { checkpoint: checkpointLoad.checkpoint }\n : {}),\n }).pipe(withCrypto);\n\n if (checkpointLoad._tag === \"rejected\") {\n const checks = [\n ...report.checks.filter((result) => result.name !== \"checkpoint-binding\"),\n IntegrityCheck.make({\n name: \"checkpoint-binding\",\n status: \"failed\",\n detail: `the stored checkpoint was rejected on load: ${checkpointLoad.reason}`,\n }),\n ];\n\n return IntegrityReport.make({\n threadId: report.threadId,\n tailSequence: report.tailSequence,\n recordCount: report.recordCount,\n submissionCount: report.submissionCount,\n checks,\n ok: false,\n });\n }\n\n return report;\n });\n\n /**\n * Safe re-drive of exactly one Submission's recovery decision (plan §3): classify, execute\n * the ONE repair the classifier names, append the deterministic `RepairAnnotated` audit when\n * it repairs (DUR-013 — retry adds no new record type), and wake the lane. Typed refusals\n * protect the paths that own their own operations: settled work (`NoAction`), lanes blocked\n * on Unknown Outcomes (`resolveUnknown`, DUR-017), and lanes awaiting approval decisions\n * (`resolveApproval`). The mandatory `author`/`reason` audit fields (SEC-011) annotate the\n * structured operator log.\n */\n const retryImpl = Effect.fn(\"DurableAgentRuntime.retry\")(function* (\n command: RetryCommand,\n ): Effect.fn.Return<RecoveryReport, DurableRetryFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"retry\",\n submissionId: command.submissionId,\n }),\n );\n const submission = yield* lookupKnownSubmission(\"retry\", command.submissionId);\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: command.submissionId }),\n );\n\n const read = yield* readRecoveryHistory(submission.threadId, [\n submission.submissionId,\n ...(snapshot.hostSubmissionId === undefined ? [] : [snapshot.hostSubmissionId]),\n ]);\n\n const evidence = yield* evidenceFor(\n read.records,\n command.submissionId,\n read.materialized,\n snapshot.hostSubmissionId,\n );\n\n const decision = classifyRecovery(snapshot, evidence);\n\n if (decision._tag === \"NoAction\") {\n return yield* RetryRefused.make({\n submissionId: command.submissionId,\n refusal: \"settled\",\n decisionTag: decision._tag,\n message: \"The Submission is settled; terminal outcomes are never revisited (DUR-002).\",\n });\n }\n if (decision._tag === \"AwaitUnknownResolution\") {\n return yield* RetryRefused.make({\n submissionId: command.submissionId,\n refusal: \"await-unknown-resolution\",\n decisionTag: decision._tag,\n message:\n \"The lane is durably blocked on Unknown Outcomes; resolve them through the authorized resolveUnknown path (DUR-017) instead of retrying.\",\n });\n }\n if (decision._tag === \"AwaitApprovalDecision\") {\n return yield* RetryRefused.make({\n submissionId: command.submissionId,\n refusal: \"await-approval-decision\",\n decisionTag: decision._tag,\n message:\n \"The lane is durably waiting for approval decisions; decide them through resolveApproval instead of retrying.\",\n });\n }\n yield* Effect.logInfo(\"DurableAgentRuntime.retry executed an operator re-drive\").pipe(\n Effect.annotateLogs({\n submissionId: command.submissionId,\n threadId: submission.threadId,\n author: command.author,\n reason: command.reason,\n decision: decision._tag,\n }),\n );\n\n const disposition = yield* Effect.scoped(\n executeRecoveryDecision(snapshot, evidence, decision, read.records, read),\n );\n\n if (disposition === \"repaired\") {\n yield* annotateRepair(submission.threadId, command.submissionId, decision);\n }\n yield* wake.notify(submission.threadId);\n\n return RecoveryReport.make({\n submissionId: command.submissionId,\n threadId: submission.threadId,\n decision,\n disposition,\n });\n });\n\n /** The documented operator liveness nudge: a droppable wake hint for one lane. */\n const wakeImpl = Effect.fn(\"DurableAgentRuntime.wake\")(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<void, OperationDenied> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"wake\", threadId }),\n );\n yield* wake.notify(threadId);\n });\n\n /**\n * Scan-based DUR-017/OPS-001 obligation report — never a daemon: one ledger scan folded into\n * aged, severity-classified rows. Ages come from timestamps that already exist: `readyAt`/\n * `createdAt` for queued and running work, `suspendedAt` for durable suspensions, and the\n * oldest unresolved canonical `ToolCallUnknown` record for DUR-017 blocks (OPS-002).\n */\n const scanObligationsImpl = Effect.fn(\"DurableAgentRuntime.scanObligations\")(function* (\n thresholds: ObligationThresholds,\n ): Effect.fn.Return<ObligationReport, DurableObligationFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"scanObligations\" }),\n );\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const nowMillis = yield* Clock.currentTimeMillis;\n const generatedAt = yield* nowUtc;\n const entries: Array<ObligationEntry> = [];\n\n for (const submission of nonterminal) {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n let blockedOn: ObligationBlockedOn;\n let since: DateTime.Utc = submission.readyAt ?? submission.createdAt;\n\n switch (submission.state) {\n case \"unknown\": {\n blockedOn = \"unknown\";\n\n const records = (yield* readAllTolerant(submission.threadId, [submission.submissionId]))\n .records;\n\n const resolvedIds = new Set(\n snapshot.unknownResolutions.map((intent) => intent.toolCallId),\n );\n\n const runId = runIdForSubmission(submission.submissionId);\n let earliest: DateTime.Utc | undefined;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag !== \"ToolCallUnknown\" || payload.runId !== runId) continue;\n if (resolvedIds.has(payload.toolCallId)) continue;\n const recordedAt = envelope.record.createdAt;\n\n if (\n earliest === undefined ||\n DateTime.toEpochMillis(recordedAt) < DateTime.toEpochMillis(earliest)\n ) {\n earliest = recordedAt;\n }\n }\n since = earliest ?? snapshot.suspension?.suspendedAt ?? since;\n break;\n }\n case \"suspended\": {\n blockedOn =\n snapshot.suspension?.reason._tag === \"WaitingForChild\" ? \"waitingForChild\" : \"approval\";\n since = snapshot.suspension?.suspendedAt ?? since;\n break;\n }\n case \"admitted\":\n case \"ready\": {\n blockedOn = \"ready-aged\";\n break;\n }\n default: {\n blockedOn = \"running-aged\";\n break;\n }\n }\n const ageSeconds = ageSecondsSince(since, nowMillis);\n\n entries.push(\n ObligationEntry.make({\n submissionId: submission.submissionId,\n threadId: submission.threadId,\n state: submission.state,\n blockedOn,\n ageSeconds,\n severity: obligationSeverityOf(ageSeconds, thresholds),\n }),\n );\n }\n\n return ObligationReport.make({ thresholds, entries, generatedAt });\n });\n\n const runWorkerImpl = <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined =\n undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n ) =>\n Effect.gen(function* () {\n // Wake subscriptions may drop hints, so a ledger scan seeds the worklist (persistence §14).\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const seen = new Set<ThreadId>();\n\n for (const submission of nonterminal) {\n if (seen.has(submission.threadId)) continue;\n seen.add(submission.threadId);\n yield* processThreadImpl(agent, submission.threadId);\n }\n yield* Stream.runForEach(wake.wakes, (threadId) => processThreadImpl(agent, threadId));\n });\n\n const runResolvedWorkerImpl = Effect.gen(function* () {\n // The multi-binding worker (plan §1.7): every claimed head resolves its exact stored\n // Binding from the explicit registration array, so one worker pool serves parent and child\n // lanes (spec §12's smallest-pool wakeup proof runs over this loop).\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const seen = new Set<ThreadId>();\n\n for (const submission of nonterminal) {\n if (seen.has(submission.threadId)) continue;\n seen.add(submission.threadId);\n yield* processThreadResolvedImpl(submission.threadId);\n }\n yield* Stream.runForEach(wake.wakes, (threadId) => processThreadResolvedImpl(threadId));\n });\n\n const messagingRuntime = yield* makeMessagingRuntime({\n bindings: registeredBindings,\n deploymentId: config.deploymentId,\n producerId: config.producerId,\n });\n\n const workerRuntime = yield* makeWorkerRuntime({\n bindings: registeredBindings,\n deploymentId: config.deploymentId,\n producerId: config.producerId,\n settlementPollInterval: config.settlementPollInterval,\n }).pipe(\n Effect.provideService(WorkerInputControl, {\n status: readSubmissionStatus,\n abort,\n submit: (envelope) =>\n submit({ definition: { id: envelope.agentId, input: PersistedJson } }, envelope.input, {\n threadId: envelope.threadId,\n principal: envelope.deliveryPrincipal,\n idempotencyKey: envelope.admissionKey,\n definitions: envelope.definitions,\n ...(envelope.workerAdmission === undefined\n ? {}\n : { workerAdmission: envelope.workerAdmission }),\n ...(envelope.messageAdmission === undefined\n ? {}\n : { messageAdmission: envelope.messageAdmission }),\n }),\n }),\n );\n\n const updateRuntime = yield* makeAgentUpdateRuntime({\n deploymentId: config.deploymentId,\n producerId: config.producerId,\n }).pipe(Effect.provideService(WorkerRuntime, workerRuntime));\n\n return DurableAgentRuntime.of({\n workerHost: workerRuntime.acquire,\n messagingHost: messagingRuntime.acquire,\n submitRegistered,\n settlementRecord,\n submit,\n submissionStatus,\n inspectSubmissionStatus: readSubmissionStatus,\n awaitSettlement,\n awaitProgress,\n observe,\n abort,\n resolveUnknown,\n resolveApproval,\n explain,\n explainThread,\n verify: verifyImpl,\n retry: retryImpl,\n wake: wakeImpl,\n scanObligations: scanObligationsImpl,\n processThread: processThreadImpl,\n processThreadResolved: processThreadResolvedImpl,\n processThreadHead: processThreadHeadImpl,\n runWorker: runWorkerImpl,\n runResolvedWorker: runResolvedWorkerImpl,\n runRecovery: runRecoveryImpl(),\n recoverSubmission,\n });\n});\n\n/**\n * Durable Agent Runtime coordinator (deployment class DN; D1/D2). It coordinates the\n * SubmissionLedger, ThreadStore, and WakeScheduler ports so that once `submit` returns a\n * Receipt, the Submission settles exactly once (DUR-001/DUR-002) while every external effect\n * remains at-least-once (DUR-003) — this runtime never claims exactly-once side effects.\n *\n * - `submit(agent, input, options)` — durable admission → Thread materialization →\n * `ThreadCreated` → readiness → Receipt, with failpoints between the steps; a retry with\n * the same (thread, principal, idempotencyKey) resumes and returns the same Receipt.\n * - `awaitSettlement(receipt)` — authorized once before the first ledger read, for the lifetime\n * of this wait; interrupting it detaches the caller only and never cancels accepted work.\n * - `observe(receipt, {after})` — canonical record observation from a stored offset.\n * - `abort(command)` — authorized before ledger access; durable idempotent abort intent; inactive work settles aborted through\n * recovery, an active worker makes the command canonical before interrupting its Run (§13),\n * settled work fails with `SettlementConflict` (DUR-012). A `joined` Submission fails with a\n * typed `JoinedToHost` conflict carrying the host identity — it settles with its host, so the\n * abort target is the host; aborting a `joining` Submission records the intent, honored only\n * if the host has not consumed the input (revert-then-abort, plan §2.5).\n * - `resolveUnknown(command)` — the authorized DUR-017 resolution path for Unknown Outcomes:\n * the durable intent is idempotent per (submission, tool call) and conflicts typed on\n * divergence; the canonical resolution records are applied by recovery or the next Attempt,\n * and the lane wakes once every marked call is covered.\n * - `resolveApproval(command)` — the durable approval decision path (plan §2.6): the intent is\n * idempotent per (submission, tool call) with a typed `ApprovalConflict` on divergence; once\n * every pending call of the suspension reason is decided the lane wakes\n * (`suspended → input-applied`) and the next Attempt resumes the declared batch without model\n * re-invocation, appending the canonical `ToolApprovalDecided` before honoring the decision.\n * - `processThread(agent, threadId)` — drain one lane: fenced FIFO-head claims,\n * canonical input apply, split response/prepared/results Turn commits (plan §2.1),\n * reconcile-then-mark for open ordinary Tool Calls (DUR-009, never an automatic replay),\n * declared-batch resume without model re-invocation (§15), and terminalization. An active\n * host Run claims the contiguous ready prefix of later queued Submissions at every safe Turn\n * seam (Joining/Joined, plan §2.5): the queued input becomes canonical (`input:{sid}`) before\n * the next model request, reattaches through the prompt-coverage rule after a crash, and the\n * joined Submissions settle with the host outcome (DUR-002/DUR-016).\n * - `runWorker(agent)` — scan-seeded, wake-driven worker loop over every lane (WP4's host driver),\n * reimplemented over a singleton identity-exact (digest-transparent) Binding resolution: a\n * claimed head belonging to a different Agent never runs against this binding (SUB-023); a\n * parent-linked head refused this way settles with the framework `ChildCompatibilityFailure`.\n * - `processThreadResolved(threadId)` / `runResolvedWorker` — the\n * S2 multi-binding equivalents over registrations owned by the runtime Layer (spec §11, D7): every claimed\n * head's stored `(agentId, agentDigests)` resolves to the exact registered Binding before any\n * code runs; an unresolvable parent-linked child settles with the Schema-stable framework\n * `ChildCompatibilityFailure` (no application code, the child never executes), and an\n * unresolvable root surfaces the typed refusal after releasing the claim.\n * - `runRecovery()` — classify every nonterminal Submission with the pure `classifyRecovery` and\n * execute the repair decisions, appending a `RepairAnnotated` audit record per executed decision\n * (DUR-013). Untouched ready input and model-resuming work are reported `deferred` for a\n * worker claim; lanes blocked on\n * Unknown Outcomes are reported `unknown`. The S2 binding-free Subagent executors (admission\n * completion, start-link repair, waiting restoration, wake replay, canonical join accounting,\n * abort propagation, orphan reservation release) run here; the settlement join itself is\n * deferred to a claiming worker because it needs the parent Binding's result projection.\n * - `explain`/`explainThread`, `verify`, `retry`, `wake`, `scanObligations` — the P7\n * administrative operations (plan §3) over the same two ports, identical on DN and DC.\n * `explain` and `verify` are strictly read-only; `retry` re-drives exactly one classified\n * repair with mandatory author/reason audit and typed refusals; `scanObligations` is the\n * scan-based DUR-017/OPS-001 obligation surface. Every one of them (plus `observe`,\n * `resolveUnknown`, `resolveApproval`) consults the `OperationAuthorizer` reference\n * fail-closed — the default Layer preserves the service-possession behavior, and a\n * host-supplied authorizer turns denials into the typed `OperationDenied`.\n */\nexport class DurableAgentRuntime extends Context.Service<\n DurableAgentRuntime,\n {\n /** Acquire an authenticated source Thread facet; its References confer no authority. */\n readonly workerHost: (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n /** Exact retained owner input for captured source policy; never selects the latest input. */\n readonly sourceSubmissionId?: SubmissionId;\n }) => Effect.Effect<SubagentHost[\"Service\"], WorkerError>;\n readonly messagingHost: (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n }) => Effect.Effect<MessagingHost[\"Service\"], MessagingError>;\n /** Admit the exact registered Definition instance; reject missing, ambiguous, or different definitions. */\n readonly submitRegistered: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: Omit<DurableSubmitOptions, \"definitions\">,\n ) => Effect.Effect<\n Receipt,\n DurableSubmitFailure | BindingUnavailable,\n InputSchema[\"EncodingServices\"]\n >;\n /** Authorized exact canonical terminal record, including the encoded output. Reject pending work. */\n readonly settlementRecord: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionSettledRecord, DurableAwaitFailure>;\n readonly submit: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ) => Effect.Effect<Receipt, DurableSubmitFailure, InputSchema[\"EncodingServices\"]>;\n readonly awaitSettlement: (receipt: Receipt) => Effect.Effect<Settlement, DurableAwaitFailure>;\n /** Authorized, nonblocking read. Only the durable Settlement marks work complete. */\n readonly submissionStatus: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, DurableAwaitFailure>;\n /**\n * Trusted worker inspection under the same runtime authority as processThread/recoverSubmission.\n * Caller-facing observations must use submissionStatus or awaitSettlement for authorization.\n */\n readonly inspectSubmissionStatus: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, DurableAwaitFailure>;\n /**\n * Wait for an already-committed record or one incarnation-local progress hint after\n * `afterSequence`. Canonical records remain authoritative: callers re-read after return.\n */\n readonly awaitProgress: (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n ) => Effect.Effect<void, DurableProgressFailure>;\n readonly observe: (\n receipt: Receipt,\n options?: DurableObserveOptions,\n ) => Stream.Stream<\n CanonicalRecordEnvelope,\n ThreadStoreError | ThreadNotMaterialized | OperationDenied\n >;\n readonly abort: (command: AbortCommand) => Effect.Effect<AbortIntent, DurableAbortFailure>;\n readonly resolveUnknown: (\n command: UnknownResolutionCommand,\n ) => Effect.Effect<UnknownResolutionIntent, DurableResolveFailure | OperationDenied>;\n readonly resolveApproval: (\n command: ApprovalDecisionCommand,\n ) => Effect.Effect<ApprovalDecisionIntent, DurableApprovalFailure | OperationDenied>;\n /**\n * Read-only recovery explanation of one Submission (P7 plan §3): snapshot + tolerant\n * canonical read + the pure classifier, packaged with the decision's operator meaning and\n * predicted disposition. Performs ZERO writes — the canonical log and every ledger row are\n * byte-identical before and after.\n */\n readonly explain: (\n submissionId: SubmissionId,\n ) => Effect.Effect<RecoveryExplanation, DurableExplainFailure>;\n /** `explain` for every nonterminal lane member of one Thread, in queue order. */\n readonly explainThread: (\n threadId: ThreadId,\n ) => Effect.Effect<ReadonlyArray<RecoveryExplanation>, DurableExplainFailure>;\n /**\n * Read-only integrity verification of one Thread (P7 plan §3): Schema round-trips,\n * record-identity uniqueness, sequence contiguity, FIFO input/settlement order,\n * ledger-terminal vs canonical-settlement agreement (DUR-015), and checkpoint binding —\n * typed per-check results, never a repair. The digest-chain check reports `skipped` with\n * the honest reason: full chain recomputation needs per-batch producer identity, which the\n * ThreadStore port deliberately does not export (supply it to\n * `verifyThreadInvariants` directly; adapter-level `verifyOnOpen` is the\n * storage-side audit).\n */\n readonly verify: (threadId: ThreadId) => Effect.Effect<IntegrityReport, DurableVerifyFailure>;\n /**\n * Safe re-drive of one Submission's recovery decision with mandatory author/reason audit\n * (SEC-011): executes exactly the repair the classifier names and appends the\n * deterministic `RepairAnnotated` record when it repairs (DUR-013). Typed `RetryRefused`\n * for settled work and for lanes owned by the resolveUnknown/resolveApproval paths.\n */\n readonly retry: (command: RetryCommand) => Effect.Effect<RecoveryReport, DurableRetryFailure>;\n /** The documented operator liveness nudge: a droppable wake hint for one lane. */\n readonly wake: (threadId: ThreadId) => Effect.Effect<void, OperationDenied>;\n /**\n * Scan-based DUR-017/OPS-001 obligation report: every nonterminal Submission with what it\n * is visibly blocked on, its age, and a threshold-classified severity. Never a daemon —\n * hosts run it periodically and own the alert loop (OPS-002).\n */\n readonly scanObligations: (\n thresholds: ObligationThresholds,\n ) => Effect.Effect<ObligationReport, DurableObligationFailure>;\n readonly processThread: <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends\n | InputPromptSource<InputSchema[\"Type\"], unknown, unknown>\n | undefined = undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n threadId: ThreadId,\n ) => Effect.Effect<\n ReadonlyArray<Settlement>,\n DurableWorkerFailure | DurableBindingFailure,\n DurableWorkerRequirements<\n RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n InstructionRequirements\n >\n >;\n readonly processThreadResolved: (\n threadId: ThreadId,\n ) => Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure>;\n /**\n * Advance at most one FIFO-head Attempt, closing its resources before returning. A vacant,\n * owned, unknown, or suspended head returns None and leaves accepted work pending.\n * Ready input may join this Run through the existing Turn seams and settle with its head.\n * Interruption ends only this Attempt; ownership cleanup uses its latest renewed token.\n * A trusted host may supply `yieldAfter` to return None before the next Turn's context\n * preparation, committing any completed Turn first. This releases ownership without settling or resetting the durable\n * Run deadline. It is a cooperative scheduling deadline, not a hard interruption timeout.\n */\n readonly processThreadHead: (\n threadId: ThreadId,\n options?: { readonly yieldAfter?: DateTime.Utc },\n ) => Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure>;\n readonly runWorker: <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends\n | InputPromptSource<InputSchema[\"Type\"], unknown, unknown>\n | undefined = undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n ) => Effect.Effect<\n void,\n DurableWorkerFailure | DurableBindingFailure,\n DurableWorkerRequirements<\n RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n InstructionRequirements\n >\n >;\n readonly runResolvedWorker: Effect.Effect<void, DurableWorkerFailure | DurableBindingFailure>;\n readonly runRecovery: Effect.Effect<ReadonlyArray<RecoveryReport>, DurableWorkerFailure>;\n /** Apply one recovery decision; untouched ready input is deferred to its worker claim. */\n readonly recoverSubmission: (\n submissionId: SubmissionId,\n ) => Effect.Effect<RecoveryReport, DurableWorkerFailure>;\n }\n>()(\"@effect-agent/thread/DurableAgentRuntime\") {\n /**\n * Resolve typed registrations and capture their services once in the runtime's Layer Scope.\n * Every claimed head must match an exact registered identity and digest triple. Worker calls\n * cannot replace these registrations or their captured services. Tool authorization is required.\n */\n static layerRegistered<const Entries extends ReadonlyArray<AgentRegistration>>(\n registrations: Entries,\n ) {\n return Layer.effect(DurableAgentRuntime)(\n Effect.flatMap(compileRegistrations(registrations), make),\n );\n }\n\n /** Construct from precompiled registrations whose captured resources belong to the caller's Scope. */\n static layerWithBindings(bindings: ReadonlyArray<ResolvedBinding>) {\n return Layer.effect(DurableAgentRuntime)(make(bindings));\n }\n\n /** Captures optional context preparation; Tool authorization remains required in `R`. */\n static readonly layerWithServices: Layer.Layer<\n DurableAgentRuntime,\n never,\n | SubmissionLedger\n | ThreadStore\n | WakeScheduler\n | DurableRuntimeFailpoint\n | DurableRuntimeConfig\n | ToolReconciler\n | RunToolAuthorization\n | Crypto.Crypto\n > = DurableAgentRuntime.layerWithBindings([]);\n\n /** Compatible defaults: no host prompt transformation and allow-all Tool authorization. */\n static readonly layer: Layer.Layer<\n DurableAgentRuntime,\n never,\n | SubmissionLedger\n | ThreadStore\n | WakeScheduler\n | DurableRuntimeFailpoint\n | DurableRuntimeConfig\n | ToolReconciler\n | Crypto.Crypto\n > = DurableAgentRuntime.layerWithServices.pipe(\n Layer.provide([RunContextPreparationPassthrough, RunToolAuthorization.allowAll]),\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DurableAgentRuntime-uggeJpv3.mjs","names":["failure","sameAdmission","sameJson","AgentRuntime.projectCompletionFromToolOutput","AgentRuntime.projectCompletionOutput","AgentRuntime.decodeFinalOutput","AgentRuntime.encodeRunDisposition","AgentRuntime.streamWithUsageAccountingUnknown","IdGenerator"],"sources":["../src/durable/internal/worker-runtime.ts","../src/durable/internal/agent-updates.ts","../src/durable/internal/journal-checkpoint.ts","../src/durable/internal/messaging-host.ts","../src/durable/internal/worker-host.ts","../src/durable/DurableAgentRuntime.ts"],"sourcesContent":["import { Context, type Effect } from \"effect\";\n\nimport type { makeWorkerRuntime } from \"./worker-host.ts\";\n\n/** Canonical worker operations constructed once by the durable coordinator. */\nexport class WorkerRuntime extends Context.Service<\n WorkerRuntime,\n Effect.Success<ReturnType<typeof makeWorkerRuntime>>\n>()(\"@effect-agent/thread/internal/WorkerRuntime\") {}\n","import { Clock, Crypto, DateTime, Effect, Option, Schema } from \"effect\";\n\nimport { Update, UpdateError } from \"../../core/AgentUpdates.ts\";\nimport type { RunId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { utf8ByteLength } from \"../../core/internal/utf8.ts\";\nimport { IdempotencyKey } from \"../../core/Receipt.ts\";\nimport { digestJson } from \"../Digest.ts\";\nimport { DurableRuntimeFailpoint } from \"../DurableFailpoint.ts\";\nimport {\n MessageDeliveryStore,\n MessageDeliveryRecord,\n messageDeliveryCapacity,\n messageDeliveryUsesCapacity,\n prepareMessageDelivery,\n} from \"../MessageDelivery.ts\";\nimport {\n AgentUpdateEmitted,\n BatchId,\n CanonicalBatch,\n type CanonicalRecordEnvelope,\n DefinitionDigests,\n type DeploymentId,\n PersistedJson,\n type ProducerEpoch,\n type ProducerId,\n RecordEnvelope,\n RecordId,\n} from \"../Records.ts\";\nimport { LedgerError, type SubmissionSnapshot } from \"../SubmissionLedger.ts\";\nimport { PreparedInput } from \"../Subscription.ts\";\nimport {\n FencedAppendRequest,\n ThreadExportRequest,\n ThreadStore,\n ThreadTailRequest,\n} from \"../ThreadStore.ts\";\nimport { WorkerRuntime } from \"./worker-runtime.ts\";\n\nexport const lastWorkerReportMessageId = (records: ReadonlyArray<CanonicalRecordEnvelope>) => {\n for (let index = records.length - 1; index >= 0; index--) {\n const payload = records[index]?.record.payload;\n\n if (payload?._tag === \"WorkerReportPrepared\") return payload.messageId;\n if (payload?._tag === \"AgentUpdateEmitted\" && payload.delivery !== undefined)\n return payload.delivery.messageId;\n }\n\n return undefined;\n};\n\ntype Delivery = NonNullable<AgentUpdateEmitted[\"delivery\"]>;\n\nconst storage = () =>\n LedgerError.make({ operation: \"agent-update\", message: \"Durable update persistence failed\" });\n\nconst rejected = (reason: UpdateError[\"reason\"]) => UpdateError.make({ reason });\n\n/** Acceptance is fenced by the actual emitting Attempt; recovery only recreates frozen outbox rows. */\nexport const makeAgentUpdateRuntime = Effect.fn(\"AgentUpdates.makeDurable\")(function* (options: {\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n}) {\n const store = yield* ThreadStore;\n const workers = yield* WorkerRuntime;\n const deliveries = yield* Effect.serviceOption(MessageDeliveryStore);\n const crypto = yield* Crypto.Crypto;\n const failpoint = yield* DurableRuntimeFailpoint;\n\n const read = (threadId: ThreadId) =>\n store.export(ThreadExportRequest.make({ threadId })).pipe(Effect.mapError(storage));\n\n const prepareDelivery = Effect.fn(\"AgentUpdates.prepareDelivery\")(function* (\n update: Update,\n delivery: Delivery,\n ) {\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(delivery.envelope).pipe(\n Effect.mapError(storage),\n );\n\n return yield* prepareMessageDelivery({\n key: { ownerThreadId: update.threadId, messageId: delivery.messageId },\n envelope,\n createdAtMillis: delivery.createdAtMillis,\n deadlineAtMillis: delivery.deadlineAtMillis,\n ...(delivery.predecessor === undefined ? {} : { predecessor: delivery.predecessor }),\n }).pipe(Effect.provideService(Crypto.Crypto, crypto), Effect.mapError(storage));\n });\n\n const insert = Effect.fn(\"AgentUpdates.restoreDelivery\")(function* (record: AgentUpdateEmitted) {\n const delivery = record.delivery;\n\n if (delivery === undefined) return;\n if (Option.isNone(deliveries)) return yield* storage();\n const prepared = yield* prepareDelivery(record.update, delivery);\n\n yield* failpoint.hit(\"update:before-delivery-insert\");\n yield* deliveries.value.insert(prepared).pipe(Effect.mapError(storage));\n yield* failpoint.hit(\"update:after-delivery-insert\");\n });\n\n const repair = Effect.fn(\"AgentUpdates.repair\")(function* (threadId: ThreadId) {\n const history = yield* read(threadId);\n\n for (const { record } of history.records) {\n if (record.payload._tag === \"AgentUpdateEmitted\" && record.payload.delivery !== undefined)\n yield* insert(record.payload);\n }\n });\n\n const emit = Effect.fn(\"AgentUpdates.accept\")(function* (request: {\n readonly submission: SubmissionSnapshot;\n readonly runId: RunId;\n readonly producerEpoch: ProducerEpoch;\n readonly definitions: DefinitionDigests;\n readonly updateId: IdempotencyKey;\n readonly value: Schema.Json;\n readonly maxCount?: number;\n readonly maxBytes?: number;\n }) {\n const value = yield* Schema.encodeEffect(Schema.fromJsonString(PersistedJson))(\n request.value,\n ).pipe(\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(PersistedJson))),\n Effect.mapError(() => rejected(\"validation\")),\n );\n\n const updateId = yield* Schema.decodeEffect(IdempotencyKey)(request.updateId).pipe(\n Effect.mapError(() => rejected(\"validation\")),\n );\n\n const digest = yield* digestJson([request.submission.threadId, request.runId, updateId]).pipe(\n Effect.provideService(Crypto.Crypto, crypto),\n Effect.mapError(storage),\n );\n\n const id = `agent-update:${digest}`;\n const messageId = Schema.decodeSync(IdempotencyKey)(`worker-update:${digest}`);\n const maxCount = request.maxCount ?? 32;\n const maxBytes = request.maxBytes ?? 16_384;\n\n if (\n !Number.isSafeInteger(maxCount) ||\n maxCount < 1 ||\n !Number.isSafeInteger(maxBytes) ||\n maxBytes < 1\n )\n return yield* rejected(\"validation\");\n\n for (let attempt = 0; attempt < 32; attempt++) {\n const history = yield* read(request.submission.threadId);\n\n const updates = history.records.flatMap(({ record }) =>\n record.payload._tag === \"AgentUpdateEmitted\" ? [record.payload] : [],\n );\n\n const existing = updates.find(\n (entry) => entry.update.runId === request.runId && entry.update.updateId === updateId,\n );\n\n if (existing !== undefined) {\n if (\n existing.update.agentId !== request.submission.agentId ||\n !Schema.toEquivalence(PersistedJson)(existing.update.value, value) ||\n !Schema.toEquivalence(DefinitionDigests)(existing.definitions, request.definitions)\n )\n return yield* rejected(\"conflict\");\n yield* insert(existing);\n\n return existing.update;\n }\n const own = updates.filter((entry) => entry.update.runId === request.runId);\n\n if (\n own.length >= maxCount ||\n own.reduce(\n (total, entry) => total + utf8ByteLength(JSON.stringify(entry.update.value)),\n 0,\n ) +\n utf8ByteLength(JSON.stringify(value)) >\n maxBytes\n )\n return yield* rejected(\"capacity\");\n if (\n history.records.some(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" && record.payload.runId === request.runId,\n ) ||\n !history.records.some(\n ({ record }) =>\n record.payload._tag === \"RunStarted\" && record.payload.runId === request.runId,\n )\n )\n return yield* rejected(\"identity\");\n\n const update = Update.make({\n schemaVersion: 1,\n agentId: request.submission.agentId,\n threadId: request.submission.threadId,\n runId: request.runId,\n updateId,\n sequence: (updates.at(-1)?.update.sequence ?? 0) + 1,\n value,\n });\n\n const prepared = yield* workers.prepareUpdate(update, request.submission, messageId);\n let delivery: Delivery | undefined;\n\n if (prepared !== undefined) {\n if (Option.isNone(deliveries)) return yield* rejected(\"unavailable\");\n const retained = updates.filter((entry) => entry.delivery !== undefined);\n const capacity = messageDeliveryCapacity(deliveries.value.limits, true);\n\n if (\n retained.length >= capacity.retained ||\n utf8ByteLength(JSON.stringify(prepared.envelope)) >\n deliveries.value.limits.maxEnvelopeBytes\n )\n return yield* rejected(\"capacity\");\n let pending = 0;\n\n for (const accepted of retained) {\n if (accepted.delivery === undefined) continue;\n\n const row = yield* deliveries.value\n .get({\n ownerThreadId: request.submission.threadId,\n messageId: accepted.delivery.messageId,\n })\n .pipe(Effect.mapError(storage));\n\n if (row === null || messageDeliveryUsesCapacity(row)) pending++;\n }\n if (pending >= capacity.pending) return yield* rejected(\"capacity\");\n const predecessor = lastWorkerReportMessageId(history.records);\n\n delivery = { ...prepared, ...(predecessor === undefined ? {} : { predecessor }) };\n const deliveryRecord = yield* prepareDelivery(update, delivery);\n\n const stored = yield* Schema.encodeEffect(Schema.fromJsonString(MessageDeliveryRecord))(\n deliveryRecord,\n ).pipe(Effect.mapError(storage));\n\n if (utf8ByteLength(stored) > deliveries.value.maxStoredValueBytes)\n return yield* rejected(\"capacity\");\n }\n\n const payload = AgentUpdateEmitted.make({\n update,\n definitions: request.definitions,\n ...(delivery === undefined ? {} : { delivery }),\n });\n\n const tail = yield* store\n .inspectTail(ThreadTailRequest.make({ threadId: request.submission.threadId }))\n .pipe(Effect.mapError(storage));\n\n if (tail.producerEpoch !== request.producerEpoch) return yield* storage();\n if (tail.tailSequence !== history.tailSequence || tail.tailDigest !== history.tailDigest)\n continue;\n yield* failpoint.hit(\"update:before-canonical-append\");\n\n const appended = yield* store\n .append(\n FencedAppendRequest.make({\n threadId: request.submission.threadId,\n producerEpoch: request.producerEpoch,\n expectedTailSequence: history.tailSequence,\n expectedTailDigest: history.tailDigest,\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: options.producerId,\n records: [\n RecordEnvelope.make({\n recordId: Schema.decodeSync(RecordId)(id),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(yield* Clock.currentTimeMillis),\n deploymentId: options.deploymentId,\n payload,\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag(\"AppendConflict\", () => Effect.succeed(false)),\n Effect.mapError(storage),\n );\n\n if (!appended) continue;\n yield* failpoint.hit(\"update:after-canonical-append\");\n yield* insert(payload);\n\n return update;\n }\n\n return yield* storage();\n });\n\n return { emit, repair };\n});\n","import { Option, Schema } from \"effect\";\nimport { Prompt } from \"effect/unstable/ai\";\n\nimport { RunId, SubmissionId } from \"../../core/Identifiers.ts\";\nimport { RunPolicyUsage } from \"../../core/RunPolicyUsage.ts\";\nimport { Selection } from \"../../core/ToolExposure.ts\";\nimport { RunUsageSummary } from \"../../core/Usage.ts\";\nimport { CanonicalRecordEnvelope, CanonicalSequence, Digest, PersistedJson } from \"../Records.ts\";\n\n/** Retired accounting is additive; the latest Tool batch always remains replayable verbatim. */\nexport class JournalCheckpointSeed extends Schema.Class<JournalCheckpointSeed>(\n \"@effect-agent/thread/internal/JournalCheckpointSeed\",\n)({\n runId: RunId,\n throughSequence: CanonicalSequence,\n firstSequence: Schema.optionalKey(CanonicalSequence),\n toolSelection: Schema.optionalKey(Selection),\n committedTurns: Schema.Natural,\n policyUsage: RunPolicyUsage,\n modelCalls: Schema.Natural,\n unobservedModelCalls: Schema.Natural,\n inputTokens: Schema.Natural,\n outputTokens: Schema.Natural,\n lastInputTokens: Schema.Natural,\n lastOutputTokens: Schema.Natural,\n costMicrousd: Schema.Natural,\n summarizedModelUsage: RunUsageSummary,\n protectedContext: Schema.optionalKey(PersistedJson),\n contextWindowId: Schema.optionalKey(Schema.String),\n frontier: Schema.optionalKey(\n Schema.Struct({\n sequence: CanonicalSequence,\n tag: Schema.Literals([\"ModelResponseRecorded\", \"ToolCallSettled\"]),\n }),\n ),\n /** Canonical replacement whose covered batches were validated before retirement. */\n compaction: CanonicalRecordEnvelope,\n}) {}\n\n/** A bounded sparse projection, never a canonical log or a submission-ownership record. */\nexport class RecoveryCheckpointState extends Schema.Class<RecoveryCheckpointState>(\n \"@effect-agent/thread/internal/RecoveryCheckpointState\",\n)({\n schemaVersion: Schema.Literal(1),\n policyAccountingVersion: Schema.Literal(1),\n submissionId: SubmissionId,\n submissionIds: Schema.Array(SubmissionId).check(Schema.isMaxLength(4_096)),\n seed: JournalCheckpointSeed,\n records: Schema.Array(CanonicalRecordEnvelope).check(Schema.isMaxLength(4_096)),\n}) {}\n\nexport class RecoveryCheckpointContents extends Schema.Class<RecoveryCheckpointContents>(\n \"@effect-agent/thread/internal/RecoveryCheckpointContents\",\n)({\n state: RecoveryCheckpointState,\n digest: Digest,\n}) {}\n\nexport const RECOVERY_ENGINE_VERSION = \"effect-agent/recovery@1\";\n\n/**\n * Late evidence can invalidate an old compaction. Such histories use full canonical replay;\n * an omitted run/turn must never be treated as proven absent by a sparse projection.\n */\nexport const checkpointSuffixCompatible = (\n seed: JournalCheckpointSeed,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n retained: ReadonlyArray<CanonicalRecordEnvelope>,\n): boolean =>\n records.every(({ sequence, record: { payload } }) => {\n if (\"runId\" in payload && payload.runId !== undefined && payload.runId !== seed.runId)\n return false;\n if (\"turn\" in payload && payload.turn <= seed.committedTurns) return false;\n if (payload._tag === \"ToolCallSettled\" || payload._tag === \"ToolCallResolved\") {\n // These records have no turn. The retained declaration/preparation proves their scope.\n return [...retained, ...records].some(\n ({ sequence: declarationSequence, record: { payload: candidate } }) => {\n if (\n candidate._tag !== \"ModelResponseRecorded\" ||\n candidate.runId !== payload.runId ||\n candidate.turn <= seed.committedTurns ||\n seed.compaction.record.payload._tag !== \"CompactionCreated\" ||\n declarationSequence <= seed.compaction.record.payload.coversThrough ||\n declarationSequence >= sequence\n )\n return false;\n const decoded = Schema.decodeUnknownOption(Prompt.Prompt)(candidate.messages);\n\n return (\n Option.isSome(decoded) &&\n decoded.value.content.some(\n (message) =>\n message.role === \"assistant\" &&\n message.content.some(\n (part) => part.type === \"tool-call\" && part.id === payload.toolCallId,\n ),\n )\n );\n },\n );\n }\n\n return payload._tag !== \"CompactionCreated\" || payload.coversThrough >= seed.throughSequence;\n });\n","import { Clock, Crypto, DateTime, Effect, Option, Schema, Stream } from \"effect\";\n\nimport type { InboxPage } from \"../../capabilities/Messaging.ts\";\nimport {\n MessageAdmission,\n MessageRef,\n MessageStatus,\n MessagingError,\n PeerName,\n} from \"../../capabilities/Messaging.ts\";\nimport type { AgentId, ThreadId } from \"../../core/Identifiers.ts\";\nimport { IdempotencyKey, type Principal } from \"../../core/Receipt.ts\";\nimport type { WorkerSource } from \"../../core/Worker.ts\";\nimport {\n type MessagingHost,\n type PeerTarget,\n type SendPeerMessage,\n} from \"../../engine/MessagingHost.ts\";\nimport {\n PeerAuthorizer,\n PeerRoutes,\n PeerDeliveryLifetime,\n PeerMessageCapacity,\n} from \"../../engine/MessagingHost.ts\";\nimport { digestJson } from \"../Digest.ts\";\nimport type { DurableSubmitOptions } from \"../DurableAgentRuntime.ts\";\nimport {\n MessageDeliveryFailpoint,\n MessageDeliveryStore,\n type MessageDeliveryRecord,\n prepareMessageDelivery,\n} from \"../MessageDelivery.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n type DeploymentId,\n type Digest,\n PeerMessagePrepared,\n PersistedJson,\n type ProducerId,\n RecordEnvelope,\n RecordId,\n} from \"../Records.ts\";\nimport { PreparedInput } from \"../Subscription.ts\";\nimport {\n FencedAppendRequest,\n ThreadExportRequest,\n ThreadRead,\n ThreadTailRequest,\n ThreadStore,\n} from \"../ThreadStore.ts\";\nimport {\n definitionDigestsEqual,\n resolveDefinitionBinding,\n type ResolvedBinding,\n} from \"./agent-registration.ts\";\n\nexport interface MessagingRuntimeOptions {\n readonly bindings: ReadonlyArray<ResolvedBinding>;\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n}\n\nconst failure = (operation: MessagingError[\"operation\"], reason: MessagingError[\"reason\"]) =>\n MessagingError.make({ operation, reason });\n\nconst sameRef = Schema.toEquivalence(MessageRef);\nconst sameAdmission = Schema.toEquivalence(MessageAdmission);\nconst sameJson = Schema.toEquivalence(PersistedJson);\n\n/** Thread-owned durable peer delivery. Source proof and the independent due index survive Run settlement. */\nexport const makeMessagingRuntime = Effect.fn(\"MessagingHost.make\")(function* (\n options: MessagingRuntimeOptions,\n) {\n const deps = {\n ...options,\n store: yield* ThreadStore,\n deliveries: yield* Effect.serviceOption(MessageDeliveryStore),\n crypto: yield* Crypto.Crypto,\n authorizer: yield* PeerAuthorizer,\n routes: yield* PeerRoutes,\n lifetimeMillis: yield* PeerDeliveryLifetime,\n maxMessagesPerSource: yield* PeerMessageCapacity,\n failpoint: yield* MessageDeliveryFailpoint,\n };\n\n const digest = (value: Schema.Json) =>\n digestJson(value).pipe(\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(() => failure(\"send\", \"storage\")),\n );\n\n const read = (threadId: ThreadId) =>\n deps.store\n .export(ThreadExportRequest.make({ threadId }))\n .pipe(Effect.mapError(() => failure(\"context\", \"storage\")));\n\n const sourceOf = Effect.fn(\"MessagingHost.source\")(function* (threadId: ThreadId) {\n const log = yield* read(threadId);\n const created = log.records[0]?.record.payload;\n\n if (created?._tag !== \"ThreadCreated\") return yield* failure(\"context\", \"not-found\");\n\n const matching = deps.bindings.filter(\n (binding) =>\n binding.agentId === created.agentId &&\n definitionDigestsEqual(binding.digests, created.definitions),\n );\n\n if (matching.length !== 1) return yield* failure(\"context\", \"binding-mismatch\");\n\n return { log, address: { threadId, agentId: created.agentId } };\n });\n\n const decodeProof = Effect.fn(\"MessagingHost.decodeProof\")(function* (record: RecordEnvelope) {\n if (record.payload._tag !== \"PeerMessagePrepared\") return yield* failure(\"send\", \"corrupt\");\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(\n record.payload.encodedEnvelope,\n ).pipe(Effect.mapError(() => failure(\"send\", \"corrupt\")));\n\n if (\n !Schema.is(MessageAdmission)(envelope.messageAdmission) ||\n envelope.messageAdmission.message.messageId !== record.payload.messageId\n )\n return yield* failure(\"send\", \"corrupt\");\n\n return {\n envelope,\n sourcePrincipal: record.payload.sourcePrincipal,\n operation: record.payload.operation,\n deadlineAtMillis: record.payload.deadlineAtMillis,\n createdAtMillis: DateTime.toEpochMillis(record.createdAt),\n };\n });\n\n const proof = Effect.fn(\"MessagingHost.proof\")(function* (message: MessageRef) {\n const source = yield* sourceOf(message.ownerThreadId);\n\n const record = source.log.records.find(\n ({ record }) =>\n record.payload._tag === \"PeerMessagePrepared\" &&\n record.payload.messageId === message.messageId,\n )?.record;\n\n if (record === undefined) return yield* failure(\"reply\", \"invalid-reference\");\n const saved = yield* decodeProof(record);\n\n if (\n !Schema.is(MessageAdmission)(saved.envelope.messageAdmission) ||\n saved.envelope.messageAdmission.sender.agentId !== source.address.agentId ||\n !sameRef(saved.envelope.messageAdmission.message, message)\n )\n return yield* failure(\"reply\", \"invalid-reference\");\n\n return saved;\n });\n\n const authorizeEnvelope = Effect.fn(\"MessagingHost.authorizeEnvelope\")(function* (\n saved: Effect.Success<ReturnType<typeof proof>>,\n operation: \"send\" | \"reply\",\n ) {\n const metadata = saved.envelope.messageAdmission;\n\n if (!Schema.is(MessageAdmission)(metadata)) return yield* failure(operation, \"corrupt\");\n\n const principal = yield* deps.authorizer.authorize({\n source: metadata.sender,\n principal: saved.sourcePrincipal,\n operation: saved.operation,\n access: \"send\",\n peerName: metadata.peerName,\n destination: { threadId: saved.envelope.threadId, agentId: saved.envelope.agentId },\n });\n\n if (principal !== saved.envelope.deliveryPrincipal) return yield* failure(operation, \"denied\");\n });\n\n const status = (row: MessageDeliveryRecord): MessageStatus =>\n MessageStatus.make({\n message: row.key,\n status: row.status,\n receipt: row.receipt,\n settlement:\n row.settlement === null\n ? null\n : { settlementId: row.settlement.settlementId, outcome: row.settlement.outcome },\n reason: row.refusal ?? row.parkReason,\n });\n\n const deliveries = (operation: MessagingError[\"operation\"]) =>\n Option.isSome(deps.deliveries)\n ? Effect.succeed(deps.deliveries.value)\n : failure(operation, \"unavailable\");\n\n const mapStore =\n (operation: MessagingError[\"operation\"]) =>\n (error: { readonly _tag: string; readonly reason?: string }) =>\n failure(\n operation,\n error.reason === \"capacity\"\n ? \"capacity\"\n : error.reason === \"conflict\"\n ? \"conflict\"\n : \"storage\",\n );\n\n const lifetime = Schema.decodeEffect(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(604_800_000)),\n )(deps.lifetimeMillis).pipe(Effect.mapError(() => failure(\"send\", \"capacity\")));\n\n const capacity = Schema.decodeEffect(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(1_000)),\n )(deps.maxMessagesPerSource ?? 256).pipe(Effect.mapError(() => failure(\"send\", \"capacity\")));\n\n const facet = (\n threadId: ThreadId,\n principal: Principal,\n toolSource?: WorkerSource,\n ): MessagingHost[\"Service\"] => {\n const authorize = Effect.fn(\"MessagingHost.authorize\")(function* (\n operation: MessagingError[\"operation\"],\n access: \"context\" | \"read\" | \"send\" | \"control\",\n peer?: PeerTarget,\n destination?: { readonly threadId: ThreadId; readonly agentId: AgentId },\n ) {\n const source = yield* sourceOf(threadId);\n\n if (\n toolSource !== undefined &&\n (toolSource.agentId !== source.address.agentId || toolSource.threadId !== threadId)\n )\n return yield* failure(operation, \"denied\");\n if (peer !== undefined)\n yield* Schema.decodeEffect(PeerName)(peer.name).pipe(\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const deliveryPrincipal = yield* deps.authorizer.authorize({\n source: source.address,\n principal,\n operation,\n access,\n ...(peer === undefined ? {} : { peerName: peer.name }),\n ...(destination === undefined ? {} : { destination }),\n });\n\n return { ...source, deliveryPrincipal };\n });\n\n const send = Effect.fn(\"MessagingHost.send\")(function* (\n request: SendPeerMessage,\n operation: \"send\" | \"reply\",\n ) {\n const initial = yield* authorize(operation, \"send\", request);\n\n const target = yield* resolveDefinitionBinding(deps.bindings, request.target).pipe(\n Effect.mapError(() => failure(operation, \"binding-mismatch\")),\n );\n\n const encoded = yield* Schema.decodeUnknownEffect(Schema.toEncoded(target.definition.input))(\n request.encodedInput,\n ).pipe(Effect.mapError(() => failure(operation, \"invalid-input\")));\n\n const input = yield* Schema.decodeUnknownEffect(PersistedJson)(encoded).pipe(\n Effect.flatMap(Schema.encodeEffect(Schema.fromJsonString(PersistedJson))),\n Effect.flatMap(Schema.decodeEffect(Schema.fromJsonString(PersistedJson))),\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const key = yield* Schema.decodeEffect(IdempotencyKey)(request.idempotencyKey).pipe(\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const inReplyTo =\n request.inReplyTo === undefined\n ? undefined\n : yield* Schema.decodeEffect(MessageRef)(request.inReplyTo).pipe(\n Effect.mapError(() => failure(operation, \"invalid-reference\")),\n );\n\n const message: MessageRef = {\n ownerThreadId: threadId,\n messageId: Schema.decodeSync(IdempotencyKey)(\n `peer:${yield* digest([threadId, principal, request.name, operation, key])}`,\n ),\n };\n\n const store = yield* deliveries(operation);\n const window = yield* lifetime;\n const maxMessages = yield* capacity;\n\n for (let attempt = 0; attempt < 8; attempt++) {\n const current = attempt === 0 ? initial : yield* sourceOf(threadId);\n\n const prior = current.log.records.find(\n ({ record }) =>\n record.payload._tag === \"PeerMessagePrepared\" &&\n record.payload.messageId === message.messageId,\n )?.record;\n\n let saved: Effect.Success<ReturnType<typeof proof>>;\n\n if (prior !== undefined) {\n saved = yield* decodeProof(prior);\n const metadata = saved.envelope.messageAdmission;\n\n if (\n !Schema.is(MessageAdmission)(metadata) ||\n metadata.peerName !== request.name ||\n saved.envelope.agentId !== target.agentId ||\n !definitionDigestsEqual(saved.envelope.definitions, target.digests) ||\n !sameJson(saved.envelope.input, input) ||\n (inReplyTo === undefined || metadata.inReplyTo === undefined\n ? inReplyTo !== metadata.inReplyTo\n : !sameRef(inReplyTo, metadata.inReplyTo))\n )\n return yield* failure(operation, \"conflict\");\n yield* authorize(operation, \"send\", request, {\n threadId: saved.envelope.threadId,\n agentId: target.agentId,\n });\n yield* authorizeEnvelope(saved, operation);\n } else {\n if (\n current.log.records.filter(\n ({ record }) => record.payload._tag === \"PeerMessagePrepared\",\n ).length >= maxMessages\n )\n return yield* failure(operation, \"capacity\");\n let destinationThread: ThreadId;\n\n if (operation === \"reply\") {\n if (inReplyTo === undefined) return yield* failure(operation, \"invalid-reference\");\n\n const inbound = current.log.records.find(\n ({ record }) =>\n record.payload._tag === \"UserInputRecorded\" &&\n Schema.is(MessageAdmission)(record.payload.messageAdmission) &&\n sameRef(record.payload.messageAdmission.message, inReplyTo),\n )?.record.payload;\n\n if (\n inbound?._tag !== \"UserInputRecorded\" ||\n !Schema.is(MessageAdmission)(inbound.messageAdmission) ||\n inbound.messageAdmission.sender.agentId !== target.agentId\n )\n return yield* failure(operation, \"invalid-reference\");\n destinationThread = inbound.messageAdmission.returnAddress.threadId;\n } else {\n destinationThread = yield* deps.routes.resolve({\n source: current.address,\n principal,\n peerName: request.name,\n targetAgentId: target.agentId,\n });\n }\n\n const allowed = yield* authorize(operation, \"send\", request, {\n threadId: destinationThread,\n agentId: target.agentId,\n });\n\n const metadata = MessageAdmission.make({\n schemaVersion: 1,\n message,\n peerName: request.name,\n sender: current.address,\n returnAddress: current.address,\n ...(inReplyTo === undefined ? {} : { inReplyTo }),\n });\n\n const envelope = PreparedInput.make({\n schemaVersion: 1,\n threadId: destinationThread,\n agentId: target.agentId,\n definitions: target.digests,\n deliveryPrincipal: allowed.deliveryPrincipal,\n input,\n inputDigest: yield* digest(input),\n admissionKey: message.messageId,\n authorization: { policyId: \"peer-message\", decisionId: message.messageId },\n messageAdmission: metadata,\n });\n\n const encodedEnvelope = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.mapError(() => failure(operation, \"invalid-input\")),\n );\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(Effect.mapError(mapStore(operation)));\n\n if (\n tail.tailSequence !== current.log.tailSequence ||\n tail.tailDigest !== current.log.tailDigest\n )\n continue;\n const createdAtMillis = yield* Clock.currentTimeMillis;\n\n yield* deps.failpoint\n .hit(\"peer:before-prepared-append\")\n .pipe(Effect.mapError(mapStore(operation)));\n\n const appended = yield* deps.store\n .append(\n FencedAppendRequest.make({\n threadId,\n producerEpoch: tail.producerEpoch,\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(message.messageId),\n producerId: deps.producerId,\n records: [\n RecordEnvelope.make({\n recordId: Schema.decodeSync(RecordId)(message.messageId),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(createdAtMillis),\n deploymentId: deps.deploymentId,\n payload: PeerMessagePrepared.make({\n messageId: message.messageId,\n encodedEnvelope,\n sourcePrincipal: principal,\n operation,\n deadlineAtMillis: createdAtMillis + window,\n }),\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], () => Effect.succeed(false)),\n Effect.mapError(mapStore(operation)),\n );\n\n if (!appended) continue;\n yield* deps.failpoint\n .hit(\"peer:after-prepared-append\")\n .pipe(Effect.mapError(mapStore(operation)));\n saved = {\n envelope,\n sourcePrincipal: principal,\n operation,\n createdAtMillis,\n deadlineAtMillis: createdAtMillis + window,\n };\n }\n\n const prepared = yield* prepareMessageDelivery({\n key: message,\n envelope: saved.envelope,\n createdAtMillis: saved.createdAtMillis,\n deadlineAtMillis: saved.deadlineAtMillis,\n }).pipe(\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(mapStore(operation)),\n );\n\n return status(yield* store.insert(prepared).pipe(Effect.mapError(mapStore(operation))));\n }\n\n return yield* failure(operation, \"capacity\");\n });\n\n const lookup = Effect.fn(\"MessagingHost.lookup\")(function* (\n request: PeerTarget & { readonly message: MessageRef },\n operation: \"inspect\" | \"retry\",\n ) {\n yield* authorize(operation, operation === \"inspect\" ? \"read\" : \"control\", request);\n\n const message = yield* Schema.decodeEffect(MessageRef)(request.message).pipe(\n Effect.mapError(() => failure(operation, \"invalid-reference\")),\n );\n\n if (message.ownerThreadId !== threadId) return yield* failure(operation, \"denied\");\n const store = yield* deliveries(operation);\n const row = yield* store.get(message).pipe(Effect.mapError(mapStore(operation)));\n\n if (row === null) return yield* failure(operation, \"not-found\");\n if (\n !Schema.is(MessageAdmission)(row.envelope.messageAdmission) ||\n row.envelope.messageAdmission.peerName !== request.name ||\n row.envelope.agentId !== request.target.id\n )\n return yield* failure(operation, \"invalid-reference\");\n yield* authorize(operation, operation === \"inspect\" ? \"read\" : \"control\", request, {\n threadId: row.envelope.threadId,\n agentId: row.envelope.agentId,\n });\n\n return { row, store };\n });\n\n return {\n context: authorize(\"context\", \"context\").pipe(\n Effect.map(\n (source): WorkerSource => toolSource ?? { _tag: \"programmatic\", ...source.address },\n ),\n ),\n send: (request) => send(request, \"send\"),\n reply: (request) => send(request, \"reply\"),\n inspect: (request) => lookup(request, \"inspect\").pipe(Effect.map(({ row }) => status(row))),\n retry: Effect.fn(\"MessagingHost.retry\")(function* (request) {\n const { row, store } = yield* lookup(request, \"retry\");\n\n yield* authorizeEnvelope(yield* proof(row.key), \"send\");\n const nowMillis = yield* Clock.currentTimeMillis;\n\n return status(\n yield* store\n .change(row.key, {\n _tag: \"Recover\",\n expectedVersion: row.version,\n nowMillis,\n deadlineAtMillis: nowMillis + (yield* lifetime),\n })\n .pipe(Effect.mapError(mapStore(\"retry\"))),\n );\n }),\n inbox: Effect.fn(\"MessagingHost.inbox\")(function* (request) {\n const current = yield* authorize(\"inbox\", \"read\", request);\n\n const limit = yield* Schema.decodeEffect(\n Schema.Int.check(Schema.isGreaterThan(0), Schema.isLessThanOrEqualTo(100)),\n )(request.limit).pipe(Effect.mapError(() => failure(\"inbox\", \"capacity\")));\n\n let after = yield* Schema.decodeEffect(CanonicalSequence)(request.after ?? 0).pipe(\n Effect.mapError(() => failure(\"inbox\", \"invalid-reference\")),\n );\n\n const items: Array<(typeof InboxPage.Type)[\"items\"][number]> = [];\n\n while (after < current.log.tailSequence && items.length < limit) {\n const records = yield* Stream.runCollect(\n deps.store.read(ThreadRead.make({ threadId, afterSequence: after, limit: 1_024 })),\n ).pipe(Effect.mapError(() => failure(\"inbox\", \"storage\")));\n\n if (records.length === 0) break;\n for (const entry of records) {\n if (entry.sequence > current.log.tailSequence) break;\n after = entry.sequence;\n const payload = entry.record.payload;\n\n if (\n payload._tag === \"UserInputRecorded\" &&\n Schema.is(MessageAdmission)(payload.messageAdmission) &&\n payload.messageAdmission.sender.agentId === request.target.id\n ) {\n yield* authorize(\"inbox\", \"read\", request, payload.messageAdmission.sender);\n items.push({ sequence: entry.sequence, admission: payload.messageAdmission });\n }\n if (items.length >= limit) break;\n }\n }\n\n return { items, next: after < current.log.tailSequence ? after : null };\n }),\n };\n };\n\n return {\n acquire: Effect.fn(\"MessagingHost.acquire\")(function* (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n }) {\n const service = facet(request.sourceThreadId, request.principal);\n\n yield* service.context;\n\n return service;\n }),\n forTool: (source: WorkerSource, principal: Principal) =>\n facet(source.threadId, principal, source),\n validateAdmission: Effect.fn(\"MessagingHost.validateAdmission\")(function* (\n unvalidated: MessageAdmission,\n options: DurableSubmitOptions,\n agentId: AgentId,\n inputDigest: Digest,\n ) {\n const admission = yield* Schema.decodeEffect(MessageAdmission)(unvalidated).pipe(\n Effect.mapError(() => failure(\"send\", \"invalid-input\")),\n );\n\n const saved = yield* proof(admission.message);\n const envelope = saved.envelope;\n\n if (\n !Schema.is(MessageAdmission)(envelope.messageAdmission) ||\n !sameAdmission(envelope.messageAdmission, admission) ||\n envelope.threadId !== options.threadId ||\n envelope.agentId !== agentId ||\n envelope.inputDigest !== inputDigest ||\n envelope.deliveryPrincipal !== options.principal ||\n envelope.admissionKey !== options.idempotencyKey ||\n !definitionDigestsEqual(envelope.definitions, options.definitions)\n )\n return yield* failure(\"send\", \"denied\");\n yield* authorizeEnvelope(saved, \"send\");\n\n return admission;\n }),\n };\n});\n","import {\n Cause,\n Clock,\n Context,\n Crypto,\n DateTime,\n Duration,\n Effect,\n Option,\n Schema,\n Stream,\n} from \"effect\";\n\nimport type * as Agent from \"../../core/Agent.ts\";\nimport { AgentPolicy } from \"../../core/AgentPolicy.ts\";\nimport { Update, UpdateError } from \"../../core/AgentUpdates.ts\";\nimport { ThreadId, type AgentId, type SubmissionId } from \"../../core/Identifiers.ts\";\nimport { IdempotencyKey, Receipt } from \"../../core/Receipt.ts\";\nimport { SubagentDelegationCaps, SubagentGrant } from \"../../core/SubagentContract.ts\";\nimport {\n WorkerCompletion,\n FrameworkMessage,\n WorkerUpdate,\n WorkerError,\n WorkerHistoryEntry,\n type WorkerContext,\n WorkerRef,\n} from \"../../core/Worker.ts\";\nimport {\n type SubagentHost,\n type WorkerObservation,\n type WorkerReceiptRequest,\n type WorkerRunReport,\n} from \"../../engine/SubagentHost.ts\";\nimport { digestJson } from \"../Digest.ts\";\nimport type {\n DurableAbortFailure,\n DurableAwaitFailure,\n DurableSubmitFailure,\n DurableSubmitOptions,\n} from \"../DurableAgentRuntime.ts\";\nimport {\n DurableRuntimeFailpoint,\n type DurableRuntimeFailpointLocation,\n} from \"../DurableFailpoint.ts\";\nimport {\n MessageDeliveryDriver,\n MessageDeliveryStore,\n prepareMessageDelivery,\n} from \"../MessageDelivery.ts\";\nimport { PreparedInputAdmission } from \"../PreparedInputAdmission.ts\";\nimport {\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n type Digest,\n type DeploymentId,\n type ProducerId,\n RecordEnvelope,\n RecordId,\n WorkerAdmission,\n WorkerInputRequested,\n WorkerOrigin,\n WorkerOriginRecorded,\n WorkerInputCompleted,\n WorkerReportPrepared,\n WorkerReportRefused,\n WorkerReportingIntent,\n SubtreeBudgetReserved,\n PersistedJson,\n} from \"../Records.ts\";\nimport {\n type ScheduledInputFailure,\n ScheduledInputRefused,\n ScheduledInputRetryable,\n} from \"../Schedule.ts\";\nimport {\n SubmissionLedger,\n LedgerError,\n AbortCommand,\n type AbortIntent,\n type Principal,\n type Settlement,\n SubmissionLookupById,\n SubmissionLookupByKey,\n type SubmissionSnapshot,\n} from \"../SubmissionLedger.ts\";\nimport type { SubmissionStatus } from \"../SubmissionStatus.ts\";\nimport { PreparedInput } from \"../Subscription.ts\";\nimport {\n ThreadStore,\n FencedAppendRequest,\n ThreadExportRequest,\n ThreadRead,\n ThreadTailRequest,\n} from \"../ThreadStore.ts\";\nimport {\n WorkerBudgetAuthorizer,\n WorkerConcurrencyLimit,\n WorkerConcurrencyResolver,\n WorkerHostAuthorizer,\n WorkerHostConfig,\n WorkerPolicyResolver,\n type WorkerPolicyTarget,\n} from \"../WorkerHost.ts\";\nimport {\n definitionDigestsEqual,\n resolveDefinitionBinding,\n type ResolvedBinding,\n} from \"./agent-registration.ts\";\nimport { lastWorkerReportMessageId } from \"./agent-updates.ts\";\n\nconst failure = (operation: WorkerError[\"operation\"], reason: WorkerError[\"reason\"]) =>\n WorkerError.make({ operation, reason });\n\nconst storageFailure = (operation: WorkerError[\"operation\"]) => () => failure(operation, \"storage\");\n\nconst decode = <S extends Schema.Top>(\n schema: S,\n value: unknown,\n operation: WorkerError[\"operation\"],\n) =>\n Schema.decodeUnknownEffect(Schema.toType(schema))(value).pipe(\n Effect.mapError(() => failure(operation, \"corrupt\")),\n );\n\nconst sameOrigin = Schema.toEquivalence(WorkerOrigin);\nconst sameAdmission = Schema.toEquivalence(WorkerAdmission);\nconst sameReporting = Schema.toEquivalence(Schema.UndefinedOr(WorkerReportingIntent));\nconst sameJson = Schema.toEquivalence(PersistedJson);\nconst sameCaps = Schema.toEquivalence(SubagentDelegationCaps);\nconst samePolicy = Schema.toEquivalence(AgentPolicy);\n\nconst amountCaps = [\n [\"turns\", \"maxTurns\"],\n [\"toolCalls\", \"maxToolCalls\"],\n [\"durationMillis\", \"maxDurationMillis\"],\n [\"inputTokens\", \"maxInputTokens\"],\n [\"outputTokens\", \"maxOutputTokens\"],\n [\"costMicrousd\", \"maxCostMicrousd\"],\n [\"resultBytes\", \"maxResultBytes\"],\n] as const;\n\nconst sourceCaps = (policy: AgentPolicy): SubagentDelegationCaps =>\n SubagentDelegationCaps.make({\n maxTotalChildInvocations: policy.maxToolCalls,\n maxConcurrentChildren: policy.toolConcurrency,\n maxTurns: policy.maxTurns,\n maxToolCalls: policy.maxToolCalls,\n maxDurationMillis: Math.ceil(Duration.toMillis(policy.maxDuration)),\n maxResultBytes: Math.min(\n Number.MAX_SAFE_INTEGER,\n policy.toolResultBounds.maxBytes * policy.maxToolCalls,\n ),\n ...(policy.tokenBudget === undefined\n ? {}\n : { maxInputTokens: policy.tokenBudget, maxOutputTokens: policy.tokenBudget }),\n ...(policy.costBudgetMicrousd === undefined\n ? {}\n : { maxCostMicrousd: policy.costBudgetMicrousd }),\n });\n\nconst withinPolicy = (origin: WorkerOrigin, source: AgentPolicy, target: AgentPolicy): boolean => {\n const policy = origin.policy;\n const allocation = origin.budget.allocation;\n const caps = origin.budget.caps;\n const ceilings = sourceCaps(source);\n\n for (const [, name] of origin.budgetScope === \"worker-run\" ? [] : amountCaps) {\n if (caps[name] !== undefined && ceilings[name] !== undefined && caps[name] > ceilings[name])\n return false;\n }\n if (\n origin.budgetScope !== \"worker-run\" &&\n ((caps.maxTotalChildInvocations !== undefined &&\n caps.maxTotalChildInvocations > source.maxToolCalls) ||\n (caps.maxConcurrentChildren !== undefined &&\n caps.maxConcurrentChildren > source.toolConcurrency))\n )\n return false;\n const tokenCeiling = Math.min(source.tokenBudget ?? Infinity, target.tokenBudget ?? Infinity);\n\n const costCeiling = Math.min(\n source.costBudgetMicrousd ?? Infinity,\n target.costBudgetMicrousd ?? Infinity,\n );\n\n return (\n policy.maxTurns <= Math.min(allocation.turns, source.maxTurns, target.maxTurns) &&\n policy.maxToolCalls <=\n Math.min(allocation.toolCalls, source.maxToolCalls, target.maxToolCalls) &&\n Duration.toMillis(policy.maxDuration) <=\n Math.min(\n allocation.durationMillis,\n Duration.toMillis(source.maxDuration),\n Duration.toMillis(target.maxDuration),\n ) &&\n policy.toolConcurrency <= Math.min(source.toolConcurrency, target.toolConcurrency) &&\n policy.toolResultBounds.maxBytes <=\n Math.min(source.toolResultBounds.maxBytes, target.toolResultBounds.maxBytes) &&\n (tokenCeiling === Infinity ||\n (policy.tokenBudget !== undefined && policy.tokenBudget <= tokenCeiling)) &&\n (costCeiling === Infinity ||\n (policy.costBudgetMicrousd !== undefined && policy.costBudgetMicrousd <= costCeiling)) &&\n (source.tokenBudget === undefined ||\n (allocation.inputTokens > 0 &&\n allocation.outputTokens > 0 &&\n policy.tokenBudget !== undefined &&\n policy.tokenBudget <= allocation.inputTokens + allocation.outputTokens)) &&\n (source.costBudgetMicrousd === undefined ||\n (policy.costBudgetMicrousd !== undefined &&\n policy.costBudgetMicrousd <= allocation.costMicrousd))\n );\n};\n\nexport interface WorkerRuntimeOptions {\n readonly bindings: ReadonlyArray<ResolvedBinding>;\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n readonly settlementPollInterval: Duration.Duration;\n}\n\n/** Admission and cancellation enter the owning runtime, never the raw ledger. */\nexport class WorkerInputControl extends Context.Service<\n WorkerInputControl,\n {\n readonly submit: (envelope: PreparedInput) => Effect.Effect<Receipt, DurableSubmitFailure>;\n readonly status: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, DurableAwaitFailure | ScheduledInputFailure>;\n readonly abort: (command: AbortCommand) => Effect.Effect<AbortIntent, DurableAbortFailure>;\n }\n>()(\"@effect-agent/thread/internal/WorkerInputControl\") {}\n\n/** No in-memory ownership: every mutation is reserved in source canonical history with CAS. */\nexport const makeWorkerRuntime = Effect.fn(\"WorkerHost.make\")(function* (\n options: WorkerRuntimeOptions,\n) {\n const control = yield* WorkerInputControl;\n // A routed read may belong to another owner; capture it before exposing worker operations.\n const admission = yield* Effect.serviceOption(PreparedInputAdmission);\n\n const deps = {\n ...options,\n ...control,\n store: yield* ThreadStore,\n ledger: yield* SubmissionLedger,\n deliveries: yield* Effect.serviceOption(MessageDeliveryStore),\n crypto: yield* Crypto.Crypto,\n authorizer: yield* WorkerHostAuthorizer,\n budgetAuthorizer: yield* WorkerBudgetAuthorizer,\n policyResolver: yield* WorkerPolicyResolver,\n concurrencyResolver: yield* WorkerConcurrencyResolver,\n limits: yield* WorkerHostConfig,\n failpoint: yield* DurableRuntimeFailpoint,\n status: Option.getOrUndefined(admission)?.submissionStatus ?? control.status,\n };\n\n const withCrypto = <A, E>(effect: Effect.Effect<A, E, Crypto.Crypto>) =>\n Effect.provideService(effect, Crypto.Crypto, deps.crypto);\n\n const authorizeBudget = Effect.fn(\"WorkerHost.authorizeBudget\")(function* (\n origin: WorkerOrigin,\n principal: Principal,\n ) {\n if (origin.budgetScope !== \"worker-run\") return;\n // Independence changes accounting ownership, never delegation generations.\n if (origin.depth !== 1) return yield* failure(\"start\", \"denied\");\n\n yield* deps.budgetAuthorizer.authorize({\n source: origin.source,\n principal,\n worker: origin.worker,\n policy: origin.policy,\n budget: origin.budget,\n });\n });\n\n const read = (threadId: ThreadId, operation: WorkerError[\"operation\"]) =>\n deps.store\n .export(ThreadExportRequest.make({ threadId }))\n .pipe(Effect.mapError(storageFailure(operation)));\n\n const hit = (location: DurableRuntimeFailpointLocation, operation: WorkerError[\"operation\"]) =>\n deps.failpoint.hit(location).pipe(Effect.mapError(storageFailure(operation)));\n\n const append = Effect.fn(\"WorkerHost.append\")(\n function* (\n threadId: ThreadId,\n id: string,\n payload:\n | WorkerInputRequested\n | WorkerOriginRecorded\n | WorkerInputCompleted\n | WorkerReportPrepared\n | WorkerReportRefused\n | SubtreeBudgetReserved,\n current: Effect.Success<ReturnType<typeof read>>,\n phase: \"source\" | \"origin\" | \"completion\" | \"subtree\" | \"report\",\n ) {\n const operation = \"start\";\n const tail = yield* deps.store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n // Never append against a tail newer than the prefix whose capacity was checked.\n if (tail.tailSequence !== current.tailSequence || tail.tailDigest !== current.tailDigest)\n return false;\n yield* hit(`worker:before-${phase}-append`, operation);\n\n const result = yield* deps.store\n .append(\n FencedAppendRequest.make({\n threadId,\n producerEpoch: tail.producerEpoch,\n expectedTailSequence: current.tailSequence,\n expectedTailDigest: current.tailDigest,\n batch: CanonicalBatch.make({\n batchId: Schema.decodeSync(BatchId)(id),\n producerId: deps.producerId,\n records: [\n RecordEnvelope.make({\n recordId: Schema.decodeSync(RecordId)(id),\n family: \"thread\",\n schemaVersion: 1,\n createdAt: DateTime.makeUnsafe(\n payload._tag === \"WorkerInputRequested\"\n ? payload.admission.createdAtMillis\n : payload._tag === \"WorkerOriginRecorded\"\n ? payload.origin.createdAtMillis\n : payload._tag === \"WorkerInputCompleted\"\n ? payload.completedAtMillis\n : yield* Clock.currentTimeMillis,\n ),\n deploymentId: deps.deploymentId,\n payload,\n }),\n ],\n }),\n }),\n )\n .pipe(\n Effect.as(true),\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], () => Effect.succeed(false)),\n );\n\n if (result) yield* hit(`worker:after-${phase}-append`, operation);\n\n return result;\n },\n Effect.mapError(storageFailure(\"start\")),\n );\n\n const requests = (records: Effect.Success<ReturnType<typeof read>>[\"records\"]) =>\n records.flatMap(({ record }) =>\n record.payload._tag === \"WorkerInputRequested\" ? [record.payload] : [],\n );\n\n const reportIntent = Effect.fn(\"WorkerHost.reportIntent\")(function* (\n source: ResolvedBinding,\n target: ResolvedBinding,\n delegationId: WorkerRef[\"delegationId\"],\n ): Effect.fn.Return<WorkerOrigin[\"reporting\"], WorkerError> {\n const reports = source.reporting?.filter((entry) => entry.delegationId === delegationId) ?? [];\n const report = reports[0];\n\n if (report === undefined) return undefined;\n if (\n reports.length !== 1 ||\n !Object.is(report.target, target.definition) ||\n (report.mode !== \"standard\" && !Object.is(report.input, source.definition.input)) ||\n (report.destination !== undefined && !Object.is(report.destination.target, source.definition))\n )\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n return {\n sourceDigests: source.digests,\n ...(report.mode === undefined ? {} : { mode: report.mode }),\n ...(report.destination === undefined\n ? {}\n : { destinationDelegationId: report.destination.delegationId }),\n };\n });\n\n const sourceAuthority = Effect.fn(\"WorkerHost.sourceAuthority\")(function* (\n threadId: ThreadId,\n submissionId?: SubmissionId,\n ) {\n const current = yield* read(threadId, \"start\");\n const created = current.records[0]?.record.payload;\n\n if (created?._tag !== \"ThreadCreated\") return yield* failure(\"start\", \"not-found\");\n\n const binding = deps.bindings.find(\n (entry) =>\n entry.agentId === created.agentId &&\n definitionDigestsEqual(entry.digests, created.definitions),\n );\n\n const worker = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const attached = current.records.find(\n ({ record }) => record.payload._tag === \"SubagentLineageRecorded\",\n )?.record.payload;\n\n const nested =\n worker?._tag === \"WorkerOriginRecorded\" || attached?._tag === \"SubagentLineageRecorded\";\n\n let ownerSubmission: SubmissionSnapshot | undefined;\n\n if (nested && submissionId === undefined) return yield* failure(\"start\", \"denied\");\n if (submissionId !== undefined) {\n const submission = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId }))\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n if (\n Option.isNone(submission) ||\n submission.value.threadId !== threadId ||\n (nested && submission.value.agentId !== created.agentId)\n )\n return yield* failure(\"start\", \"denied\");\n ownerSubmission = submission.value;\n if (\n worker?._tag === \"WorkerOriginRecorded\" &&\n (submission.value.workerAdmission === undefined ||\n !sameOrigin(submission.value.workerAdmission.origin, worker.origin))\n )\n return yield* failure(\"start\", \"denied\");\n if (\n attached?._tag === \"SubagentLineageRecorded\" &&\n (submission.value.parentLinkage?.parentSubmissionId !== attached.parentSubmissionId ||\n submission.value.parentLinkage.parentToolCallId !== attached.parentLink.parentToolCallId)\n )\n return yield* failure(\"start\", \"denied\");\n }\n\n if (worker?._tag === \"WorkerOriginRecorded\")\n return {\n current,\n binding,\n submission: ownerSubmission,\n policyOverride: Option.none<AgentPolicy>(),\n policy: worker.origin.policy,\n budget: worker.origin.budget,\n budgetScope: worker.origin.budgetScope,\n grant: worker.origin.grant,\n depth: worker.origin.depth,\n };\n if (attached?._tag === \"SubagentLineageRecorded\") {\n if (\n attached.policy === undefined ||\n attached.budget === undefined ||\n attached.grant === undefined\n )\n return yield* failure(\"start\", \"denied\");\n\n return {\n current,\n binding,\n submission: ownerSubmission,\n policyOverride: Option.none<AgentPolicy>(),\n policy: attached.policy,\n budget: attached.budget,\n budgetScope: undefined,\n grant: attached.grant,\n depth: attached.parentLink.depth,\n };\n }\n\n const ownerBinding =\n ownerSubmission === undefined\n ? undefined\n : deps.bindings.find(\n (entry) =>\n entry.agentId === ownerSubmission.agentId &&\n definitionDigestsEqual(entry.digests, ownerSubmission.agentDigests),\n );\n\n const selectedBinding = ownerBinding ?? binding;\n\n const changedRootAgent =\n ownerSubmission !== undefined && ownerSubmission.agentId !== created.agentId;\n\n // A root conversation may admit a new registered Agent after deployment.\n // Its immutable owner input selects authority; child lineage never changes.\n if (selectedBinding === undefined || (changedRootAgent && ownerBinding === undefined))\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n const selected = yield* deps.policyResolver.resolveSource({\n threadId,\n definition: selectedBinding.definition,\n definitions: ownerSubmission?.agentDigests ?? selectedBinding.digests,\n ...(ownerSubmission === undefined ? {} : { submission: ownerSubmission }),\n });\n\n if (Option.isSome(selected) && ownerSubmission !== undefined && ownerBinding === undefined)\n return yield* failure(\"start\", \"declaration-unavailable\");\n\n const effectiveBinding =\n Option.isSome(selected) || changedRootAgent ? selectedBinding : binding;\n\n if (effectiveBinding === undefined) return yield* failure(\"start\", \"declaration-unavailable\");\n\n const policy = Option.isNone(selected)\n ? effectiveBinding.definition.policy\n : yield* decode(AgentPolicy, selected.value, \"start\");\n\n return {\n current,\n binding: effectiveBinding,\n submission: ownerSubmission,\n policyOverride: Option.map(selected, () => policy),\n policy,\n budget: undefined,\n budgetScope: undefined,\n grant: undefined,\n depth: 0,\n };\n });\n\n const resolveTargetPolicy = Effect.fn(\"WorkerHost.resolveTargetPolicy\")(function* (\n request: WorkerPolicyTarget,\n ) {\n const selected = yield* deps.policyResolver.resolveTarget(request);\n\n if (Option.isNone(selected)) return selected;\n const policy = yield* decode(AgentPolicy, selected.value, \"start\");\n\n if (request._tag === \"RetainedWorker\" && !samePolicy(policy, request.origin.policy))\n return yield* failure(\"start\", \"worker-mismatch\");\n\n return Option.some(policy);\n });\n\n const reserveSubtree = Effect.fn(\"WorkerHost.reserveSubtree\")(function* (\n sourceThreadId: ThreadId,\n requested: SubtreeBudgetReserved,\n ): Effect.fn.Return<void, WorkerError> {\n const payload = yield* decode(SubtreeBudgetReserved, requested, \"start\");\n const recordId = `subtree:${payload.reservationId}`;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const source = yield* sourceAuthority(sourceThreadId, payload.sourceSubmissionId);\n\n const previous = source.current.records.find(({ record }) => record.recordId === recordId)\n ?.record.payload;\n\n if (previous !== undefined) {\n if (\n previous._tag !== \"SubtreeBudgetReserved\" ||\n !Schema.toEquivalence(SubtreeBudgetReserved)(previous, payload)\n )\n return yield* failure(\"start\", \"idempotency-conflict\");\n\n return;\n }\n if (payload.depth !== source.depth + 1 || payload.depth > payload.grant.maxDepth)\n return yield* failure(\"start\", \"denied\");\n const inherited = source.grant;\n const lifetimes = inherited?.childLifetimes;\n\n if (\n inherited !== undefined &&\n (payload.depth > inherited.maxDepth ||\n payload.grant.maxDepth > inherited.maxDepth ||\n (lifetimes !== undefined && !lifetimes.includes(payload.lifetime)) ||\n payload.grant.allowedToolNames.some(\n (name) => !inherited.allowedToolNames.includes(name),\n ) ||\n (lifetimes !== undefined &&\n (payload.grant.childLifetimes ?? [\"attached\", \"background\"]).some(\n (lifetime) => !lifetimes.includes(lifetime),\n )))\n )\n return yield* failure(\"start\", \"denied\");\n\n const rows = source.current.records.flatMap(({ record }) =>\n record.payload._tag === \"SubtreeBudgetReserved\" &&\n record.payload.sourceSubmissionId === payload.sourceSubmissionId\n ? [record.payload]\n : [],\n );\n\n const caps = payload.budget.caps;\n\n if (rows.some((row) => !sameCaps(row.budget.caps, caps)))\n return yield* failure(\"start\", \"capacity\");\n\n const own = {\n turns: source.policy.maxTurns,\n toolCalls: source.policy.maxToolCalls,\n durationMillis: Math.ceil(Duration.toMillis(source.policy.maxDuration)),\n inputTokens: source.policy.tokenBudget ?? source.budget?.allocation.inputTokens ?? 0,\n outputTokens: source.policy.tokenBudget ?? source.budget?.allocation.outputTokens ?? 0,\n costMicrousd:\n source.policy.costBudgetMicrousd ?? source.budget?.allocation.costMicrousd ?? 0,\n resultBytes: source.policy.toolResultBounds.maxBytes,\n };\n\n const ceilings = sourceCaps(source.policy);\n const child = payload.policy;\n const allocation = payload.budget.allocation;\n\n if (\n child.maxTurns > Math.min(source.policy.maxTurns, allocation.turns) ||\n child.maxToolCalls > Math.min(source.policy.maxToolCalls, allocation.toolCalls) ||\n Duration.toMillis(child.maxDuration) >\n Math.min(Duration.toMillis(source.policy.maxDuration), allocation.durationMillis) ||\n child.toolConcurrency > source.policy.toolConcurrency ||\n child.toolResultBounds.maxBytes > source.policy.toolResultBounds.maxBytes ||\n (source.policy.tokenBudget !== undefined &&\n (child.tokenBudget === undefined ||\n child.tokenBudget > source.policy.tokenBudget ||\n child.tokenBudget > allocation.inputTokens + allocation.outputTokens)) ||\n (source.policy.costBudgetMicrousd !== undefined &&\n (child.costBudgetMicrousd === undefined ||\n child.costBudgetMicrousd >\n Math.min(source.policy.costBudgetMicrousd, allocation.costMicrousd)))\n )\n return yield* failure(\"start\", \"capacity\");\n for (const [, cap] of amountCaps) {\n if (caps[cap] !== undefined && ceilings[cap] !== undefined && caps[cap] > ceilings[cap])\n return yield* failure(\"start\", \"capacity\");\n }\n if (\n (caps.maxTotalChildInvocations ?? 0) > source.policy.maxToolCalls ||\n (caps.maxConcurrentChildren ?? 0) > source.policy.toolConcurrency\n )\n return yield* failure(\"start\", \"capacity\");\n const slots = 1 + (payload.budget.descendantInvocations ?? 0);\n\n const chargedSlots = rows.reduce(\n (sum, row) => sum + 1 + (row.budget.descendantInvocations ?? 0),\n slots,\n );\n\n const slotLimit = Math.min(\n caps.maxTotalChildInvocations ?? Infinity,\n source.budget === undefined\n ? source.policy.maxToolCalls\n : (source.budget.descendantInvocations ?? 0),\n );\n\n if (chargedSlots > slotLimit) return yield* failure(\"start\", \"capacity\");\n for (const [amount, cap] of amountCaps) {\n // Zero is the encoded absence of an allocation when this dimension is unconfigured.\n // It must not become a new cumulative token or dollar ceiling in a descendant.\n if (\n source.budgetScope === \"worker-run\" &&\n (amount === \"inputTokens\" || amount === \"outputTokens\" || amount === \"costMicrousd\") &&\n source.budget !== undefined &&\n source.budget.caps[cap] === undefined &&\n source.budget.allocation[amount] === 0 &&\n ceilings[cap] === undefined\n ) {\n const charged = rows.reduce(\n (sum, row) => sum + row.budget.allocation[amount],\n allocation[amount],\n );\n\n if (charged > (caps[cap] ?? Infinity)) return yield* failure(\"start\", \"capacity\");\n continue;\n }\n\n const residual =\n source.budget === undefined\n ? (ceilings[cap] ?? Infinity)\n : Math.max(0, source.budget.allocation[amount] - own[amount]);\n\n const limit = Math.min(caps[cap] ?? Infinity, residual);\n\n const charged = rows.reduce(\n (sum, row) => sum + row.budget.allocation[amount],\n payload.budget.allocation[amount],\n );\n\n if (charged > limit) return yield* failure(\"start\", \"capacity\");\n }\n\n // Include unreconciled reservations conservatively; only canonical completion frees an\n // active slot. A worker Thread consumes one slot even when multiple inputs safely join it.\n const completedWorkers = new Set<string>(\n source.current.records.flatMap(({ record }) =>\n record.payload._tag === \"WorkerInputCompleted\" ? [record.payload.messageId] : [],\n ),\n );\n\n const completedAttached = new Set<string>(\n source.current.records.flatMap(({ record }) =>\n record.payload._tag === \"SubagentJoined\" ? [record.payload.reservationId] : [],\n ),\n );\n\n const active = new Set(\n rows\n .filter((row) =>\n row.lifetime === \"background\"\n ? !completedWorkers.has(row.reservationId)\n : !completedAttached.has(row.reservationId),\n )\n .map((row) => row.childThreadId),\n );\n\n if (\n !active.has(payload.childThreadId) &&\n active.size >=\n Math.min(caps.maxConcurrentChildren ?? Infinity, source.policy.toolConcurrency)\n )\n return yield* failure(\"start\", \"capacity\");\n if (yield* append(sourceThreadId, recordId, payload, source.current, \"subtree\")) return;\n }\n\n return yield* failure(\"start\", \"storage\");\n });\n\n const reservation = Effect.fn(\"WorkerHost.reserveInput\")(function* (\n admission: WorkerAdmission,\n inputDigest: Digest,\n input: PersistedJson,\n principal: Principal,\n ): Effect.fn.Return<void, WorkerError> {\n const origin = admission.origin;\n const id = `worker-input:${admission.messageId}`;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const source = yield* sourceAuthority(origin.source.threadId, admission.sourceSubmissionId);\n const current = source.current;\n const rows = requests(current.records);\n const existing = current.records.find(({ record }) => record.recordId === id)?.record.payload;\n\n if (existing !== undefined) {\n if (\n existing._tag !== \"WorkerInputRequested\" ||\n existing.inputDigest !== inputDigest ||\n !sameAdmission(existing.admission, admission)\n )\n return yield* failure(\"start\", \"idempotency-conflict\");\n }\n const first = current.records[0]?.record.payload;\n\n if (first?._tag !== \"ThreadCreated\") return yield* failure(\"start\", \"denied\");\n\n const own = rows.filter(\n (row) => row.admission.origin.worker.threadId === origin.worker.threadId,\n );\n\n const origins = new Map(\n rows.map((row) => [row.admission.origin.worker.threadId, row.admission.origin]),\n );\n\n const prior = origins.get(origin.worker.threadId);\n\n if (\n prior === undefined &&\n (source.submission?.agentId ?? first.agentId) !== origin.source.agentId\n )\n return yield* failure(\"start\", \"denied\");\n if (prior !== undefined && !sameOrigin(prior, origin))\n return yield* failure(\"start\", \"worker-mismatch\");\n if (prior === undefined && admission.messageId !== origin.firstMessageId)\n return yield* failure(\"start\", \"not-found\");\n const caps = origin.budget.caps;\n\n const sourceBinding = source.binding;\n\n const targetBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.worker.targetAgentId &&\n definitionDigestsEqual(entry.digests, origin.targetDigests),\n );\n\n if (sourceBinding === undefined || targetBinding === undefined)\n return yield* failure(\"start\", \"declaration-unavailable\");\n yield* Schema.decodeEffect(Schema.toEncoded(targetBinding.definition.input))(input).pipe(\n Effect.mapError(() => failure(\"start\", \"corrupt\")),\n );\n\n const targetRequest = {\n definition: targetBinding.definition,\n definitions: targetBinding.digests,\n source: origin.source,\n };\n\n const selected = yield* resolveTargetPolicy(\n admission.messageId === origin.firstMessageId\n ? {\n ...targetRequest,\n _tag: \"InitialInput\",\n input,\n inputDigest,\n ...(source.submission === undefined ? {} : { sourceSubmission: source.submission }),\n }\n : { ...targetRequest, _tag: \"RetainedWorker\", origin: prior ?? origin },\n );\n\n const independent = origin.budgetScope === \"worker-run\";\n\n const targetPolicy = Option.isSome(selected)\n ? selected.value\n : independent\n ? targetBinding.definition.policy\n : AgentPolicy.resolve(\n targetBinding.definition.policyOverrides ?? targetBinding.definition.policy,\n source.policy,\n );\n\n // Captured authority is checked on replay too, before the retained reservation returns.\n // Static callers retain the old idempotent-return behavior.\n if (\n (existing === undefined || Option.isSome(selected)) &&\n !withinPolicy(origin, independent ? targetPolicy : source.policy, targetPolicy)\n )\n return yield* failure(\"start\", \"capacity\");\n if (existing !== undefined) return;\n const now = yield* Clock.currentTimeMillis;\n\n if (now >= origin.expiresAtMillis) return yield* failure(\"start\", \"capacity\");\n if (\n (prior === undefined && origins.size >= deps.limits.maxWorkersPerSource) ||\n own.filter((row) => row.admission.reportKind === admission.reportKind).length >=\n (admission.reportKind === \"update\"\n ? (deps.limits.maxUpdateInputsPerWorker ?? 256)\n : deps.limits.maxInputsPerWorker)\n )\n return yield* failure(\"start\", \"capacity\");\n if (\n prior === undefined &&\n !sameReporting(\n yield* reportIntent(sourceBinding, targetBinding, origin.worker.delegationId),\n origin.reporting,\n )\n )\n return yield* failure(\"start\", \"denied\");\n if (independent && source.depth !== 0) return yield* failure(\"start\", \"denied\");\n const ceilings = sourceCaps(source.policy);\n\n const conservedRows = rows.filter((row) => row.admission.origin.budgetScope !== \"worker-run\");\n\n const chargedRows =\n source.depth === 0\n ? conservedRows\n : conservedRows.filter(\n (row) => row.admission.sourceSubmissionId === admission.sourceSubmissionId,\n );\n\n // Independent origins do not belong to this pool. Preserve the retained conserved\n // origins' cap identity check separately from the current input's charge selection.\n if (\n !independent &&\n conservedRows.some((row) => !sameCaps(row.admission.origin.budget.caps, caps))\n )\n return yield* failure(\"start\", \"capacity\");\n if (\n !independent &&\n chargedRows.reduce(\n (sum, row) => sum + 1 + (row.admission.origin.budget.descendantInvocations ?? 0),\n 1 + (origin.budget.descendantInvocations ?? 0),\n ) > Math.min(caps.maxTotalChildInvocations ?? Infinity, source.policy.maxToolCalls)\n )\n return yield* failure(\"start\", \"capacity\");\n // Worker-owned Run usage is already durable in the destination's Run journal. Each\n // Receipt may join an existing Run, so admitting input must never mint an allowance.\n for (const [amount, cap] of independent ? [] : amountCaps) {\n const limit = Math.min(caps[cap] ?? Infinity, ceilings[cap] ?? Infinity);\n\n if (\n chargedRows.reduce(\n (sum, row) => sum + row.admission.origin.budget.allocation[amount],\n origin.budget.allocation[amount],\n ) > limit\n )\n return yield* failure(\"start\", \"capacity\");\n }\n\n // Child owners append acknowledgements before ledger finalization. This works through\n // routed canonical storage; source-local delivery rows are never read from a child owner.\n const completed = new Set(\n current.records.flatMap(({ record }) =>\n record.payload._tag === \"WorkerInputCompleted\" ? [record.payload.messageId] : [],\n ),\n );\n\n const pendingRows = rows.filter((row) => !completed.has(row.admission.messageId));\n const activeWorkers = new Set(pendingRows.map((row) => row.admission.origin.worker.threadId));\n\n const pendingOwn = pendingRows.filter(\n (row) =>\n row.admission.origin.worker.threadId === origin.worker.threadId &&\n row.admission.reportKind === admission.reportKind,\n ).length;\n\n // Resolve inside the source CAS loop: independently delivered starts must compete\n // against one canonical prefix. A conflict repeats both authority and capacity reads.\n const selectedConcurrency = yield* deps.concurrencyResolver.resolve({\n source: origin.source,\n worker: origin.worker,\n principal,\n ...(source.submission === undefined ? {} : { sourceSubmission: source.submission }),\n });\n\n const sourceConcurrency = Option.isSome(selectedConcurrency)\n ? (yield* decode(WorkerConcurrencyLimit, selectedConcurrency.value, \"start\"))\n .maxActiveWorkersPerSource\n : Infinity;\n\n if (\n pendingOwn >=\n (admission.reportKind === \"update\"\n ? (deps.limits.maxPendingUpdateInputsPerWorker ?? 32)\n : deps.limits.maxPendingInputsPerWorker) ||\n (!activeWorkers.has(origin.worker.threadId) &&\n activeWorkers.size >=\n Math.min(\n sourceConcurrency,\n deps.limits.maxActiveWorkersPerSource ?? source.policy.toolConcurrency,\n independent\n ? Infinity\n : Math.min(caps.maxConcurrentChildren ?? Infinity, source.policy.toolConcurrency),\n ))\n )\n return yield* WorkerError.make({ operation: \"start\", reason: \"capacity\", retryable: true });\n if (!independent)\n yield* reserveSubtree(\n origin.source.threadId,\n SubtreeBudgetReserved.make({\n reservationId: Schema.decodeSync(SubtreeBudgetReserved.fields.reservationId)(\n admission.messageId,\n ),\n ...(admission.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: admission.sourceSubmissionId }),\n childThreadId: origin.worker.threadId,\n lifetime: \"background\",\n depth: origin.depth,\n policy: origin.policy,\n grant: origin.grant,\n budget: origin.budget,\n }),\n );\n if (\n yield* append(\n origin.source.threadId,\n id,\n WorkerInputRequested.make({ admission, inputDigest }),\n current,\n \"source\",\n )\n )\n return;\n }\n\n return yield* failure(\"start\", \"storage\");\n });\n\n const ensureOrigin = Effect.fn(\"WorkerHost.ensureOrigin\")(function* (origin: WorkerOrigin) {\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* read(origin.worker.threadId, \"start\");\n\n const existing = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n if (existing?._tag === \"WorkerOriginRecorded\") {\n if (!sameOrigin(existing.origin, origin)) return yield* failure(\"start\", \"worker-mismatch\");\n\n return;\n }\n const first = current.records[0]?.record.payload;\n\n if (\n first?._tag !== \"ThreadCreated\" ||\n first.agentId !== origin.worker.targetAgentId ||\n !definitionDigestsEqual(first.definitions, origin.targetDigests) ||\n current.records.some(({ record }) => record.payload._tag === \"SubagentLineageRecorded\")\n )\n return yield* failure(\"start\", \"worker-mismatch\");\n if (\n yield* append(\n origin.worker.threadId,\n `worker-origin:${origin.worker.threadId}`,\n WorkerOriginRecorded.make({ origin }),\n current,\n \"origin\",\n )\n )\n return;\n }\n\n return yield* failure(\"start\", \"storage\");\n });\n\n const validateAdmission = Effect.fn(\"WorkerHost.validateAdmission\")(function* (\n unvalidated: WorkerAdmission,\n options: DurableSubmitOptions,\n agentId: Agent.AnyDefinition[\"id\"],\n inputDigest: Digest,\n input: PersistedJson,\n ) {\n const admission = yield* decode(WorkerAdmission, unvalidated, \"start\");\n\n if (admission.reportKind === \"update\") {\n if (!Schema.is(WorkerUpdate)(options.messageAdmission))\n return yield* failure(\"start\", \"denied\");\n yield* validateCompletion(options.messageAdmission, options, agentId, inputDigest);\n }\n\n yield* deps.authorizer.authorize({\n sourceThreadId: admission.origin.source.threadId,\n ...(admission.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: admission.sourceSubmissionId }),\n principal: options.principal,\n operation: \"start\",\n access: \"send\",\n worker: admission.origin.worker,\n });\n yield* authorizeBudget(admission.origin, options.principal);\n if (\n admission.origin.worker.threadId !== options.threadId ||\n admission.origin.worker.targetAgentId !== agentId ||\n !definitionDigestsEqual(admission.origin.targetDigests, options.definitions) ||\n options.idempotencyKey !== admission.messageId ||\n (admission.deliveryPrincipal !== undefined &&\n admission.deliveryPrincipal !== options.principal)\n )\n return yield* failure(\"start\", \"worker-mismatch\");\n yield* reservation(admission, inputDigest, input, options.principal);\n\n return admission;\n });\n\n const prepareUpdate = Effect.fn(\"WorkerHost.prepareUpdate\")(\n function* (update: Update, submission: SubmissionSnapshot, messageId: IdempotencyKey) {\n const origin = submission.workerAdmission?.origin;\n const intent = origin?.reporting;\n\n if (origin === undefined || intent?.mode !== \"standard\") return undefined;\n if (update.threadId !== submission.threadId || update.agentId !== origin.worker.targetAgentId)\n return yield* failure(\"followUp\", \"worker-mismatch\");\n\n const sourceBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.source.agentId &&\n definitionDigestsEqual(entry.digests, intent.sourceDigests),\n );\n\n const targetBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.worker.targetAgentId &&\n definitionDigestsEqual(entry.digests, origin.targetDigests),\n );\n\n const reports =\n sourceBinding?.reporting?.filter(\n (entry) => entry.delegationId === origin.worker.delegationId,\n ) ?? [];\n\n if (\n sourceBinding === undefined ||\n targetBinding === undefined ||\n reports.length !== 1 ||\n reports[0]?.mode !== \"standard\" ||\n reports[0].target !== targetBinding.definition ||\n !definitionDigestsEqual(submission.agentDigests, origin.targetDigests)\n )\n return yield* failure(\"followUp\", \"declaration-unavailable\");\n const sourceHistory = yield* read(origin.source.threadId, \"followUp\");\n\n const first = requests(sourceHistory.records).find(\n (row) => row.admission.messageId === origin.firstMessageId,\n );\n\n if (first === undefined || !sameOrigin(first.admission.origin, origin))\n return yield* failure(\"followUp\", \"corrupt\");\n\n const source = yield* sourceAuthority(\n origin.source.threadId,\n first.admission.sourceSubmissionId,\n );\n\n if (\n source.binding === undefined ||\n source.submission === undefined ||\n !definitionDigestsEqual(source.binding.digests, intent.sourceDigests)\n )\n return yield* failure(\"followUp\", \"declaration-unavailable\");\n\n const recorded = source.current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const receivingOrigin =\n recorded?._tag === \"WorkerOriginRecorded\" ? recorded.origin : undefined;\n\n if (source.depth !== 0 && receivingOrigin === undefined)\n return yield* failure(\"followUp\", \"denied\");\n const now = yield* Clock.currentTimeMillis;\n\n const deadlineAtMillis = Math.min(\n origin.expiresAtMillis,\n receivingOrigin?.expiresAtMillis ?? Infinity,\n );\n\n if (now >= deadlineAtMillis) return yield* failure(\"followUp\", \"denied\");\n const sourceSubmission = source.submission;\n\n const input = yield* Schema.decodeEffect(Schema.toEncoded(sourceBinding.definition.input))(\n source.submission.inputPayload,\n ).pipe(\n Effect.flatMap(() => Schema.decodeEffect(PersistedJson)(sourceSubmission.inputPayload)),\n Effect.mapError(() => failure(\"followUp\", \"corrupt\")),\n );\n\n let workerAdmission: WorkerAdmission | undefined;\n let principal = submission.principal;\n\n if (receivingOrigin !== undefined) {\n const retained = source.submission.workerAdmission;\n\n if (retained === undefined || !sameOrigin(retained.origin, receivingOrigin))\n return yield* failure(\"followUp\", \"denied\");\n principal = source.submission.principal;\n workerAdmission = {\n origin: receivingOrigin,\n reportKind: \"update\",\n messageId,\n parameters: retained.parameters,\n createdAtMillis: now,\n ...(retained.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: retained.sourceSubmissionId }),\n };\n }\n\n const sourceSubmissionId =\n receivingOrigin === undefined\n ? first.admission.sourceSubmissionId\n : workerAdmission?.sourceSubmissionId;\n\n const authorized = yield* deps.authorizer.authorize({\n sourceThreadId: receivingOrigin?.source.threadId ?? origin.source.threadId,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n principal,\n operation: \"followUp\",\n access: \"send\",\n worker: receivingOrigin?.worker ?? origin.worker,\n });\n\n const message = WorkerUpdate.make({\n _tag: \"WorkerUpdate\",\n schemaVersion: 1,\n worker: origin.worker,\n update,\n });\n\n const envelope: PreparedInput = {\n schemaVersion: 1,\n threadId: origin.source.threadId,\n deliveryPrincipal: authorized,\n agentId: origin.source.agentId,\n definitions: intent.sourceDigests,\n input,\n inputDigest: yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(\"followUp\")),\n ),\n admissionKey: messageId,\n authorization: { policyId: \"worker-report\", decisionId: messageId },\n messageAdmission: message,\n ...(workerAdmission === undefined\n ? {}\n : { workerAdmission: { ...workerAdmission, deliveryPrincipal: authorized } }),\n };\n\n return {\n messageId,\n envelope: yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.flatMap(Schema.decodeEffect(PersistedJson)),\n Effect.mapError(storageFailure(\"followUp\")),\n ),\n createdAtMillis: now,\n deadlineAtMillis,\n };\n },\n Effect.mapError((error) =>\n error.reason === \"storage\" || error.reason === \"corrupt\"\n ? LedgerError.make({ operation: \"worker-update\", message: error.reason })\n : UpdateError.make({ reason: error.reason === \"denied\" ? \"denied\" : \"unavailable\" }),\n ),\n );\n\n const reportRun = Effect.fn(\"WorkerHost.reportRun\")(function* (\n submission: SubmissionSnapshot,\n history: Effect.Success<ReturnType<typeof read>>,\n ): Effect.fn.Return<void, WorkerError> {\n const admission = submission.workerAdmission;\n const intent = admission?.origin.reporting;\n\n if (admission === undefined || intent === undefined) return;\n const origin = admission.origin;\n\n const member = history.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" &&\n record.payload.submissionId === submission.submissionId,\n )?.record.payload;\n\n if (member?._tag !== \"SubmissionSettled\") return yield* failure(\"inspect\", \"corrupt\");\n if (member.runId === undefined) return; // No actual Run means no fabricated report identity.\n const runId = member.runId;\n\n const host = history.records.find(\n ({ record }) => record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n )?.record.payload;\n\n if (host?._tag !== \"SubmissionSettled\") return yield* failure(\"inspect\", \"corrupt\");\n\n const messageId = yield* withCrypto(\n digestJson([\"worker-report\", submission.threadId, runId]),\n ).pipe(\n Effect.map((value) => Schema.decodeSync(IdempotencyKey)(`report:${value}`)),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n const recordId = `worker-report:${messageId}`;\n\n const prepare = Effect.fn(\"WorkerHost.prepareReport\")(function* (): Effect.fn.Return<\n WorkerReportPrepared | WorkerReportRefused,\n WorkerError\n > {\n const refused = (reason: WorkerReportRefused[\"reason\"]) =>\n WorkerReportRefused.make({ runId, messageId, reason });\n\n const sourceBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.source.agentId &&\n definitionDigestsEqual(entry.digests, intent.sourceDigests),\n );\n\n const targetBinding = deps.bindings.find(\n (entry) =>\n entry.agentId === origin.worker.targetAgentId &&\n definitionDigestsEqual(entry.digests, origin.targetDigests),\n );\n\n const reports =\n sourceBinding?.reporting?.filter(\n (entry) => entry.delegationId === origin.worker.delegationId,\n ) ?? [];\n\n const descriptor = reports[0];\n\n if (\n sourceBinding === undefined ||\n targetBinding === undefined ||\n descriptor === undefined ||\n reports.length !== 1 ||\n !Object.is(descriptor.target, targetBinding.definition) ||\n (descriptor.mode !== \"standard\" &&\n !Object.is(descriptor.input, sourceBinding.definition.input)) ||\n descriptor.mode !== intent.mode ||\n descriptor.destination?.delegationId !== intent.destinationDelegationId ||\n (descriptor.destination !== undefined &&\n !Object.is(descriptor.destination.target, sourceBinding.definition))\n )\n return refused(\"declaration-unavailable\");\n\n const selected = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: host.submissionId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (\n Option.isNone(selected) ||\n selected.value.threadId !== submission.threadId ||\n selected.value.receiptId !== host.receiptId ||\n selected.value.workerAdmission === undefined ||\n !sameOrigin(selected.value.workerAdmission.origin, origin)\n )\n return yield* failure(\"inspect\", \"corrupt\");\n const hostSubmission = selected.value;\n const hostAdmission = selected.value.workerAdmission;\n\n const sourceHistory = yield* read(origin.source.threadId, \"inspect\");\n\n const firstInput = requests(sourceHistory.records).find(\n (row) => row.admission.messageId === origin.firstMessageId,\n );\n\n if (firstInput === undefined || !sameOrigin(firstInput.admission.origin, origin))\n return yield* failure(\"inspect\", \"corrupt\");\n\n // Reporting stays with the original owner even when a later input came from another\n // source revision. Per-input parameters still belong to the settled Run.\n const source = yield* sourceAuthority(\n origin.source.threadId,\n firstInput.admission.sourceSubmissionId,\n );\n\n if (\n source.binding === undefined ||\n !definitionDigestsEqual(source.binding.digests, intent.sourceDigests)\n )\n return refused(\"declaration-unavailable\");\n\n const sourceOriginRecord = source.current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const sourceOrigin =\n sourceOriginRecord?._tag === \"WorkerOriginRecorded\" ? sourceOriginRecord.origin : undefined;\n\n if (source.depth !== 0 && sourceOrigin === undefined) return refused(\"destination\");\n if (\n descriptor.mode !== \"standard\" &&\n sourceOrigin !== undefined &&\n (descriptor.destination === undefined ||\n descriptor.destination.delegationId !== sourceOrigin.worker.delegationId ||\n descriptor.destination.target.id !== sourceOrigin.worker.targetAgentId)\n )\n return refused(\"destination\");\n if (sourceOrigin === undefined && descriptor.destination !== undefined)\n return refused(\"destination\");\n const now = yield* Clock.currentTimeMillis;\n\n const deadlineAtMillis = Math.min(\n origin.expiresAtMillis,\n sourceOrigin?.expiresAtMillis ?? Infinity,\n );\n\n if (now >= deadlineAtMillis) return refused(\"expired\");\n\n const context: WorkerContext = {\n source: origin.source,\n policy: source.policy,\n depth: source.depth,\n ...(source.grant === undefined ? {} : { grant: source.grant }),\n };\n\n const report: WorkerRunReport = {\n worker: origin.worker,\n context,\n observation: {\n _tag: \"Settled\",\n receipt: Receipt.make({\n threadId: hostSubmission.threadId,\n submissionId: hostSubmission.submissionId,\n receiptId: hostSubmission.receiptId,\n queueSequence: hostSubmission.queueSequence,\n }),\n runId,\n settlementId: host.settlementId,\n outcome: host.outcome,\n encodedParameters: hostAdmission.parameters,\n encodedResult: host.result ?? null,\n budgetExhausted: host.finishReason === \"budget-exhausted\",\n },\n };\n\n const projection = yield* Effect.suspend(() => descriptor.prepare(report)).pipe(\n Effect.timeout(\n Math.min(deps.limits.reportPreparationTimeoutMillis ?? 5_000, deadlineAtMillis - now),\n ),\n Effect.map((value) => ({ _tag: \"Prepared\" as const, value })),\n Effect.catchTag(\"WorkerReportPreparationFailure\", (error) =>\n Effect.succeed(refused(error.stage)),\n ),\n Effect.catchTag(\"TimeoutError\", () => Effect.succeed(refused(\"timeout\"))),\n Effect.catchCauseIf(\n (cause) => !Cause.hasInterrupts(cause),\n () => Effect.succeed(refused(\"defect\")),\n ),\n );\n\n if (projection._tag === \"WorkerReportRefused\") return projection;\n\n if (descriptor.mode === \"standard\") {\n const message = projection.value.message;\n\n if (source.submission === undefined || !Schema.is(WorkerCompletion)(message))\n return refused(\"input\");\n if (\n !Schema.toEquivalence(WorkerRef)(message.report.worker, origin.worker) ||\n !Schema.toEquivalence(Receipt)(message.report.receipt, report.observation.receipt) ||\n message.report.runId !== runId ||\n message.report.settlementId !== host.settlementId ||\n message.report.outcome !== host.outcome ||\n message.budgetExhausted !== report.observation.budgetExhausted\n )\n return refused(\"input\");\n } else if (projection.value.message !== undefined) return refused(\"input\");\n\n const reportInput =\n descriptor.mode === \"standard\"\n ? source.submission?.inputPayload\n : projection.value.encodedInput;\n\n const validated = yield* Schema.decodeEffect(\n Schema.toEncoded(sourceBinding.definition.input),\n )(reportInput).pipe(\n Effect.flatMap(() => Schema.decodeUnknownEffect(PersistedJson)(reportInput)),\n Effect.option,\n );\n\n if (Option.isNone(validated)) return refused(\"input\");\n const input = validated.value;\n\n const inputDigest = yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n let workerAdmission: WorkerAdmission | undefined;\n let principal = hostSubmission.principal;\n\n if (sourceOrigin !== undefined) {\n const ownerId =\n descriptor.mode === \"standard\"\n ? firstInput.admission.sourceSubmissionId\n : hostAdmission.sourceSubmissionId;\n\n if (ownerId === undefined) return refused(\"destination\");\n\n const sourceSnapshot = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: ownerId }))\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n if (\n Option.isNone(sourceSnapshot) ||\n sourceSnapshot.value.threadId !== origin.source.threadId ||\n sourceSnapshot.value.workerAdmission === undefined ||\n !sameOrigin(sourceSnapshot.value.workerAdmission.origin, sourceOrigin)\n )\n return refused(\"destination\");\n\n const parameters = yield* Schema.decodeUnknownEffect(PersistedJson)(\n descriptor.mode === \"standard\"\n ? sourceSnapshot.value.workerAdmission.parameters\n : projection.value.encodedParameters,\n ).pipe(Effect.option);\n\n if (Option.isNone(parameters)) return refused(\"destination\");\n principal = sourceSnapshot.value.principal;\n workerAdmission = {\n origin: sourceOrigin,\n messageId,\n parameters: parameters.value,\n createdAtMillis: now,\n ...(sourceSnapshot.value.workerAdmission.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: sourceSnapshot.value.workerAdmission.sourceSubmissionId }),\n };\n }\n\n // Reporting remains owned by the original allocator, even when a later input joins\n // or starts another Run. Nested reports authorize the enclosing worker's source owner.\n const authorizationSourceSubmissionId =\n sourceOrigin === undefined\n ? firstInput.admission.sourceSubmissionId\n : workerAdmission?.sourceSubmissionId;\n\n const authorized = yield* deps.authorizer\n .authorize({\n sourceThreadId: sourceOrigin?.source.threadId ?? origin.source.threadId,\n ...(authorizationSourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: authorizationSourceSubmissionId }),\n principal,\n operation: \"followUp\",\n access: \"send\",\n worker: sourceOrigin?.worker ?? origin.worker,\n })\n .pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"WorkerError\", (error) =>\n error.reason === \"storage\" || error.reason === \"unavailable\"\n ? Effect.fail(error)\n : Effect.succeed(Option.none<Principal>()),\n ),\n );\n\n if (Option.isNone(authorized)) return refused(\"denied\");\n\n const envelope: PreparedInput = {\n schemaVersion: 1,\n threadId: origin.source.threadId,\n deliveryPrincipal: authorized.value,\n agentId: origin.source.agentId,\n definitions: intent.sourceDigests,\n input,\n inputDigest,\n admissionKey: messageId,\n authorization: { policyId: \"worker-report\", decisionId: messageId },\n ...(projection.value.message === undefined\n ? {}\n : { messageAdmission: projection.value.message }),\n ...(workerAdmission === undefined\n ? {}\n : { workerAdmission: { ...workerAdmission, deliveryPrincipal: authorized.value } }),\n };\n\n const encoded = yield* Schema.encodeEffect(PreparedInput)(envelope).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(PersistedJson)),\n Effect.mapError(storageFailure(\"inspect\")),\n );\n\n return WorkerReportPrepared.make({\n runId,\n messageId,\n envelope: encoded,\n createdAtMillis: now,\n deadlineAtMillis,\n ...(lastWorkerReportMessageId(history.records) === undefined\n ? {}\n : { predecessor: lastWorkerReportMessageId(history.records) }),\n });\n });\n\n let decision: WorkerReportPrepared | WorkerReportRefused | undefined;\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const current = yield* read(submission.threadId, \"inspect\");\n\n const existing = current.records.find(({ record }) => record.recordId === recordId)?.record\n .payload;\n\n if (existing !== undefined) {\n if (\n (existing._tag !== \"WorkerReportPrepared\" && existing._tag !== \"WorkerReportRefused\") ||\n existing.runId !== runId ||\n existing.messageId !== messageId\n )\n return yield* failure(\"inspect\", \"corrupt\");\n decision = existing;\n break;\n }\n decision ??= yield* prepare();\n if (yield* append(submission.threadId, recordId, decision, current, \"report\")) break;\n if (attempt === 15) return yield* failure(\"inspect\", \"storage\");\n }\n if (decision?._tag !== \"WorkerReportPrepared\") return;\n if (Option.isNone(deps.deliveries)) return yield* failure(\"inspect\", \"unavailable\");\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(decision.envelope).pipe(\n Effect.mapError(() => failure(\"inspect\", \"corrupt\")),\n );\n\n const prepared = yield* withCrypto(\n prepareMessageDelivery({\n key: { ownerThreadId: submission.threadId, messageId },\n envelope,\n createdAtMillis: decision.createdAtMillis,\n deadlineAtMillis: decision.deadlineAtMillis,\n ...(decision.predecessor === undefined ? {} : { predecessor: decision.predecessor }),\n }),\n ).pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n // Until this insertion commits the child ledger stays nonterminal. Afterwards its independent\n // due index survives both child and source settlement, including Object eviction.\n yield* hit(\"worker:before-report-delivery\", \"inspect\");\n yield* deps.deliveries.value.insert(prepared).pipe(Effect.mapError(storageFailure(\"inspect\")));\n yield* hit(\"worker:after-report-delivery\", \"inspect\");\n });\n\n const completeInput = Effect.fn(\"WorkerHost.completeInput\")(function* (\n submission: SubmissionSnapshot,\n ) {\n const admission = submission.workerAdmission;\n\n if (admission === undefined) return;\n const child = yield* read(submission.threadId, \"inspect\");\n\n yield* reportRun(submission, child);\n\n const settledEnvelope = child.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" &&\n record.payload.submissionId === submission.submissionId,\n )?.record;\n\n const settled = settledEnvelope?.payload;\n\n if (\n settled?._tag !== \"SubmissionSettled\" ||\n settled.receiptId !== submission.receiptId ||\n settledEnvelope === undefined\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n const payload = WorkerInputCompleted.make({\n messageId: admission.messageId,\n workerThreadId: submission.threadId,\n submissionId: submission.submissionId,\n receiptId: submission.receiptId,\n settlementId: settled.settlementId,\n completedAtMillis: DateTime.toEpochMillis(settledEnvelope.createdAt),\n });\n\n for (let attempt = 0; attempt < 16; attempt++) {\n const source = yield* read(admission.origin.source.threadId, \"inspect\");\n\n const existing = source.records.find(\n ({ record }) =>\n record.payload._tag === \"WorkerInputCompleted\" &&\n record.payload.messageId === admission.messageId,\n )?.record.payload;\n\n if (existing !== undefined) {\n if (\n existing._tag !== \"WorkerInputCompleted\" ||\n !Schema.toEquivalence(WorkerInputCompleted)(existing, payload)\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n return;\n }\n if (\n yield* append(\n admission.origin.source.threadId,\n `worker-completed:${admission.messageId}`,\n payload,\n source,\n \"completion\",\n )\n )\n return;\n }\n\n return yield* failure(\"inspect\", \"storage\");\n });\n\n const facet = (\n context: WorkerContext,\n principal: Principal,\n sourceSubmissionId?: SubmissionId,\n ): SubagentHost[\"Service\"] => {\n const authorize = (\n operation: WorkerError[\"operation\"],\n access: \"context\" | \"read\" | \"send\" | \"control\",\n worker?: WorkerRef,\n ) =>\n deps.authorizer.authorize({\n sourceThreadId: context.source.threadId,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n principal,\n operation,\n access,\n ...(worker === undefined ? {} : { worker }),\n });\n\n const binding = (target: Agent.AnyDefinition, operation: WorkerError[\"operation\"]) =>\n resolveDefinitionBinding(deps.bindings, target).pipe(\n Effect.mapError(() => failure(operation, \"declaration-unavailable\")),\n );\n\n const preparedTarget = Effect.fn(\"WorkerHost.preparedTarget\")(function* (\n target: Agent.AnyDefinition,\n encodedInput: unknown,\n ) {\n const resolved = yield* binding(target, \"start\");\n\n yield* Schema.decodeUnknownEffect(Schema.toEncoded(target.input))(encodedInput).pipe(\n Effect.mapError(() => failure(\"start\", \"corrupt\")),\n );\n const input = yield* decode(PersistedJson, encodedInput, \"start\");\n\n const inputDigest = yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(\"start\")),\n );\n\n const source = yield* sourceAuthority(context.source.threadId, sourceSubmissionId);\n\n const policy = yield* resolveTargetPolicy({\n _tag: \"InitialInput\",\n definition: resolved.definition,\n definitions: resolved.digests,\n source: context.source,\n ...(source.submission === undefined ? {} : { sourceSubmission: source.submission }),\n input,\n inputDigest,\n });\n\n return { resolved, source, policy };\n });\n\n const findOrigin = Effect.fn(\"WorkerHost.findOrigin\")(function* (\n worker: WorkerRef,\n target: Agent.AnyDefinition,\n operation: WorkerError[\"operation\"],\n ) {\n const resolved = yield* binding(target, operation);\n\n if (worker.targetAgentId !== target.id) return yield* failure(operation, \"worker-mismatch\");\n const source = yield* read(context.source.threadId, operation);\n\n const origin = requests(source.records).find(\n (row) => row.admission.origin.worker.threadId === worker.threadId,\n )?.admission.origin;\n\n if (origin === undefined) return yield* failure(operation, \"not-found\");\n if (\n origin.worker.delegationId !== worker.delegationId ||\n !definitionDigestsEqual(origin.targetDigests, resolved.digests)\n )\n return yield* failure(operation, \"worker-mismatch\");\n\n return origin;\n });\n\n const receiptInput = Effect.fn(\"WorkerHost.receiptInput\")(function* (\n request: WorkerReceiptRequest,\n operation: WorkerError[\"operation\"],\n ) {\n const origin = yield* findOrigin(request.worker, request.target, operation);\n const receipt = request.receipt;\n\n const snapshot = yield* deps.ledger\n .lookup(SubmissionLookupById.make({ submissionId: receipt.submissionId }))\n .pipe(Effect.mapError(storageFailure(operation)));\n\n if (Option.isNone(snapshot)) return yield* failure(operation, \"not-found\");\n const row = snapshot.value;\n\n if (\n row.threadId !== request.worker.threadId ||\n row.threadId !== receipt.threadId ||\n row.receiptId !== receipt.receiptId ||\n row.queueSequence !== receipt.queueSequence ||\n row.workerAdmission === undefined ||\n !sameOrigin(row.workerAdmission.origin, origin)\n )\n return yield* failure(operation, \"receipt-mismatch\");\n\n return row.workerAdmission;\n });\n\n const observation = Effect.fn(\"WorkerHost.observation\")(function* (\n request: WorkerReceiptRequest,\n admission: WorkerAdmission,\n settlement: Settlement,\n ): Effect.fn.Return<WorkerObservation, WorkerError> {\n const history = yield* read(request.worker.threadId, \"inspect\");\n\n const record = history.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" &&\n record.payload.submissionId === settlement.submissionId,\n )?.record.payload;\n\n if (\n record?._tag !== \"SubmissionSettled\" ||\n record.settlementId !== settlement.settlementId ||\n record.receiptId !== request.receipt.receiptId ||\n record.outcome !== settlement.outcome\n )\n return yield* failure(\"inspect\", \"corrupt\");\n\n const input = history.records.find(\n ({ record }) =>\n record.payload._tag === \"UserInputRecorded\" &&\n record.payload.submissionId === settlement.submissionId,\n )?.record.payload;\n\n const inputRunId = input?._tag === \"UserInputRecorded\" ? input.runId : undefined;\n\n if (inputRunId !== undefined && record.runId !== undefined && inputRunId !== record.runId)\n return yield* failure(\"inspect\", \"corrupt\");\n const runId = record.runId ?? inputRunId;\n\n // The host settlement precedes the joined members and carries the Run's actual output.\n // Both identities come from canonical history; no foreign recovery or finalization is needed.\n const host =\n runId === undefined\n ? undefined\n : history.records.find(\n ({ record }) =>\n record.payload._tag === \"SubmissionSettled\" && record.payload.runId === runId,\n )?.record.payload;\n\n const result = host?._tag === \"SubmissionSettled\" ? host : record;\n\n if (result.outcome !== record.outcome) return yield* failure(\"inspect\", \"corrupt\");\n\n return {\n _tag: \"Settled\",\n receipt: request.receipt,\n settlementId: settlement.settlementId,\n ...(result.runId === undefined ? {} : { runId: result.runId }),\n outcome: settlement.outcome,\n encodedParameters: admission.parameters,\n encodedResult: result.result ?? null,\n budgetExhausted: result.finishReason === \"budget-exhausted\",\n };\n });\n\n const send = Effect.fn(\"WorkerHost.send\")(function* (\n origin: WorkerOrigin,\n messageId: IdempotencyKey,\n encodedInput: unknown,\n encodedParameters: unknown,\n principal: Principal,\n operation: \"start\" | \"followUp\",\n ) {\n if (Option.isNone(deps.deliveries)) return yield* failure(operation, \"unavailable\");\n const deliveries = deps.deliveries.value;\n const input = yield* decode(PersistedJson, encodedInput, operation);\n const parameters = yield* decode(PersistedJson, encodedParameters, operation);\n\n const inputDigest = yield* withCrypto(digestJson(input)).pipe(\n Effect.mapError(storageFailure(operation)),\n );\n\n const key = { ownerThreadId: context.source.threadId, messageId };\n const saved = yield* deliveries.get(key).pipe(Effect.mapError(storageFailure(operation)));\n\n if (saved !== null) {\n const metadata = saved.envelope.workerAdmission;\n\n if (\n metadata === undefined ||\n !sameOrigin(metadata.origin, origin) ||\n !sameJson(metadata.parameters, parameters) ||\n saved.envelope.inputDigest !== inputDigest ||\n !sameJson(saved.envelope.input, input)\n )\n return yield* failure(operation, \"idempotency-conflict\");\n if (saved.receipt !== null) return saved.receipt;\n } else {\n const now = yield* Clock.currentTimeMillis;\n\n if (now >= origin.expiresAtMillis) return yield* failure(operation, \"capacity\");\n\n const envelope: PreparedInput = {\n schemaVersion: 1,\n threadId: origin.worker.threadId,\n deliveryPrincipal: principal,\n agentId: origin.worker.targetAgentId,\n definitions: origin.targetDigests,\n input,\n inputDigest,\n admissionKey: messageId,\n authorization: { policyId: \"worker-host\", decisionId: messageId },\n workerAdmission: {\n origin,\n messageId,\n parameters,\n createdAtMillis: now,\n deliveryPrincipal: principal,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n },\n };\n\n const prepared = yield* withCrypto(\n prepareMessageDelivery({\n key,\n envelope,\n createdAtMillis: now,\n deadlineAtMillis: origin.expiresAtMillis,\n }),\n ).pipe(Effect.mapError(storageFailure(operation)));\n\n yield* deliveries\n .insert(prepared)\n .pipe(\n Effect.mapError((error) =>\n failure(\n operation,\n error._tag === \"MessageDeliveryError\" && error.reason === \"capacity\"\n ? \"capacity\"\n : \"storage\",\n ),\n ),\n );\n }\n\n // Direct callers and automatic pumps run the same claim/accept/refuse protocol. A\n // conclusive refusal is retained before it becomes visible to this caller.\n const processed = yield* MessageDeliveryDriver.pipe(\n Effect.flatMap((driver) => driver.process(key)),\n Effect.provide(MessageDeliveryDriver.layer({ batchSize: 1, concurrency: 1 })),\n Effect.provideService(MessageDeliveryStore, deliveries),\n Effect.provideService(PreparedInputAdmission, {\n submit: (prepared) =>\n deps\n .submit(prepared)\n .pipe(\n Effect.mapError((error) =>\n error._tag === \"AdmissionConflict\" || error._tag === \"AgentInputError\"\n ? ScheduledInputRefused.make({ code: error._tag })\n : error._tag === \"AdmissionPolicyError\" && error.reason === \"refused\"\n ? ScheduledInputRefused.make({ code: error.code })\n : ScheduledInputRetryable.make({ reason: \"storage\" }),\n ),\n ),\n submissionStatus: (receipt) =>\n deps\n .status(receipt)\n .pipe(Effect.mapError(() => ScheduledInputRetryable.make({ reason: \"storage\" }))),\n }),\n Effect.provideService(Crypto.Crypto, deps.crypto),\n Effect.mapError(storageFailure(operation)),\n );\n\n if (processed.receipt !== null) return processed.receipt;\n if (processed.status === \"refused\") {\n const reason = Schema.decodeUnknownOption(WorkerError.fields.reason)(\n processed.refusal?.startsWith(\"worker-\")\n ? processed.refusal.slice(\"worker-\".length)\n : processed.refusal === \"AdmissionConflict\"\n ? \"idempotency-conflict\"\n : processed.refusal === \"AgentInputError\"\n ? \"corrupt\"\n : undefined,\n );\n\n return yield* failure(\n operation,\n Option.getOrElse(reason, () => \"denied\"),\n );\n }\n\n // A live claim or a future delivery deadline is not a storage failure. Keep the\n // receipt-only success contract: retention alone does not mean the child started.\n return yield* failure(\n operation,\n processed.status === \"pending\" && processed.retry.lastFailure === null\n ? \"delivery-pending\"\n : \"storage\",\n );\n });\n\n const messageIdFor = (parts: ReadonlyArray<string>) =>\n withCrypto(digestJson(parts)).pipe(\n Effect.map((digest) => Schema.decodeSync(IdempotencyKey)(`worker:${digest}`)),\n Effect.mapError(storageFailure(\"start\")),\n );\n\n const summarize = Effect.fn(\"WorkerHost.summarize\")(function* (\n origin: WorkerOrigin,\n all: ReadonlyArray<WorkerInputRequested>,\n operation: \"list\" | \"inspect\",\n ) {\n yield* authorize(operation, \"read\", origin.worker);\n let latestReceipt: Receipt | null = null;\n let active = false;\n let starting = false;\n\n for (const row of all) {\n if (row.admission.origin.worker.threadId !== origin.worker.threadId) continue;\n\n const delivery = Option.isNone(deps.deliveries)\n ? null\n : yield* deps.deliveries.value\n .get({\n ownerThreadId: context.source.threadId,\n messageId: row.admission.messageId,\n })\n .pipe(Effect.mapError(storageFailure(operation)));\n\n const principal = row.admission.deliveryPrincipal ?? delivery?.envelope.deliveryPrincipal;\n\n const found =\n principal === undefined\n ? Option.none()\n : yield* deps.ledger\n .lookup(\n SubmissionLookupByKey.make({\n threadId: origin.worker.threadId,\n principal,\n idempotencyKey: row.admission.messageId,\n }),\n )\n .pipe(Effect.mapError(storageFailure(operation)));\n\n if (Option.isNone(found)) {\n if (delivery?.status !== \"refused\") starting = true;\n continue;\n }\n active ||= found.value.state !== \"settled\";\n if (latestReceipt === null || found.value.queueSequence > latestReceipt.queueSequence) {\n latestReceipt = {\n threadId: found.value.threadId,\n submissionId: found.value.submissionId,\n receiptId: found.value.receiptId,\n queueSequence: found.value.queueSequence,\n };\n }\n }\n\n return {\n worker: origin.worker,\n latestReceipt,\n state: active\n ? (\"active\" as const)\n : starting || latestReceipt === null\n ? (\"starting\" as const)\n : (\"idle\" as const),\n };\n });\n\n return {\n context: Effect.gen(function* () {\n yield* authorize(\"context\", \"context\");\n if (context.depth !== 0) return context;\n const source = yield* sourceAuthority(context.source.threadId, sourceSubmissionId);\n\n return {\n ...context,\n policy: Option.getOrElse(source.policyOverride, () => context.policy),\n };\n }),\n resolveTargetPolicy: Effect.fn(\"WorkerHost.resolvePreparedTargetPolicy\")(function* (request) {\n yield* authorize(\"start\", \"send\");\n\n return (yield* preparedTarget(request.target, request.encodedInput)).policy;\n }),\n start: Effect.fn(\"WorkerHost.start\")(function* (request) {\n const principal = yield* authorize(\"start\", \"send\");\n\n if (context.depth !== 0 && sourceSubmissionId === undefined)\n return yield* failure(\"start\", \"denied\");\n const prepared = yield* preparedTarget(request.target, request.encodedInput);\n const resolved = prepared.resolved;\n const sourcePolicy = Option.getOrElse(prepared.source.policyOverride, () => context.policy);\n\n const grant = yield* Schema.decodeUnknownEffect(SubagentGrant)(request.encodedGrant).pipe(\n Effect.mapError(() => failure(\"start\", \"corrupt\")),\n );\n\n const messageId = yield* messageIdFor([\n context.source.threadId,\n request.delegationId,\n request.idempotencyKey,\n ]);\n\n if (Option.isNone(deps.deliveries)) return yield* failure(\"start\", \"unavailable\");\n\n const existing = yield* deps.deliveries.value\n .get({ ownerThreadId: context.source.threadId, messageId })\n .pipe(Effect.mapError(storageFailure(\"start\")));\n\n const now = yield* Clock.currentTimeMillis;\n const previousOrigin = existing?.envelope.workerAdmission?.origin;\n const sourceBinding = prepared.source.binding;\n\n if (sourceBinding === undefined) return yield* failure(\"start\", \"declaration-unavailable\");\n\n const reporting =\n previousOrigin === undefined\n ? yield* reportIntent(sourceBinding, resolved, request.delegationId)\n : previousOrigin.reporting;\n\n if (reporting?.mode === \"standard\" && sourceSubmissionId === undefined)\n return yield* failure(\"start\", \"denied\");\n\n const origin = yield* decode(\n WorkerOrigin,\n {\n worker: {\n schemaVersion: 1,\n delegationId: request.delegationId,\n targetAgentId: request.target.id,\n threadId: Schema.decodeSync(ThreadId)(messageId),\n },\n source: existing?.envelope.workerAdmission?.origin.source ?? context.source,\n targetDigests: resolved.digests,\n policy: request.policy,\n budget: request.budget,\n ...(request.budgetScope === undefined ? {} : { budgetScope: request.budgetScope }),\n grant,\n depth: context.depth + 1,\n firstMessageId: messageId,\n createdAtMillis: existing?.envelope.workerAdmission?.origin.createdAtMillis ?? now,\n expiresAtMillis:\n existing?.envelope.workerAdmission?.origin.expiresAtMillis ??\n now + deps.limits.lifetimeMillis,\n ...(reporting === undefined ? {} : { reporting }),\n ...(request.toolCallAllowance === undefined\n ? {}\n : { toolCallAllowance: request.toolCallAllowance }),\n },\n \"start\",\n );\n\n yield* authorizeBudget(origin, principal);\n\n const targetPolicy = Option.isSome(prepared.policy)\n ? prepared.policy.value\n : origin.budgetScope === \"worker-run\"\n ? resolved.definition.policy\n : AgentPolicy.resolve(\n resolved.definition.policyOverrides ?? resolved.definition.policy,\n sourcePolicy,\n );\n\n if (\n !withinPolicy(\n origin,\n origin.budgetScope === \"worker-run\" ? targetPolicy : sourcePolicy,\n targetPolicy,\n )\n )\n return yield* failure(\"start\", \"capacity\");\n\n const receipt = yield* send(\n origin,\n messageId,\n request.encodedInput,\n request.encodedParameters,\n principal,\n \"start\",\n );\n\n return { worker: origin.worker, receipt };\n }),\n followUp: Effect.fn(\"WorkerHost.followUp\")(function* (request) {\n const principal = yield* authorize(\"followUp\", \"send\", request.worker);\n const origin = yield* findOrigin(request.worker, request.target, \"followUp\");\n\n yield* resolveTargetPolicy({\n _tag: \"RetainedWorker\",\n definition: request.target,\n definitions: origin.targetDigests,\n source: origin.source,\n origin,\n });\n\n yield* Schema.decodeUnknownEffect(Schema.toEncoded(request.target.input))(\n request.encodedInput,\n ).pipe(Effect.mapError(() => failure(\"followUp\", \"corrupt\")));\n\n const messageId = yield* messageIdFor([\n context.source.threadId,\n request.worker.threadId,\n \"followUp\",\n request.idempotencyKey,\n ]);\n\n return yield* send(\n origin,\n messageId,\n request.encodedInput,\n request.encodedParameters,\n principal,\n \"followUp\",\n );\n }),\n inspect: Effect.fn(\"WorkerHost.inspect\")(function* (request) {\n yield* authorize(\"inspect\", \"read\", request.worker);\n const admission = yield* receiptInput(request, \"inspect\");\n\n const status = yield* deps\n .status(request.receipt)\n .pipe(Effect.mapError(storageFailure(\"inspect\")));\n\n return status._tag === \"pending\"\n ? { _tag: \"Pending\" as const, receipt: request.receipt }\n : yield* observation(request, admission, status.settlement);\n }),\n summary: Effect.fn(\"WorkerHost.inspectWorker\")(function* (request) {\n yield* authorize(\"inspect\", \"read\", request.worker);\n const origin = yield* findOrigin(request.worker, request.target, \"inspect\");\n const source = yield* read(context.source.threadId, \"inspect\");\n\n return yield* summarize(origin, requests(source.records), \"inspect\");\n }),\n observe: (request) =>\n Stream.unwrap(\n Effect.gen(function* () {\n yield* authorize(\"observe\", \"read\", request.worker);\n yield* findOrigin(request.worker, request.target, \"observe\");\n const after = request.after ?? 0;\n\n if (!Number.isSafeInteger(after) || after < 0)\n return yield* failure(\"observe\", \"corrupt\");\n\n const tail = yield* deps.store\n .inspectTail(ThreadTailRequest.make({ threadId: request.worker.threadId }))\n .pipe(Effect.mapError(storageFailure(\"observe\")));\n\n return Stream.paginate(after, (cursor) =>\n Effect.gen(function* () {\n if (cursor >= tail.tailSequence) return [[], Option.none<number>()] as const;\n const limit = Math.min(256, tail.tailSequence - cursor);\n\n const page = yield* deps.store\n .read(\n ThreadRead.make({\n threadId: request.worker.threadId,\n afterSequence: Schema.decodeSync(CanonicalSequence)(cursor),\n limit,\n }),\n )\n .pipe(Stream.runCollect, Effect.mapError(storageFailure(\"observe\")));\n\n if (\n page.length === 0 ||\n page.length > limit ||\n page.some(\n (entry, index) =>\n entry.threadId !== request.worker.threadId ||\n entry.sequence !== cursor + index + 1,\n )\n )\n return yield* failure(\"observe\", \"corrupt\");\n\n const entries = yield* Effect.forEach(page, (entry) =>\n Schema.encodeEffect(RecordEnvelope)(entry.record).pipe(\n Effect.flatMap((record) =>\n Schema.decodeEffect(WorkerHistoryEntry)({\n sequence: entry.sequence,\n recordId: entry.record.recordId,\n record,\n }),\n ),\n Effect.mapError(() => failure(\"observe\", \"corrupt\")),\n ),\n );\n\n const next = cursor + page.length;\n\n return [\n entries,\n next >= tail.tailSequence ? Option.none<number>() : Option.some(next),\n ] as const;\n }),\n );\n }),\n ),\n await: Effect.fn(\"WorkerHost.await\")(function* (request) {\n yield* authorize(\"await\", \"read\", request.worker);\n const admission = yield* receiptInput(request, \"await\");\n\n while (true) {\n const status = yield* deps\n .status(request.receipt)\n .pipe(Effect.mapError(storageFailure(\"await\")));\n\n if (status._tag === \"settled\")\n return yield* observation(request, admission, status.settlement);\n // Poll the same host-routed read used by inspect. Interruption stops only this wait.\n yield* Effect.sleep(deps.settlementPollInterval);\n }\n }),\n list: Effect.fn(\"WorkerHost.list\")(function* (request) {\n yield* authorize(\"list\", \"read\");\n yield* binding(request.target, \"list\");\n if (!Number.isSafeInteger(request.limit) || request.limit < 1 || request.limit > 100)\n return yield* failure(\"list\", \"capacity\");\n const source = yield* read(context.source.threadId, \"list\");\n const all = requests(source.records);\n\n const origins = [\n ...new Map(\n all.map((row) => [row.admission.origin.worker.threadId, row.admission.origin]),\n ).values(),\n ]\n .filter(\n (origin) =>\n origin.worker.delegationId === request.delegationId &&\n origin.worker.targetAgentId === request.target.id &&\n (request.after === undefined || origin.worker.threadId > request.after),\n )\n .sort((left, right) => left.worker.threadId.localeCompare(right.worker.threadId));\n\n const selected = origins.slice(0, request.limit);\n\n const items = yield* Effect.forEach(selected, (origin) => summarize(origin, all, \"list\"));\n\n return {\n items,\n next:\n origins.length > selected.length\n ? (selected[selected.length - 1]?.worker.threadId ?? null)\n : null,\n };\n }),\n cancel: Effect.fn(\"WorkerHost.cancel\")(function* (request) {\n const principal = yield* authorize(\"cancel\", \"control\", request.worker);\n\n yield* receiptInput(request, \"cancel\");\n yield* deps\n .abort(\n AbortCommand.make({\n submissionId: request.receipt.submissionId,\n author: principal,\n reason: \"Worker owner requested cancellation of this Receipt\",\n }),\n )\n .pipe(\n Effect.mapError((error) =>\n error._tag === \"JoinedToHost\" ? error : failure(\"cancel\", \"storage\"),\n ),\n );\n }),\n };\n };\n\n const validateCompletion = Effect.fn(\"WorkerHost.validateCompletion\")(function* (\n unvalidated: FrameworkMessage,\n options: DurableSubmitOptions,\n agentId: AgentId,\n inputDigest: Digest,\n ) {\n const message = yield* Schema.decodeEffect(FrameworkMessage)(unvalidated).pipe(\n Effect.mapError(() => failure(\"followUp\", \"corrupt\")),\n );\n\n const child = yield* read(\n message._tag === \"WorkerCompletion\"\n ? message.report.worker.threadId\n : message.worker.threadId,\n \"followUp\",\n );\n\n const frozen =\n message._tag === \"WorkerCompletion\"\n ? child.records.flatMap(({ record }) =>\n record.payload._tag === \"WorkerReportPrepared\" &&\n record.payload.runId === message.report.runId\n ? [record.payload.envelope]\n : [],\n )[0]\n : child.records.flatMap(({ record }) =>\n record.payload._tag === \"AgentUpdateEmitted\" &&\n Schema.toEquivalence(Update)(record.payload.update, message.update) &&\n record.payload.delivery !== undefined\n ? [record.payload.delivery.envelope]\n : [],\n )[0];\n\n if (frozen === undefined) return yield* failure(\"followUp\", \"denied\");\n\n const envelope = yield* Schema.decodeUnknownEffect(PreparedInput)(frozen).pipe(\n Effect.mapError(() => failure(\"followUp\", \"corrupt\")),\n );\n\n if (\n !Schema.is(FrameworkMessage)(envelope.messageAdmission) ||\n !Schema.toEquivalence(FrameworkMessage)(envelope.messageAdmission, message) ||\n envelope.threadId !== options.threadId ||\n envelope.agentId !== agentId ||\n envelope.inputDigest !== inputDigest ||\n envelope.deliveryPrincipal !== options.principal ||\n envelope.admissionKey !== options.idempotencyKey ||\n !definitionDigestsEqual(envelope.definitions, options.definitions) ||\n !Schema.toEquivalence(Schema.UndefinedOr(WorkerAdmission))(\n envelope.workerAdmission,\n options.workerAdmission,\n )\n )\n return yield* failure(\"followUp\", \"denied\");\n\n const recorded = child.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n if (recorded?._tag !== \"WorkerOriginRecorded\" || recorded.origin.reporting?.mode !== \"standard\")\n return yield* failure(\"followUp\", \"denied\");\n const origin = recorded.origin;\n const source = yield* read(origin.source.threadId, \"followUp\");\n\n const first = requests(source.records).find(\n (row) => row.admission.messageId === origin.firstMessageId,\n );\n\n if (first === undefined || !sameOrigin(first.admission.origin, origin))\n return yield* failure(\"followUp\", \"denied\");\n const receiving = envelope.workerAdmission;\n\n const sourceSubmissionId =\n receiving === undefined ? first.admission.sourceSubmissionId : receiving.sourceSubmissionId;\n\n const principal = yield* deps.authorizer.authorize({\n sourceThreadId: receiving?.origin.source.threadId ?? origin.source.threadId,\n ...(sourceSubmissionId === undefined ? {} : { sourceSubmissionId }),\n principal: options.principal,\n operation: \"followUp\",\n access: \"send\",\n worker: receiving?.origin.worker ?? origin.worker,\n });\n\n if (principal !== options.principal) return yield* failure(\"followUp\", \"denied\");\n\n return message;\n });\n\n const acquire = Effect.fn(\"WorkerHost.acquire\")(function* (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n readonly sourceSubmissionId?: SubmissionId;\n }) {\n const { sourceThreadId, principal } = request;\n\n yield* deps.authorizer.authorize({\n sourceThreadId,\n ...(request.sourceSubmissionId === undefined\n ? {}\n : { sourceSubmissionId: request.sourceSubmissionId }),\n principal,\n operation: \"context\",\n access: \"context\",\n });\n const current = yield* read(sourceThreadId, \"context\");\n const created = current.records[0]?.record.payload;\n\n if (created?._tag !== \"ThreadCreated\") return yield* failure(\"context\", \"not-found\");\n\n const resolved = deps.bindings.find(\n (entry) =>\n entry.agentId === created.agentId &&\n definitionDigestsEqual(entry.digests, created.definitions),\n );\n\n if (resolved === undefined) return yield* failure(\"context\", \"declaration-unavailable\");\n\n const origin = current.records.find(\n ({ record }) => record.payload._tag === \"WorkerOriginRecorded\",\n )?.record.payload;\n\n const attached = current.records.find(\n ({ record }) => record.payload._tag === \"SubagentLineageRecorded\",\n )?.record.payload;\n\n const retained =\n origin?._tag === \"WorkerOriginRecorded\"\n ? origin.origin\n : attached?._tag === \"SubagentLineageRecorded\"\n ? attached\n : undefined;\n\n const selected =\n request.sourceSubmissionId === undefined\n ? undefined\n : yield* sourceAuthority(sourceThreadId, request.sourceSubmissionId);\n\n return facet(\n {\n source: {\n _tag: \"programmatic\",\n threadId: sourceThreadId,\n agentId: selected?.submission?.agentId ?? created.agentId,\n },\n policy:\n retained?.policy ?? selected?.binding?.definition.policy ?? resolved.definition.policy,\n depth:\n origin?._tag === \"WorkerOriginRecorded\"\n ? origin.origin.depth\n : attached?._tag === \"SubagentLineageRecorded\"\n ? attached.parentLink.depth\n : 0,\n ...(retained?.grant === undefined ? {} : { grant: retained.grant }),\n },\n principal,\n request.sourceSubmissionId,\n );\n });\n\n return {\n facet,\n prepareUpdate,\n acquire,\n validateCompletion,\n validateAdmission,\n ensureOrigin,\n completeInput,\n reserveSubtree,\n };\n});\n","import type { Scope } from \"effect\";\nimport {\n Cause,\n Clock,\n Context,\n Crypto,\n DateTime,\n Deferred,\n Duration,\n Effect,\n Equal,\n Layer,\n Option,\n Ref,\n Schedule,\n Schema,\n Semaphore,\n Stream,\n} from \"effect\";\nimport { Prompt, type Tool } from \"effect/unstable/ai\";\n\nimport {\n type InputMessage,\n MessageAdmission,\n type MessagingError,\n} from \"../capabilities/Messaging.ts\";\nimport type * as Agent from \"../core/Agent.ts\";\nimport { type RunDispositionDeclaration, type InputPromptSource } from \"../core/Agent.ts\";\nimport {\n AgentApprovalDenied,\n AgentApprovalPending,\n AgentInputError,\n AgentToolAuthorizationDenied,\n PolicyLimit,\n} from \"../core/AgentError.ts\";\nimport { AgentPolicy } from \"../core/AgentPolicy.ts\";\nimport { UpdateError } from \"../core/AgentUpdates.ts\";\nimport {\n type ReceiptId,\n ThreadId,\n SubmissionId,\n ToolCallId,\n type AgentId,\n type AttemptId,\n type RunId,\n type TurnId,\n} from \"../core/Identifiers.ts\";\nimport { IdGenerator } from \"../core/IdGenerator.ts\";\nimport { Receipt } from \"../core/Receipt.ts\";\nimport { type ExhaustedLimit, type RunEvent } from \"../core/RunEvent.ts\";\nimport { RunPolicyUsage } from \"../core/RunPolicyUsage.ts\";\nimport {\n SubagentBudgetReservation,\n SubagentReservationAmounts,\n SubagentGrant,\n DelegationDepth,\n getToolExecutionKind,\n SubagentParentLink,\n} from \"../core/SubagentContract.ts\";\nimport { Selection, type Snapshot } from \"../core/ToolExposure.ts\";\nimport {\n type ModelCallUsage,\n InputTokenUsage,\n ModelUsageGroup,\n RunUsageSummary,\n ChildRunUsage,\n RunUsageReport,\n emptyRunTotals,\n unknownRunTotals,\n runTotalsFromSummary,\n sumRunTotals,\n summarizeModelUsage,\n OutputTokenUsage,\n} from \"../core/Usage.ts\";\nimport { FrameworkMessage } from \"../core/Worker.ts\";\nimport type { WorkerError } from \"../core/Worker.ts\";\nimport * as AgentRuntime from \"../engine/AgentRuntime.ts\";\nimport {\n AgentChildPending,\n renderInputPrompt,\n type AgentRuntimeRequirements,\n type AgentCompletionProjectionRequirements,\n type RuntimeBinding,\n} from \"../engine/AgentRuntime.ts\";\nimport { ContextCompactor, CompactionError } from \"../engine/ContextCompactor.ts\";\nimport { getToolExecutionClass, type ToolExecutionClassValue } from \"../engine/DurableStep.ts\";\nimport { MessagingHost } from \"../engine/MessagingHost.ts\";\nimport {\n CurrentToolFailureObserver,\n AgentUpdateAcceptance,\n ModelUsageAccounting,\n RunContextPreparation,\n RunToolAuthorization,\n RunToolScheduling,\n RunContextPreparationPassthrough,\n type RunContextPreparationError,\n type ChildEstablishStatus,\n type RunApprovalHook,\n type RunContextHook,\n type RunCostEstimator,\n type RunDurabilityHook,\n type RunInputCommand,\n type RunInputHook,\n type RunOptions,\n type RunSubagentEstablishRequest,\n type RunSubagentHook,\n type RunSubagentJoinRequest,\n type RunToolAuthorizationHook,\n type RunToolAuthorizationRequest,\n} from \"../engine/RunOptions.ts\";\nimport { SubagentHost } from \"../engine/SubagentHost.ts\";\nimport { ThreadHistory } from \"../engine/ThreadHistory.ts\";\nimport { RunToolVisibility } from \"../engine/ToolExposure.ts\";\nimport {\n type RetryCommand,\n ExplainedEvidence,\n ExplainedSubmission,\n ExplainedUnknownCall,\n IntegrityCheck,\n IntegrityReport,\n ObligationEntry,\n ObligationReport,\n RecoveryExplanation,\n RetryRefused,\n obligationSeverityOf,\n predictRecoveryDisposition,\n recoveryDecisionMeaning,\n type ObligationBlockedOn,\n type ObligationThresholds,\n} from \"./Admin.ts\";\nimport { digestJson, type DigestError } from \"./Digest.ts\";\nimport {\n DurableRuntimeFailpoint,\n type DurableRuntimeFailpointError,\n type DurableRuntimeFailpointLocation,\n} from \"./DurableFailpoint.ts\";\nimport {\n BindingUnavailable,\n compileRegistrations,\n definitionDigestsEqual,\n type AgentRegistration,\n type DurableBindingFailure,\n makeLegacyWorkerBinding,\n type ResolvedBinding,\n resolveDefinitionBinding,\n resolveWorkerBinding,\n} from \"./internal/agent-registration.ts\";\nimport { makeAgentUpdateRuntime } from \"./internal/agent-updates.ts\";\nimport { inspectForeignDiagnostic, safeUnknownString } from \"./internal/foreign-diagnostic.ts\";\nimport {\n JournalCheckpointSeed,\n RecoveryCheckpointState,\n RecoveryCheckpointContents,\n RECOVERY_ENGINE_VERSION,\n checkpointSuffixCompatible,\n} from \"./internal/journal-checkpoint.ts\";\nimport { makeJournalMetadata, type JournalMetadata } from \"./internal/journal-metadata.ts\";\nimport { makeMessagingRuntime } from \"./internal/messaging-host.ts\";\nimport { makeWorkerRuntime, WorkerInputControl } from \"./internal/worker-host.ts\";\nimport { WorkerRuntime } from \"./internal/worker-runtime.ts\";\nimport {\n OperationAuthorizationRequest,\n OperationAuthorizer,\n OperationDenied,\n} from \"./OperationAuthorizer.ts\";\nimport {\n type CanonicalRecordEnvelope,\n type CanonicalRecordPayload,\n type DeploymentId,\n type Digest,\n type ProducerId,\n AbortRequested,\n BatchId,\n CanonicalBatch,\n CanonicalSequence,\n CompactionCreated,\n ThreadCreated,\n DefinitionDigests,\n ModelResponseInterrupted,\n PersistedJson,\n ProducerEpoch,\n RecordEnvelope,\n RecordId,\n RepairAnnotated,\n RunStartedRecord,\n SettlementFailureDiagnostic,\n SubagentJoined,\n SubagentLineageRecorded,\n SubtreeBudgetReserved,\n SubagentRequested,\n SubagentStarted,\n SubmissionSettled,\n SubmissionSettledRecord,\n ToolApprovalDecided,\n ToolApprovalRequested,\n ToolCallPrepared,\n RunPolicyUsageReserved,\n ToolCallResolved,\n ToolCallSettled,\n ToolCallUnknown,\n ToolStepSettled,\n UserInputRecorded,\n WorkerAdmission,\n type ApprovalDecision,\n type SettlementOutcome,\n type ToolCallResolution,\n} from \"./Records.ts\";\nimport {\n classifyRecovery,\n DeclaredPendingBatchEvidence,\n OpenDelegationCallEvidence,\n OpenToolCallEvidence,\n PendingApprovalEvidence,\n RecoveryDecision,\n RecoveryEvidence,\n type DelegationAdmissionEvidence,\n type MarkUnknown as MarkUnknownDecision,\n type SettleAborted as SettleAbortedDecision,\n} from \"./Recovery.ts\";\nimport {\n RunJournalError,\n approvalDecisionBatchId,\n childThreadIdFor,\n childIdempotencyKeyFor,\n compactionBatchId,\n compactionRecordId,\n markUnknownBatchId,\n modelResponseInterruptedBatchId,\n modelResponseInterruptedRecordId,\n modelResponseRecordId,\n projectRunJournalStream,\n type JournalBoundary,\n runCompletedRecordId,\n runIdForSubmission,\n runStartedBatchId,\n runStartedRecordId,\n subagentJoinBatchId,\n subagentJoinedRecordId,\n subagentLineageBatchId,\n subagentLineageRecordId,\n subagentRequestedBatchId,\n subagentRequestedRecordId,\n subagentStartedBatchId,\n subagentStartedRecordId,\n toolApprovalDecisionRecordId,\n toolApprovalRequestRecordId,\n toolCallPreparedRecordId,\n toolCallResolutionBatchId,\n toolCallResolvedRecordId,\n toolCallResultBatchId,\n toolCallSettledRecordId,\n toolCallUnknownRecordId,\n toolStepSettledBatchId,\n toolStepSettledRecordId,\n turnApprovalsBatchId,\n turnCanonicalBatch,\n turnIdForRun,\n turnPreparedBatchId,\n turnResponseBatch,\n turnResultsBatch,\n} from \"./RunJournal.ts\";\nimport {\n type AdmissionFence,\n AdmissionPolicyError,\n type AbortIntent,\n AbortIntentRequest,\n type AdmissionConflict,\n type Claim,\n type JoinedToHost,\n type OwnershipLost,\n type RecoverySnapshot,\n type SettlementConflict,\n type SubmissionSnapshot,\n AbortCommand,\n AdmissionRequest,\n ApprovalDecisionCommand,\n ApprovalPendingSuspension,\n AttachChildToReservationRequest,\n BeginChildBudgetReleaseRequest,\n ChildBudgetReservationRequest,\n ChildReservationId,\n ChildSettledNotification,\n ClaimJoiningRequest,\n ClaimRequest,\n IdempotencyKey,\n LedgerError,\n MarkInputAppliedRequest,\n MarkJoinedRequest,\n MarkReadyRequest,\n MarkUnknownRequest,\n OwnershipToken,\n ParentLinkage,\n Principal,\n RecoverySnapshotRequest,\n ReleaseChildBudgetRequest,\n ReleaseOwnershipRequest,\n RenewOwnershipRequest,\n RevertJoiningRequest,\n SettlementFinalization,\n SettlementReservation,\n Settlement,\n SubmissionLedger,\n SubmissionLookupById,\n SubmissionLookupByKey,\n SuspendRequest,\n UnknownResolutionCommand,\n WaitingChild,\n WaitingForChildSuspension,\n submissionAbortBatchId,\n submissionAbortRecordId,\n submissionInputBatchId,\n submissionInputRecordId,\n submissionSettlementBatchId,\n submissionSettlementId,\n submissionSettlementRecordId,\n type AdmissionResult,\n type ApprovalConflict,\n type ApprovalDecisionIntent,\n type ChildBudgetReservationSnapshot,\n type JoinSnapshot,\n type UnknownResolutionConflict,\n type UnknownResolutionIntent,\n} from \"./SubmissionLedger.ts\";\nimport { PendingSubmission, SettledSubmission, type SubmissionStatus } from \"./SubmissionStatus.ts\";\nimport { verifyThreadInvariants } from \"./ThreadInvariants.ts\";\nimport {\n type AppendConflict,\n type ThreadNotMaterialized,\n type FenceRejected,\n ThreadExportRequest,\n ThreadMaterialization,\n ThreadObservation,\n ThreadRead,\n ThreadStore,\n ThreadStoreError,\n ThreadTailRequest,\n FencedAppendRequest,\n LoadCheckpointRequest,\n ThreadCheckpoint,\n SaveRecoveryCheckpointRequest,\n} from \"./ThreadStore.ts\";\nimport { PreparedToolCallEvidence, ToolReconciler } from \"./ToolReconciler.ts\";\nimport { WakeScheduler } from \"./WakeScheduler.ts\";\n\n// Capture the tracing call site once; each application still creates a fresh Attempt span.\nconst withThreadHeadSpan = Effect.withSpan(\"DurableAgentRuntime.processThreadHead\");\n\n/**\n * Instruction failure/requirement derivation mirroring the engine's `RuntimeBinding` defaults:\n * declaring them as generic DEFAULTS (instead of independent inference sites) keeps a plain\n * string-returning instruction function from widening both parameters to `unknown`.\n */\ntype InstructionResultOf<Instructions, Input> = Instructions extends (input: Input) => infer Result\n ? Result\n : Instructions;\n\ntype InstructionErrorOf<Instructions, Input> =\n InstructionResultOf<Instructions, Input> extends Effect.Effect<\n infer _Success,\n infer Error,\n infer _Requirements\n >\n ? Error\n : never;\n\ntype InstructionRequirementsOf<Instructions, Input> =\n InstructionResultOf<Instructions, Input> extends Effect.Effect<\n infer _Success,\n infer _Error,\n infer Requirements\n >\n ? Requirements\n : never;\n\nconst decodeBatchId = Schema.decodeSync(BatchId);\nconst decodeCanonicalSequence = Schema.decodeSync(CanonicalSequence);\nconst decodeRecordId = Schema.decodeSync(RecordId);\nconst decodeToolCallIdUnknown = Schema.decodeUnknownEffect(ToolCallId);\nconst ZERO_EPOCH = Schema.decodeSync(ProducerEpoch)(0);\nconst ZERO_SEQUENCE = decodeCanonicalSequence(0);\nconst READ_PAGE = 1_024;\n/** Stale-tail append retries per batch before the conflict propagates (see `appendBatch`). */\nconst MAX_APPEND_FENCE_REFRESHES = 8;\nconst MAX_FAILURE_MESSAGE_LENGTH = 16_384;\nconst RECONCILER_AUTHOR = \"reconciler\";\n/** Canonical `ToolApprovalDecided.resolver` for policy-auto decisions made by the delegate. */\nconst APPROVAL_POLICY_RESOLVER = \"approval-policy\";\n/** Ledger `ApprovalDecisionIntent.resolver` for the abort-driven suspension closure. */\nconst RECOVERY_RESOLVER = \"recovery\";\n/** Upper bound of one `drain(\"all\")` joining pass (`claimJoining.maxCount` must be positive). */\nconst MAX_JOIN_DRAIN = 32;\n/**\n * Token presented when reserving a joined Submission's settlement (plan §2.5). A `joined` lane is\n * never worker-claimable (WP2 claim rule), so no real ownership token can exist for it: the\n * ledger authorizes the reservation by the recorded host linkage and does not consult this value.\n */\nconst JOINED_SETTLEMENT_TOKEN = Schema.decodeSync(OwnershipToken)(\"ownership-joined-settlement\");\n\n/**\n * Placeholder token for the P7 §7(c) queued-abort settlement: an aborted, never-claimed,\n * still-queued `ready` Submission has no live ownership to fence against, so the ledger\n * authorizes its aborted reservation by the durable abort intent itself (the joined-settlement\n * pattern) and the presented token is not consulted.\n */\nconst QUEUED_ABORT_SETTLEMENT_TOKEN = Schema.decodeSync(OwnershipToken)(\n \"ownership-aborted-queued-settlement\",\n);\n\n/** Bound a hook-supplied approval reason to the canonical `BoundedText` persistence limits. */\nconst boundedApprovalReason = (reason: string | undefined, fallback: string): string => {\n const value = reason === undefined || reason.length === 0 ? fallback : reason;\n\n return value.length > MAX_FAILURE_MESSAGE_LENGTH\n ? value.slice(0, MAX_FAILURE_MESSAGE_LENGTH)\n : value;\n};\n\nconst boundedText = (value: string): string =>\n value.length > MAX_FAILURE_MESSAGE_LENGTH ? value.slice(0, MAX_FAILURE_MESSAGE_LENGTH) : value;\n\nconst decodePrincipalSync = Schema.decodeSync(Principal);\nconst decodeIdempotencyKeySync = Schema.decodeSync(IdempotencyKey);\nconst decodeChildReservationIdSync = Schema.decodeSync(ChildReservationId);\nconst decodeRecordIdSync = Schema.decodeSync(RecordId);\nconst decodeBatchIdSync = Schema.decodeSync(BatchId);\nconst decodeDefinitionDigests = Schema.decodeUnknownEffect(DefinitionDigests);\n\n/**\n * Deterministic parent-owned child budget reservation identity (spec\n * §12 step 2, D4): one reservation per (parent Run, parent Tool Call) pair,\n * so a replayed establishment converges on the one existing row (SUB-016).\n */\nexport const childReservationIdFor = (runId: RunId, toolCallId: ToolCallId): ChildReservationId =>\n decodeChildReservationIdSync(`subagent-reservation:${runId}:${toolCallId}`);\n\n/**\n * S2 fixes every attached durable child at delegation depth 1 (SUB-029\n * rejects all nested delegation at preflight), so recovery can rebuild the\n * child lineage from the canonical `SubagentRequested` record alone — the\n * record deliberately does not carry a depth field.\n */\nconst CHILD_DELEGATION_DEPTH: DelegationDepth = Schema.decodeSync(DelegationDepth)(1);\n\n/** Canonical `AbortRequested.author` of every propagated parent-abort command (spec §13.1). */\nconst SUBAGENT_ABORT_AUTHOR = \"subagent-parent-abort\";\n\n/** Keep this exact reason, including its historical citation: abort repair replays the same command. */\nconst SUBAGENT_ABORT_REASON =\n \"The parent Submission was aborted; request-abort-and-join propagates the durable abort intent to every attached child (spec/subagents.md 13.1)\";\n\n/**\n * The deterministic zero-consumed accounting decision frozen for a\n * provably-childless orphaned reservation (spec §13/§14: \"releases the\n * reservation exactly once\"). Constant so every repair pass freezes the SAME\n * decision — an identical `beginChildBudgetRelease` replay is a no-op.\n */\nconst ORPHAN_ZERO_CONSUMED_ACCOUNTING = Schema.decodeSync(PersistedJson)({\n basis: \"orphan-zero-consumed\",\n});\n\n/** The four parent-log/child-log subagent records of one Run, indexed per Tool Call. */\ninterface SubagentCallRecords {\n readonly requested: Map<ToolCallId, SubagentRequested>;\n readonly started: Map<ToolCallId, SubagentStarted>;\n readonly joined: Map<ToolCallId, SubagentJoined>;\n /** Declared Tool name per prepared call (delegation joins reuse it for `ToolCallSettled`). */\n readonly preparedNames: Map<ToolCallId, string>;\n}\n\n/** Pure fold of one Run's canonical subagent lifecycle records (plan §1.2). */\nconst subagentRecordsOf = (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n runId: RunId,\n): SubagentCallRecords => {\n const requested = new Map<ToolCallId, SubagentRequested>();\n const started = new Map<ToolCallId, SubagentStarted>();\n const joined = new Map<ToolCallId, SubagentJoined>();\n const preparedNames = new Map<ToolCallId, string>();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n switch (payload._tag) {\n case \"SubagentRequested\": {\n if (payload.runId === runId) requested.set(payload.toolCallId, payload);\n break;\n }\n case \"SubagentStarted\": {\n if (payload.runId === runId) started.set(payload.toolCallId, payload);\n break;\n }\n case \"SubagentJoined\": {\n if (payload.runId === runId) joined.set(payload.toolCallId, payload);\n break;\n }\n case \"ToolCallPrepared\": {\n if (payload.runId === runId) preparedNames.set(payload.toolCallId, payload.toolName);\n break;\n }\n default: {\n break;\n }\n }\n }\n\n return { requested, started, joined, preparedNames };\n};\n\n/** Joined reports are canonical snapshots, keyed by child Run so replay cannot double charge. */\nconst childUsageReportsOf = (state: SubagentCallRecords): ReadonlyArray<ChildRunUsage> =>\n [...state.started.entries()].map(([toolCallId, child]) => {\n const joined = state.joined.get(toolCallId);\n\n return ChildRunUsage.make({\n runId: child.childRunId,\n report: RunUsageReport.make({\n usage: joined?.usage ?? unknownRunTotals(),\n delegatedUsage: joined?.delegatedUsage ?? unknownRunTotals(),\n }),\n });\n });\n\n/** Deterministic batch identity of one Thread's initial `ThreadCreated` append. */\nexport const threadCreatedBatchId = (threadId: ThreadId): BatchId =>\n decodeBatchId(`thread-created:${threadId}`);\n\n/** Deterministic record identity of one Thread's `ThreadCreated` record. */\nexport const threadCreatedRecordId = (threadId: ThreadId): RecordId =>\n decodeRecordId(`thread-created:${threadId}`);\n\n/** Deterministic batch identity of one executed recovery decision's audit append (DUR-013). */\nexport const recoveryRepairBatchId = (submissionId: SubmissionId, decisionTag: string): BatchId =>\n decodeBatchId(`repair:${submissionId}:${decisionTag}`);\n\n/** Deterministic record identity of one executed recovery decision's `RepairAnnotated` record. */\nexport const recoveryRepairRecordId = (submissionId: SubmissionId, decisionTag: string): RecordId =>\n decodeRecordId(`repair:${submissionId}:${decisionTag}`);\n\n/**\n * The durable identity returned once ledger admission, Thread materialization, and\n * readiness are committed (DUR-001). It is an identifier for observation and reattachment, not\n * an authorization capability.\n */\nexport { Receipt } from \"../core/Receipt.ts\";\n\n/** One executed (or deliberately deferred) recovery decision (durability §14, DUR-013). */\nexport class RecoveryReport extends Schema.Class<RecoveryReport>(\n \"@effect-agent/thread/RecoveryReport\",\n)({\n submissionId: SubmissionId,\n threadId: ThreadId,\n decision: RecoveryDecision,\n /**\n * `repaired` = executed; `deferred` = a claiming worker must finish it; `none` = settled;\n * `unknown` = the lane is durably blocked on an Unknown Outcome awaiting the authorized\n * DUR-017 resolution path — the settlement obligation stays visible while no worker permit\n * is consumed (durability §16).\n */\n disposition: Schema.Literals([\"repaired\", \"deferred\", \"none\", \"unknown\"]),\n}) {}\n\n/** Per-submission options accepted by `DurableAgentRuntime.submit` (D2). */\nexport interface DurableSubmitOptions {\n readonly threadId: ThreadId;\n readonly principal: Principal;\n readonly idempotencyKey: IdempotencyKey;\n readonly admissionGroup?: string;\n readonly admissionFence?: AdmissionFence;\n /** Host-prepared worker input; immutable origin and per-input projection parameters. */\n readonly workerAdmission?: WorkerAdmission;\n /** Peer provenance or a worker completion, verified against frozen canonical delivery proof. */\n readonly messageAdmission?: InputMessage;\n /** Application-computed digests of the Agent/Model/Toolkit definitions (see `digestDefinitions`). */\n readonly definitions: DefinitionDigests;\n}\n\nexport interface DurableObserveOptions {\n /** Resume the observation after an adapter-owned offset previously returned by `observe`. */\n readonly after?: CanonicalRecordEnvelope[\"offset\"] | undefined;\n}\n\n/** The structural slice of an Agent Binding that `submit` needs. */\nexport interface DurableSubmitAgent<InputSchema extends Schema.Top> {\n readonly definition: {\n readonly id: AgentId;\n readonly input: InputSchema;\n };\n}\n\nexport type DurableSubmitFailure =\n | AgentInputError\n | DigestError\n | AdmissionConflict\n | AdmissionPolicyError\n | LedgerError\n | ThreadStoreError\n | ThreadNotMaterialized\n | AppendConflict\n | FenceRejected\n | DurableRuntimeFailpointError;\n\nexport type DurableWorkerFailure =\n | AdmissionPolicyError\n | DigestError\n | LedgerError\n | OwnershipLost\n | SettlementConflict\n | ThreadStoreError\n | ThreadNotMaterialized\n | AppendConflict\n | FenceRejected\n | RunJournalError\n | DurableRuntimeFailpointError;\n\nexport type DurableAwaitFailure = LedgerError | SettlementConflict | OperationDenied;\n\n/** Typed failures from the public canonical progress boundary. */\nexport type DurableProgressFailure = ThreadStoreError | ThreadNotMaterialized | OperationDenied;\n\nexport type DurableAbortFailure =\n | OperationDenied\n | LedgerError\n | SettlementConflict\n | JoinedToHost\n | DurableRuntimeFailpointError;\n\n/**\n * Failure family of `resolveUnknown` (DUR-017, abort-shaped): the durable intent may conflict\n * with a divergent prior resolution, the Submission may already be settled, an `AbortSubmission`\n * resolution routes through the abort path (whose `JoinedToHost` conflict stays visible), and the\n * failpoint after the intent write is armable like every other durable mutation.\n */\nexport type DurableResolveFailure =\n | LedgerError\n | SettlementConflict\n | UnknownResolutionConflict\n | JoinedToHost\n | DurableRuntimeFailpointError;\n\n/**\n * Failure family of `resolveApproval` (plan §2.6, abort-shaped): the durable intent may conflict\n * with a divergent prior decision, and the Submission may already be settled. The ledger adapter\n * owns the crash boundaries of the intent write (`ledger:approval-decision:{before,after}`).\n */\nexport type DurableApprovalFailure = LedgerError | SettlementConflict | ApprovalConflict;\n\n/**\n * Failure family of the read-only `explain`/`explainThread` operations (P7 WP1): pure\n * observation over the two ports plus the evidence assembler's typed failures, and the\n * fail-closed `OperationDenied` when a host-supplied authorizer refuses.\n */\nexport type DurableExplainFailure =\n | LedgerError\n | ThreadStoreError\n | RunJournalError\n | OperationDenied;\n\n/**\n * Failure family of the read-only `verify` operation (P7 WP1). `ThreadNotMaterialized`\n * stays visible: verifying a Thread that does not exist is a caller error, not an empty\n * report.\n */\nexport type DurableVerifyFailure =\n | LedgerError\n | ThreadStoreError\n | ThreadNotMaterialized\n | OperationDenied;\n\n/**\n * Failure family of `retry` (P7 WP1): the scoped recovery execution carries the worker failure\n * family, refusals are typed (`RetryRefused` — settled work and lanes owned by the\n * resolveUnknown/resolveApproval paths), and denial is fail-closed.\n */\nexport type DurableRetryFailure = DurableWorkerFailure | RetryRefused | OperationDenied;\n\n/** Failure family of `scanObligations` (P7 WP1): ledger scan + canonical unknown-age reads. */\nexport type DurableObligationFailure = LedgerError | ThreadStoreError | OperationDenied;\n\n/**\n * Optional policy-auto approval delegate consulted by the durable approval hook (plan §2.6 step\n * 2) AFTER the recorded-decision lookup misses. An immediate `approved`/`denied` answer becomes\n * canonical (`ToolApprovalRequested` + `ToolApprovalDecided`, one atomic batch) before it is\n * honored; `unresolved` falls through to the durable suspension path. The default (`undefined`)\n * suspends every undecided approval durably until `resolveApproval` decides it — the fail-closed\n * posture. Adapt the P2 `ApprovalResolver` capability stack through\n * `@effect-agent/capabilities`' `toDurableRunApprovalHook`.\n */\nexport const DurableApprovalResolver: Context.Reference<RunApprovalHook<never, never> | undefined> =\n Context.Reference<RunApprovalHook<never, never> | undefined>(\n \"@effect-agent/thread/DurableApprovalResolver\",\n { defaultValue: () => undefined },\n );\n\n/**\n * Services a durable worker needs beyond the runtime's own Layer: the Agent Binding's inferred\n * requirements minus its supplied identity and history services. The coordinator provides\n * deterministic Run/Turn identity and journal-owned history because its coordinator owns all\n * durable reads and commits across Attempts.\n */\nexport type DurableWorkerRequirements<\n AgentValue extends Agent.Any,\n InstructionRequirements = never,\n> =\n | Exclude<\n AgentRuntimeRequirements<AgentValue, never, InstructionRequirements>,\n ThreadHistory | RunContextPreparation\n >\n | AgentCompletionProjectionRequirements<AgentValue>;\n\nexport interface DurableRuntimeConfigOptions {\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n /** `awaitSettlement` ledger re-check cadence when no wake arrives (default 500ms). */\n readonly settlementPollInterval?: Duration.Duration | undefined;\n /** Worker ownership-lease renewal cadence (default 10s; D5 lease default is 30s). */\n readonly leaseRenewalInterval?: Duration.Duration | undefined;\n /** Active-Run abort-intent poll cadence (default 500ms). */\n readonly abortPollInterval?: Duration.Duration | undefined;\n /** Deployment-owned model pricing authority, captured for every recoverable Run. */\n readonly estimateCostMicrousd?: RunCostEstimator | undefined;\n}\n\n/** Deployment-scoped identity and liveness cadences for the durable coordinator. */\nexport class DurableRuntimeConfig extends Context.Service<\n DurableRuntimeConfig,\n {\n readonly deploymentId: DeploymentId;\n readonly producerId: ProducerId;\n readonly settlementPollInterval: Duration.Duration;\n readonly leaseRenewalInterval: Duration.Duration;\n readonly abortPollInterval: Duration.Duration;\n readonly estimateCostMicrousd?: RunCostEstimator | undefined;\n }\n>()(\"@effect-agent/thread/DurableRuntimeConfig\") {\n static make(options: DurableRuntimeConfigOptions): (typeof DurableRuntimeConfig)[\"Service\"] {\n return {\n deploymentId: options.deploymentId,\n producerId: options.producerId,\n settlementPollInterval: options.settlementPollInterval ?? Duration.millis(500),\n leaseRenewalInterval: options.leaseRenewalInterval ?? Duration.seconds(10),\n abortPollInterval: options.abortPollInterval ?? Duration.millis(500),\n ...(options.estimateCostMicrousd === undefined\n ? {}\n : { estimateCostMicrousd: options.estimateCostMicrousd }),\n };\n }\n\n static layer(options: DurableRuntimeConfigOptions): Layer.Layer<DurableRuntimeConfig> {\n return Layer.succeed(DurableRuntimeConfig)(DurableRuntimeConfig.make(options));\n }\n}\n\n/** Terminal outcome an Attempt decided before terminalization (DUR-011). */\ntype AttemptOutcome = { readonly uncommittedModelUsage?: ReadonlyArray<ModelCallUsage> } & (\n | {\n readonly _tag: \"completed\";\n readonly result: PersistedJson;\n /** Schema-encoded application disposition, only for an ordinary completed Run. */\n readonly runDisposition?: PersistedJson;\n /** Set when the Run settled through the final-answer exhaustion resolution (RUN-018). */\n readonly finishReason?: \"budget-exhausted\";\n /** The dimension that bound; set exactly alongside `finishReason` (RUN-011). */\n readonly exhausted?: ExhaustedLimit;\n readonly usageSummary?: RunUsageSummary;\n }\n | {\n readonly _tag: \"failed\";\n readonly result: SettlementFailureDiagnostic;\n /** The typed limit of an `AgentPolicyError` failure; absent otherwise (RUN-011). */\n readonly policyLimit?: PolicyLimit;\n readonly usageSummary?: RunUsageSummary;\n }\n | { readonly _tag: \"aborted\"; readonly usageSummary?: RunUsageSummary }\n);\n\n/**\n * What one `runModel` pass produced: a terminal `AttemptOutcome` for terminalization, a\n * durable approval suspension (plan §2.6) — the unresolved call's canonical request is already\n * appended, NO settlement is owed by this pass, and `runAttempt` transitions the ledger — or a\n * durable `waitingForChild` suspension: every non-waiting\n * sibling result is already committed as a per-call late-settle batch and `runAttempt` executes\n * `ledger.suspend(WaitingForChild)`.\n */\ntype RunPhaseOutcome =\n | AttemptOutcome\n | { readonly _tag: \"yielded\" }\n | { readonly _tag: \"suspended\"; readonly toolCallId: ToolCallId }\n | { readonly _tag: \"suspendedChild\"; readonly children: AgentChildPending[\"children\"] };\n\nconst approvalSuspension = (toolCallId: ToolCallId): RunPhaseOutcome => ({\n _tag: \"suspended\",\n toolCallId,\n});\n\nconst childSuspension = (children: AgentChildPending[\"children\"]): RunPhaseOutcome => ({\n _tag: \"suspendedChild\",\n children,\n});\n\nconst abortedRunPhase = (usageSummary: RunUsageSummary): RunPhaseOutcome => ({\n _tag: \"aborted\",\n usageSummary,\n});\n\n/**\n * Internal marker separating coordinator infrastructure failures (fencing, storage, failpoints —\n * the Attempt aborts cleanly and the accepted work stays owed) from Agent Run failures (typed\n * engine errors — the Submission settles `failed`). Never exported: it exists only so the two\n * failure families cannot be confused inside the run phase.\n */\nclass CoordinatorHalt {\n readonly _tag = \"CoordinatorHalt\";\n constructor(readonly failure: DurableWorkerFailure) {}\n}\n\nconst PolicyFailure = Schema.TaggedStruct(\"AgentPolicyError\", {\n limit: PolicyLimit,\n});\n\nconst decodePolicyFailure = Schema.decodeUnknownOption(PolicyFailure);\n\nconst decodePolicyFailureSafely = (error: unknown) => {\n try {\n return decodePolicyFailure(error);\n } catch {\n return Option.none();\n }\n};\n\nconst agentApprovalPendingOption = (error: unknown): Option.Option<AgentApprovalPending> => {\n try {\n // Suspension authority is nominal. Schema.is/decode would accept a forged tagged object.\n return error instanceof AgentApprovalPending ? Option.some(error) : Option.none();\n } catch {\n return Option.none();\n }\n};\n\nconst agentChildPendingOption = (error: unknown): Option.Option<AgentChildPending> => {\n try {\n // Suspension authority is nominal. Schema.is/decode would accept a forged tagged object.\n return error instanceof AgentChildPending ? Option.some(error) : Option.none();\n } catch {\n return Option.none();\n }\n};\n\nconst errorMessageOf = (error: unknown): string => {\n const diagnostic = inspectForeignDiagnostic(error);\n\n return diagnostic.message ?? safeUnknownString(error, \"Unknown failure\");\n};\n\nconst errorTagOf = (error: unknown): string =>\n inspectForeignDiagnostic(error).tag ?? \"UnknownError\";\n\nconst nowUtc: Effect.Effect<DateTime.Utc> = Effect.map(Clock.currentTimeMillis, (millis) =>\n DateTime.toUtc(DateTime.makeUnsafe(millis)),\n);\n\nconst decodePrompt = Schema.decodeUnknownEffect(Prompt.Prompt);\nconst decodePersisted = Schema.decodeUnknownEffect(PersistedJson);\n\n/** One application Tool Call declared inside a canonical `ModelResponseRecorded`'s messages. */\ninterface DeclaredApplicationCall {\n readonly id: string;\n readonly name: string;\n /** Encoded JSON parameters exactly as canonical history carries them. */\n readonly params: unknown;\n readonly providerExecuted?: boolean;\n}\n\ninterface DeclaredToolCalls {\n readonly application: Array<DeclaredApplicationCall>;\n readonly all: Array<DeclaredApplicationCall>;\n readonly providerResults: Array<Prompt.ToolResultPart>;\n}\n\n/**\n * Pure inspection of every Tool Call declared in one canonical response. Provider-executed calls\n * retain their terminal results, while only application calls enter the durable prepared/settled\n * protocol and completion singleton invariant.\n */\nconst declaredToolCalls = Effect.fn(\"DurableAgentRuntime.declaredToolCalls\")(\n (messages: PersistedJson): Effect.Effect<DeclaredToolCalls, RunJournalError> =>\n decodePrompt(messages).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"ModelResponseRecorded messages are not Schema-encoded Prompt messages\",\n cause,\n }),\n ),\n Effect.flatMap((prompt) => {\n const application: Array<DeclaredApplicationCall> = [];\n const all: Array<DeclaredApplicationCall> = [];\n const providerResults: Array<Prompt.ToolResultPart> = [];\n\n for (const message of prompt.content) {\n if (message.role !== \"assistant\") continue;\n for (const part of message.content) {\n if (part.type === \"tool-result\" && part.providerExecuted) providerResults.push(part);\n if (part.type !== \"tool-call\") continue;\n all.push({\n id: part.id,\n name: part.name,\n params: part.params,\n providerExecuted: part.providerExecuted,\n });\n if (!part.providerExecuted) {\n application.push({ id: part.id, name: part.name, params: part.params });\n }\n }\n }\n\n const providerCalls = new Map(\n all.filter((call) => call.providerExecuted).map((call) => [call.id, call]),\n );\n\n const resultIds = new Set<string>();\n\n for (const result of providerResults) {\n if (providerCalls.get(result.id)?.name !== result.name || resultIds.has(result.id)) {\n return Effect.fail(\n RunJournalError.make({\n message: `Invalid canonical provider result ${result.id}`,\n }),\n );\n }\n resultIds.add(result.id);\n }\n for (const id of providerCalls.keys()) {\n if (!resultIds.has(id)) {\n return Effect.fail(\n RunJournalError.make({\n message: `Turn lacks canonical provider result for ${id}`,\n }),\n );\n }\n }\n\n return Effect.succeed({ application, all, providerResults });\n }),\n ),\n);\n\n/** Application calls alone drive durable preparation, settlement, and batch resume. */\nconst declaredApplicationCalls = Effect.fn(\"DurableAgentRuntime.declaredApplicationCalls\")(\n (messages: PersistedJson): Effect.Effect<Array<DeclaredApplicationCall>, RunJournalError> =>\n declaredToolCalls(messages).pipe(Effect.map(({ application }) => application)),\n);\n\n/** Rebuild the exact JSON text that the engine decoded from one terminal no-Tool response. */\nconst terminalAssistantText = Effect.fn(\"DurableAgentRuntime.terminalAssistantText\")(\n (messages: PersistedJson): Effect.Effect<string, RunJournalError> =>\n decodePrompt(messages).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"ModelResponseRecorded messages are not Schema-encoded Prompt messages\",\n cause,\n }),\n ),\n Effect.map((prompt) => {\n let text = \"\";\n\n for (const message of prompt.content) {\n if (message.role !== \"assistant\") continue;\n for (const part of message.content) {\n if (part.type === \"text\") text += part.text;\n }\n }\n\n return text;\n }),\n ),\n);\n\n/**\n * The declared-but-unsettled Tool batch of one Run's last committed Turn (§2.4 batch resume):\n * every declared call in canonical encoded form plus the recorded results of the calls that\n * already settled (results batch never committed, or per-call late settles from the resolution\n * path). `undefined` when the Run's journal ends at a complete Turn boundary.\n */\ninterface PendingToolBatch {\n readonly toolExposure?: Snapshot | undefined;\n readonly turn: number;\n readonly turnId: TurnId;\n readonly calls: ReadonlyArray<DeclaredApplicationCall>;\n readonly settled: ReadonlyArray<{\n readonly id: string;\n readonly result: PersistedJson;\n readonly isFailure: boolean;\n readonly budgetRejected?: true;\n readonly toolSelection?: Selection | undefined;\n }>;\n readonly declaredIds: ReadonlySet<string>;\n readonly responseRecordId: RecordId;\n /** The pending `ModelResponseRecorded.messages`: its pre-assistant slice is the resume's leading messages. */\n readonly messages: PersistedJson;\n}\n\ninterface AttemptAppendContext {\n readonly threadId: ThreadId;\n readonly producerEpoch: ProducerEpoch;\n readonly tailRef: Ref.Ref<{ readonly sequence: CanonicalSequence; readonly digest: Digest }>;\n /** Serializes every canonical append of one Attempt (run commits vs. the abort watcher). */\n readonly gate: Semaphore.Semaphore;\n}\n\n/** What the resuming worker knows about the ownership period it superseded (durability §9). */\ninterface AttemptLineage {\n readonly attemptId: AttemptId;\n /** The Thread-store fence BEFORE this Attempt advanced it (0 = no prior producer). */\n readonly supersededEpoch: ProducerEpoch;\n /** The canonical `input:{sid}` record existed before this Attempt started. */\n readonly inputWasRecorded: boolean;\n}\n\n/** Review of one Submission's open (prepared-without-outcome) ordinary Tool Calls (DUR-009). */\ninterface OpenCallReview {\n /** No proof either way: these calls must become Unknown Outcomes (never auto-replayed). */\n readonly uncertain: Array<OpenToolCallEvidence>;\n /** The reconciliation policy itself failed: stay open and blocked WITHOUT marking; retry later. */\n readonly unproven: Array<OpenToolCallEvidence>;\n /** Proven safe to re-execute (never-started / safe-retry / declared idempotent contract). */\n readonly retryable: Array<OpenToolCallEvidence>;\n /** Calls closed canonically with a recovered result (no handler execution). */\n readonly recovered: number;\n}\n\nconst make = Effect.fn(\"DurableAgentRuntime.make\")(function* (\n bindings: ReadonlyArray<ResolvedBinding>,\n) {\n const registeredBindings = [...bindings];\n const ledger = yield* SubmissionLedger;\n const store = yield* ThreadStore;\n const wake = yield* WakeScheduler;\n const failpoint = yield* DurableRuntimeFailpoint;\n const config = yield* DurableRuntimeConfig;\n const crypto = yield* Crypto.Crypto;\n const reconciler = yield* ToolReconciler;\n const approvalResolver = yield* DurableApprovalResolver;\n\n // Capture independent host choices at acquisition so worker callers cannot replace them.\n const runContextPreparation = yield* Effect.serviceOption(RunContextPreparation).pipe(\n Effect.map(Option.getOrElse(() => RunContextPreparation.of({}))),\n );\n\n const runToolAuthorization = yield* RunToolAuthorization;\n\n const runToolVisibility = yield* RunToolVisibility;\n\n const runToolScheduling = yield* RunToolScheduling;\n\n const compactor = yield* Effect.serviceOption(ContextCompactor).pipe(\n Effect.flatMap(\n Option.match({\n onSome: Effect.succeed,\n onNone: () => Effect.provide(ContextCompactor, ContextCompactor.layer),\n }),\n ),\n );\n\n // Possession-default authorization reference (P7 WP1): the default allows everything —\n // exactly the pre-P7 service-possession boundary — and a host-supplied non-default Layer is\n // consulted fail-closed by observe, the admin operations, and the two resolution paths.\n const operationAuthorizer = yield* OperationAuthorizer;\n // RUN-036: capture once with the runtime, including explicit absence. A worker caller's ambient\n // observer must never replace this host choice on a fresh or replacement Attempt.\n const toolFailureObserver = yield* CurrentToolFailureObserver;\n\n const withCrypto = <A, E>(effect: Effect.Effect<A, E, Crypto.Crypto>): Effect.Effect<A, E> =>\n Effect.provideService(effect, Crypto.Crypto, crypto);\n\n const hit = (\n location: DurableRuntimeFailpointLocation,\n ): Effect.Effect<void, DurableRuntimeFailpointError> => failpoint.hit(location);\n\n const makeEnvelope = (\n recordId: RecordId,\n payload: CanonicalRecordPayload,\n ): Effect.Effect<RecordEnvelope> =>\n Effect.map(nowUtc, (createdAt) =>\n RecordEnvelope.make({\n recordId,\n family: \"thread\",\n schemaVersion: 1,\n createdAt,\n deploymentId: config.deploymentId,\n payload,\n }),\n );\n\n const materializeSettlement = (\n settlement: Settlement,\n record: RecordEnvelope | undefined,\n ): Settlement => {\n const common = {\n submissionId: settlement.submissionId,\n settlementId: settlement.settlementId,\n receiptId: settlement.receiptId,\n outcome: settlement.outcome,\n ...(settlement.failure === undefined ? {} : { failure: settlement.failure }),\n settledAt: settlement.settledAt,\n };\n\n const payload = record?.payload;\n\n if (\n payload === undefined ||\n payload._tag !== \"SubmissionSettled\" ||\n payload.submissionId !== settlement.submissionId ||\n payload.settlementId !== settlement.settlementId ||\n payload.receiptId !== settlement.receiptId ||\n payload.outcome !== settlement.outcome\n ) {\n return Settlement.make(common);\n }\n\n const canonical = {\n ...common,\n ...(payload.usageSummary === undefined ? {} : { usageSummary: payload.usageSummary }),\n };\n\n if (settlement.outcome !== \"completed\" || payload.runDisposition === undefined) {\n return Settlement.make(canonical);\n }\n\n return Settlement.make({\n ...canonical,\n runDisposition: payload.runDisposition,\n });\n };\n\n /** Re-readable, contiguous canonical prefix. Each traversal retains only the adapter's chunk. */\n const canonicalRange = (\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n afterSequence: CanonicalSequence = ZERO_SEQUENCE,\n ): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized> =>\n Stream.suspend(() => {\n let expected = afterSequence + 1;\n let after = afterSequence;\n\n const next = (): Stream.Stream<\n CanonicalRecordEnvelope,\n ThreadStoreError | ThreadNotMaterialized\n > =>\n Stream.suspend(() => {\n if (expected > throughSequence) return Stream.empty;\n const start = expected;\n const limit = Math.min(READ_PAGE, throughSequence - start + 1);\n\n const page = store\n .read(\n ThreadRead.make({\n threadId,\n limit,\n ...(after === 0 ? {} : { afterSequence: after }),\n }),\n )\n .pipe(\n Stream.mapEffect((envelope) => {\n if (envelope.sequence !== expected || expected >= start + limit) {\n return Effect.fail(\n ThreadStoreError.make({\n operation: \"read recovery history\",\n message: `Canonical history for ${threadId} is not contiguous: expected sequence ${expected}, received ${envelope.sequence}`,\n }),\n );\n }\n expected += 1;\n after = envelope.sequence;\n\n return Effect.succeed(envelope);\n }),\n );\n\n return Stream.concat(\n page,\n Stream.suspend(() =>\n expected === start + limit\n ? next()\n : Stream.fail(\n ThreadStoreError.make({\n operation: \"read recovery history\",\n message: `Canonical history for ${threadId} ended at ${after}; expected ${limit} records through sequence ${throughSequence}, received ${expected - start}`,\n }),\n ),\n ),\n );\n });\n\n return next();\n });\n\n /**\n * Retain addressed runs and their deterministic identities independently of payload claims.\n * Marker matching deliberately errs toward retaining malformed/conflicting identity evidence.\n */\n const controlRecords = (submissionIds: ReadonlyArray<SubmissionId>) => {\n const runIds = new Set(submissionIds.map(runIdForSubmission));\n const runMarkers = [...runIds].map((runId) => `:${runId}:`);\n\n const recordIds = new Set(\n submissionIds.flatMap((id) => [\n submissionInputRecordId(id),\n submissionAbortRecordId(id),\n submissionSettlementRecordId(id),\n runStartedRecordId(runIdForSubmission(id)),\n runCompletedRecordId(runIdForSubmission(id)),\n ]),\n );\n\n return ({ record }: CanonicalRecordEnvelope): boolean =>\n recordIds.has(record.recordId) ||\n runMarkers.some((marker) => record.recordId.includes(marker)) ||\n record.recordId.startsWith(\"subagent-lineage:\") ||\n record.payload._tag === \"SubagentLineageRecorded\" ||\n record.payload._tag === \"WorkerOriginRecorded\" ||\n (\"runId\" in record.payload &&\n record.payload.runId !== undefined &&\n runIds.has(record.payload.runId));\n };\n\n const readControl = Effect.fn(\"DurableAgentRuntime.readControl\")(function* (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n ) {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n const view = yield* recoveryView(threadId, tail.tailSequence, submissionIds);\n\n return yield* Stream.runCollect(\n view.canonical.pipe(Stream.filter(controlRecords(submissionIds))),\n );\n });\n\n /** A checkpoint is useful only for its explicitly retained submissions and exact definitions. */\n const recoveryView = Effect.fn(\"DurableAgentRuntime.recoveryView\")(function* (\n threadId: ThreadId,\n throughSequence: CanonicalSequence,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.fn.Return<\n {\n readonly canonical: Stream.Stream<\n CanonicalRecordEnvelope,\n ThreadStoreError | ThreadNotMaterialized\n >;\n readonly seed?: JournalCheckpointSeed;\n },\n ThreadStoreError | ThreadNotMaterialized\n > {\n const full = { canonical: canonicalRange(threadId, throughSequence) };\n\n if (store.recoveryCheckpoints === undefined) return full;\n\n const loaded = yield* store.recoveryCheckpoints\n .load(LoadCheckpointRequest.make({ threadId, atOrBeforeSequence: throughSequence }))\n .pipe(Effect.catchTag(\"CheckpointRejected\", () => Effect.succeed(Option.none())));\n\n if (Option.isNone(loaded)) return full;\n const checkpoint = loaded.value;\n\n if (\n checkpoint.engineVersion !== RECOVERY_ENGINE_VERSION ||\n checkpoint.threadId !== threadId ||\n checkpoint.throughSequence > throughSequence ||\n throughSequence - checkpoint.throughSequence > 4_096\n )\n return full;\n\n const decoded = yield* Schema.decodeUnknownEffect(RecoveryCheckpointContents)(\n checkpoint.state,\n ).pipe(Effect.option);\n\n if (Option.isNone(decoded)) return full;\n const { state, digest } = decoded.value;\n\n if (\n !submissionIds.every((id) => state.submissionIds.includes(id)) ||\n state.seed.runId !== runIdForSubmission(state.submissionId)\n )\n return full;\n\n const encoded = yield* Schema.encodeEffect(RecoveryCheckpointState)(state).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"decode recovery checkpoint\",\n message: \"Invalid recovery state\",\n cause,\n }),\n ),\n );\n\n const actualDigest = yield* withCrypto(digestJson(encoded)).pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"decode recovery checkpoint\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n if (digest !== actualDigest) return full;\n\n const owner = yield* ledger\n .lookup(SubmissionLookupById.make({ submissionId: state.submissionId }))\n .pipe(\n Effect.mapError((cause) =>\n ThreadStoreError.make({\n operation: \"recovery checkpoint compatibility\",\n message: cause.message,\n cause,\n }),\n ),\n );\n\n if (\n Option.isNone(owner) ||\n owner.value.threadId !== threadId ||\n owner.value.agentDigests.agent !== checkpoint.agentDefinitionDigest ||\n owner.value.agentDigests.model !== checkpoint.modelDigest ||\n owner.value.agentDigests.tools !== checkpoint.toolDigest\n )\n return full;\n const replacement = state.seed.compaction;\n\n if (\n replacement.threadId !== threadId ||\n replacement.sequence > checkpoint.throughSequence ||\n replacement.record.payload._tag !== \"CompactionCreated\" ||\n replacement.record.payload.kind === \"clear-tool-results\" ||\n replacement.record.payload.coversThrough < state.seed.throughSequence ||\n replacement.record.payload.coversThrough >= replacement.sequence ||\n state.records.some(\n (record) => record.threadId !== threadId || record.sequence > checkpoint.throughSequence,\n ) ||\n !state.records.some(\n (record) =>\n record.sequence === replacement.sequence &&\n record.record.recordId === replacement.record.recordId,\n )\n )\n return full;\n\n const suffix = yield* Stream.runCollect(\n canonicalRange(threadId, throughSequence, checkpoint.throughSequence),\n );\n\n if (!checkpointSuffixCompatible(state.seed, suffix, state.records)) return full;\n\n return { canonical: Stream.fromIterable([...state.records, ...suffix]), seed: state.seed };\n });\n\n const readAllTolerant = Effect.fn(\"DurableAgentRuntime.readAllTolerant\")(\n (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.Effect<\n { readonly records: ReadonlyArray<CanonicalRecordEnvelope>; readonly materialized: boolean },\n ThreadStoreError\n > =>\n readControl(threadId, submissionIds).pipe(\n Effect.map((records) => ({ records, materialized: true })),\n Effect.catchTag(\"ThreadNotMaterialized\", () =>\n Effect.succeed({ records: [], materialized: false }),\n ),\n ),\n );\n\n interface RecoveryHistorySnapshot {\n readonly records: ReadonlyArray<CanonicalRecordEnvelope>;\n readonly materialized: boolean;\n readonly throughSequence: CanonicalSequence;\n readonly submissionIds: ReadonlyArray<SubmissionId>;\n }\n\n /**\n * Read one exact canonical prefix. The authoritative tail captured by the caller bounds both\n * work and visibility: appends racing the read receive higher sequences and are deliberately\n * left for a later snapshot, while a short page or sequence gap fails typed before recovery\n * mutates anything. At most `ceil((through - after) / READ_PAGE)` store pages are requested.\n */\n const readCanonicalRange = Effect.fn(\"DurableAgentRuntime.readCanonicalRange\")(function* (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n throughSequence: CanonicalSequence,\n retain: (record: CanonicalRecordEnvelope) => boolean,\n ): Effect.fn.Return<Array<CanonicalRecordEnvelope>, ThreadStoreError | ThreadNotMaterialized> {\n return yield* Stream.runCollect(\n canonicalRange(threadId, throughSequence, afterSequence).pipe(Stream.filter(retain)),\n );\n });\n\n /**\n * Capture one strongly-consistent pass-start tail and read exactly that prefix. This snapshot\n * is disposable: `runRecovery` retains it only while processing the scan's contiguous group\n * for this Thread, retaining only the addressed runs' control evidence\n * and never survives the pass or an interruption/restart.\n */\n const readRecoveryHistory = Effect.fn(\"DurableAgentRuntime.readRecoveryHistory\")(function* (\n threadId: ThreadId,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.fn.Return<RecoveryHistorySnapshot, ThreadStoreError> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId })).pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"ThreadNotMaterialized\", () => Effect.succeed(Option.none())),\n );\n\n if (Option.isNone(tail))\n return { records: [], materialized: false, throughSequence: ZERO_SEQUENCE, submissionIds };\n\n const records = yield* recoveryView(threadId, tail.value.tailSequence, submissionIds).pipe(\n Effect.flatMap((view) =>\n Stream.runCollect(view.canonical.pipe(Stream.filter(controlRecords(submissionIds)))),\n ),\n Effect.catchTag(\"ThreadNotMaterialized\", (error) =>\n ThreadStoreError.make({\n operation: \"read recovery history\",\n message: `Thread ${threadId} disappeared after its recovery tail was captured`,\n cause: error,\n }),\n ),\n );\n\n return { records, materialized: true, throughSequence: tail.value.tailSequence, submissionIds };\n });\n\n /**\n * A recovery mutation that must distinguish a racing canonical append reads only the suffix\n * beyond its pass snapshot. The append-only prefix remains valid; no full-history retry is\n * needed, and malformed suffix pagination fails through the same typed boundary.\n */\n const refreshRecoveryHistory = Effect.fn(\"DurableAgentRuntime.refreshRecoveryHistory\")(function* (\n threadId: ThreadId,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n after: CanonicalSequence,\n submissionIds: ReadonlyArray<SubmissionId>,\n ): Effect.fn.Return<ReadonlyArray<CanonicalRecordEnvelope>, DurableWorkerFailure> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n if (tail.tailSequence <= after) return records;\n\n const suffix = yield* readCanonicalRange(\n threadId,\n after,\n tail.tailSequence,\n controlRecords(submissionIds),\n ).pipe(\n Effect.catchTag(\"ThreadNotMaterialized\", (error) =>\n ThreadStoreError.make({\n operation: \"read recovery history\",\n message: `Thread ${threadId} disappeared after its recovery suffix tail was captured`,\n cause: error,\n }),\n ),\n );\n\n return [...records, ...suffix];\n });\n\n const knownRecordIdsOf = (records: ReadonlyArray<CanonicalRecordEnvelope>): Set<string> =>\n new Set(records.map((envelope) => envelope.record.recordId));\n\n const settlementPayloadFromRecord = Effect.fn(\"DurableAgentRuntime.settlementPayloadFromRecord\")(\n function* (\n record: RecordEnvelope,\n submissionId: SubmissionId,\n ): Effect.fn.Return<SubmissionSettledRecord, LedgerError> {\n const payload = record.payload;\n\n if (\n payload._tag !== \"SubmissionSettled\" ||\n payload.submissionId !== submissionId ||\n payload.settlementId !== submissionSettlementId(submissionId) ||\n record.recordId !== submissionSettlementRecordId(submissionId)\n ) {\n return yield* LedgerError.make({\n operation: \"settlementPayloadFromRecord\",\n message: `The reserved canonical record is not the exact Settlement for Submission ${submissionId}`,\n });\n }\n\n return payload;\n },\n );\n\n const canonicalSettlementRecord = Effect.fn(\"DurableAgentRuntime.canonicalSettlementRecord\")(\n function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n submissionId: SubmissionId,\n ): Effect.fn.Return<RecordEnvelope, LedgerError> {\n const record = records.find(\n (envelope) => envelope.record.recordId === submissionSettlementRecordId(submissionId),\n )?.record;\n\n if (record === undefined) {\n return yield* LedgerError.make({\n operation: \"canonicalSettlementRecord\",\n message: `Canonical history has no Settlement for Submission ${submissionId}`,\n });\n }\n yield* settlementPayloadFromRecord(record, submissionId);\n\n return record;\n },\n );\n\n /**\n * Fold structured recovery evidence from canonical records (plan §2.2). Canonical history is\n * the only recovery truth (DUR-015): open Tool Calls are `ToolCallPrepared` without a closing\n * `ToolCallSettled`/`ToolCallResolved`, a declared-pending batch is a committed tool-declaring\n * response with zero prepared and zero settled records for its Turn (the provably-safe\n * durability §15 window), approvals pend until a canonical decision exists, and joined-side\n * prompt coverage requires a host `ModelResponseRecorded` after the joined `input:{sid}` record.\n */\n const evidenceFor = Effect.fn(\"DurableAgentRuntime.evidenceFor\")(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n submissionId: SubmissionId,\n materialized: boolean,\n hostSubmissionId?: SubmissionId,\n ): Effect.fn.Return<RecoveryEvidence, RunJournalError | LedgerError> {\n const runId = runIdForSubmission(submissionId);\n\n const hostRunId =\n hostSubmissionId === undefined ? undefined : runIdForSubmission(hostSubmissionId);\n\n const inputId = submissionInputRecordId(submissionId);\n const abortId = submissionAbortRecordId(submissionId);\n const settlementId = submissionSettlementRecordId(submissionId);\n\n const hostSettlementId =\n hostSubmissionId === undefined ? undefined : submissionSettlementRecordId(hostSubmissionId);\n\n let inputRecorded = false;\n let inputSequence: CanonicalSequence | undefined;\n let abortRecorded = false;\n let subagentLineageRecorded = false;\n let recordedSettlementOutcome: SettlementOutcome | undefined;\n let hostSettlementOutcome: SettlementOutcome | undefined;\n let hostRespondedAfterInput = false;\n const prepared: Array<OpenToolCallEvidence> = [];\n const preparedKinds = new Map<RecordId, ToolCallPrepared[\"executionKind\"]>();\n const preparedTurns = new Set<number>();\n const settledIds = new Set<string>();\n const resolvedIds = new Set<string>();\n const requested: Array<PendingApprovalEvidence> = [];\n const decidedIds = new Set<string>();\n\n let lastResponse:\n | {\n readonly turn: number;\n readonly messages: PersistedJson;\n readonly toolExposure?: Snapshot | undefined;\n }\n | undefined;\n\n for (const envelope of records) {\n const recordId = envelope.record.recordId;\n const payload = envelope.record.payload;\n\n if (recordId === inputId) {\n inputRecorded = true;\n inputSequence = envelope.sequence;\n continue;\n }\n if (recordId === abortId) {\n abortRecorded = true;\n continue;\n }\n if (recordId === settlementId && payload._tag === \"SubmissionSettled\") {\n recordedSettlementOutcome = payload.outcome;\n continue;\n }\n if (\n hostSettlementId !== undefined &&\n recordId === hostSettlementId &&\n payload._tag === \"SubmissionSettled\"\n ) {\n hostSettlementOutcome = payload.outcome;\n continue;\n }\n switch (payload._tag) {\n case \"ToolCallPrepared\": {\n if (payload.runId !== runId) break;\n const identity = toolCallPreparedRecordId(runId, payload.turn, payload.toolCallId);\n\n if (preparedKinds.has(identity)) {\n return yield* RunJournalError.make({\n message: \"Duplicate canonical Tool preparation evidence\",\n });\n }\n preparedKinds.set(identity, payload.executionKind);\n prepared.push(\n OpenToolCallEvidence.make({\n toolCallId: payload.toolCallId,\n toolName: payload.toolName,\n turn: payload.turn,\n }),\n );\n preparedTurns.add(payload.turn);\n break;\n }\n case \"ToolCallSettled\": {\n if (payload.runId === runId) settledIds.add(payload.toolCallId);\n break;\n }\n case \"ToolCallResolved\": {\n if (payload.runId === runId) resolvedIds.add(payload.toolCallId);\n break;\n }\n case \"ToolApprovalRequested\": {\n if (payload.runId !== runId) break;\n requested.push(\n PendingApprovalEvidence.make({ toolCallId: payload.toolCallId, turn: payload.turn }),\n );\n break;\n }\n case \"ToolApprovalDecided\": {\n if (payload.runId === runId) decidedIds.add(payload.toolCallId);\n break;\n }\n case \"SubagentLineageRecorded\": {\n // Thread-level fact (one lineage record per child Thread, spec §11):\n // its presence gates the AwaitParentEstablishment row for parent-linked\n // Submissions; root Threads never carry it and never consult it.\n subagentLineageRecorded = true;\n break;\n }\n case \"ModelResponseRecorded\": {\n if (\n payload.runId === runId &&\n (lastResponse === undefined || payload.turn > lastResponse.turn)\n ) {\n lastResponse = {\n turn: payload.turn,\n messages: payload.messages,\n ...(payload.toolExposure === undefined ? {} : { toolExposure: payload.toolExposure }),\n };\n }\n if (\n hostRunId !== undefined &&\n payload.runId === hostRunId &&\n inputSequence !== undefined &&\n envelope.sequence > inputSequence\n ) {\n hostRespondedAfterInput = true;\n }\n break;\n }\n default: {\n break;\n }\n }\n }\n\n const allOpenCalls = prepared.filter(\n (call) => !settledIds.has(call.toolCallId) && !resolvedIds.has(call.toolCallId),\n );\n\n // Only canonical classification authorizes the idempotent establishment protocol.\n // A lifecycle record cannot silently upgrade an ordinary or unclassified preparation.\n const subagent = subagentRecordsOf(records, runId);\n\n const isPreparedDelegation = (call: OpenToolCallEvidence): boolean =>\n preparedKinds.get(toolCallPreparedRecordId(runId, call.turn, call.toolCallId)) ===\n \"delegation\";\n\n const openByCallId = new Map(\n allOpenCalls.filter(isPreparedDelegation).map((call) => [call.toolCallId, call]),\n );\n\n const delegationCallIds: Array<ToolCallId> = [];\n const seenDelegationIds = new Set<ToolCallId>();\n\n const noteDelegation = (toolCallId: ToolCallId): void => {\n if (seenDelegationIds.has(toolCallId)) return;\n seenDelegationIds.add(toolCallId);\n delegationCallIds.push(toolCallId);\n };\n\n for (const toolCallId of subagent.requested.keys()) noteDelegation(toolCallId);\n for (const toolCallId of subagent.started.keys()) noteDelegation(toolCallId);\n for (const toolCallId of subagent.joined.keys()) noteDelegation(toolCallId);\n for (const toolCallId of delegationCallIds) {\n const request = subagent.requested.get(toolCallId);\n\n if (\n request === undefined ||\n preparedKinds.get(toolCallPreparedRecordId(runId, request.turn, toolCallId)) !==\n \"delegation\"\n ) {\n return yield* RunJournalError.make({\n message: \"Subagent evidence conflicts with Tool preparation classification\",\n });\n }\n }\n for (const call of allOpenCalls) {\n if (isPreparedDelegation(call)) noteDelegation(call.toolCallId);\n }\n const openDelegationCalls: Array<OpenDelegationCallEvidence> = [];\n\n for (const toolCallId of delegationCallIds) {\n const open = openByCallId.get(toolCallId);\n const requestedRecord = subagent.requested.get(toolCallId);\n const startedRecord = subagent.started.get(toolCallId);\n // Authoritative admission tri-state for a requested-but-unstarted call (SUB-031): the\n // deterministic idempotency key queries the ledger directly — projection absence is\n // never proof of absence, and only a proven `not-admitted` permits an admission attempt.\n let admission: DelegationAdmissionEvidence | undefined;\n let childSubmissionId = startedRecord?.childSubmissionId;\n\n if (requestedRecord !== undefined && startedRecord === undefined) {\n const resolution = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId: requestedRecord.childThreadId,\n principal: decodePrincipalSync(requestedRecord.childPrincipal),\n idempotencyKey: decodeIdempotencyKeySync(requestedRecord.childIdempotencyKey),\n }),\n );\n\n switch (resolution._tag) {\n case \"NotAdmitted\": {\n admission = \"not-admitted\";\n break;\n }\n case \"Admitted\": {\n admission = \"admitted\";\n childSubmissionId = resolution.submission.submissionId;\n break;\n }\n case \"Indeterminate\": {\n admission = \"indeterminate\";\n break;\n }\n }\n }\n const childThreadId = startedRecord?.childThreadId ?? requestedRecord?.childThreadId;\n\n openDelegationCalls.push(\n OpenDelegationCallEvidence.make({\n toolCallId,\n toolName:\n open?.toolName ??\n subagent.preparedNames.get(toolCallId) ??\n requestedRecord?.delegationId ??\n \"delegate_unknown\",\n turn: open?.turn ?? requestedRecord?.turn ?? 1,\n requested: requestedRecord !== undefined,\n started: startedRecord !== undefined,\n joined: subagent.joined.has(toolCallId),\n ...(childThreadId === undefined ? {} : { childThreadId }),\n ...(childSubmissionId === undefined ? {} : { childSubmissionId }),\n ...(admission === undefined ? {} : { admission }),\n }),\n );\n }\n\n const isPreparedWorker = (call: OpenToolCallEvidence): boolean =>\n preparedKinds.get(toolCallPreparedRecordId(runId, call.turn, call.toolCallId)) ===\n \"orchestration\";\n\n const openWorkerCalls = allOpenCalls.filter(isPreparedWorker);\n\n const openToolCalls = allOpenCalls.filter(\n (call) => !isPreparedDelegation(call) && !isPreparedWorker(call),\n );\n\n let declaredPendingBatch: DeclaredPendingBatchEvidence | undefined;\n\n if (lastResponse !== undefined && !preparedTurns.has(lastResponse.turn)) {\n const declared = yield* declaredApplicationCalls(lastResponse.messages);\n\n if (declared.length > 0 && !declared.some((call) => settledIds.has(call.id))) {\n declaredPendingBatch = DeclaredPendingBatchEvidence.make({\n turn: lastResponse.turn,\n callCount: declared.length,\n });\n }\n }\n const approvalsPending = requested.filter((pending) => !decidedIds.has(pending.toolCallId));\n\n return RecoveryEvidence.make({\n threadMaterialized: materialized,\n inputRecorded,\n abortRecorded,\n subagentLineageRecorded,\n openToolCalls,\n openDelegationCalls,\n openWorkerCalls,\n approvalsPending,\n joinedInputCovered: hostSubmissionId === undefined ? true : hostRespondedAfterInput,\n ...(recordedSettlementOutcome === undefined ? {} : { recordedSettlementOutcome }),\n ...(declaredPendingBatch === undefined ? {} : { declaredPendingBatch }),\n ...(hostSettlementOutcome === undefined ? {} : { hostSettlementOutcome }),\n });\n });\n\n /**\n * The declared-but-unsettled Tool batch of the Run's LAST committed Turn (§2.4). Keyed on\n * SETTLED coverage deliberately: a call closed by a never-started/safe-retry `ToolCallResolved`\n * has authorized re-execution, so it stays in the resumed batch until its own `ToolCallSettled`\n * exists.\n */\n const pendingToolBatchFor = Effect.fn(\"DurableAgentRuntime.pendingToolBatchFor\")(function* (\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n runId: ReturnType<typeof runIdForSubmission>,\n completionTools: ReadonlyArray<string> = [],\n ): Effect.fn.Return<PendingToolBatch | undefined, RunJournalError> {\n let lastResponse:\n | {\n readonly turn: number;\n readonly messages: PersistedJson;\n readonly toolExposure?: Snapshot | undefined;\n }\n | undefined;\n\n const settledByCallId = new Map<\n string,\n {\n readonly result: PersistedJson;\n readonly isFailure: boolean;\n readonly budgetRejected?: true;\n readonly toolSelection?: Selection | undefined;\n }\n >();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ModelResponseRecorded\" && payload.runId === runId) {\n if (lastResponse === undefined || payload.turn > lastResponse.turn) {\n settledByCallId.clear();\n lastResponse = {\n turn: payload.turn,\n messages: payload.messages,\n ...(payload.toolExposure === undefined ? {} : { toolExposure: payload.toolExposure }),\n };\n }\n continue;\n }\n if (payload._tag === \"ToolCallSettled\" && payload.runId === runId) {\n settledByCallId.set(payload.toolCallId, {\n result: payload.result,\n isFailure: payload.isFailure,\n ...(payload.budgetRejected === true ? { budgetRejected: true } : {}),\n ...(payload.toolSelection === undefined ? {} : { toolSelection: payload.toolSelection }),\n });\n }\n }\n if (lastResponse === undefined) return undefined;\n const declared = yield* declaredToolCalls(lastResponse.messages);\n\n if (declared.application.length === 0) return undefined;\n const calls = declared.all;\n\n for (const part of declared.providerResults) {\n const result = yield* decodePersisted(part.result).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({ message: `Invalid canonical provider result ${part.id}`, cause }),\n ),\n );\n\n settledByCallId.set(part.id, { result, isFailure: part.isFailure });\n }\n\n const settled: Array<{\n id: string;\n result: PersistedJson;\n isFailure: boolean;\n budgetRejected?: true;\n toolSelection?: Selection | undefined;\n }> = [];\n\n for (const call of calls) {\n const recorded = settledByCallId.get(call.id);\n\n if (call.providerExecuted === true && recorded === undefined) {\n return yield* RunJournalError.make({\n message: `Pending Turn lacks canonical provider result for ${call.id}`,\n });\n }\n if (recorded !== undefined) {\n settled.push({ id: call.id, ...recorded });\n }\n }\n\n const completionCall = declared.application[0];\n\n const projectSettledCompletion =\n declared.application.length === 1 &&\n completionCall !== undefined &&\n completionTools.includes(completionCall.name) &&\n settledByCallId.get(completionCall.id)?.isFailure === false &&\n !records.some(\n ({ record }) => record.payload._tag === \"RunCompleted\" && record.payload.runId === runId,\n );\n\n if (settled.length >= calls.length && !projectSettledCompletion) return undefined;\n\n return {\n turn: lastResponse.turn,\n turnId: turnIdForRun(runId, lastResponse.turn),\n calls,\n settled,\n declaredIds: new Set(calls.map((call) => call.id)),\n responseRecordId: modelResponseRecordId(runId, lastResponse.turn),\n messages: lastResponse.messages,\n ...(lastResponse.toolExposure === undefined\n ? {}\n : { toolExposure: lastResponse.toolExposure }),\n };\n });\n\n /**\n * Records without the pending Turn's response and its partial results: the resumed Attempt's\n * canonical prompt boundary sits BEFORE the pending Turn, whose messages re-enter official\n * history through the engine's batch-resume continuation.\n */\n const withoutPendingBatch = (\n records: Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>,\n pending: PendingToolBatch,\n runId: ReturnType<typeof runIdForSubmission>,\n ): Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized> =>\n records.pipe(\n Stream.filter((envelope) => {\n if (envelope.record.recordId === pending.responseRecordId) return false;\n const payload = envelope.record.payload;\n\n return !(\n payload._tag === \"ToolCallSettled\" &&\n payload.runId === runId &&\n pending.declaredIds.has(payload.toolCallId)\n );\n }),\n );\n\n /** Materialize without regressing a fence someone else already advanced. */\n const materializeAtLeast = (\n threadId: ThreadId,\n producerEpoch: ProducerEpoch,\n ): Effect.Effect<void, ThreadStoreError> =>\n store\n .materialize(ThreadMaterialization.make({ threadId, producerEpoch }))\n .pipe(Effect.catchTag(\"FenceRejected\", () => Effect.void));\n\n /**\n * Coordinator invariant: every Thread's first canonical record is `ThreadCreated`,\n * so `tailSequence >= 1` is the deterministic already-created check. A lost race (conflict or\n * fence) is verified against that invariant instead of being trusted blindly. An admitted\n * child can be claimed before it is runnable; that advances the shared storage fence without\n * appending anything. Re-read and retry that initialization race with the current fence.\n */\n const ensureThreadCreated = Effect.fn(\"DurableAgentRuntime.ensureThreadCreated\")(\n function* (\n threadId: ThreadId,\n agentId: AgentId,\n definitions: DefinitionDigests,\n ): Effect.fn.Return<\n void,\n ThreadStoreError | ThreadNotMaterialized | AppendConflict | FenceRejected\n > {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n if (tail.tailSequence > 0) return;\n\n const record = yield* makeEnvelope(\n threadCreatedRecordId(threadId),\n ThreadCreated.make({ agentId, definitions }),\n );\n\n yield* store\n .append(\n FencedAppendRequest.make({\n threadId,\n batch: CanonicalBatch.make({\n batchId: threadCreatedBatchId(threadId),\n producerId: config.producerId,\n records: [record],\n }),\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch: tail.producerEpoch,\n }),\n )\n .pipe(\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], (error) =>\n store\n .inspectTail(ThreadTailRequest.make({ threadId }))\n .pipe(\n Effect.flatMap((current) =>\n current.tailSequence > 0 ? Effect.void : Effect.fail(error),\n ),\n ),\n ),\n Effect.andThen(wake.notify(threadId)),\n Effect.asVoid,\n );\n },\n (effect) =>\n effect.pipe(\n Effect.retry({\n times: 7,\n while: (error) => error._tag === \"AppendConflict\" || error._tag === \"FenceRejected\",\n }),\n ),\n );\n\n const attemptContextFor = Effect.fn(\"DurableAgentRuntime.attemptContextFor\")(function* (\n threadId: ThreadId,\n producerEpoch: ProducerEpoch,\n ): Effect.fn.Return<AttemptAppendContext, ThreadStoreError | ThreadNotMaterialized> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n const tailRef = yield* Ref.make({ sequence: tail.tailSequence, digest: tail.tailDigest });\n const gate = yield* Semaphore.make(1);\n\n return { threadId, producerEpoch, tailRef, gate };\n });\n\n /**\n * Append context at the Thread's CURRENT fence, without a claim. Used only where no live\n * owner can exist (an `unknown` head is never claimable, WP2 claim rule): record-identity\n * dedupe absorbs a racing recovery process, and a fence advance defers to the advancing owner.\n */\n const attemptContextAtTail = Effect.fn(\"DurableAgentRuntime.attemptContextAtTail\")(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<AttemptAppendContext, ThreadStoreError | ThreadNotMaterialized> {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n const tailRef = yield* Ref.make({ sequence: tail.tailSequence, digest: tail.tailDigest });\n const gate = yield* Semaphore.make(1);\n\n return { threadId, producerEpoch: tail.producerEpoch, tailRef, gate };\n });\n\n const appendBatch = (ctx: AttemptAppendContext, batch: CanonicalBatch) =>\n ctx.gate.withPermits(1)(\n Effect.gen(function* () {\n // Bounded fence refresh on a stale-tail conflict: `AppendConflict(reason: \"tail\")`\n // means this batch was NOT appended — another legitimate same-epoch writer advanced\n // the log after this context read its tail (a parent's establishment repair appending\n // the deterministic lineage/start records to a child Thread while the child's\n // own Attempt runs — routine when the child lives in its own Durable Object). The\n // retry re-reads the ACTUAL tail the conflict carries and re-appends under the SAME\n // epoch: a superseded epoch still fails `FenceRejected` (DUR-006 untouched) and the\n // batch/record identity dedupe absorbs true replays. Treating a stale-tail conflict\n // as \"already appended\" at the tolerant call sites would let a settlement finalize\n // WITHOUT its canonical record.\n for (let refresh = 0; ; refresh++) {\n const tail = yield* Ref.get(ctx.tailRef);\n\n const result = yield* store\n .append(\n FencedAppendRequest.make({\n threadId: ctx.threadId,\n batch,\n expectedTailSequence: tail.sequence,\n expectedTailDigest: tail.digest,\n producerEpoch: ctx.producerEpoch,\n }),\n )\n .pipe(\n Effect.catchTag(\"AppendConflict\", (conflict) =>\n conflict.reason === \"tail\" &&\n conflict.actualTailSequence !== undefined &&\n conflict.actualTailDigest !== undefined &&\n refresh < MAX_APPEND_FENCE_REFRESHES\n ? Effect.as(\n Ref.set(ctx.tailRef, {\n sequence: conflict.actualTailSequence,\n digest: conflict.actualTailDigest,\n }),\n undefined,\n )\n : Effect.fail(conflict),\n ),\n );\n\n if (result !== undefined) {\n yield* Ref.set(ctx.tailRef, {\n sequence: result.lastSequence,\n digest: result.tailDigest,\n });\n // Canonical storage is already committed. This hint may be lost or duplicated, but\n // it lets scoped progress waiters re-read promptly without making memory authoritative.\n yield* wake.notify(ctx.threadId);\n\n return result;\n }\n }\n }),\n );\n\n /** Append the canonical `AbortRequested` record; an identity conflict means it already exists. */\n const appendAbortRecord = Effect.fn(\"DurableAgentRuntime.appendAbortRecord\")(function* (\n ctx: AttemptAppendContext,\n intent: AbortIntent,\n ) {\n const envelope = yield* makeEnvelope(\n submissionAbortRecordId(intent.submissionId),\n AbortRequested.make({\n submissionId: intent.submissionId,\n author: intent.author,\n reason: intent.reason,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionAbortBatchId(intent.submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n });\n\n /**\n * Append the canonical `ToolCallUnknown` audit records for the given open calls, grouped into\n * one batch per Turn (batch `mark-unknown:{sid}:{turn}`). Canonical-only: the operational\n * ledger marking is a separate step so abort settlement can record the uncertainty WITHOUT\n * blocking the lane (durability §13: abort never asserts external rollback).\n */\n const appendUnknownRecords = Effect.fn(\"DurableAgentRuntime.appendUnknownRecords\")(function* (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n knownIds: Set<string>,\n calls: ReadonlyArray<OpenToolCallEvidence>,\n reason: string,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const runId = runIdForSubmission(submissionId);\n const byTurn = new Map<number, Array<OpenToolCallEvidence>>();\n\n for (const call of calls) {\n const group = byTurn.get(call.turn);\n\n if (group === undefined) byTurn.set(call.turn, [call]);\n else group.push(call);\n }\n for (const [turn, group] of byTurn) {\n const missing = group.filter(\n (call) => !knownIds.has(toolCallUnknownRecordId(runId, turn, call.toolCallId)),\n );\n\n const first = missing[0];\n\n if (first === undefined) continue;\n const envelopes: Array<RecordEnvelope> = [];\n\n for (const call of missing) {\n envelopes.push(\n yield* makeEnvelope(\n toolCallUnknownRecordId(runId, turn, call.toolCallId),\n ToolCallUnknown.make({\n runId,\n turn: call.turn,\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n reason,\n }),\n ),\n );\n }\n const head = envelopes[0];\n\n if (head === undefined) continue;\n // An identity conflict means another pass already recorded the same uncertainty.\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: markUnknownBatchId(submissionId, turn),\n producerId: config.producerId,\n records: [head, ...envelopes.slice(1)],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n for (const call of missing) {\n knownIds.add(toolCallUnknownRecordId(runId, turn, call.toolCallId));\n }\n }\n });\n\n /**\n * Close one open Tool Call canonically: the recovered result (when one exists) settles under\n * the per-call late-settle batch (`turn-results:{runId}:{turn}:{toolCallId}`), then the\n * `ToolCallResolved` audit records who authorized the closure and how (DUR-017). Record\n * identity dedupes double-settles across the batch path and this path; an `AppendConflict`\n * means an identical closure (modulo timestamp) already committed.\n */\n const appendClosedCall = Effect.fn(\"DurableAgentRuntime.appendClosedCall\")(function* (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n knownIds: Set<string>,\n call: OpenToolCallEvidence,\n closure: {\n readonly result?: { readonly value: PersistedJson; readonly isFailure: boolean } | undefined;\n readonly resolution: ToolCallResolution;\n readonly author: string;\n readonly reason: string;\n },\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const runId = runIdForSubmission(submissionId);\n\n const swallowIdentityConflict = (effect: ReturnType<typeof appendBatch>) =>\n effect.pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n\n if (closure.result !== undefined) {\n const settledId = toolCallSettledRecordId(runId, call.turn, call.toolCallId);\n\n if (!knownIds.has(settledId)) {\n const envelope = yield* makeEnvelope(\n settledId,\n ToolCallSettled.make({\n runId,\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n result: closure.result.value,\n isFailure: closure.result.isFailure,\n }),\n );\n\n yield* swallowIdentityConflict(\n appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: toolCallResultBatchId(runId, call.turn, call.toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ),\n );\n knownIds.add(settledId);\n }\n }\n const resolvedId = toolCallResolvedRecordId(runId, call.turn, call.toolCallId);\n\n if (!knownIds.has(resolvedId)) {\n const envelope = yield* makeEnvelope(\n resolvedId,\n ToolCallResolved.make({\n runId,\n toolCallId: call.toolCallId,\n resolution: closure.resolution,\n author: closure.author,\n reason: closure.reason,\n }),\n );\n\n yield* swallowIdentityConflict(\n appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: toolCallResolutionBatchId(submissionId, call.toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ),\n );\n knownIds.add(resolvedId);\n }\n });\n\n /**\n * Reconcile-then-mark (durability §10, DUR-009) over one Submission's open ordinary Tool Calls.\n *\n * Per open call, in order of authority: a durable DUR-017 resolution intent is applied\n * canonically (recovered results settle without execution; never-happened/safe-retry authorize\n * re-execution through the batch resume); a declared `idempotent` execution class is the\n * external idempotency contract and needs no proof; otherwise the registered `ToolReconciler`\n * is consulted — `NeverStarted`/`SafeToRetry` are point-in-time proofs (nothing is recorded;\n * every later pass re-proves them), `CompletedWithResult` becomes canonical supplier truth,\n * `Uncertain` collects for Unknown marking, and a reconciler FAILURE is no proof at all (the\n * call stays open and blocked without being marked). Nothing here ever executes a handler.\n */\n const reconcileOpenCalls = Effect.fn(\"DurableAgentRuntime.reconcileOpenCalls\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n snapshot: RecoverySnapshot,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n openCalls: ReadonlyArray<OpenToolCallEvidence>,\n knownIds: Set<string>,\n executionClassFor: (toolName: string) => ToolExecutionClassValue | undefined,\n ): Effect.fn.Return<OpenCallReview, DurableWorkerFailure> {\n const submissionId = submission.submissionId;\n const runId = runIdForSubmission(submissionId);\n const preparedByCallId = new Map<string, ToolCallPrepared>();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ToolCallPrepared\" && payload.runId === runId) {\n preparedByCallId.set(payload.toolCallId, payload);\n }\n }\n const intents = new Map<string, UnknownResolutionIntent>();\n\n for (const intent of snapshot.unknownResolutions) {\n intents.set(intent.toolCallId, intent);\n }\n const review: OpenCallReview = { uncertain: [], unproven: [], retryable: [], recovered: 0 };\n let recovered = 0;\n\n for (const call of openCalls) {\n const intent = intents.get(call.toolCallId);\n\n if (intent !== undefined) {\n switch (intent.resolution._tag) {\n case \"AbortSubmission\": {\n // The paired abort intent settles the Submission; the SettleAborted executor\n // records the `ToolCallUnknown` audit — nothing resolves here (durability §13).\n continue;\n }\n case \"CompletedWithResult\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n result: {\n value: intent.resolution.result,\n isFailure: intent.resolution.isFailure,\n },\n resolution: intent.resolution.isFailure\n ? \"failed-with-error\"\n : \"completed-with-result\",\n author: intent.author,\n reason: intent.reason,\n });\n recovered += 1;\n continue;\n }\n case \"NeverHappened\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n resolution: \"never-started\",\n author: intent.author,\n reason: intent.reason,\n });\n review.retryable.push(call);\n continue;\n }\n case \"SafeToRetry\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n resolution: \"safe-retry\",\n author: intent.author,\n reason: intent.reason,\n });\n review.retryable.push(call);\n continue;\n }\n }\n }\n if (executionClassFor(call.toolName) === \"idempotent\") {\n // The annotation IS the declared external idempotency contract (ADR-0004): recovery may\n // re-execute without reconciliation proof; duplicate external effects stay observable.\n review.retryable.push(call);\n continue;\n }\n const prepared = preparedByCallId.get(call.toolCallId);\n\n if (prepared === undefined) {\n // Open evidence without its prepared record is unreadable state: stay blocked,\n // never guess (fail-closed).\n review.unproven.push(call);\n continue;\n }\n\n const reconciled = yield* reconciler\n .reconcile(\n PreparedToolCallEvidence.make({\n threadId: submission.threadId,\n submissionId,\n runId,\n turn: prepared.turn,\n toolCallId: prepared.toolCallId,\n toolName: prepared.toolName,\n parameters: prepared.parameters,\n parametersDigest: prepared.parametersDigest,\n }),\n )\n .pipe(\n Effect.map(Option.some),\n Effect.catchTag(\"ToolReconcilerError\", () => Effect.succeed(Option.none())),\n );\n\n if (Option.isNone(reconciled)) {\n review.unproven.push(call);\n continue;\n }\n const decision = reconciled.value;\n\n switch (decision._tag) {\n case \"CompletedWithResult\": {\n yield* appendClosedCall(ctx, submissionId, knownIds, call, {\n result: { value: decision.result, isFailure: decision.isFailure },\n resolution: decision.isFailure ? \"failed-with-error\" : \"completed-with-result\",\n author: RECONCILER_AUTHOR,\n reason: \"A registered reconciliation policy recovered the external outcome\",\n });\n recovered += 1;\n continue;\n }\n case \"NeverStarted\":\n case \"SafeToRetry\": {\n review.retryable.push(call);\n continue;\n }\n case \"Uncertain\": {\n review.uncertain.push(call);\n continue;\n }\n }\n }\n\n return { ...review, recovered };\n });\n\n /**\n * Record the Unknown Outcomes durably: canonical `ToolCallUnknown` audit records FIRST\n * (history is the recovery truth, DUR-015), then the ownership-free ledger marking that blocks\n * the lane until the authorized DUR-017 resolution path covers every marked call.\n */\n const markCallsUnknown = Effect.fn(\"DurableAgentRuntime.markCallsUnknown\")(function* (\n ctx: AttemptAppendContext,\n submissionId: SubmissionId,\n knownIds: Set<string>,\n calls: ReadonlyArray<OpenToolCallEvidence>,\n reason: string,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const first = calls[0];\n\n if (first === undefined) return;\n yield* appendUnknownRecords(ctx, submissionId, knownIds, calls, reason);\n yield* ledger.markUnknown(\n MarkUnknownRequest.make({\n submissionId,\n toolCallIds: [first.toolCallId, ...calls.slice(1).map((call) => call.toolCallId)],\n reason,\n }),\n );\n });\n\n /**\n * Plan step 2: append the deterministic `UserInputRecorded` record (batch idempotency makes it\n * exactly-once canonical, DUR-007) and mark it applied. When canonical history already carries\n * the record — an earlier Attempt crashed after its append — only the ledger marker is repaired\n * (DUR-015/DUR-016).\n */\n const applyCanonicalInput = Effect.fn(\"DurableAgentRuntime.applyCanonicalInput\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n inputApplied: RecoverySnapshot[\"inputApplied\"],\n ) {\n const submissionId = submission.submissionId;\n const recordId = submissionInputRecordId(submissionId);\n const existing = records.find((envelope) => envelope.record.recordId === recordId);\n\n if (existing !== undefined) {\n if (inputApplied === undefined) {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n submissionId,\n ownershipToken,\n recordId,\n sequence: existing.sequence,\n }),\n );\n }\n\n return;\n }\n\n const envelope = yield* makeEnvelope(\n recordId,\n UserInputRecorded.make({\n submissionId,\n kind: \"user\",\n runId: runIdForSubmission(submissionId),\n input: submission.inputPayload,\n ...(submission.messageAdmission === undefined\n ? {}\n : { messageAdmission: submission.messageAdmission }),\n }),\n );\n\n const result = yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionInputBatchId(submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n\n yield* hit(\"input:after-canonical-append\");\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger.markInputApplied(\n MarkInputAppliedRequest.make({\n submissionId,\n ownershipToken,\n recordId,\n sequence: result.firstSequence,\n }),\n );\n });\n\n const canonicalRunStartFromRecords = Effect.fn(\n \"DurableAgentRuntime.canonicalRunStartFromRecords\",\n )(function* (records: ReadonlyArray<CanonicalRecordEnvelope>, runId: RunId) {\n const recordId = runStartedRecordId(runId);\n\n const starts = records.filter(\n ({ record }) => record.payload._tag === \"RunStarted\" && record.payload.runId === runId,\n );\n\n const existing = records.find(({ record }) => record.recordId === recordId);\n\n if (\n starts.length > 1 ||\n (starts.length === 1 && starts[0]?.record.recordId !== recordId) ||\n (existing !== undefined &&\n (existing.record.payload._tag !== \"RunStarted\" || existing.record.payload.runId !== runId))\n ) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has conflicting start evidence`,\n });\n }\n\n return existing?.record;\n });\n\n const ensureRunStarted = Effect.fn(\"DurableAgentRuntime.ensureRunStarted\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n maxDurationMillis: number,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n ) {\n const runId = runIdForSubmission(submission.submissionId);\n const recordId = runStartedRecordId(runId);\n const existing = yield* canonicalRunStartFromRecords(records, runId);\n let start: RecordEnvelope;\n\n if (existing !== undefined && existing.payload._tag === \"RunStarted\") {\n if (existing.payload.maxDurationMillis !== maxDurationMillis) {\n return yield* RunJournalError.make({\n message: `Run ${runId} started with a ${existing.payload.maxDurationMillis}ms duration allowance; the replacement Binding supplies ${maxDurationMillis}ms`,\n });\n }\n start = existing;\n } else {\n const executionStarted = records.some(\n ({ record: { payload } }) =>\n payload._tag !== \"UserInputRecorded\" && \"runId\" in payload && payload.runId === runId,\n );\n\n if (executionStarted) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has execution records but no canonical start; reset incompatible private-development data`,\n });\n }\n start = yield* makeEnvelope(\n recordId,\n RunStartedRecord.make({ runId, maxDurationMillis, policyAccountingVersion: 1 }),\n );\n yield* hit(\"run:before-start-append\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: runStartedBatchId(runId),\n producerId: config.producerId,\n records: [start],\n }),\n );\n yield* hit(\"run:after-start-append\");\n }\n\n return {\n startedAt: start.createdAt,\n deadline: DateTime.addDuration(start.createdAt, Duration.millis(maxDurationMillis)),\n };\n });\n\n /**\n * Settle ONE joined Submission with its host Run's outcome (plan §2.5, DUR-002: every accepted\n * Submission is owed its own settlement). The same recoverable reserve → append → finalize\n * sequence as `terminalize`, with two joined-specific rules: the canonical record's `runId` is\n * the HOST Run (the joined input was consumed there), and the reservation is authorized by the\n * recorded host linkage instead of lane ownership — a `joined` lane is never worker-claimable,\n * so no ownership token can exist for it. Each step is idempotent; recovery completes any\n * prefix (`AppendReservedSettlement` / `FinalizeLedgerFromHistory` / `SettleJoinedWithHost`).\n */\n /**\n * Cross-lane drive-forward after one child Submission settles (spec §12 step 10): the child's\n * canonical Settlement is already durable, so the idempotent `recordChildSettled` wake is the\n * durable notification — `suspended(WaitingForChild) → input-applied` once every listed child\n * settled — and the parent-lane wake hint is liveness only. Invoked after the exact canonical\n * append but BEFORE child ledger finalization: once a child may become terminal, its parent's\n * durable marker and maintenance generation already exist. Finalization replays the same\n * notification for single-store parent re-suspension races; `ResumeWaitingParent` remains the\n * repair for older data and any already-recorded canonical settlement.\n */\n const notifyParentOfChildSettlement = Effect.fn(\n \"DurableAgentRuntime.notifyParentOfChildSettlement\",\n )(function* (submission: SubmissionSnapshot): Effect.fn.Return<void, LedgerError> {\n if (submission.workerAdmission?.origin.reporting?.mode === \"standard\")\n yield* updateRuntime.repair(submission.threadId).pipe(\n Effect.mapError(() =>\n LedgerError.make({\n operation: \"update-delivery\",\n message: \"Update delivery remains pending\",\n }),\n ),\n );\n yield* workerRuntime\n .completeInput(submission)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-completion\", message: cause.reason }),\n ),\n );\n const linkage = submission.parentLinkage;\n\n if (linkage === undefined) return;\n yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: linkage.parentSubmissionId,\n childSubmissionId: submission.submissionId,\n }),\n );\n\n const parent = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: linkage.parentSubmissionId }),\n );\n\n if (Option.isSome(parent)) {\n yield* wake.notify(parent.value.threadId);\n }\n });\n\n const settleOneJoined = Effect.fn(\"DurableAgentRuntime.settleOneJoined\")(function* (\n ctx: AttemptAppendContext,\n hostSettlement: SubmissionSettledRecord,\n joined: RecoverySnapshot,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n const hostSubmissionId = hostSettlement.submissionId;\n const outcome = hostSettlement.outcome;\n const submission = joined.submission;\n const submissionId = submission.submissionId;\n const settlementId = submissionSettlementId(submissionId);\n let record: RecordEnvelope;\n\n if (joined.reservation !== undefined) {\n // A prior pass already reserved the exact outcome: re-append the STORED record so the\n // batch replay is byte-identical (DUR-011).\n record = joined.reservation.record;\n } else {\n const payload = yield* Schema.decodeEffect(SubmissionSettledRecord)(\n SubmissionSettled.make({\n submissionId,\n settlementId,\n receiptId: submission.receiptId,\n outcome,\n runId: runIdForSubmission(hostSubmissionId),\n ...(hostSettlement.outcome === \"failed\" ? { result: hostSettlement.result } : {}),\n }),\n ).pipe(Effect.orDie);\n\n const envelope = yield* makeEnvelope(submissionSettlementRecordId(submissionId), payload);\n // The envelope was constructed from validated parts, so an encode failure is a defect.\n const encoded = yield* Schema.encodeEffect(RecordEnvelope)(envelope).pipe(Effect.orDie);\n const recordDigest = yield* withCrypto(digestJson(encoded));\n\n const reserved = yield* ledger\n .reserveSettlement(\n SettlementReservation.make({\n submissionId,\n ownershipToken: JOINED_SETTLEMENT_TOKEN,\n settlementId,\n outcome,\n record: envelope,\n recordDigest,\n }),\n )\n .pipe(\n // A racing pass reserved first (its envelope differs only by `createdAt`): the\n // stored reservation with the same host-derived outcome is the exact record owed.\n Effect.catchTag(\"SettlementConflict\", (conflict) =>\n Effect.gen(function* () {\n const current = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n const reservation = current.reservation;\n\n if (reservation === undefined || reservation.outcome !== outcome) {\n return yield* conflict;\n }\n\n return reservation;\n }),\n ),\n );\n\n record = reserved.record;\n yield* hit(\"terminalize:after-reserve\");\n }\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionSettlementBatchId(submissionId),\n producerId: config.producerId,\n records: [record],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"terminalize:after-canonical-append\");\n yield* notifyParentOfChildSettlement(submission);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({ submissionId, settlementId }),\n );\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission);\n\n return settlement;\n });\n\n /**\n * Terminalize joined-settlement loop (plan §2.5): after the host's own reserve → append →\n * finalize, every Submission joined to the host settles with the host outcome. `terminalizing`\n * rows are a prior pass's crashed joined settlement (reservation committed, finalize lost) and\n * complete here too; `joining` rows were never consumed and are recovery's to revert, and\n * settled rows are done. A crash anywhere in the loop leaves a classifiable prefix\n * (`SettleJoinedWithHost` / `AppendReservedSettlement` finish the rest).\n */\n const settleJoinedSubmissions = Effect.fn(\"DurableAgentRuntime.settleJoinedSubmissions\")(\n function* (\n ctx: AttemptAppendContext,\n hostSettlement: SubmissionSettledRecord,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const hostSubmissionId = hostSettlement.submissionId;\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: hostSubmissionId }),\n );\n\n for (const join of snapshot.joins) {\n if (join.state !== \"joined\" && join.state !== \"terminalizing\") continue;\n\n const joinedSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: join.submissionId }),\n );\n\n if (joinedSnapshot.submission.state === \"settled\") continue;\n yield* settleOneJoined(ctx, hostSettlement, joinedSnapshot);\n }\n },\n );\n\n /**\n * Terminalization (durability §12, DUR-011): reserve the single exact settlement record, append\n * that exact record canonically, finalize the ledger, release the lane, and hint waiters.\n * Submissions joined to this host Run settle with the host outcome immediately after\n * (plan §2.5); recovery completes any prefix of that loop.\n */\n const terminalize = Effect.fn(\"DurableAgentRuntime.terminalize\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n outcome: AttemptOutcome,\n includeRunId: boolean,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n const submissionId = submission.submissionId;\n const settlementId = submissionSettlementId(submissionId);\n\n const payload = yield* Schema.decodeEffect(SubmissionSettledRecord)(\n SubmissionSettled.make({\n submissionId,\n settlementId,\n receiptId: submission.receiptId,\n outcome: outcome._tag,\n ...(includeRunId ? { runId: runIdForSubmission(submissionId) } : {}),\n ...(outcome._tag === \"aborted\" ? {} : { result: outcome.result }),\n ...(includeRunId &&\n outcome._tag === \"completed\" &&\n outcome.finishReason === undefined &&\n outcome.runDisposition !== undefined\n ? { runDisposition: outcome.runDisposition }\n : {}),\n ...(outcome._tag === \"completed\" && outcome.finishReason !== undefined\n ? { finishReason: outcome.finishReason }\n : {}),\n ...(outcome._tag === \"completed\" && outcome.exhausted !== undefined\n ? { exhausted: outcome.exhausted }\n : {}),\n ...(outcome._tag === \"failed\" && outcome.policyLimit !== undefined\n ? { policyLimit: outcome.policyLimit }\n : {}),\n ...(outcome.usageSummary === undefined ? {} : { usageSummary: outcome.usageSummary }),\n ...(includeRunId &&\n outcome.uncommittedModelUsage !== undefined &&\n outcome.uncommittedModelUsage.length > 0\n ? { uncommittedModelUsage: outcome.uncommittedModelUsage }\n : {}),\n }),\n ).pipe(Effect.orDie);\n\n const record = yield* makeEnvelope(submissionSettlementRecordId(submissionId), payload);\n // The envelope was constructed from validated parts, so an encode failure is a defect.\n const encoded = yield* Schema.encodeEffect(RecordEnvelope)(record).pipe(Effect.orDie);\n const recordDigest = yield* withCrypto(digestJson(encoded));\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const reserved = yield* ledger.reserveSettlement(\n SettlementReservation.make({\n submissionId,\n ownershipToken,\n settlementId,\n outcome: outcome._tag,\n record,\n recordDigest,\n }),\n );\n\n yield* hit(\"terminalize:after-reserve\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionSettlementBatchId(submissionId),\n producerId: config.producerId,\n records: [reserved.record],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"terminalize:after-canonical-append\");\n yield* notifyParentOfChildSettlement(submission);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({ submissionId, settlementId }),\n );\n\n const canonicalSettlement = yield* settlementPayloadFromRecord(reserved.record, submissionId);\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission);\n yield* settleJoinedSubmissions(ctx, canonicalSettlement);\n\n return materializeSettlement(settlement, reserved.record);\n });\n\n /** Complete a previously reserved settlement: append the EXACT reserved record, then finalize. */\n const completeReservation = Effect.fn(\"DurableAgentRuntime.completeReservation\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n reservation: NonNullable<RecoverySnapshot[\"reservation\"]>,\n alreadyRecorded: boolean,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n if (!alreadyRecorded) {\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionSettlementBatchId(submission.submissionId),\n producerId: config.producerId,\n records: [reservation.record],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"terminalize:after-canonical-append\");\n }\n yield* notifyParentOfChildSettlement(submission);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: submission.submissionId,\n settlementId: reservation.settlementId,\n }),\n );\n\n const canonicalSettlement = yield* settlementPayloadFromRecord(\n reservation.record,\n submission.submissionId,\n );\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission);\n yield* settleJoinedSubmissions(ctx, canonicalSettlement);\n\n return materializeSettlement(settlement, reservation.record);\n });\n\n /** Canonical settlement exists: rebuild the ledger from history, never the reverse (DUR-015). */\n const finalizeFromHistory = Effect.fn(\"DurableAgentRuntime.finalizeFromHistory\")(function* (\n submission: SubmissionSnapshot,\n record: RecordEnvelope,\n ): Effect.fn.Return<Settlement, LedgerError | SettlementConflict> {\n const canonicalSettlement = yield* settlementPayloadFromRecord(record, submission.submissionId);\n\n yield* notifyParentOfChildSettlement(submission);\n\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: submission.submissionId,\n settlementId: canonicalSettlement.settlementId,\n }),\n );\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n yield* wake.notify(submission.threadId);\n yield* notifyParentOfChildSettlement(submission);\n\n return materializeSettlement(settlement, snapshot.reservation?.record);\n });\n\n /**\n * Durable abort of owned work: canonical `AbortRequested` first, then `ToolCallUnknown` audit\n * records for every open ordinary Tool Call (abort settles the obligation but never asserts\n * external rollback, durability §13), then settle aborted.\n */\n const settleAborted = Effect.fn(\"DurableAgentRuntime.settleAborted\")(function* (\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n intent: AbortIntent,\n evidence: RecoveryEvidence,\n knownIds: Set<string>,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n if (!evidence.abortRecorded) {\n yield* appendAbortRecord(ctx, intent);\n }\n if (evidence.openToolCalls.length > 0) {\n yield* appendUnknownRecords(\n ctx,\n submission.submissionId,\n knownIds,\n evidence.openToolCalls,\n \"The Submission was aborted while this ordinary Tool call had no canonical outcome; abort never asserts external rollback\",\n );\n }\n\n return yield* terminalize(\n ctx,\n submission,\n tokenRef,\n { _tag: \"aborted\" },\n evidence.inputRecorded,\n );\n });\n\n /** Map a ledger conflict outside `DurableWorkerFailure` into the coordinator failure family. */\n const conflictToLedgerError =\n (operation: string) =>\n (conflict: { readonly _tag: string; readonly message?: string }): LedgerError =>\n LedgerError.make({\n operation,\n message: `${conflict._tag}${conflict.message === undefined ? \"\" : `: ${conflict.message}`}`,\n cause: conflict,\n });\n\n /**\n * Append the child Thread's immutable lineage record (spec §12 step 6, §11): its own\n * single-record batch under `subagent-lineage:{childThreadId}` so the generic\n * `thread-created:{cid}` batch identity is never contradicted. Idempotent by record\n * identity; a racing append is re-proved from the log. A claim of the admitted child may\n * advance only its fence, so bounded retries acquire the current tail before appending.\n */\n const ensureChildLineage = Effect.fn(\"DurableAgentRuntime.ensureChildLineage\")(\n function* (\n parent: SubmissionSnapshot,\n request: SubagentRequested,\n childRecords: ReadonlyArray<CanonicalRecordEnvelope>,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const recordId = subagentLineageRecordId(request.childThreadId);\n\n if (childRecords.some((envelope) => envelope.record.recordId === recordId)) return;\n\n const envelope = yield* makeEnvelope(\n recordId,\n SubagentLineageRecorded.make({\n parentLink: SubagentParentLink.make({\n delegationId: request.delegationId,\n parentAgentId: parent.agentId,\n parentThreadId: parent.threadId,\n parentRunId: request.runId,\n parentToolCallId: request.toolCallId,\n depth: request.depth ?? CHILD_DELEGATION_DEPTH,\n }),\n parentSubmissionId: parent.submissionId,\n childDefinitionDigests: request.targetDigests,\n childInputDigest: request.childInputDigest,\n grantDigest: request.grantDigest,\n ...(request.toolCallAllowance === undefined\n ? {}\n : { toolCallAllowance: request.toolCallAllowance }),\n ...(request.policy === undefined ? {} : { policy: request.policy }),\n ...(request.budget === undefined ? {} : { budget: request.budget }),\n ...(request.grant === undefined ? {} : { grant: request.grant }),\n }),\n );\n\n const tail = yield* store.inspectTail(\n ThreadTailRequest.make({ threadId: request.childThreadId }),\n );\n\n yield* store\n .append(\n FencedAppendRequest.make({\n threadId: request.childThreadId,\n batch: CanonicalBatch.make({\n batchId: subagentLineageBatchId(request.childThreadId),\n producerId: config.producerId,\n records: [envelope],\n }),\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch: tail.producerEpoch,\n }),\n )\n .pipe(\n Effect.catchTag([\"AppendConflict\", \"FenceRejected\"], (error) =>\n // A racing establishment pass (or the child's own claimed worker) advanced the\n // log; the deterministic identity means the record either exists or the next\n // pass re-proves it — verify instead of trusting the race blindly.\n readControl(request.childThreadId, []).pipe(\n Effect.flatMap((current) =>\n current.some((candidate) => candidate.record.recordId === recordId)\n ? Effect.void\n : Effect.fail(error),\n ),\n ),\n ),\n Effect.andThen(wake.notify(request.childThreadId)),\n Effect.asVoid,\n );\n },\n (effect) =>\n effect.pipe(\n Effect.retry({\n times: 7,\n while: (error) => error._tag === \"AppendConflict\" || error._tag === \"FenceRejected\",\n }),\n ),\n );\n\n /** Where one idempotent child admission pass ended (spec §12 steps 4-8). */\n type ChildAdmissionOutcome =\n | {\n readonly _tag: \"established\";\n readonly childSubmissionId: SubmissionId;\n readonly receiptId: ReceiptId;\n }\n | { readonly _tag: \"indeterminate\"; readonly reason: string };\n\n /**\n * Complete (or replay) the child-admission half of establishment from the canonical\n * `SubagentRequested` payload alone — no live delegation handler is required (D3): the\n * `resolveAdmission` tri-state gate (SUB-031), the idempotency-keyed `admit` with immutable\n * parent linkage, child Thread materialization plus the immutable lineage record, and\n * readiness. Every step is get-or-create; a replay converges on the one existing child\n * (SUB-016) and an `indeterminate` answer NEVER admits a second child.\n */\n const establishChildFromRequest = Effect.fn(\"DurableAgentRuntime.establishChildFromRequest\")(\n function* (\n parent: SubmissionSnapshot,\n request: SubagentRequested,\n allowAdmission = true,\n ): Effect.fn.Return<ChildAdmissionOutcome, DurableWorkerFailure> {\n const principal = decodePrincipalSync(request.childPrincipal);\n const idempotencyKey = decodeIdempotencyKeySync(request.childIdempotencyKey);\n\n const resolution = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId: request.childThreadId,\n principal,\n idempotencyKey,\n }),\n );\n\n let childSubmissionId: SubmissionId;\n let receiptId: ReceiptId;\n\n switch (resolution._tag) {\n case \"Indeterminate\": {\n return { _tag: \"indeterminate\", reason: resolution.reason };\n }\n case \"NotAdmitted\": {\n if (!allowAdmission) {\n return {\n _tag: \"indeterminate\",\n reason: \"The expired parent cannot admit a new child\",\n };\n }\n\n const admitted: AdmissionResult = yield* ledger\n .admit(\n AdmissionRequest.make({\n threadId: request.childThreadId,\n principal,\n idempotencyKey,\n agentId: request.targetAgentId,\n agentDigests: request.targetDigests,\n deploymentId: config.deploymentId,\n inputPayload: request.childInput,\n inputDigest: request.childInputDigest,\n parentLinkage: ParentLinkage.make({\n parentSubmissionId: parent.submissionId,\n parentToolCallId: request.toolCallId,\n }),\n }),\n )\n .pipe(\n Effect.catchTag(\n \"AdmissionConflict\",\n conflictToLedgerError(\"establishChildFromRequest\"),\n ),\n );\n\n childSubmissionId = admitted.submissionId;\n receiptId = admitted.receiptId;\n break;\n }\n case \"Admitted\": {\n // The one existing child: verify the immutable admission facts against the canonical\n // request before reattaching — a divergent row can never be \"the same child\"\n // (fail-closed; identifiers are never capabilities, D10).\n const child = resolution.submission;\n const linkage = child.parentLinkage;\n\n if (\n child.agentId !== request.targetAgentId ||\n !definitionDigestsEqual(child.agentDigests, request.targetDigests) ||\n child.inputDigest !== request.childInputDigest ||\n linkage === undefined ||\n linkage.parentSubmissionId !== parent.submissionId ||\n linkage.parentToolCallId !== request.toolCallId\n ) {\n return yield* LedgerError.make({\n operation: \"establishChildFromRequest\",\n message: `The admitted child ${child.submissionId} diverges from the canonical SubagentRequested record for Tool Call ${request.toolCallId}; establishment fails closed (SUB-016)`,\n });\n }\n childSubmissionId = child.submissionId;\n receiptId = child.receiptId;\n break;\n }\n }\n yield* hit(\"subagent:after-admit\");\n yield* materializeAtLeast(request.childThreadId, ZERO_EPOCH);\n yield* ensureThreadCreated(\n request.childThreadId,\n request.targetAgentId,\n request.targetDigests,\n );\n const childRead = yield* readAllTolerant(request.childThreadId, []);\n\n yield* ensureChildLineage(parent, request, childRead.records);\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: childSubmissionId }));\n yield* hit(\"subagent:after-child-ready\");\n yield* wake.notify(request.childThreadId);\n\n return { _tag: \"established\", childSubmissionId, receiptId };\n },\n );\n\n /**\n * Bounded usage summary rebuilt from canonical child evidence (D11 structural dimensions).\n * The two finite counters always satisfy the persistence bounds, so a decode failure is a\n * defect (`orDie`), matching the file's `annotateRepair` pattern for provably-valid inputs.\n */\n const childUsageSummaryOf = (\n childRecords: ReadonlyArray<CanonicalRecordEnvelope>,\n childRunId: RunId,\n ): Effect.Effect<PersistedJson> => {\n let turns = 0;\n let toolCalls = 0;\n\n for (const envelope of childRecords) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ModelResponseRecorded\" && payload.runId === childRunId) turns += 1;\n if (payload._tag === \"ToolCallSettled\" && payload.runId === childRunId) toolCalls += 1;\n }\n\n return decodePersisted({ turns, toolCalls }).pipe(Effect.orDie);\n };\n\n /** The coordinator's bounded `{errorTag, message}` projection of a non-completed child. */\n const boundedChildFailureResult = (\n payload: SubmissionSettledRecord,\n childSubmissionId: SubmissionId,\n ): Effect.Effect<PersistedJson> => {\n if (payload.outcome === \"failed\") {\n return Effect.succeed(payload.result);\n }\n\n return decodePersisted({\n errorTag: \"SubagentAborted\",\n message: `Attached child ${childSubmissionId} settled aborted`,\n }).pipe(Effect.orDie);\n };\n\n /** One verified child Settlement, ready to join (spec §12 join steps 1-3). */\n interface VerifiedChildSettlement {\n readonly outcome: SettlementOutcome;\n /** Child terminal output for `completed`; the bounded `{errorTag, message}` projection otherwise. */\n readonly encodedResult: PersistedJson;\n readonly settlement: SubmissionSettledRecord;\n readonly childRecords: ReadonlyArray<CanonicalRecordEnvelope>;\n }\n\n const verifiedChildUsage = Effect.fn(\"DurableAgentRuntime.verifiedChildUsage\")(function* (\n verified: VerifiedChildSettlement,\n childRunId: RunId,\n ) {\n const reports = childUsageReportsOf(subagentRecordsOf(verified.childRecords, childRunId));\n\n const delegatedUsage = yield* sumRunTotals(\n reports.flatMap(({ report }) => [report.usage, report.delegatedUsage]),\n ).pipe(Effect.catchTag(\"UsageAggregationError\", () => Effect.succeed(unknownRunTotals())));\n\n return RunUsageReport.make({\n usage:\n verified.settlement.usageSummary === undefined\n ? unknownRunTotals()\n : runTotalsFromSummary(verified.settlement.usageSummary),\n delegatedUsage,\n });\n });\n\n type ChildVerification =\n | { readonly _tag: \"verified\"; readonly value: VerifiedChildSettlement }\n | { readonly _tag: \"mismatch\"; readonly message: string };\n\n /**\n * §1.6 join verification, fail-closed (SUB-019/SUB-023, D10): the child's CANONICAL\n * Settlement and lineage records are read from the child Thread Log — cached ledger\n * state never fabricates a Settlement — and every identity/digest is checked against the\n * canonical `SubagentRequested` payload: Parent Link identity, target agent, stored\n * definition digests, input/grant digests, settlement identity, and the settlement record\n * digest pinned by the child's reservation. Any mismatch is a typed verification failure.\n */\n const verifySettledChild = Effect.fn(\"DurableAgentRuntime.verifySettledChild\")(function* (\n parent: SubmissionSnapshot,\n request: SubagentRequested,\n childSubmissionId: SubmissionId,\n ): Effect.fn.Return<ChildVerification, DurableWorkerFailure> {\n const mismatch = (message: string): ChildVerification => ({ _tag: \"mismatch\", message });\n\n // The child's lane state crosses the store boundary through `lookup` — a status check on\n // the child's owning ledger — because recovery snapshots are lane-local by construction:\n // on Cloudflare the child Thread lives in a different Durable Object whose\n // operational rows are not readable across the boundary (deployment §11). The child's\n // CANONICAL Settlement, read below from its Thread Log, remains the only\n // cross-lane verification authority (spec §12 join step 1, SUB-019, DUR-015).\n const childLookup = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: childSubmissionId }),\n );\n\n if (Option.isNone(childLookup)) {\n return yield* LedgerError.make({\n operation: \"verifySettledChild\",\n message: `Attached child ${childSubmissionId} is unknown to its owning Submission Ledger`,\n });\n }\n const child = childLookup.value;\n\n if (child.threadId !== request.childThreadId) {\n return mismatch(\"The child Thread does not match the intended child identity\");\n }\n if (child.agentId !== request.targetAgentId) {\n return mismatch(\"The child Agent identity does not match the declared delegation target\");\n }\n if (!definitionDigestsEqual(child.agentDigests, request.targetDigests)) {\n return mismatch(\"The child definition digests do not match the stored target digests\");\n }\n if (child.inputDigest !== request.childInputDigest) {\n return mismatch(\"The child input digest does not match the canonical request\");\n }\n const linkage = child.parentLinkage;\n\n if (\n linkage === undefined ||\n linkage.parentSubmissionId !== parent.submissionId ||\n linkage.parentToolCallId !== request.toolCallId\n ) {\n return mismatch(\"The child admission linkage does not name this parent Tool Call\");\n }\n const childRecords = yield* readControl(request.childThreadId, [child.submissionId]);\n\n const lineageEnvelope = childRecords.find(\n (envelope) => envelope.record.recordId === subagentLineageRecordId(request.childThreadId),\n );\n\n const lineage = lineageEnvelope?.record.payload;\n\n if (lineage === undefined || lineage._tag !== \"SubagentLineageRecorded\") {\n return mismatch(\"The child Thread carries no immutable lineage record\");\n }\n if (\n lineage.parentLink.delegationId !== request.delegationId ||\n lineage.parentLink.parentAgentId !== parent.agentId ||\n lineage.parentLink.parentThreadId !== parent.threadId ||\n lineage.parentLink.parentRunId !== request.runId ||\n lineage.parentLink.parentToolCallId !== request.toolCallId ||\n lineage.parentLink.depth !== (request.depth ?? CHILD_DELEGATION_DEPTH) ||\n lineage.parentSubmissionId !== parent.submissionId\n ) {\n return mismatch(\"The child Parent Link does not name exactly this parent Run and Tool Call\");\n }\n if (\n !definitionDigestsEqual(lineage.childDefinitionDigests, request.targetDigests) ||\n lineage.childInputDigest !== request.childInputDigest ||\n lineage.grantDigest !== request.grantDigest ||\n lineage.toolCallAllowance !== request.toolCallAllowance ||\n !Equal.equals(lineage.policy, request.policy) ||\n !Equal.equals(lineage.budget, request.budget) ||\n !Equal.equals(lineage.grant, request.grant)\n ) {\n return mismatch(\"The child lineage digests or allowance do not match the canonical request\");\n }\n\n const settlementEnvelope = childRecords.find(\n (envelope) => envelope.record.recordId === submissionSettlementRecordId(childSubmissionId),\n );\n\n const settlement = settlementEnvelope?.record.payload;\n\n if (settlement === undefined || settlement._tag !== \"SubmissionSettled\") {\n return mismatch(\"The child has no canonical Settlement record\");\n }\n if (\n settlement.submissionId !== childSubmissionId ||\n settlement.settlementId !== submissionSettlementId(childSubmissionId) ||\n settlement.receiptId !== child.receiptId\n ) {\n return mismatch(\"The child Settlement identity does not match the child Receipt\");\n }\n // No parent-side crosscheck against the child's settlement RESERVATION row exists here:\n // the reservation lives in the child's own store, invisible across the Object boundary on\n // Cloudflare, and its byte-identity with the canonical record is the child store's own\n // conformance-tested reserve→append→finalize invariant (DUR-011) — never a parent\n // obligation. The canonical Settlement verified above is the sole cross-lane authority.\n if (settlement.outcome === \"completed\" && settlement.result === undefined) {\n return mismatch(\"The completed child Settlement carries no terminal output\");\n }\n\n const encodedResult =\n settlement.outcome === \"completed\" && settlement.result !== undefined\n ? settlement.result\n : yield* boundedChildFailureResult(settlement, childSubmissionId);\n\n return {\n _tag: \"verified\",\n value: { outcome: settlement.outcome, encodedResult, settlement, childRecords },\n };\n });\n\n /**\n * Apply the frozen accounting decision to one reservation (spec §12 join step 6, DUR-015):\n * `beginChildBudgetRelease` freezes it exactly once (an identical replay is a no-op) and\n * `releaseChildBudget` applies it exactly once — budget stays unavailable until repair, never\n * available twice.\n */\n const applyReservationRelease = Effect.fn(\"DurableAgentRuntime.applyReservationRelease\")(\n function* (\n reservationId: ChildReservationId,\n accounting: PersistedJson,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n yield* ledger\n .beginChildBudgetRelease(BeginChildBudgetReleaseRequest.make({ reservationId, accounting }))\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"beginChildBudgetRelease\"),\n ),\n );\n yield* hit(\"subagent:after-release-pending\");\n yield* ledger\n .releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId }))\n .pipe(\n Effect.catchTag(\"ChildReservationConflict\", conflictToLedgerError(\"releaseChildBudget\")),\n );\n yield* hit(\"subagent:after-release\");\n },\n );\n\n /**\n * Release a provably-childless reservation exactly once (spec §13 \"reservation exists,\n * request absent\"): freeze the deterministic zero-consumed decision — a conflict means a\n * different decision already froze first, and the release below applies THAT frozen decision.\n */\n const releaseOrphanReservation = Effect.fn(\"DurableAgentRuntime.releaseOrphanReservation\")(\n function* (reservationId: ChildReservationId): Effect.fn.Return<void, DurableWorkerFailure> {\n yield* ledger\n .beginChildBudgetRelease(\n BeginChildBudgetReleaseRequest.make({\n reservationId,\n accounting: ORPHAN_ZERO_CONSUMED_ACCOUNTING,\n }),\n )\n .pipe(\n Effect.catchTag(\"ChildReservationConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-release-pending\");\n yield* ledger\n .releaseChildBudget(ReleaseChildBudgetRequest.make({ reservationId }))\n .pipe(\n Effect.catchTag(\"ChildReservationConflict\", conflictToLedgerError(\"releaseChildBudget\")),\n );\n yield* hit(\"subagent:after-release\");\n },\n );\n\n /**\n * Join a settled child after parent abort or expiry without running application handlers.\n * The canonical child outcome stays intact; the parent result records why it cannot continue.\n */\n const joinSettledChildForClosedParent = Effect.fn(\n \"DurableAgentRuntime.joinSettledChildForClosedParent\",\n )(function* (\n ctx: AttemptAppendContext,\n parent: SubmissionSnapshot,\n knownIds: Set<string>,\n subagent: SubagentCallRecords,\n reservation: ChildBudgetReservationSnapshot,\n toolCallId: ToolCallId,\n childSubmissionId: SubmissionId,\n reason: \"aborted\" | \"duration\",\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const runId = runIdForSubmission(parent.submissionId);\n const request = subagent.requested.get(toolCallId);\n\n if (request === undefined) {\n return yield* LedgerError.make({\n operation: \"joinSettledChildForClosedParent\",\n message: `Tool Call ${toolCallId} has an attached child but no canonical SubagentRequested record`,\n });\n }\n const joinedRecordId = subagentJoinedRecordId(runId, toolCallId);\n let finalAccounting: PersistedJson;\n const existing = subagent.joined.get(toolCallId);\n\n if (existing !== undefined) {\n finalAccounting = existing.finalAccounting;\n } else {\n const verification = yield* verifySettledChild(parent, request, childSubmissionId);\n\n if (verification._tag === \"mismatch\") {\n return yield* LedgerError.make({\n operation: \"joinSettledChildForClosedParent\",\n message: `Child Settlement verification failed for Tool Call ${toolCallId}: ${verification.message}`,\n });\n }\n const verified = verification.value;\n\n // Static-shape projections; a bounds failure is a defect, matching `annotateRepair`.\n const boundedResult = yield* decodePersisted({\n errorTag: reason === \"aborted\" ? \"SubagentParentAborted\" : \"SubagentParentDurationExceeded\",\n message: boundedText(\n `The parent Submission ${reason === \"aborted\" ? \"aborted\" : \"exceeded its duration\"}; attached child ${childSubmissionId} settled ${verified.outcome}`,\n ),\n }).pipe(Effect.orDie);\n\n finalAccounting = yield* decodePersisted({\n basis: reason === \"aborted\" ? \"aborted-conservative\" : \"duration-conservative\",\n allocation: reservation.allocation,\n }).pipe(Effect.orDie);\n const childRunId = runIdForSubmission(childSubmissionId);\n\n yield* hit(\"subagent:before-join-append\");\n\n const joinedPayload = SubagentJoined.make({\n runId,\n toolCallId,\n childSubmissionId,\n childSettlementId: verified.settlement.settlementId,\n childOutcome: verified.outcome,\n childResultDigest: yield* withCrypto(digestJson(verified.settlement.result ?? null)),\n projectedResultDigest: yield* withCrypto(digestJson(boundedResult)),\n usageSummary: yield* childUsageSummaryOf(verified.childRecords, childRunId),\n ...(yield* verifiedChildUsage(verified, childRunId)),\n reservationId: reservation.reservationId,\n finalAccounting,\n });\n\n const settledRecordId = toolCallSettledRecordId(runId, request.turn, toolCallId);\n const joinedEnvelope = yield* makeEnvelope(joinedRecordId, joinedPayload);\n\n const settledEnvelope = yield* makeEnvelope(\n settledRecordId,\n ToolCallSettled.make({\n runId,\n toolCallId,\n toolName: subagent.preparedNames.get(toolCallId) ?? request.delegationId,\n result: boundedResult,\n isFailure: true,\n }),\n );\n\n if (!knownIds.has(joinedRecordId)) {\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentJoinBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [joinedEnvelope, settledEnvelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(joinedRecordId);\n knownIds.add(settledRecordId);\n subagent.joined.set(toolCallId, joinedPayload);\n yield* hit(\"subagent:after-join-append\");\n }\n }\n yield* applyReservationRelease(reservation.reservationId, finalAccounting);\n });\n\n /**\n * Complete every joined-but-unreleased reservation BEFORE the parent settles (spec §12 join\n * step 6): the canonical `SubagentJoined` accounting authorizes the release (DUR-015), and a\n * parent that settled first would strand the repair — a settled lane classifies `NoAction`.\n * Returns whether any reservation remains unreleased (a reserved row without a canonical\n * join), which must block the settlement (spec §13: a parent never settles across an open\n * child obligation).\n */\n const completeJoinedReleases = Effect.fn(\"DurableAgentRuntime.completeJoinedReleases\")(function* (\n submission: SubmissionSnapshot,\n ): Effect.fn.Return<boolean, DurableWorkerFailure> {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n if (snapshot.childReservations.length === 0) return false;\n const records = yield* readControl(submission.threadId, [submission.submissionId]);\n const subagent = subagentRecordsOf(records, runIdForSubmission(submission.submissionId));\n let open = false;\n\n for (const reservation of snapshot.childReservations) {\n if (reservation.status === \"released\") continue;\n const joined = subagent.joined.get(reservation.parentToolCallId);\n\n if (joined !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, joined.finalAccounting);\n continue;\n }\n if (reservation.status === \"releasePending\" && reservation.accounting !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, reservation.accounting);\n continue;\n }\n open = true;\n }\n\n return open;\n });\n\n /** Release unused reservations or repair and join existing children, never admit new work. */\n const reconcileExpiredChildren = Effect.fn(\"DurableAgentRuntime.reconcileExpiredChildren\")(\n function* (\n ctx: AttemptAppendContext,\n parent: SubmissionSnapshot,\n ownershipToken: OwnershipToken,\n ) {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: parent.submissionId }),\n );\n\n const records = yield* readControl(parent.threadId, [parent.submissionId]);\n const runId = runIdForSubmission(parent.submissionId);\n const pending = yield* pendingToolBatchFor(records, runId);\n const knownIds = knownRecordIdsOf(records);\n const subagent = subagentRecordsOf(records, runId);\n\n for (const reservation of snapshot.childReservations) {\n const toolCallId = reservation.parentToolCallId;\n\n if (reservation.status !== \"reserved\" || subagent.joined.has(toolCallId)) continue;\n let started = subagent.started.get(toolCallId);\n const request = subagent.requested.get(toolCallId);\n\n if (\n started === undefined &&\n request === undefined &&\n reservation.childSubmissionId === undefined\n ) {\n yield* releaseOrphanReservation(reservation.reservationId);\n continue;\n }\n const call = pending?.calls.find((candidate) => candidate.id === toolCallId);\n\n if (\n pending === undefined ||\n call === undefined ||\n request === undefined ||\n subagent.preparedNames.get(toolCallId) !== call.name ||\n request.delegationId !== call.name ||\n reservation.parentSubmissionId !== parent.submissionId ||\n request.reservationId !== reservation.reservationId ||\n request.reservationDigest !== reservation.allocationDigest ||\n request.turn !== pending.turn ||\n request.turnId !== pending.turnId\n ) {\n return yield* LedgerError.make({\n operation: \"reconcileExpiredChildren\",\n message: `Tool Call ${toolCallId} has inconsistent canonical child request evidence`,\n });\n }\n if (started === undefined) {\n const resolution = yield* ledger.resolveAdmission(\n SubmissionLookupByKey.make({\n threadId: request.childThreadId,\n principal: decodePrincipalSync(request.childPrincipal),\n idempotencyKey: decodeIdempotencyKeySync(request.childIdempotencyKey),\n }),\n );\n\n if (resolution._tag === \"Indeterminate\") continue;\n if (resolution._tag === \"NotAdmitted\") {\n if (reservation.childSubmissionId !== undefined) {\n return yield* LedgerError.make({\n operation: \"reconcileExpiredChildren\",\n message: `Tool Call ${toolCallId} has an attachment but no admitted child`,\n });\n }\n yield* releaseOrphanReservation(reservation.reservationId);\n continue;\n }\n // Finish only the already-admitted child's materialization and readiness. A second\n // authoritative lookup must still never turn a stale observation into a new admission.\n const admission = yield* establishChildFromRequest(parent, request, false);\n\n if (admission._tag === \"indeterminate\") continue;\n started = SubagentStarted.make({\n runId,\n toolCallId,\n childThreadId: request.childThreadId,\n childSubmissionId: admission.childSubmissionId,\n childReceiptId: admission.receiptId,\n childRunId: runIdForSubmission(admission.childSubmissionId),\n });\n const startRecordId = subagentStartedRecordId(runId, toolCallId);\n const envelope = yield* makeEnvelope(startRecordId, started);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentStartedBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n knownIds.add(startRecordId);\n subagent.started.set(toolCallId, started);\n yield* hit(\"subagent:after-start-append\");\n }\n\n const child = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: started.childSubmissionId }),\n );\n\n if (\n Option.isNone(child) ||\n (reservation.childSubmissionId !== undefined &&\n reservation.childSubmissionId !== started.childSubmissionId) ||\n request.childThreadId !== started.childThreadId ||\n started.childThreadId !== child.value.threadId ||\n started.childReceiptId !== child.value.receiptId ||\n started.childRunId !== runIdForSubmission(started.childSubmissionId)\n ) {\n return yield* LedgerError.make({\n operation: \"reconcileExpiredChildren\",\n message: `Tool Call ${call.id} has inconsistent canonical child attachment evidence`,\n });\n }\n yield* ledger\n .attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: reservation.reservationId,\n ownershipToken,\n childSubmissionId: started.childSubmissionId,\n }),\n )\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"attachChildToReservation\"),\n ),\n );\n if (child.value.state !== \"settled\") continue;\n yield* joinSettledChildForClosedParent(\n ctx,\n parent,\n knownIds,\n subagent,\n reservation,\n started.toolCallId,\n started.childSubmissionId,\n \"duration\",\n );\n }\n },\n );\n\n /** Where the request-abort-and-join pass over attached children ended (spec §13.1). */\n type ChildAbortDisposition = \"clear\" | \"waiting\" | \"blocked\";\n\n /**\n * Request-abort-and-join over every attached child of an aborting parent (spec §13.1,\n * SUB-022): joined-but-unreleased reservations finish their idempotent release; settled\n * children join coordinator-side; nonterminal children receive the ONE idempotent durable\n * abort command (the recorded `AbortIntent` row IS the propagation marker, DUR-012) and the\n * parent suspends `waitingForChild` for their joins; an admitted-but-unlinked child is\n * reattached first; a provably-childless reservation releases exactly once; an indeterminate\n * admission blocks honestly — never a second admission, never a fabricated settlement.\n */\n const abortAttachedChildren = Effect.fn(\"DurableAgentRuntime.abortAttachedChildren\")(function* (\n ctx: AttemptAppendContext,\n parent: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n knownIds: Set<string>,\n ): Effect.fn.Return<ChildAbortDisposition, DurableWorkerFailure> {\n const submissionId = parent.submissionId;\n const runId = runIdForSubmission(submissionId);\n\n while (true) {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n if (snapshot.childReservations.length === 0) return \"clear\";\n const records = yield* readControl(parent.threadId, [parent.submissionId]);\n\n for (const envelope of records) knownIds.add(envelope.record.recordId);\n const subagent = subagentRecordsOf(records, runId);\n const waiting: Array<WaitingChild> = [];\n let blocked = false;\n\n for (const reservation of snapshot.childReservations) {\n if (reservation.status === \"released\") continue;\n const toolCallId = reservation.parentToolCallId;\n const joined = subagent.joined.get(toolCallId);\n\n if (joined !== undefined) {\n yield* applyReservationRelease(reservation.reservationId, joined.finalAccounting);\n continue;\n }\n if (reservation.status === \"releasePending\") {\n // The decision is already frozen (join or orphan): finish the idempotent release —\n // NEVER re-freeze, a divergent second decision would conflict.\n yield* applyReservationRelease(\n reservation.reservationId,\n reservation.accounting ?? ORPHAN_ZERO_CONSUMED_ACCOUNTING,\n );\n continue;\n }\n const request = subagent.requested.get(toolCallId);\n\n let childSubmissionId =\n subagent.started.get(toolCallId)?.childSubmissionId ?? reservation.childSubmissionId;\n\n if (childSubmissionId === undefined) {\n if (request === undefined) {\n // Reservation without a canonical request under abort: provably childless —\n // release the unused allocation exactly once (spec §13/§14).\n yield* releaseOrphanReservation(reservation.reservationId);\n continue;\n }\n const admission = yield* establishChildFromRequest(parent, request);\n\n if (admission._tag === \"indeterminate\") {\n // A child may exist: never release, settle, or re-admit until the authoritative\n // owner answers (SUB-031).\n blocked = true;\n continue;\n }\n childSubmissionId = admission.childSubmissionId;\n }\n\n const child = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: childSubmissionId }),\n );\n\n if (Option.isNone(child)) {\n return yield* LedgerError.make({\n operation: \"abortAttachedChildren\",\n message: `Attached child ${childSubmissionId} is unknown to the ledger`,\n });\n }\n if (child.value.state === \"settled\") {\n yield* joinSettledChildForClosedParent(\n ctx,\n parent,\n knownIds,\n subagent,\n reservation,\n toolCallId,\n childSubmissionId,\n \"aborted\",\n );\n continue;\n }\n yield* ledger\n .requestAbort(\n AbortCommand.make({\n submissionId: childSubmissionId,\n author: SUBAGENT_ABORT_AUTHOR,\n reason: SUBAGENT_ABORT_REASON,\n }),\n )\n .pipe(\n // The child settled concurrently: the one winning Settlement joins on the next\n // pass of this loop (spec §13 \"child terminal races abort\").\n Effect.catchTags({\n SettlementConflict: () => Effect.void,\n JoinedToHost: conflictToLedgerError(\"abortAttachedChildren\"),\n }),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-child-abort-intent\");\n yield* wake.notify(child.value.threadId);\n waiting.push(WaitingChild.make({ toolCallId, childSubmissionId }));\n }\n if (blocked) return \"blocked\";\n const first = waiting[0];\n\n if (first === undefined) return \"clear\";\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId,\n ownershipToken,\n reason: WaitingForChildSuspension.make({ children: [first, ...waiting.slice(1)] }),\n }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (suspension === \"suspended\") return \"waiting\";\n // Every listed child settled before the suspend committed: loop to join the winners.\n }\n });\n\n const failureOutcome = (error: unknown): Effect.Effect<AttemptOutcome> =>\n Schema.decodeEffect(SettlementFailureDiagnostic)({\n errorTag: errorTagOf(error).slice(0, 256) || \"UnknownError\",\n message: errorMessageOf(error).slice(0, MAX_FAILURE_MESSAGE_LENGTH),\n }).pipe(\n // The exact diagnostic Schema admits no raw Cause, stack, or provider payload.\n Effect.orDie,\n Effect.map((result) => ({\n _tag: \"failed\" as const,\n result,\n // A hard-rail policy failure keeps its typed limit durable (RUN-011):\n // the bounded message stays diagnostic, never the dimension authority.\n ...Option.match(decodePolicyFailureSafely(error), {\n onNone: () => ({}),\n onSome: ({ limit }) => ({ policyLimit: limit }),\n }),\n })),\n );\n\n const halt = <A, R>(\n effect: Effect.Effect<A, DurableWorkerFailure, R>,\n ): Effect.Effect<A, CoordinatorHalt, R> =>\n Effect.mapError(effect, (failure) => new CoordinatorHalt(failure));\n\n /**\n * Superseding-Attempt interruption audit (durability §9): appended at most once per superseded\n * fence epoch before this Attempt re-invokes the model. It deliberately over-approximates — a\n * prior ownership period that ended cleanly between commits still gets one — because durable\n * state cannot distinguish a mid-stream provider loss from a crash between boundaries, and the\n * honest direction is to record that duplicate provider cost is possible, never to hide it.\n */\n const appendInterruptedAudit = Effect.fn(\"DurableAgentRuntime.appendInterruptedAudit\")(function* (\n ctx: AttemptAppendContext,\n runId: ReturnType<typeof runIdForSubmission>,\n lineage: AttemptLineage,\n knownIds: Set<string>,\n ): Effect.fn.Return<void, DurableWorkerFailure> {\n const recordId = modelResponseInterruptedRecordId(runId, lineage.supersededEpoch);\n\n if (knownIds.has(recordId)) return;\n\n const envelope = yield* makeEnvelope(\n recordId,\n ModelResponseInterrupted.make({\n runId,\n supersededEpoch: lineage.supersededEpoch,\n attemptId: lineage.attemptId,\n reason:\n \"A prior ownership period ended without a canonical settlement; any in-flight model response was lost and the model may be re-invoked (duplicate provider cost is observable)\",\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: modelResponseInterruptedBatchId(runId, lineage.supersededEpoch),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(recordId);\n });\n\n /**\n * Plan step 3 (+6): drive `AgentRuntime.stream` with history rebuilt by the run journal, commit\n * each Turn canonically through the fenced append, watch for durable abort intent, and keep the\n * ownership lease renewed. Engine Run failures settle `failed`; coordinator failures abort the\n * Attempt cleanly with the obligation still owed.\n *\n * Phase 5 commit shape (plan §2.1): a tool-declaring Turn splits into a RESPONSE batch\n * (committed by the engine's `commitResponse` hook at the finish part — pending steering plus\n * the response messages, creating the durability §15 provably-safe window), the durable\n * approval preflight (§2.6 — recorded decisions replay deterministically, unresolved requests\n * become canonical and suspend the Attempt), an optional PREPARED batch (before any handler\n * starts), and a RESULTS batch at the next TurnStarted/RunCompleted/RunFailed seam. A completed\n * no-tool Turn atomically adds its `RunCompleted` marker to the P4 single-batch shape. When the\n * journal ends mid-batch,\n * `RunOptions.resume` replays the declared batch without re-invoking the model (§2.4).\n */\n const runModel = <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined =\n undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n ctx: AttemptAppendContext,\n submission: SubmissionSnapshot,\n tokenRef: Ref.Ref<OwnershipToken>,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n canonical: Stream.Stream<CanonicalRecordEnvelope, ThreadStoreError | ThreadNotMaterialized>,\n canonicalThrough: CanonicalSequence,\n journalSeed: JournalCheckpointSeed | undefined,\n journalMetadata: JournalMetadata | undefined,\n lineage: AttemptLineage,\n approvalDecisions: ReadonlyArray<ApprovalDecisionIntent>,\n runTiming: { readonly startedAt: DateTime.Utc; readonly deadline: DateTime.Utc },\n yieldAfter?: DateTime.Utc,\n ) =>\n Effect.gen(function* () {\n const submissionId = submission.submissionId;\n const runId = runIdForSubmission(submissionId);\n const boundaries: Array<JournalBoundary> = [];\n\n const journal = yield* projectRunJournalStream(\n canonical,\n runId,\n (boundary) => boundaries.push(boundary),\n journalSeed,\n journalMetadata,\n );\n\n const saveRecoveryCheckpoint = Effect.fn(\"DurableAgentRuntime.saveRecoveryCheckpoint\")(\n function* (compactionId: RecordId): Effect.fn.Return<void, DurableWorkerFailure> {\n if (store.recoveryCheckpoints === undefined) return;\n const tail = yield* Ref.get(ctx.tailRef);\n\n const source = Stream.concat(\n canonical,\n canonicalRange(ctx.threadId, tail.sequence, canonicalThrough),\n );\n\n let compaction: CanonicalRecordEnvelope | undefined;\n let latestResponse: CanonicalSequence | undefined;\n let firstSequence = journalSeed?.firstSequence;\n const orchestrationCalls = new Set<string>();\n\n yield* Stream.runForEach(source, (entry) =>\n Effect.sync(() => {\n const payload = entry.record.payload;\n\n if (entry.record.recordId === compactionId) compaction = entry;\n if (!(\"runId\" in payload) || payload.runId !== runId) return;\n firstSequence ??= entry.sequence;\n if (payload._tag === \"ModelResponseRecorded\") latestResponse = entry.sequence;\n if (\n payload._tag === \"ToolCallPrepared\" &&\n (payload.executionKind === \"delegation\" ||\n payload.executionKind === \"orchestration\")\n )\n orchestrationCalls.add(payload.toolCallId);\n }),\n );\n if (\n compaction === undefined ||\n compaction.record.payload._tag !== \"CompactionCreated\" ||\n compaction.record.payload.kind === \"clear-tool-results\"\n )\n return;\n const replacement = compaction;\n const covered = compaction.record.payload.coversThrough;\n\n const retiredThrough = decodeCanonicalSequence(\n Math.min(covered, (latestResponse ?? covered + 1) - 1),\n );\n\n if (retiredThrough <= (journalSeed?.throughSequence ?? 0)) return;\n\n const retired = yield* projectRunJournalStream(\n source.pipe(Stream.filter((entry) => entry.sequence <= retiredThrough)),\n runId,\n undefined,\n journalSeed,\n );\n\n const detailed = yield* summarizeModelUsage(\n retired.usage.modelUsage,\n retired.usage.summarizedModelUsage,\n ).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Retired usage exceeds accounting bounds\", cause }),\n ),\n );\n\n const protectedContext = retired.protectedContext ?? journal.protectedContext;\n // The first native rollover may precede this Attempt's first journal snapshot response.\n const current = yield* projectRunJournalStream(source, runId, undefined, journalSeed);\n const protectedMessages = protectedContext ?? current.protectedContext;\n\n const encodedContext =\n protectedMessages === undefined\n ? undefined\n : yield* Schema.encodeEffect(Prompt.Prompt)(protectedMessages).pipe(\n Effect.flatMap(decodePersisted),\n Effect.mapError((cause) =>\n RunJournalError.make({ message: \"Cannot checkpoint protected context\", cause }),\n ),\n );\n\n let frontier = journalSeed?.frontier;\n\n const retained = yield* Stream.runCollect(\n source.pipe(\n Stream.filter((entry) => {\n if (entry.sequence > retiredThrough) return true;\n const payload = entry.record.payload;\n\n if (payload._tag === \"ModelResponseRecorded\" || payload._tag === \"ToolCallSettled\")\n frontier = { sequence: entry.sequence, tag: payload._tag };\n if (\n payload._tag === \"ThreadCreated\" ||\n payload._tag === \"SubagentLineageRecorded\" ||\n payload._tag === \"WorkerOriginRecorded\"\n )\n return true;\n if (!(\"runId\" in payload) || payload.runId !== runId) return false;\n if (\"toolCallId\" in payload && orchestrationCalls.has(payload.toolCallId))\n return true;\n switch (payload._tag) {\n case \"ModelResponseRecorded\":\n case \"ToolCallPrepared\":\n case \"ToolCallSettled\":\n case \"ToolCallUnknown\":\n case \"ToolCallResolved\":\n case \"ToolApprovalRequested\":\n case \"ToolApprovalDecided\":\n case \"CompactionCreated\":\n case \"RunPolicyUsageReserved\":\n return false;\n default:\n return true;\n }\n }),\n ),\n );\n\n const ids = new Set<SubmissionId>([submissionId]);\n\n for (const {\n record: { payload },\n } of retained)\n if (payload._tag === \"UserInputRecorded\" && payload.submissionId !== undefined)\n ids.add(payload.submissionId);\n\n const validated = yield* Effect.try({\n try: () =>\n RecoveryCheckpointState.make({\n schemaVersion: 1,\n policyAccountingVersion: 1,\n submissionId,\n submissionIds: [...ids],\n seed: JournalCheckpointSeed.make({\n runId,\n throughSequence: retiredThrough,\n ...(firstSequence === undefined ? {} : { firstSequence }),\n committedTurns: retired.committedTurns,\n ...(retired.toolSelection === undefined\n ? {}\n : { toolSelection: retired.toolSelection }),\n policyUsage: retired.policyUsage,\n modelCalls: retired.usage.modelCalls,\n unobservedModelCalls: retired.usage.unobservedModelCalls ?? 0,\n inputTokens: retired.usage.inputTokens,\n outputTokens: retired.usage.outputTokens,\n lastInputTokens: retired.usage.lastInputTokens,\n lastOutputTokens: retired.usage.lastOutputTokens,\n costMicrousd: retired.usage.costMicrousd,\n summarizedModelUsage: detailed,\n ...(current.contextWindowId === undefined\n ? {}\n : { contextWindowId: current.contextWindowId }),\n ...(frontier === undefined ? {} : { frontier }),\n ...(encodedContext === undefined ? {} : { protectedContext: encodedContext }),\n compaction: replacement,\n }),\n records: retained,\n }),\n catch: (cause) =>\n RunJournalError.make({ message: \"Recovery checkpoint exceeds cache bounds\", cause }),\n }).pipe(Effect.option);\n\n // Capacity is a cache eligibility limit, never a reason to truncate canonical evidence.\n if (Option.isNone(validated)) return;\n\n // Removing proof must not make a previously invalid historical compaction valid.\n // Check the disposable projection against the canonical source before publishing it.\n const replayed = yield* projectRunJournalStream(\n Stream.fromIterable(retained),\n runId,\n undefined,\n validated.value.seed,\n ).pipe(Effect.option);\n\n if (Option.isNone(replayed)) return;\n const candidate = replayed.value;\n const equalPrompt = Schema.toEquivalence(Prompt.Prompt);\n\n if (\n !equalPrompt(current.prompt, candidate.prompt) ||\n !equalPrompt(current.historyBefore, candidate.historyBefore) ||\n !Schema.toEquivalence(Schema.optional(Prompt.Prompt))(\n current.protectedContext,\n candidate.protectedContext,\n ) ||\n current.contextWindowId !== candidate.contextWindowId ||\n current.pendingContextToolCallId !== candidate.pendingContextToolCallId ||\n !Schema.toEquivalence(Schema.optional(Selection))(\n current.toolSelection,\n candidate.toolSelection,\n ) ||\n current.committedTurns !== candidate.committedTurns ||\n !Schema.toEquivalence(RunPolicyUsage)(current.policyUsage, candidate.policyUsage) ||\n (\n [\n \"modelCalls\",\n \"inputTokens\",\n \"outputTokens\",\n \"lastInputTokens\",\n \"lastOutputTokens\",\n \"costMicrousd\",\n ] as const\n ).some((field) => current.usage[field] !== candidate.usage[field]) ||\n (current.usage.unobservedModelCalls ?? 0) !==\n (candidate.usage.unobservedModelCalls ?? 0)\n )\n return;\n\n const summaries = yield* Effect.forEach([current, candidate], (projection) =>\n summarizeModelUsage(projection.usage.modelUsage, projection.usage.summarizedModelUsage),\n ).pipe(Effect.option);\n\n if (\n Option.isNone(summaries) ||\n summaries.value[0] === undefined ||\n summaries.value[1] === undefined ||\n !Schema.toEquivalence(RunUsageSummary)(summaries.value[0], summaries.value[1])\n )\n return;\n\n const encoded = yield* Schema.encodeEffect(RecoveryCheckpointState)(validated.value).pipe(\n Effect.option,\n );\n\n if (Option.isNone(encoded)) return;\n const digest = yield* withCrypto(digestJson(encoded.value));\n\n // JSON serialization duplicates shared in-memory references without weakening the\n // persisted depth/node/byte guard (which rejects cyclic/shared object graphs).\n const contents = yield* Schema.encodeEffect(\n Schema.fromJsonString(RecoveryCheckpointContents),\n )(RecoveryCheckpointContents.make({ state: validated.value, digest })).pipe(\n Effect.flatMap(Schema.decodeUnknownEffect(Schema.fromJsonString(PersistedJson))),\n Effect.option,\n );\n\n if (Option.isNone(contents)) return;\n\n const checkpoint = ThreadCheckpoint.make({\n schemaVersion: 1,\n threadId: ctx.threadId,\n throughSequence: tail.sequence,\n tailDigest: tail.digest,\n engineVersion: RECOVERY_ENGINE_VERSION,\n agentDefinitionDigest: submission.agentDigests.agent,\n modelDigest: submission.agentDigests.model,\n toolDigest: submission.agentDigests.tools,\n state: contents.value,\n createdAt: replacement.record.createdAt,\n });\n\n yield* hit(\"checkpoint:before-save\");\n yield* store.recoveryCheckpoints\n .save(\n SaveRecoveryCheckpointRequest.make({ checkpoint, producerEpoch: ctx.producerEpoch }),\n )\n .pipe(Effect.catchTag(\"CheckpointRejected\", () => Effect.void));\n yield* hit(\"checkpoint:after-save\");\n },\n );\n\n const childLineage = records.find(\n ({ record }) => record.recordId === subagentLineageRecordId(submission.threadId),\n )?.record.payload;\n\n const inheritedGrant =\n submission.workerAdmission?.origin.grant ??\n (childLineage?._tag === \"SubagentLineageRecorded\" ? childLineage.grant : undefined);\n\n const delegationDepth =\n submission.workerAdmission?.origin.depth ??\n (childLineage?._tag === \"SubagentLineageRecorded\" ? childLineage.parentLink.depth : 0);\n\n // worker-run origins supply a frozen ceiling, not usage credit. Only this native\n // host Run's journal owns usage; joined inputs and replacement Attempts keep its RunId.\n const inheritedBudget =\n submission.workerAdmission?.origin.budget ??\n (childLineage?._tag === \"SubagentLineageRecorded\" ? childLineage.budget : undefined);\n\n if (\n submission.parentLinkage !== undefined &&\n (childLineage?._tag !== \"SubagentLineageRecorded\" ||\n childLineage.parentSubmissionId !== submission.parentLinkage.parentSubmissionId ||\n childLineage.parentLink.parentToolCallId !== submission.parentLinkage.parentToolCallId ||\n !definitionDigestsEqual(childLineage.childDefinitionDigests, submission.agentDigests) ||\n childLineage.childInputDigest !== submission.inputDigest)\n ) {\n return yield* RunJournalError.make({\n message: \"The child Run has no matching canonical lineage and execution bounds\",\n });\n }\n\n const pending = yield* pendingToolBatchFor(\n records,\n runId,\n agent.definition.completionFromTools?.map((declaration) => declaration.tool),\n );\n\n const resumeProjection =\n pending === undefined\n ? journal\n : yield* projectRunJournalStream(\n withoutPendingBatch(canonical, pending, runId),\n runId,\n undefined,\n journalSeed,\n );\n\n const tools: Record<string, Tool.Any> = agent.definition.toolkit.tools;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag !== \"ToolCallPrepared\" || payload.runId !== runId) continue;\n const tool = tools[payload.toolName];\n\n const kind = tool === undefined ? \"ordinary\" : getToolExecutionKind(tool.annotations);\n\n if (tool === undefined || (payload.executionKind ?? \"ordinary\") !== kind) {\n return yield* RunJournalError.make({\n message: `Prepared Tool ${payload.toolCallId} classification conflicts with the resolved binding`,\n });\n }\n }\n\n const knownIds = knownRecordIdsOf(records);\n const stepOutputs = new Map<string, PersistedJson>();\n\n // Derive replay identity from the recorded tuple, never from its historical ID format.\n // This preserves committed Step outputs when reading legacy colon-separated record IDs.\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ToolStepSettled\" && payload.runId === runId) {\n stepOutputs.set(\n toolStepSettledRecordId(runId, payload.toolCallId, payload.stepName),\n payload.output,\n );\n }\n }\n // Recorded approval authority (plan §2.6): canonical `ToolApprovalDecided` records are the\n // deterministic decision source across Attempts; durable `resolveApproval` intents become\n // canonical before they are honored; requested Turns pin the Turn-shared approval batch\n // identity so a later append never contradicts a committed batch.\n const canonicalApprovalDecisions = new Map<string, ApprovalDecision>();\n const approvalRequestedTurns = new Set<number>();\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag === \"ToolApprovalDecided\" && payload.runId === runId) {\n canonicalApprovalDecisions.set(payload.toolCallId, payload.decision);\n } else if (payload._tag === \"ToolApprovalRequested\" && payload.runId === runId) {\n approvalRequestedTurns.add(payload.turn);\n }\n }\n const approvalIntents = new Map<string, ApprovalDecisionIntent>();\n\n for (const intent of approvalDecisions) {\n approvalIntents.set(intent.toolCallId, intent);\n }\n // Joined queued input (plan §2.5): canonical facts for the prompt-coverage rule, computed\n // once per Attempt from the same strongly consistent read as the journal. A joined\n // `input:{sid}` record is prompt-covered iff a host `ModelResponseRecorded` committed\n // after it — commit 1 of every later Turn carries all pending steering (D8 extension), so\n // covered inputs are already inside the journal prompt and must never re-deliver.\n const joinedInputEnvelopes = new Map<string, CanonicalRecordEnvelope>();\n let lastHostResponseSequence: CanonicalSequence | undefined;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (\n payload._tag === \"UserInputRecorded\" &&\n payload.runId === runId &&\n payload.submissionId !== undefined &&\n payload.submissionId !== submissionId\n ) {\n joinedInputEnvelopes.set(payload.submissionId, envelope);\n } else if (payload._tag === \"ModelResponseRecorded\" && payload.runId === runId) {\n if (\n lastHostResponseSequence === undefined ||\n envelope.sequence > lastHostResponseSequence\n ) {\n lastHostResponseSequence = envelope.sequence;\n }\n }\n }\n\n // RUN-023: per-Turn usage staged by the engine's `noteTurnUsage` for the\n // Turn's canonical response record (keyed by CANONICAL turn number).\n const stagedToolExposure = new Map<number, Snapshot>();\n const stagedToolSelections = new Map<string, Selection>();\n\n const stagedUsage = new Map<\n number,\n {\n readonly inputTokens: number;\n readonly outputTokens: number;\n readonly costMicrousd: number;\n readonly modelUsage: ReadonlyArray<ModelCallUsage>;\n }\n >();\n\n // Staging also backs the cumulative summary; keep it intact and track canonical prefixes.\n const committedUsageLengths = new Map<number, number>();\n\n const recordCommittedUsage = (batch: CanonicalBatch) => {\n for (const record of batch.records) {\n if (record.payload._tag !== \"ModelResponseRecorded\") continue;\n const payload = record.payload;\n\n committedUsageLengths.set(\n payload.turn,\n Math.max(committedUsageLengths.get(payload.turn) ?? 0, payload.modelUsage?.length ?? 0),\n );\n }\n };\n\n const uncommittedModelUsage = () =>\n [...stagedUsage.entries()].flatMap(([turn, usage]) =>\n usage.modelUsage.slice(committedUsageLengths.get(turn) ?? 0),\n );\n\n // Like stagedUsage, these counts remain relative to the initial journal snapshot.\n const stagedUnobservedCalls = new Map<number, number>();\n\n let interruptedUsage = records.some(\n ({ record }) =>\n record.payload._tag === \"ModelResponseInterrupted\" && record.payload.runId === runId,\n );\n\n const checkedUsageTotal = (\n field: string,\n value: number,\n ): Effect.Effect<number, RunJournalError> =>\n Schema.decodeEffect(Schema.Natural)(value).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run usage summary exceeds safe-integer bounds at ${field}`,\n cause,\n }),\n ),\n );\n\n const addUsageTotal = (field: string, left: number, right: number) =>\n checkedUsageTotal(field, left + right);\n\n const subtractUsageTotal = (field: string, left: number, right: number) =>\n checkedUsageTotal(field, left - right);\n\n const currentUsageSummary = (): Effect.Effect<RunUsageSummary, RunJournalError> =>\n Effect.gen(function* () {\n const stagedCalls = [...stagedUsage.values()].flatMap((usage) => usage.modelUsage);\n let unobservedModelCalls = journal.usage.unobservedModelCalls ?? 0;\n\n for (const count of stagedUnobservedCalls.values()) {\n unobservedModelCalls = yield* addUsageTotal(\n \"unobservedModelCalls\",\n unobservedModelCalls,\n count,\n );\n }\n const detailedCalls = [...journal.usage.modelUsage, ...stagedCalls];\n\n const detailed = yield* summarizeModelUsage(\n detailedCalls,\n journal.usage.summarizedModelUsage,\n ).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: \"Run detailed usage exceeds safe-integer accounting bounds\",\n cause,\n }),\n ),\n );\n\n let inputTokens = journal.usage.inputTokens;\n let outputTokens = journal.usage.outputTokens;\n let costMicrousd = journal.usage.costMicrousd;\n\n for (const usage of stagedUsage.values()) {\n inputTokens = yield* addUsageTotal(\"inputTokens\", inputTokens, usage.inputTokens);\n outputTokens = yield* addUsageTotal(\"outputTokens\", outputTokens, usage.outputTokens);\n costMicrousd = yield* addUsageTotal(\"costMicrousd\", costMicrousd, usage.costMicrousd);\n }\n\n const modelCalls = yield* addUsageTotal(\n \"modelCalls\",\n journal.usage.modelCalls,\n stagedCalls.length,\n );\n\n const legacyCalls = yield* subtractUsageTotal(\n \"legacy.modelCalls\",\n modelCalls,\n detailed.modelCalls,\n );\n\n const legacyInput = yield* subtractUsageTotal(\n \"legacy.inputTokens\",\n inputTokens,\n detailed.inputTokens.total,\n );\n\n const legacyOutput = yield* subtractUsageTotal(\n \"legacy.outputTokens\",\n outputTokens,\n detailed.outputTokens.total,\n );\n\n const legacyCost = yield* subtractUsageTotal(\n \"legacy.costMicrousd\",\n costMicrousd,\n detailed.costMicrousd,\n );\n\n if (legacyCalls === 0 && (legacyInput !== 0 || legacyOutput !== 0 || legacyCost !== 0)) {\n return yield* RunJournalError.make({\n message: \"Run aggregate usage has legacy totals without a legacy model call\",\n });\n }\n const byModel = [...detailed.byModel];\n\n if (legacyCalls > 0) {\n const existingIndex = byModel.findIndex(\n (group) =>\n group.provider === \"unknown\" &&\n group.model === \"legacy-record\" &&\n group.responseModel === undefined &&\n group.serviceTier === undefined &&\n group.pricingVersion === undefined,\n );\n\n const existing = existingIndex < 0 ? undefined : byModel[existingIndex];\n\n const legacyGroup = ModelUsageGroup.make({\n provider: \"unknown\",\n model: \"legacy-record\",\n modelCalls: yield* addUsageTotal(\n \"byModel.modelCalls\",\n existing?.modelCalls ?? 0,\n legacyCalls,\n ),\n inputTokens: InputTokenUsage.make({\n total: yield* addUsageTotal(\n \"byModel.inputTokens.total\",\n existing?.inputTokens.total ?? 0,\n legacyInput,\n ),\n uncached: yield* addUsageTotal(\n \"byModel.inputTokens.uncached\",\n existing?.inputTokens.uncached ?? 0,\n legacyInput,\n ),\n cacheRead: existing?.inputTokens.cacheRead ?? 0,\n cacheWrite: existing?.inputTokens.cacheWrite ?? 0,\n }),\n outputTokens: OutputTokenUsage.make({\n total: yield* addUsageTotal(\n \"byModel.outputTokens.total\",\n existing?.outputTokens.total ?? 0,\n legacyOutput,\n ),\n text: yield* addUsageTotal(\n \"byModel.outputTokens.text\",\n existing?.outputTokens.text ?? 0,\n legacyOutput,\n ),\n reasoning: existing?.outputTokens.reasoning ?? 0,\n }),\n costMicrousd: yield* addUsageTotal(\n \"byModel.costMicrousd\",\n existing?.costMicrousd ?? 0,\n legacyCost,\n ),\n });\n\n if (existingIndex < 0) byModel.push(legacyGroup);\n else byModel[existingIndex] = legacyGroup;\n }\n\n const uncached = yield* addUsageTotal(\n \"inputTokens.uncached\",\n detailed.inputTokens.uncached,\n legacyInput,\n );\n\n const text = yield* addUsageTotal(\n \"outputTokens.text\",\n detailed.outputTokens.text,\n legacyOutput,\n );\n\n return RunUsageSummary.make({\n modelCalls,\n inputTokens: InputTokenUsage.make({\n total: inputTokens,\n // Legacy aggregate inputs are conservatively classified as uncached.\n uncached,\n cacheRead: detailed.inputTokens.cacheRead,\n cacheWrite: detailed.inputTokens.cacheWrite,\n }),\n outputTokens: OutputTokenUsage.make({\n total: outputTokens,\n text,\n reasoning: detailed.outputTokens.reasoning,\n }),\n costMicrousd,\n byModel,\n unobservedModelCalls,\n usageStatus:\n legacyCalls > 0 || unobservedModelCalls > 0 || interruptedUsage\n ? detailed.usageStatus === \"unknown\"\n ? \"unknown\"\n : \"partial\"\n : detailed.usageStatus,\n pricingStatus:\n legacyCalls > 0 || unobservedModelCalls > 0 || interruptedUsage\n ? detailed.pricingStatus === \"unknown\"\n ? \"unknown\"\n : \"partial\"\n : detailed.pricingStatus,\n });\n });\n\n const recordedCompletion = records.find(\n (envelope) => envelope.record.recordId === runCompletedRecordId(runId),\n )?.record.payload;\n\n if (recordedCompletion !== undefined) {\n if (recordedCompletion._tag !== \"RunCompleted\" || recordedCompletion.runId !== runId) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has an invalid terminal completion marker`,\n });\n }\n\n const response = [...records]\n .reverse()\n .find(\n (envelope) =>\n envelope.record.payload._tag === \"ModelResponseRecorded\" &&\n envelope.record.payload.runId === runId,\n )?.record.payload;\n\n if (response?._tag !== \"ModelResponseRecorded\") {\n return yield* RunJournalError.make({\n message: `Run ${runId} has a terminal completion marker without a response`,\n });\n }\n const declared = yield* declaredToolCalls(response.messages);\n const calls = declared.application;\n\n let expectedOutput: {\n readonly encoded: Schema.Json;\n readonly decoded: OutputSchema[\"Type\"];\n };\n\n if (calls.length > 0) {\n const completion = agent.definition.completion;\n const call = calls[0];\n\n const actionCompletion = agent.definition.completionFromTools?.find(\n (declaration) => declaration.tool === call?.name,\n );\n\n const settled =\n call === undefined\n ? undefined\n : records.find(\n (envelope) =>\n envelope.record.payload._tag === \"ToolCallSettled\" &&\n envelope.record.payload.runId === runId &&\n envelope.record.payload.toolCallId === call.id,\n )?.record.payload;\n\n if (\n calls.length !== 1 ||\n call === undefined ||\n (call.name !== completion?.tool && actionCompletion === undefined) ||\n settled?._tag !== \"ToolCallSettled\" ||\n settled.toolName !== call.name ||\n settled.isFailure\n ) {\n return yield* RunJournalError.make({\n message: `Run ${runId} has a terminal completion marker without one successful declared completion Tool result`,\n });\n }\n\n const projected = yield* (\n actionCompletion !== undefined\n ? AgentRuntime.projectCompletionFromToolOutput(\n agent,\n actionCompletion,\n call.params,\n settled.result,\n )\n : completion !== undefined\n ? Effect.map(\n AgentRuntime.projectCompletionOutput(\n agent,\n completion,\n call.params,\n settled.result,\n ),\n Option.some,\n )\n : Effect.succeed(Option.none())\n ).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} completion Tool output failed recovery projection`,\n cause,\n }),\n ),\n );\n\n if (Option.isNone(projected)) {\n return yield* RunJournalError.make({\n message: `Run ${runId} completion Tool declined its recorded terminal output`,\n });\n }\n expectedOutput = projected.value;\n } else {\n const responseText = yield* terminalAssistantText(response.messages);\n\n expectedOutput = yield* AgentRuntime.decodeFinalOutput(agent, responseText).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} final response output failed recovery decoding`,\n cause,\n }),\n ),\n );\n }\n\n const boundedExpectedOutput = yield* decodePersisted(expectedOutput.encoded).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} reconstructed output exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const [expectedOutputDigest, recordedOutputDigest] = yield* Effect.all([\n withCrypto(digestJson(boundedExpectedOutput)),\n withCrypto(digestJson(recordedCompletion.output)),\n ]).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} completion output comparison failed`,\n cause,\n }),\n ),\n );\n\n if (expectedOutputDigest !== recordedOutputDigest) {\n return yield* RunJournalError.make({\n message: `Run ${runId} terminal completion output disagrees with its canonical response or Tool result`,\n });\n }\n\n const expectedRunDisposition =\n recordedCompletion.finishReason === \"budget-exhausted\"\n ? undefined\n : yield* AgentRuntime.encodeRunDisposition(agent, expectedOutput.decoded).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} run disposition failed recovery projection`,\n cause,\n }),\n ),\n );\n\n if (\n (expectedRunDisposition === undefined) !==\n (recordedCompletion.runDisposition === undefined)\n ) {\n return yield* RunJournalError.make({\n message: `Run ${runId} terminal run disposition disagrees with its reconstructed output`,\n });\n }\n if (\n expectedRunDisposition !== undefined &&\n recordedCompletion.runDisposition !== undefined\n ) {\n const boundedExpectedRunDisposition = yield* decodePersisted(expectedRunDisposition).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} reconstructed run disposition exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const [expectedRunDispositionDigest, recordedRunDispositionDigest] = yield* Effect.all([\n withCrypto(digestJson(boundedExpectedRunDisposition)),\n withCrypto(digestJson(recordedCompletion.runDisposition)),\n ]).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Run ${runId} run disposition comparison failed`,\n cause,\n }),\n ),\n );\n\n if (expectedRunDispositionDigest !== recordedRunDispositionDigest) {\n return yield* RunJournalError.make({\n message: `Run ${runId} terminal run disposition disagrees with its reconstructed output`,\n });\n }\n }\n\n return {\n _tag: \"completed\" as const,\n result: recordedCompletion.output,\n ...(recordedCompletion.runDisposition === undefined\n ? {}\n : { runDisposition: recordedCompletion.runDisposition }),\n ...(recordedCompletion.finishReason === undefined\n ? {}\n : { finishReason: recordedCompletion.finishReason }),\n ...(recordedCompletion.exhausted === undefined\n ? {}\n : { exhausted: recordedCompletion.exhausted }),\n usageSummary: yield* currentUsageSummary(),\n };\n }\n // Summaries cover only prior Runs. Pruning and rollover also map fully settled\n // current-Run records and preserves the canonical instruction/input block during replay.\n let ownerFirstSequence: CanonicalSequence | undefined;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (\"runId\" in payload && payload.runId === runId) {\n ownerFirstSequence = envelope.sequence;\n break;\n }\n }\n /** Pre-existing joins of this host Run, loaded lazily at the first drain seam. */\n let joinBacklog: ReadonlyArray<JoinSnapshot> | undefined;\n /** Joined inputs already handed to the engine during THIS Attempt (never re-deliver). */\n const deliveredJoinInputs = new Set<string>();\n // Canonical encoded parameters per declared call, for the approval request digest: seeded\n // by `commitResponse` (which the engine invokes before approval preflight) and by the\n // resumed batch's declared calls.\n const encodedParamsByCallId = new Map<string, unknown>();\n // Declared Tool name per call: the subagent join/sibling-settle appends rebuild exact\n // `ToolCallSettled` records outside the engine's results commit, so the declared name must\n // be recoverable per call id (seeded from canonical prepared records, the resumed batch,\n // and every `commitResponse`).\n const declaredNamesByCallId = new Map<string, string>();\n // Canonical subagent lifecycle state of this Run (SUB-016): seeded from canonical records,\n // advanced by the establish/join hook closures below, and consulted on every replay so an\n // identical establishment converges on the one existing child.\n const subagentState = subagentRecordsOf(records, runId);\n\n for (const [callId, name] of subagentState.preparedNames) {\n declaredNamesByCallId.set(callId, name);\n }\n if (pending !== undefined) {\n for (const call of pending.calls) {\n encodedParamsByCallId.set(call.id, call.params);\n declaredNamesByCallId.set(call.id, call.name);\n }\n }\n // Task #12 (WP1 `resume.leadingMessages`): the pending canonical response's messages\n // BEFORE its first assistant message — Turn-1 evaluated instructions + input, or steering\n // committed inside the pending record — re-enter official history through the engine so\n // the resumed live model context does not silently drop them.\n let resumeLeadingMessages: Prompt.Prompt | undefined;\n let resumeResponseMessages: Prompt.Prompt | undefined;\n\n if (pending !== undefined) {\n const pendingMessages = yield* decodePrompt(pending.messages).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message:\n \"Pending ModelResponseRecorded messages are not Schema-encoded Prompt messages\",\n cause,\n }),\n ),\n );\n\n const firstAssistant = pendingMessages.content.findIndex(\n (message) => message.role === \"assistant\",\n );\n\n if (firstAssistant > 0) {\n resumeLeadingMessages = Prompt.fromMessages(\n pendingMessages.content.slice(0, firstAssistant),\n );\n }\n if (firstAssistant >= 0) {\n resumeResponseMessages = Prompt.fromMessages(\n pendingMessages.content.slice(firstAssistant),\n );\n }\n }\n\n let currentToolTurn: { readonly turn: number; readonly turnId: TurnId } | undefined =\n pending === undefined ? undefined : { turn: pending.turn, turnId: pending.turnId };\n\n // Terminal sibling results observed from the Run event stream, keyed by Tool Call id: the\n // suspension seam commits each settled non-waiting sibling as a per-call late-settle batch\n // BEFORE the `waitingForChild` suspension so no sibling effect is lost to it (plan §2).\n const siblingResults = new Map<\n string,\n { readonly toolCallId: ToolCallId; readonly result: unknown; readonly isFailure: boolean }\n >();\n\n const budgetRejectedCalls = new Set<string>();\n // Step-hook coordinator failures are re-wrapped by the engine as `DurableStepError` in the\n // handler channel; this side channel preserves the original failure so the Attempt aborts\n // (obligation still owed) instead of settling the Run `failed` on an infrastructure fault.\n const haltRef = yield* Ref.make<DurableWorkerFailure | undefined>(undefined);\n const yieldSignal = yield* Deferred.make<void>();\n\n const recordHalt = <A, R>(\n effect: Effect.Effect<A, DurableWorkerFailure, R>,\n ): Effect.Effect<A, CoordinatorHalt, R> =>\n effect.pipe(\n Effect.tapError((failure) => Ref.set(haltRef, failure)),\n Effect.mapError((failure) => new CoordinatorHalt(failure)),\n );\n\n interface RunState {\n readonly baseLen: number | undefined;\n readonly lastCommitLen: number;\n readonly history: Prompt.Prompt | undefined;\n readonly pendingTurn: { readonly turn: number; readonly turnId: TurnId } | undefined;\n readonly completedOutput: PersistedJson | undefined;\n readonly completedRunDisposition: PersistedJson | undefined;\n readonly completedFinishReason: \"budget-exhausted\" | undefined;\n readonly completedExhausted: ExhaustedLimit | undefined;\n }\n\n const stateRef = yield* Ref.make<RunState>({\n baseLen: undefined,\n lastCommitLen: 0,\n history: undefined,\n pendingTurn: undefined,\n completedOutput: undefined,\n completedRunDisposition: undefined,\n completedFinishReason: undefined,\n completedExhausted: undefined,\n });\n\n const turnCounter = yield* Ref.make(journal.committedTurns);\n\n const idGenerator: (typeof IdGenerator)[\"Service\"] = {\n nextThreadId: Effect.succeed(submission.threadId),\n nextRunId: Effect.succeed(runId),\n nextTurnId: Ref.modify(turnCounter, (turn) => [turnIdForRun(runId, turn + 1), turn + 1]),\n };\n\n // Track live Prompt boundaries only. The journal owns durable per-Turn commits and recovery;\n // successful-run ThreadHistory retention cannot replace those incremental commits.\n const onHistory = (history: Prompt.Prompt): Effect.Effect<void> =>\n Ref.update(stateRef, (state) =>\n state.baseLen === undefined\n ? {\n ...state,\n baseLen: history.content.length,\n // A fresh Run's first commit starts at the engine-provided history boundary so\n // the evaluated instruction + user messages become canonical inside Turn 1 (D8).\n // A resumed Run's boundary is the engine's re-evaluated initial prompt: those\n // messages are already canonical inside the original Turn 1 and never re-enter\n // (a pending batch resume always implies at least one committed Turn).\n lastCommitLen:\n journal.committedTurns === 0\n ? journal.historyBefore.content.length\n : history.content.length,\n history,\n }\n : { ...state, history },\n );\n\n // On resume the model must see the canonical prompt (committed Turns included) plus what\n // THIS Attempt appended — never the engine's re-appended instructions + input. For a batch\n // resume the canonical boundary excludes the pending Turn: its messages re-enter official\n // history through the engine's continuation and ride the slice after `baseLen`.\n const resumeContext: RunContextHook<never, never> = {\n prepare: ({ source }) =>\n Ref.get(stateRef).pipe(\n Effect.map((state) => ({\n prompt: Prompt.fromMessages([\n ...resumeProjection.prompt.content,\n ...source.content.slice(state.baseLen ?? source.content.length),\n ]),\n })),\n ),\n };\n\n const externalContext = runContextPreparation.hook;\n\n const preparedContext: RunContextHook<RunContextPreparationError, never> | undefined =\n externalContext === undefined\n ? journal.committedTurns === 0\n ? undefined\n : resumeContext\n : {\n prepare: (request) =>\n (journal.committedTurns === 0\n ? Effect.succeed({ prompt: request.source })\n : resumeContext.prepare(request)\n ).pipe(\n Effect.flatMap(({ prompt }) =>\n externalContext.prepare({\n ...request,\n source: prompt,\n }),\n ),\n ),\n };\n\n const durability: RunDurabilityHook<CoordinatorHalt | CompactionError, never> = {\n noteToolExposure: (turn, snapshot) =>\n Effect.sync(() => {\n stagedToolExposure.set(turn, snapshot);\n }),\n reservePolicyUsage: (usage) =>\n recordHalt(\n Effect.gen(function* () {\n const recordId = decodeRecordIdSync(\n `policy:${runId}:${usage.programmaticToolCalls}:${usage.finalizationUsed}`,\n );\n\n if (knownIds.has(recordId)) return;\n\n const record = yield* makeEnvelope(\n recordId,\n RunPolicyUsageReserved.make({ runId, ...usage }),\n );\n\n yield* hit(\"policy:before-reservation-append\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: decodeBatchIdSync(recordId),\n producerId: config.producerId,\n records: [record],\n }),\n );\n knownIds.add(recordId);\n yield* hit(\"policy:after-reservation-append\");\n }),\n ),\n commitResponse: (commit) =>\n recordHalt(\n Effect.gen(function* () {\n const canonicalTurn = commit.turn;\n\n currentToolTurn = { turn: canonicalTurn, turnId: commit.turnId };\n for (const call of commit.calls) {\n encodedParamsByCallId.set(call.toolCallId, call.parameters);\n declaredNamesByCallId.set(call.toolCallId, call.toolName);\n }\n const responseId = modelResponseRecordId(runId, canonicalTurn);\n\n if (knownIds.has(responseId)) return;\n const state = yield* Ref.get(stateRef);\n const history = state.history;\n\n if (history === undefined) {\n return yield* RunJournalError.make({\n message: `Turn ${canonicalTurn} committed a response before official history advanced`,\n });\n }\n // D8 extension (decision point 6): the pending slice — evaluated instructions +\n // input for Turn 1, queued steering for later Turns — becomes canonical as the\n // leading messages of this response batch.\n const pendingSlice = history.content.slice(state.lastCommitLen);\n const createdAt = yield* nowUtc;\n\n const batch = yield* withCrypto(\n turnResponseBatch({\n toolExposure: commit.toolExposure,\n runId,\n turn: canonicalTurn,\n turnId: commit.turnId,\n appended: [...pendingSlice, ...commit.responseMessages.content],\n producerId: config.producerId,\n deploymentId: config.deploymentId,\n createdAt,\n ...(canonicalTurn === 1 && pendingSlice.length > 0\n ? { runScopedPrefixLength: pendingSlice.length }\n : {}),\n usage: stagedUsage.get(canonicalTurn),\n unobservedModelCalls: stagedUnobservedCalls.get(canonicalTurn),\n }),\n );\n\n yield* appendBatch(ctx, batch);\n recordCommittedUsage(batch);\n for (const record of batch.records) knownIds.add(record.recordId);\n yield* hit(\"turn:after-response-append\");\n }),\n ),\n prepareToolCalls: (calls) =>\n recordHalt(\n Effect.gen(function* () {\n const first = calls[0];\n\n if (first === undefined) return;\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: \"Tool Calls were prepared before any canonical response commit\",\n });\n }\n // The prepared batch is atomic: one canonical record implies all of them, so a\n // batch-identity replay (resume) is skipped wholesale.\n if (knownIds.has(toolCallPreparedRecordId(runId, turnInfo.turn, first.toolCallId))) {\n return;\n }\n const preparedRecords: Array<RecordEnvelope> = [];\n\n for (const call of calls) {\n const parameters = yield* decodePersisted(call.parameters).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Tool Call ${call.toolCallId} parameters exceed canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const parametersDigest = yield* withCrypto(digestJson(parameters));\n\n preparedRecords.push(\n yield* makeEnvelope(\n toolCallPreparedRecordId(runId, turnInfo.turn, call.toolCallId),\n ToolCallPrepared.make({\n runId,\n turnId: turnInfo.turnId,\n turn: turnInfo.turn,\n toolCallId: call.toolCallId,\n toolName: call.toolName,\n parameters,\n parametersDigest,\n executionKind: call.executionKind,\n }),\n ),\n );\n }\n const head = preparedRecords[0];\n\n if (head === undefined) return;\n yield* hit(\"tools:before-prepared-append\");\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: turnPreparedBatchId(runId, turnInfo.turn),\n producerId: config.producerId,\n records: [head, ...preparedRecords.slice(1)],\n }),\n );\n for (const record of preparedRecords) knownIds.add(record.recordId);\n yield* hit(\"tools:after-prepared-append\");\n }),\n ),\n step: {\n lookup: (key) =>\n Effect.sync(() => {\n const output = stepOutputs.get(\n toolStepSettledRecordId(runId, key.toolCallId, key.stepName),\n );\n\n return output === undefined ? Option.none() : Option.some({ encodedOutput: output });\n }),\n commit: (key, encodedOutput) =>\n recordHalt(\n Effect.gen(function* () {\n const recordId = toolStepSettledRecordId(runId, key.toolCallId, key.stepName);\n\n if (knownIds.has(recordId)) return;\n\n const output = yield* decodePersisted(encodedOutput).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Durable Step ${key.stepName} output exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const outputDigest = yield* withCrypto(digestJson(output));\n\n const envelope = yield* makeEnvelope(\n recordId,\n ToolStepSettled.make({\n runId,\n toolCallId: key.toolCallId,\n stepName: key.stepName,\n output,\n outputDigest,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: toolStepSettledBatchId(runId, key.toolCallId, key.stepName),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n knownIds.add(recordId);\n stepOutputs.set(recordId, output);\n yield* hit(\"step:after-step-append\");\n }),\n ),\n },\n noteTurnUsage: (usage) =>\n Effect.sync(() => {\n // Accumulate, never replace: a compaction summarizer and the\n // Turn's own response stage into the same canonical Turn.\n const key = usage.turn;\n const prior = stagedUsage.get(key);\n\n stagedUsage.set(key, {\n inputTokens: (prior?.inputTokens ?? 0) + usage.usage.inputTokens.total,\n outputTokens: (prior?.outputTokens ?? 0) + usage.usage.outputTokens.total,\n costMicrousd: (prior?.costMicrousd ?? 0) + usage.usage.costMicrousd,\n modelUsage: [...(prior?.modelUsage ?? []), usage.usage],\n });\n }),\n commitCompaction: (commit) =>\n Effect.gen(function* () {\n const canonicalTurn = commit.turn;\n const recordId = compactionRecordId(runId, canonicalTurn, commit.kind);\n\n if (knownIds.has(recordId)) {\n return yield* CompactionError.make({\n message: \"Compaction is already committed for this Turn and kind\",\n });\n }\n\n let sourceJournal = journal;\n let sourceBoundaries = boundaries;\n\n if (commit.kind !== \"summarize\") {\n // Results must be canonical before pruning or rollover can cover them. Newly committed\n // compactions remain overlays on this Attempt's append-only source, so omit those\n // overlays while reconstructing the exact source-to-record mapping.\n yield* recordHalt(commitPendingTurn);\n const tail = yield* Ref.get(ctx.tailRef);\n\n sourceBoundaries = [];\n sourceJournal = yield* recordHalt(\n projectRunJournalStream(\n Stream.concat(\n canonical,\n canonicalRange(ctx.threadId, tail.sequence, canonicalThrough),\n ).pipe(\n Stream.filter(\n (envelope) =>\n envelope.record.payload._tag !== \"CompactionCreated\" ||\n envelope.sequence <= canonicalThrough,\n ),\n ),\n runId,\n (boundary) => sourceBoundaries.push(boundary),\n journalSeed,\n ),\n );\n }\n\n // Summaries use the initial prior-Run boundaries; pruning and rollover also admit\n // complete current-Run boundaries from the fresh canonical source above.\n const coverable = sourceBoundaries.filter(\n (boundary) =>\n commit.kind !== \"summarize\" ||\n ownerFirstSequence === undefined ||\n boundary.sequence < ownerFirstSequence,\n );\n\n if (coverable.length === 0) {\n return yield* CompactionError.make({\n message:\n commit.kind === \"rollover\"\n ? \"Durable rollover requires complete canonical records\"\n : \"Durable compaction requires eligible canonical records\",\n });\n }\n\n // Compare each visible message once. A transformed source can authorize only its\n // exact canonical prefix; no per-candidate rereads or full encoded Prompt copies.\n let matchingPrefix = 0;\n let requiredThrough = 0;\n const comparisonLimit = Math.min(sourceJournal.prompt.content.length, commit.through);\n\n for (let index = 0; index < commit.through; index += 1) {\n const message = commit.source.content[index];\n\n if (\n message !== undefined &&\n (commit.kind === \"clear-tool-results\"\n ? message.role === \"tool\"\n : message.role !== \"system\")\n )\n requiredThrough = index + 1;\n if (index >= comparisonLimit || index !== matchingPrefix || message === undefined)\n continue;\n const canonicalMessage = sourceJournal.prompt.content[index];\n\n if (canonicalMessage === undefined) continue;\n\n const encode = (entry: Prompt.Message) =>\n Schema.encodeEffect(Prompt.Message)(entry).pipe(\n Effect.mapError((cause) =>\n CompactionError.make({\n message: \"Could not encode the canonical compaction prefix\",\n cause,\n }),\n ),\n );\n\n const left = yield* encode(canonicalMessage);\n const right = yield* encode(message);\n\n if (JSON.stringify(left) === JSON.stringify(right)) matchingPrefix += 1;\n }\n\n let lastCovered: JournalBoundary | undefined;\n\n for (let index = 0; index < coverable.length; index += 1) {\n const candidate = coverable[index];\n\n if (candidate === undefined) continue;\n const following = coverable[index + 1];\n\n if (following !== undefined && following.tag !== \"ModelResponseRecorded\") continue;\n\n const length = candidate.promptLength;\n\n if (length === 0 || length > commit.through) continue;\n if (length < requiredThrough || length > matchingPrefix) continue;\n lastCovered = candidate;\n }\n if (lastCovered === undefined) {\n return yield* CompactionError.make({\n message:\n commit.kind === \"rollover\"\n ? \"Rollover coverage cannot be mapped to complete canonical records\"\n : \"Compaction coverage cannot be mapped to complete canonical records\",\n });\n }\n const coveredSequence = lastCovered.sequence;\n\n if (\n commit.kind !== \"summarize\" &&\n sourceBoundaries.some(\n (boundary) =>\n boundary.incomplete === true &&\n boundary.terminalPriorRun !== true &&\n boundary.sequence <= coveredSequence,\n )\n ) {\n return yield* CompactionError.make({\n message: \"Compaction cannot cover an incomplete Tool batch\",\n });\n }\n if (commit.kind === \"summarize\" && (commit.summary ?? \"\").trim().length === 0) {\n return yield* CompactionError.make({\n message: \"A summarize compaction commit carried no summary\",\n });\n }\n\n const payload = yield* Schema.decodeEffect(CompactionCreated)({\n _tag: \"CompactionCreated\",\n runId,\n turn: canonicalTurn,\n kind: commit.kind,\n coversThrough: lastCovered.sequence,\n ...(commit.kind === \"summarize\" ? { summary: commit.summary } : {}),\n ...(commit.kind === \"rollover\" && commit.handoff !== undefined\n ? { handoff: commit.handoff }\n : {}),\n }).pipe(\n Effect.mapError((cause) =>\n CompactionError.make({\n message: \"Compaction decision exceeds canonical persistence bounds\",\n cause,\n }),\n ),\n );\n\n const envelope = yield* recordHalt(makeEnvelope(recordId, payload));\n\n yield* recordHalt(hit(\"compaction:before-canonical-append\"));\n yield* recordHalt(\n appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: compactionBatchId(runId, canonicalTurn, commit.kind),\n producerId: config.producerId,\n records: [envelope],\n }),\n ),\n );\n knownIds.add(recordId);\n yield* recordHalt(hit(\"compaction:after-canonical-append\"));\n if (commit.kind !== \"clear-tool-results\")\n yield* recordHalt(saveRecoveryCheckpoint(recordId));\n }),\n };\n\n /** Digest of one declared call's canonical encoded parameters (same family as prepared). */\n const approvalParametersDigest = (\n toolCallId: string,\n ): Effect.Effect<Digest, DurableWorkerFailure> =>\n Effect.gen(function* () {\n if (!encodedParamsByCallId.has(toolCallId)) {\n return yield* RunJournalError.make({\n message: `Tool Call ${toolCallId} requested approval before its response commit`,\n });\n }\n\n const parameters = yield* decodePersisted(encodedParamsByCallId.get(toolCallId)).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Tool Call ${toolCallId} parameters exceed canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n return yield* withCrypto(digestJson(parameters));\n });\n\n /**\n * Append the canonical approval records for one declared call: the `ToolApprovalRequested`\n * record — plus the immediate `ToolApprovalDecided` for a policy-auto or intent-backed\n * decision, one atomic batch — or the decision alone when the request is already canonical.\n * Batch identity: the Turn's FIRST canonical approval append owns\n * `turn-approvals:{runId}:{turn}`; later appends of the same Turn (across suspension\n * cycles) use deterministic per-call batches so committed batch content is never\n * contradicted; decision-only appends use `approval-decision:{sid}:{toolCallId}`. Record\n * identity dedupes every replay; an identity conflict means another pass already committed\n * the same records.\n */\n const appendApprovalRecords = (\n turnInfo: { readonly turn: number; readonly turnId: TurnId },\n toolCallId: ToolCallId,\n toolName: string,\n decided:\n | {\n readonly decision: ApprovalDecision;\n readonly resolver: string;\n readonly reason: string;\n }\n | undefined,\n ): Effect.Effect<void, DurableWorkerFailure> =>\n Effect.gen(function* () {\n const requestRecordId = toolApprovalRequestRecordId(runId, turnInfo.turn, toolCallId);\n const decisionRecordId = toolApprovalDecisionRecordId(runId, turnInfo.turn, toolCallId);\n const envelopes: Array<RecordEnvelope> = [];\n const appendRequest = !knownIds.has(requestRecordId);\n\n if (appendRequest) {\n const parametersDigest = yield* approvalParametersDigest(toolCallId);\n\n envelopes.push(\n yield* makeEnvelope(\n requestRecordId,\n ToolApprovalRequested.make({\n runId,\n turnId: turnInfo.turnId,\n turn: turnInfo.turn,\n toolCallId,\n toolName,\n parametersDigest,\n }),\n ),\n );\n }\n if (decided !== undefined && !knownIds.has(decisionRecordId)) {\n envelopes.push(\n yield* makeEnvelope(\n decisionRecordId,\n ToolApprovalDecided.make({\n runId,\n turn: turnInfo.turn,\n toolCallId,\n decision: decided.decision,\n resolver: decided.resolver,\n reason: decided.reason,\n }),\n ),\n );\n }\n const head = envelopes[0];\n\n if (head !== undefined) {\n const batchId = appendRequest\n ? approvalRequestedTurns.has(turnInfo.turn)\n ? decodeBatchId(`approval-request:${runId}:${turnInfo.turn}:${toolCallId}`)\n : turnApprovalsBatchId(runId, turnInfo.turn)\n : approvalDecisionBatchId(submissionId, toolCallId);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId,\n producerId: config.producerId,\n records: [head, ...envelopes.slice(1)],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n for (const record of envelopes) knownIds.add(record.recordId);\n }\n if (appendRequest) {\n approvalRequestedTurns.add(turnInfo.turn);\n yield* hit(\"approval:after-request-append\");\n }\n if (decided !== undefined) {\n canonicalApprovalDecisions.set(toolCallId, decided.decision);\n }\n });\n\n /**\n * Durable approval hook (plan §2.6). Resolution order per declared call: (1) a canonical\n * `ToolApprovalDecided` record — the deterministic decision authority across Attempts;\n * (2) a durable `resolveApproval` intent, appended canonically before it is honored;\n * (3) the optional policy-auto delegate, whose immediate decision becomes canonical\n * (request + decision, one atomic batch) before it is honored; (4) otherwise the canonical\n * `ToolApprovalRequested` record is appended and the call reports unresolved — with the\n * request canonical, \"waiting for explicit approval\" is a safe durable boundary\n * (durability §8), the engine raises `AgentApprovalPending`, and the Attempt suspends\n * without settling. A denied decision fails the Run through the engine's\n * `AgentApprovalDenied` path with the denial already canonical.\n */\n const approval: RunApprovalHook<CoordinatorHalt, never> = {\n request: (request) =>\n recordHalt(\n Effect.gen(function* () {\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: `Tool Call ${request.toolCallId} requested approval before any canonical response commit`,\n });\n }\n const toolCallId = request.toolCallId;\n const canonical = canonicalApprovalDecisions.get(toolCallId);\n\n if (canonical !== undefined) {\n return canonical === \"approved\"\n ? { _tag: \"approved\" as const }\n : { _tag: \"denied\" as const };\n }\n const intent = approvalIntents.get(toolCallId);\n\n if (intent !== undefined) {\n yield* appendApprovalRecords(turnInfo, toolCallId, request.toolName, {\n decision: intent.decision,\n resolver: intent.resolver,\n reason: intent.reason,\n });\n\n return intent.decision === \"approved\"\n ? { _tag: \"approved\" as const, reason: intent.reason }\n : { _tag: \"denied\" as const, reason: intent.reason };\n }\n if (approvalResolver !== undefined) {\n const delegated = yield* approvalResolver.request(request);\n\n if (delegated._tag !== \"unresolved\") {\n yield* appendApprovalRecords(turnInfo, toolCallId, request.toolName, {\n decision: delegated._tag,\n resolver: APPROVAL_POLICY_RESOLVER,\n reason: boundedApprovalReason(\n delegated.reason,\n \"The configured approval policy decided immediately\",\n ),\n });\n\n return delegated;\n }\n }\n yield* appendApprovalRecords(turnInfo, toolCallId, request.toolName, undefined);\n\n return {\n _tag: \"unresolved\" as const,\n reason:\n \"The approval request is canonical and awaits a durable resolveApproval decision\",\n };\n }),\n ),\n };\n\n /**\n * Joining/Joined queued input hook (plan §2.5, DUR-016). At every engine drain seam:\n *\n * 1. Reattach first — pre-existing joins whose canonical `input:{sid}` record is not yet\n * prompt-covered re-deliver WITHOUT re-appending (record identity is the dedupe);\n * covered inputs are already inside the journal prompt. A `joining` row whose input is\n * canonical only lost its marker: it is repaired from history under the host's live\n * ownership (DUR-015). A `joining` row WITHOUT canonical input was never consumed and\n * is recovery's to revert — the hook never guesses at it (fail-closed).\n * 2. Claim fresh — `claimJoining` atomically transitions the contiguous ready prefix of\n * strictly-later queue sequences to `joining` under the host's ownership token (no\n * epoch bump; an admitted-not-ready row breaks the prefix). Per fresh claim: honor a\n * pre-consumption abort intent by reverting (revert-then-abort), else append the\n * deterministic `UserInputRecorded` (batch `submission-input:{sid}`, record\n * `input:{sid}`, `runId` = host Run, kind `steering`) → `join:after-canonical-append`\n * → `markJoined` → hand the engine the `RunInputCommand`.\n *\n * Delivered input is `steering`: the engine appends it to official history at the seam,\n * so the next Turn's response commit makes it model-visible canonically — exactly the\n * prompt-coverage rule recovery relies on.\n */\n const renderJoinedInput = ({\n input: encodedInput,\n messageAdmission,\n }: Pick<UserInputRecorded, \"input\" | \"messageAdmission\">) =>\n Effect.gen(function* () {\n if (Schema.is(FrameworkMessage)(messageAdmission))\n return yield* Schema.encodeEffect(Schema.fromJsonString(FrameworkMessage))(\n messageAdmission,\n ).pipe(\n Effect.mapError(() =>\n AgentInputError.make({ message: \"Invalid worker completion message\" }),\n ),\n );\n const inputPrompt = agent.definition.inputPrompt;\n\n if (inputPrompt === undefined) {\n return yield* renderInputPrompt(undefined, encodedInput, encodedInput);\n }\n\n const decodedInput = yield* Schema.decodeEffect(agent.definition.input)(\n encodedInput,\n ).pipe(\n Effect.mapError((cause) =>\n AgentInputError.make({\n message: cause.message,\n }),\n ),\n );\n\n return yield* renderInputPrompt(inputPrompt, decodedInput, encodedInput);\n });\n\n const input: RunInputHook<\n CoordinatorHalt | Agent.Failure<typeof agent>,\n Agent.DefinitionRequirements<(typeof agent)[\"definition\"]>\n > = {\n drain: (policy) =>\n Effect.gen(function* () {\n const state = yield* Ref.get(stateRef);\n\n // A completed Tool batch has returned its outcomes before this steering seam.\n // Persist them before a host ledger read can halt the Attempt and make those\n // ordinary calls appear unknown. A no-tool response still belongs to its later\n // continuation or atomic RunCompleted commit.\n if (\n state.pendingTurn !== undefined &&\n knownIds.has(modelResponseRecordId(runId, state.pendingTurn.turn))\n )\n yield* recordHalt(commitPendingTurn);\n\n const joinedInputs = yield* recordHalt(\n Effect.gen(function* () {\n const limit = policy === \"one\" ? 1 : MAX_JOIN_DRAIN;\n\n const joinedInputs: Array<Pick<UserInputRecorded, \"input\" | \"messageAdmission\">> =\n [];\n\n if (joinBacklog === undefined) {\n const hostSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n joinBacklog = hostSnapshot.joins;\n }\n for (const join of joinBacklog) {\n if (joinedInputs.length >= limit) break;\n const joinId = join.submissionId;\n\n if (deliveredJoinInputs.has(joinId)) continue;\n if (join.state !== \"joining\" && join.state !== \"joined\") continue;\n const existing = joinedInputEnvelopes.get(joinId);\n\n if (existing === undefined) continue;\n if (join.state === \"joining\") {\n // Canonical input without its joined marker (crash between the append and\n // `markJoined`): repair the marker from history before reattaching.\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: joinId,\n ownershipToken,\n recordId: existing.record.recordId,\n sequence: existing.sequence,\n }),\n );\n }\n deliveredJoinInputs.add(joinId);\n if (\n lastHostResponseSequence !== undefined &&\n lastHostResponseSequence > existing.sequence\n ) {\n continue;\n }\n const payload = existing.record.payload;\n\n if (payload._tag !== \"UserInputRecorded\") continue;\n joinedInputs.push(payload);\n }\n if (joinedInputs.length < limit) {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const claims = yield* ledger.claimJoining(\n ClaimJoiningRequest.make({\n threadId: submission.threadId,\n hostSubmissionId: submissionId,\n ownershipToken,\n maxCount: limit - joinedInputs.length,\n }),\n );\n\n if (claims.length > 0) {\n yield* hit(\"join:after-claim\");\n }\n for (const claim of claims) {\n const claimSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: claim.submissionId }),\n );\n\n if (claimSnapshot.abortIntent !== undefined) {\n // Aborted before the host consumed the input: honor the intent by\n // returning the claim to ready (revert-then-abort, plan §2.5); it settles\n // aborted once it heads the lane.\n yield* ledger.revertJoining(\n RevertJoiningRequest.make({ submissionId: claim.submissionId }),\n );\n continue;\n }\n const recordId = submissionInputRecordId(claim.submissionId);\n let sequence: CanonicalSequence;\n const existing = joinedInputEnvelopes.get(claim.submissionId);\n\n if (existing !== undefined) {\n // Defensive reattach: the exact record is already canonical, so only the\n // marker and the delivery remain (DUR-016 — never a duplicate append).\n sequence = existing.sequence;\n } else {\n const envelope = yield* makeEnvelope(\n recordId,\n UserInputRecorded.make({\n submissionId: claim.submissionId,\n kind: \"steering\",\n runId,\n input: claim.inputPayload,\n ...(claimSnapshot.submission.messageAdmission === undefined\n ? {}\n : { messageAdmission: claimSnapshot.submission.messageAdmission }),\n }),\n );\n\n const result = yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: submissionInputBatchId(claim.submissionId),\n producerId: config.producerId,\n records: [envelope],\n }),\n );\n\n sequence = result.firstSequence;\n knownIds.add(recordId);\n yield* hit(\"join:after-canonical-append\");\n }\n // Re-read the token: the concurrent lease renewal may rotate it mid-batch.\n const markToken = yield* Ref.get(tokenRef);\n\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: claim.submissionId,\n ownershipToken: markToken,\n recordId,\n sequence,\n }),\n );\n deliveredJoinInputs.add(claim.submissionId);\n joinedInputs.push({\n input: claim.inputPayload,\n ...(claimSnapshot.submission.messageAdmission === undefined\n ? {}\n : { messageAdmission: claimSnapshot.submission.messageAdmission }),\n });\n }\n }\n\n return joinedInputs;\n }),\n );\n\n return yield* Effect.forEach(joinedInputs, (joinedInput) =>\n renderJoinedInput(joinedInput).pipe(\n Effect.map((input): RunInputCommand => ({\n kind: \"steering\",\n input,\n })),\n ),\n );\n }),\n };\n\n /**\n * Durable child establishment: `establish` performs or replays\n * the idempotent get-or-create establishment protocol under the\n * parent's ownership fence and reports where the one child stands; `join` appends the\n * atomic `[SubagentJoined, ToolCallSettled]` settlement batch (SUB-019) and applies the\n * reservation release. Both use the halt side channel exactly like the durability/step\n * hooks: the engine wraps a `CoordinatorHalt` into `SubagentDurabilityError` in the\n * handler channel while the Attempt aborts with the original infrastructure failure.\n */\n const establishmentGate = yield* Semaphore.make(1);\n\n const establishSubagent = (\n request: RunSubagentEstablishRequest,\n ): Effect.Effect<ChildEstablishStatus, CoordinatorHalt> =>\n recordHalt(\n Effect.gen(function* () {\n const toolCallId = request.toolCallId;\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} established before any canonical response commit`,\n });\n }\n\n const denied = (errorTag: string, message: string): ChildEstablishStatus => ({\n _tag: \"denied\",\n errorTag,\n message: boundedText(message),\n });\n\n let requestedPayload = subagentState.requested.get(toolCallId);\n\n if (requestedPayload === undefined) {\n // FIRST establishment of this call: fix every digest fail-closed BEFORE any\n // durable mutation, then reserve → append the canonical request (spec §12\n // steps 2-3). Replays below proceed from the canonical record instead — the\n // recorded request, not the re-computed handler values, is the establishment\n // authority (SUB-016/SUB-018).\n if (request.depth !== delegationDepth + 1) {\n return denied(\n \"SubagentDepthUnsupported\",\n `The child depth must be exactly one greater than its source depth ${delegationDepth}`,\n );\n }\n\n // Resolve the exact declaration through ordinary host registration. Recovery\n // below uses the already-persisted request, never a newer registration.\n let targetDigests = request.targetDigests;\n\n if (request.target !== undefined) {\n if (request.target.id !== request.targetAgentId) {\n return denied(\n \"SubagentBindingUnavailable\",\n \"The child target identity differs from its Definition\",\n );\n }\n\n const binding = yield* resolveDefinitionBinding(\n registeredBindings,\n request.target,\n ).pipe(Effect.result);\n\n if (binding._tag === \"Failure\") {\n return denied(\"SubagentBindingUnavailable\", binding.failure.message);\n }\n if (\n targetDigests !== undefined &&\n (targetDigests.agent !== binding.success.digests.agent ||\n targetDigests.model !== binding.success.digests.model ||\n targetDigests.tools !== binding.success.digests.tools)\n ) {\n return denied(\n \"SubagentDigestsInvalid\",\n \"The explicit child digests differ from its exact registration\",\n );\n }\n targetDigests = binding.success.digests;\n }\n\n const decodedDigests = yield* decodeDefinitionDigests(targetDigests).pipe(\n Effect.option,\n );\n\n if (Option.isNone(decodedDigests)) {\n return denied(\n \"SubagentDigestsInvalid\",\n \"The declared child Binding digests are not valid stored digests\",\n );\n }\n\n const childInput = yield* decodePersisted(request.encodedChildInput).pipe(\n Effect.option,\n );\n\n if (Option.isNone(childInput)) {\n return denied(\n \"SubagentInputUnpersistable\",\n \"The prepared child input does not satisfy the canonical persistence bounds\",\n );\n }\n const grant = yield* decodePersisted(request.encodedGrant).pipe(Effect.option);\n\n const allocation = yield* decodePersisted(request.encodedAllocation).pipe(\n Effect.option,\n );\n\n if (Option.isNone(grant) || Option.isNone(allocation)) {\n return denied(\n \"SubagentDeclarationUnpersistable\",\n \"The delegation grant or allocation does not satisfy the canonical persistence bounds\",\n );\n }\n const decodedGrant = Schema.decodeUnknownOption(SubagentGrant)(grant.value);\n\n if (Option.isNone(decodedGrant))\n return denied(\"SubagentGrantInvalid\", \"The child authority grant is invalid\");\n if (request.policy === undefined || request.budget === undefined)\n return denied(\n \"SubagentBudgetInvalid\",\n \"New durable children require their full execution policy and subtree allocation\",\n );\n if (\n request.toolCallAllowance !== undefined &&\n !Schema.is(SubagentRequested.fields.toolCallAllowance)(request.toolCallAllowance)\n ) {\n return denied(\n \"SubagentAllowanceInvalid\",\n \"The child Tool Call allowance must be a positive integer\",\n );\n }\n if (request.policy !== undefined && !Schema.is(AgentPolicy)(request.policy)) {\n return denied(\"SubagentPolicyInvalid\", \"The resolved child policy is invalid\");\n }\n if (request.budget !== undefined) {\n if (!Schema.is(SubagentBudgetReservation)(request.budget)) {\n return denied(\"SubagentBudgetInvalid\", \"The shared delegation budget is invalid\");\n }\n\n const decodedAllocation = Schema.decodeUnknownOption(SubagentReservationAmounts)(\n allocation.value,\n );\n\n if (\n Option.isNone(decodedAllocation) ||\n !Equal.equals(decodedAllocation.value, request.budget.allocation)\n ) {\n return denied(\n \"SubagentBudgetInvalid\",\n \"The reserved allocation differs from its budget declaration\",\n );\n }\n const { caps, allocation: requested } = request.budget;\n const prior = [...subagentState.requested.values()];\n\n if (\n prior.some(\n (entry) => entry.budget === undefined || !Equal.equals(entry.budget.caps, caps),\n )\n ) {\n return denied(\n \"SubagentParentBudgetConflict\",\n \"Delegations in one parent Run must share the same caps\",\n );\n }\n if (\n caps.maxTotalChildInvocations !== undefined &&\n prior.reduce(\n (sum, entry) => sum + 1 + (entry.budget?.descendantInvocations ?? 0),\n 1 + (request.budget.descendantInvocations ?? 0),\n ) > caps.maxTotalChildInvocations\n ) {\n return denied(\n \"SubagentBudgetExhausted\",\n \"The parent Run exhausted its child invocation budget\",\n );\n }\n const active = prior.filter((entry) => !subagentState.joined.has(entry.toolCallId));\n\n if (\n caps.maxConcurrentChildren !== undefined &&\n active.length >= caps.maxConcurrentChildren\n ) {\n return denied(\n \"SubagentBudgetExhausted\",\n \"The parent Run exhausted its concurrent child budget\",\n );\n }\n\n const dimensions = [\n [\"turns\", \"maxTurns\"],\n [\"toolCalls\", \"maxToolCalls\"],\n [\"durationMillis\", \"maxDurationMillis\"],\n [\"inputTokens\", \"maxInputTokens\"],\n [\"outputTokens\", \"maxOutputTokens\"],\n [\"costMicrousd\", \"maxCostMicrousd\"],\n [\"resultBytes\", \"maxResultBytes\"],\n ] as const;\n\n const accounting = Schema.Struct({ consumed: SubagentReservationAmounts });\n\n for (const [amount, cap] of dimensions) {\n const limit = caps[cap];\n\n if (limit === undefined) continue;\n let consumed = requested[amount];\n\n for (const entry of prior) {\n const joined = subagentState.joined.get(entry.toolCallId);\n\n const observed =\n joined === undefined\n ? Option.none()\n : Schema.decodeUnknownOption(accounting)(joined.finalAccounting);\n\n consumed += Option.isSome(observed)\n ? observed.value.consumed[amount]\n : (entry.budget?.allocation[amount] ?? limit);\n }\n if (consumed > limit) {\n return denied(\n \"SubagentBudgetExhausted\",\n `The parent Run exhausted its shared ${amount} budget`,\n );\n }\n }\n }\n const childInputDigest = yield* withCrypto(digestJson(childInput.value));\n const grantDigest = yield* withCrypto(digestJson(grant.value));\n const allocationDigest = yield* withCrypto(digestJson(allocation.value));\n const reservationId = childReservationIdFor(runId, toolCallId);\n const ownershipToken = yield* Ref.get(tokenRef);\n\n // Top-level attached declarations retain their independent explicit pool. A\n // child with an ancestor allocation shares its residual with both lifetimes.\n const subtree =\n delegationDepth === 0\n ? undefined\n : yield* workerRuntime\n .reserveSubtree(\n submission.threadId,\n SubtreeBudgetReserved.make({\n reservationId,\n sourceSubmissionId: submissionId,\n childThreadId: childThreadIdFor(submissionId, toolCallId),\n lifetime: \"attached\",\n depth: request.depth,\n policy: request.policy,\n grant: decodedGrant.value,\n budget: request.budget,\n }),\n )\n .pipe(Effect.result);\n\n if (subtree?._tag === \"Failure\") {\n if (subtree.failure.reason === \"storage\")\n return yield* LedgerError.make({\n operation: \"reserve-subtree\",\n message: \"Subtree reservation is unavailable\",\n });\n\n return denied(\n \"SubagentBudgetExhausted\",\n `The subtree reservation was refused: ${subtree.failure.reason}`,\n );\n }\n\n yield* ledger\n .reserveChildBudget(\n ChildBudgetReservationRequest.make({\n reservationId,\n parentSubmissionId: submissionId,\n parentToolCallId: toolCallId,\n ownershipToken,\n allocation: allocation.value,\n allocationDigest,\n }),\n )\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"reserveChildBudget\"),\n ),\n );\n yield* hit(\"subagent:after-reserve\");\n requestedPayload = SubagentRequested.make({\n runId,\n turnId: turnInfo.turnId,\n turn: turnInfo.turn,\n toolCallId,\n delegationId: request.delegationId,\n targetAgentId: request.targetAgentId,\n targetDigests: decodedDigests.value,\n childInput: childInput.value,\n childInputDigest,\n grantDigest,\n grant: decodedGrant.value,\n depth: request.depth,\n reservationId,\n reservationDigest: allocationDigest,\n childThreadId: childThreadIdFor(submissionId, toolCallId),\n childPrincipal: submission.principal,\n childIdempotencyKey: childIdempotencyKeyFor(runId, toolCallId),\n ...(request.toolCallAllowance === undefined\n ? {}\n : { toolCallAllowance: request.toolCallAllowance }),\n ...(request.policy === undefined ? {} : { policy: request.policy }),\n ...(request.budget === undefined ? {} : { budget: request.budget }),\n });\n const requestRecordId = subagentRequestedRecordId(runId, toolCallId);\n\n if (!knownIds.has(requestRecordId)) {\n const envelope = yield* makeEnvelope(requestRecordId, requestedPayload);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentRequestedBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(requestRecordId);\n }\n subagentState.requested.set(toolCallId, requestedPayload);\n yield* hit(\"subagent:after-request-append\");\n }\n // Steps 4-8: resolveAdmission-gated admission with immutable parent linkage,\n // child materialization + lineage, readiness, Receipt (SUB-016/SUB-017/SUB-031).\n const admission = yield* establishChildFromRequest(submission, requestedPayload);\n\n if (admission._tag === \"indeterminate\") {\n // Wait-and-retry, never a second admission: the Attempt aborts with the\n // obligation still owed and the next pass re-queries the authoritative owner.\n return yield* LedgerError.make({\n operation: \"establishSubagent\",\n message: `Child admission for Tool Call ${toolCallId} is indeterminate (${admission.reason}); retrying without a second admission (SUB-031)`,\n });\n }\n const childRunId = runIdForSubmission(admission.childSubmissionId);\n // Step 9: the start link is appended only after the child Receipt exists (SUB-017).\n let startedPayload = subagentState.started.get(toolCallId);\n\n if (startedPayload === undefined) {\n startedPayload = SubagentStarted.make({\n runId,\n toolCallId,\n childThreadId: requestedPayload.childThreadId,\n childSubmissionId: admission.childSubmissionId,\n childReceiptId: admission.receiptId,\n childRunId,\n });\n const startRecordId = subagentStartedRecordId(runId, toolCallId);\n\n if (!knownIds.has(startRecordId)) {\n const envelope = yield* makeEnvelope(startRecordId, startedPayload);\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentStartedBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(startRecordId);\n }\n subagentState.started.set(toolCallId, startedPayload);\n yield* hit(\"subagent:after-start-append\");\n } else if (startedPayload.childSubmissionId !== admission.childSubmissionId) {\n return yield* LedgerError.make({\n operation: \"establishSubagent\",\n message: `The canonical SubagentStarted record names child ${startedPayload.childSubmissionId} but admission resolved ${admission.childSubmissionId}; establishment fails closed (SUB-016)`,\n });\n }\n const attachToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: decodeChildReservationIdSync(requestedPayload.reservationId),\n ownershipToken: attachToken,\n childSubmissionId: startedPayload.childSubmissionId,\n }),\n )\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"attachChildToReservation\"),\n ),\n );\n\n const identity = {\n childThreadId: startedPayload.childThreadId,\n childSubmissionId: startedPayload.childSubmissionId,\n childRunId: startedPayload.childRunId,\n receiptId: startedPayload.childReceiptId,\n };\n\n const child = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: startedPayload.childSubmissionId }),\n );\n\n if (Option.isNone(child)) {\n return yield* LedgerError.make({\n operation: \"establishSubagent\",\n message: `Established child ${startedPayload.childSubmissionId} is unknown to the ledger`,\n });\n }\n if (child.value.state !== \"settled\") {\n return { _tag: \"waiting\" as const, ...identity };\n }\n\n // §1.6: the child already settled — verify Parent Link, target, digests, and the\n // settlement record fail-closed before handing the outcome to the handler.\n const verification = yield* verifySettledChild(\n submission,\n requestedPayload,\n startedPayload.childSubmissionId,\n );\n\n if (verification._tag === \"mismatch\") {\n return denied(\"SubagentVerificationFailed\", verification.message);\n }\n\n return {\n _tag: \"settled\" as const,\n ...identity,\n outcome: verification.value.outcome,\n encodedResult: verification.value.encodedResult,\n ...(yield* verifiedChildUsage(verification.value, startedPayload.childRunId)),\n // The child Settlement's honest exhaustion marker (RUN-018)\n // rides to the parent handler so the delegation can surface a\n // budget-truncated partial to the orchestrator (SUB-034).\n ...(verification.value.settlement.finishReason === undefined\n ? {}\n : { finishReason: verification.value.settlement.finishReason }),\n };\n }).pipe(establishmentGate.withPermits(1)),\n );\n\n const joinSubagent = (\n request: RunSubagentJoinRequest,\n ): Effect.Effect<void, CoordinatorHalt> =>\n recordHalt(\n Effect.gen(function* () {\n const toolCallId = request.toolCallId;\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} joined before any canonical response commit`,\n });\n }\n const requestedPayload = subagentState.requested.get(toolCallId);\n const startedPayload = subagentState.started.get(toolCallId);\n\n if (requestedPayload === undefined || startedPayload === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} joined without canonical establishment records`,\n });\n }\n const reservationId = decodeChildReservationIdSync(requestedPayload.reservationId);\n const joinedRecordId = subagentJoinedRecordId(runId, toolCallId);\n let finalAccounting: PersistedJson;\n const existingJoined = subagentState.joined.get(toolCallId);\n\n if (existingJoined !== undefined) {\n // The atomic join batch is already canonical: only the reservation release below\n // may remain (spec §12 join step 6 — the canonical record is the replay source).\n finalAccounting = existingJoined.finalAccounting;\n } else {\n const encodedResult = yield* decodePersisted(request.encodedResult).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `The projected result of Tool Call ${toolCallId} exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const accounting = yield* decodePersisted(request.encodedAccounting).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `The join accounting of Tool Call ${toolCallId} exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const verification = yield* verifySettledChild(\n submission,\n requestedPayload,\n startedPayload.childSubmissionId,\n );\n\n if (verification._tag === \"mismatch\") {\n return yield* LedgerError.make({\n operation: \"joinSubagent\",\n message: `Child Settlement verification failed for Tool Call ${toolCallId}: ${verification.message}`,\n });\n }\n const verified = verification.value;\n const toolName = declaredNamesByCallId.get(toolCallId);\n\n if (toolName === undefined) {\n return yield* RunJournalError.make({\n message: `Delegation Tool Call ${toolCallId} joined without a declared Tool name`,\n });\n }\n\n yield* hit(\"subagent:before-join-append\");\n\n const joinedPayload = SubagentJoined.make({\n runId,\n toolCallId,\n childSubmissionId: startedPayload.childSubmissionId,\n childSettlementId: verified.settlement.settlementId,\n childOutcome: verified.outcome,\n childResultDigest: yield* withCrypto(\n digestJson(verified.settlement.result ?? null),\n ),\n projectedResultDigest: yield* withCrypto(digestJson(encodedResult)),\n usageSummary: yield* childUsageSummaryOf(\n verified.childRecords,\n startedPayload.childRunId,\n ),\n ...(yield* verifiedChildUsage(verified, startedPayload.childRunId)),\n reservationId: requestedPayload.reservationId,\n finalAccounting: accounting,\n });\n\n const settledRecordId = toolCallSettledRecordId(runId, turnInfo.turn, toolCallId);\n const joinedEnvelope = yield* makeEnvelope(joinedRecordId, joinedPayload);\n\n const settledEnvelope = yield* makeEnvelope(\n settledRecordId,\n ToolCallSettled.make({\n runId,\n toolCallId,\n toolName,\n result: encodedResult,\n isFailure: request.isFailure,\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentJoinBatchId(runId, toolCallId),\n producerId: config.producerId,\n records: [joinedEnvelope, settledEnvelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(joinedRecordId);\n knownIds.add(settledRecordId);\n subagentState.joined.set(toolCallId, joinedPayload);\n finalAccounting = accounting;\n yield* hit(\"subagent:after-join-append\");\n }\n yield* applyReservationRelease(reservationId, finalAccounting);\n }),\n );\n\n const subagent: RunSubagentHook<CoordinatorHalt, never> = {\n establish: establishSubagent,\n join: joinSubagent,\n };\n\n const toolAuthorization: RunToolAuthorizationHook = {\n authorize: (request: RunToolAuthorizationRequest) =>\n inheritedGrant !== undefined &&\n !inheritedGrant.allowedToolNames.includes(request.call.toolName)\n ? Effect.succeed({\n _tag: \"denied\",\n reason: \"Tool exceeds the worker's immutable grant\",\n })\n : runToolAuthorization.authorize({\n ...request,\n // Preserve the admitted wire value even when an Agent Schema's decode/encode\n // pair normalizes differently on a second pass.\n input: submission.inputPayload,\n ...(Schema.is(FrameworkMessage)(submission.messageAdmission)\n ? { frameworkMessage: submission.messageAdmission }\n : {}),\n }),\n };\n\n const options: RunOptions<\n | CoordinatorHalt\n | CompactionError\n | RunContextPreparationError\n | Agent.Failure<typeof agent>,\n Agent.DefinitionRequirements<(typeof agent)[\"definition\"]>\n > = {\n threadId: submission.threadId,\n runId,\n history: pending === undefined ? journal.historyBefore : resumeProjection.historyBefore,\n onHistory,\n input,\n ...(Schema.is(FrameworkMessage)(submission.messageAdmission)\n ? { frameworkMessage: submission.messageAdmission }\n : {}),\n approval,\n toolAuthorization,\n ...(journal.toolSelection === undefined ? {} : { toolSelection: journal.toolSelection }),\n durability,\n subagent,\n delegationDepth,\n ...(inheritedGrant === undefined ? {} : { subagentGrant: inheritedGrant }),\n ...(inheritedBudget === undefined ? {} : { subagentBudget: inheritedBudget }),\n ...(submission.workerAdmission?.origin.budgetScope === undefined\n ? {}\n : { subagentBudgetScope: submission.workerAdmission.origin.budgetScope }),\n runStartedAt: runTiming.startedAt,\n durationDeadline: runTiming.deadline,\n ...(submission.workerAdmission === undefined\n ? {}\n : {\n toolCallAllowance: submission.workerAdmission.origin.toolCallAllowance,\n }),\n ...(submission.parentLinkage !== undefined &&\n childLineage?._tag === \"SubagentLineageRecorded\"\n ? { toolCallAllowance: childLineage.toolCallAllowance }\n : {}),\n ...(pending === undefined\n ? {}\n : {\n resume: {\n turn: pending.turn,\n turnId: pending.turnId,\n calls: pending.calls,\n settled: pending.settled,\n ...(pending.toolExposure === undefined\n ? {}\n : { toolExposure: pending.toolExposure }),\n ...(resumeLeadingMessages === undefined\n ? {}\n : { leadingMessages: resumeLeadingMessages }),\n ...(resumeResponseMessages === undefined\n ? {}\n : { responseMessages: resumeResponseMessages }),\n },\n }),\n ...(preparedContext === undefined ? {} : { context: preparedContext }),\n beforeTurn: () =>\n Effect.gen(function* () {\n // Preparation may resolve the next Model from canonical Tool results or invoke\n // a compaction Model. Publish the completed Turn before either can observe it.\n yield* recordHalt(commitPendingTurn);\n\n if (\n yieldAfter !== undefined &&\n (yield* Clock.currentTimeMillis) >= DateTime.toEpochMillis(yieldAfter)\n ) {\n yield* Deferred.succeed(yieldSignal, undefined);\n\n // The successful signal wins the outer race and closes the stream Scope;\n // no synthetic engine RunFailed event or terminal Settlement is produced.\n return yield* Effect.never;\n }\n }),\n ...(runContextPreparation.transientContext === undefined\n ? {}\n : { transientContext: runContextPreparation.transientContext }),\n ...(config.estimateCostMicrousd === undefined\n ? {}\n : { estimateCostMicrousd: config.estimateCostMicrousd }),\n resumeUsage: {\n ...journal.usage,\n ...journal.policyUsage,\n ...(journal.usage.modelCalls === 0 &&\n (journal.usage.unobservedModelCalls ?? 0) === 0 &&\n !records.some(\n ({ record }) =>\n record.payload._tag === \"ModelResponseInterrupted\" && record.payload.runId === runId,\n )\n ? emptyRunTotals()\n : runTotalsFromSummary(yield* currentUsageSummary())),\n children: childUsageReportsOf(subagentState),\n },\n ...(journal.contextWindowId === undefined\n ? {}\n : { initialContextWindowId: journal.contextWindowId }),\n ...(journal.protectedContext === undefined\n ? {}\n : { protectedContext: journal.protectedContext }),\n ...(journal.pendingContextToolCallId === undefined\n ? {}\n : { pendingContextToolCallId: journal.pendingContextToolCallId }),\n };\n\n const commitPendingTurn: Effect.Effect<void, DurableWorkerFailure> = Effect.gen(function* () {\n const state = yield* Ref.get(stateRef);\n const history = state.history;\n\n if (state.pendingTurn === undefined || history === undefined) return;\n let appended = history.content.slice(state.lastCommitLen);\n\n if (appended.length === 0) return;\n const canonicalTurn = state.pendingTurn.turn;\n const createdAt = yield* nowUtc;\n let committedLen = history.content.length;\n\n const completedRun =\n state.completedOutput === undefined\n ? undefined\n : {\n output: state.completedOutput,\n ...(state.completedRunDisposition === undefined\n ? {}\n : { runDisposition: state.completedRunDisposition }),\n ...(state.completedFinishReason === undefined\n ? {}\n : { finishReason: state.completedFinishReason }),\n ...(state.completedExhausted === undefined\n ? {}\n : { exhausted: state.completedExhausted }),\n };\n\n if (knownIds.has(modelResponseRecordId(runId, canonicalTurn))) {\n // The response is already durable (commit 1 of the split shape): only the results\n // batch remains. The slice is [response messages…, tool message, trailing input…]:\n // this commit's canonical coverage ends at the batch's Tool message — messages drained\n // at the post-batch seam stay pending and become the leading messages of the NEXT\n // response batch (decision point 6 / D8), never silently dropped.\n for (let index = appended.length - 1; index >= 0; index -= 1) {\n if (appended[index]?.role === \"tool\") {\n committedLen = state.lastCommitLen + index + 1;\n appended = appended.slice(0, index + 1);\n break;\n }\n }\n // Already-canonical per-call settles (late settles from the resolution path, or\n // resume-injected results) are excluded by record identity.\n const remaining: Array<Prompt.Message> = [];\n const resultParts: Array<Prompt.ToolResultPart> = [];\n let toolParts = 0;\n\n for (const message of appended) {\n if (message.role !== \"tool\") {\n remaining.push(message);\n continue;\n }\n\n const parts = message.content.filter(\n (part): part is Prompt.ToolResultPart =>\n part.type === \"tool-result\" &&\n !knownIds.has(`tool-settled:${runId}:${canonicalTurn}:${part.id}`),\n );\n\n if (parts.length === 0) continue;\n toolParts += parts.length;\n resultParts.push(...parts);\n remaining.push(Prompt.makeMessage(\"tool\", { content: parts }));\n }\n\n const settledCompletionPart =\n completedRun === undefined || toolParts > 0\n ? undefined\n : appended\n .flatMap((message) => (message.role === \"tool\" ? message.content : []))\n .find(\n (part) =>\n part.type === \"tool-result\" &&\n !part.isFailure &&\n agent.definition.completionFromTools?.some(\n (declaration) => declaration.tool === part.name,\n ),\n );\n\n if (settledCompletionPart?.type === \"tool-result\") {\n resultParts.push(settledCompletionPart);\n remaining.push(Prompt.makeMessage(\"tool\", { content: [settledCompletionPart] }));\n }\n\n if (toolParts > 0 || settledCompletionPart !== undefined) {\n const completion = agent.definition.completion;\n const completionPart = resultParts[0];\n\n const runCompletion =\n resultParts.length === 1 &&\n (completionPart?.name === completion?.tool ||\n agent.definition.completionFromTools?.some(\n (declaration) => declaration.tool === completionPart?.name,\n )) &&\n completionPart.isFailure !== true &&\n completedRun !== undefined\n ? completedRun\n : undefined;\n\n const batch = yield* turnResultsBatch({\n toolSelections: stagedToolSelections,\n budgetRejectedCalls,\n runId,\n turn: canonicalTurn,\n turnId: state.pendingTurn.turnId,\n appended: remaining,\n producerId: config.producerId,\n deploymentId: config.deploymentId,\n createdAt,\n ...(runCompletion === undefined ? {} : { runCompletion }),\n });\n\n // A recovered external receipt is already canonical. Commit only the terminal\n // marker at the same results boundary; never duplicate or rewrite its result.\n let pendingBatch = batch;\n\n if (settledCompletionPart !== undefined) {\n const completionRecord = batch.records.find(\n (record) => record.payload._tag === \"RunCompleted\",\n );\n\n if (completionRecord === undefined || knownIds.has(completionRecord.recordId)) {\n return yield* RunJournalError.make({\n message: \"Recovered action completion has no new terminal record\",\n });\n }\n pendingBatch = CanonicalBatch.make({ ...batch, records: [completionRecord] });\n }\n\n yield* appendBatch(ctx, pendingBatch);\n for (const record of pendingBatch.records) knownIds.add(record.recordId);\n yield* hit(\"turn:after-results-append\");\n }\n } else {\n // No durable response commit: the P4 single-batch shape (no-tool Turns).\n const runScopedPrefixLength =\n canonicalTurn === 1\n ? appended.findIndex((message) => message.role === \"assistant\")\n : -1;\n\n const batch = yield* withCrypto(\n turnCanonicalBatch({\n toolExposure: stagedToolExposure.get(canonicalTurn),\n toolSelections: stagedToolSelections,\n budgetRejectedCalls,\n runId,\n turn: canonicalTurn,\n turnId: state.pendingTurn.turnId,\n appended,\n producerId: config.producerId,\n deploymentId: config.deploymentId,\n createdAt,\n ...(runScopedPrefixLength > 0 ? { runScopedPrefixLength } : {}),\n ...(completedRun === undefined ? {} : { runCompletion: completedRun }),\n usage: stagedUsage.get(canonicalTurn),\n unobservedModelCalls: stagedUnobservedCalls.get(canonicalTurn),\n }),\n );\n\n yield* appendBatch(ctx, batch);\n recordCommittedUsage(batch);\n for (const record of batch.records) knownIds.add(record.recordId);\n yield* hit(\"turn:after-canonical-append\");\n }\n yield* Ref.update(stateRef, (current) => ({\n ...current,\n lastCommitLen: committedLen,\n pendingTurn: undefined,\n }));\n });\n\n const recordCompleted = (\n output: unknown,\n finishReason: \"completed\" | \"model-stop\" | \"budget-exhausted\",\n exhausted: ExhaustedLimit | undefined,\n runDisposition: unknown,\n ): Effect.Effect<void, DurableWorkerFailure> =>\n Effect.gen(function* () {\n const result = yield* Schema.decodeUnknownEffect(PersistedJson)(output).pipe(\n Effect.mapError((cause): DurableWorkerFailure =>\n LedgerError.make({\n operation: \"recordCompleted\",\n message: \"Run output exceeds canonical persistence bounds\",\n cause,\n }),\n ),\n );\n\n if (finishReason === \"budget-exhausted\" && runDisposition !== undefined) {\n return yield* LedgerError.make({\n operation: \"recordCompleted\",\n message: \"A budget-exhausted Run cannot declare an application run disposition\",\n });\n }\n\n const persistedRunDisposition =\n runDisposition === undefined\n ? undefined\n : yield* Schema.decodeUnknownEffect(PersistedJson)(runDisposition).pipe(\n Effect.mapError((cause): DurableWorkerFailure =>\n LedgerError.make({\n operation: \"recordCompleted\",\n message: \"Run disposition exceeds canonical persistence bounds\",\n cause,\n }),\n ),\n );\n\n yield* Ref.update(stateRef, (state) => ({\n ...state,\n completedOutput: result,\n completedRunDisposition: persistedRunDisposition,\n completedFinishReason: finishReason === \"budget-exhausted\" ? finishReason : undefined,\n // The pair travels together or not at all (RUN-011 fail-safe): a\n // divergent event never persists a lone dimension.\n completedExhausted: finishReason === \"budget-exhausted\" ? exhausted : undefined,\n }));\n });\n\n const handleEvent = (event: RunEvent): Effect.Effect<void, DurableWorkerFailure> => {\n switch (event._tag) {\n case \"TurnStarted\": {\n // Suspension owns only this Turn's siblings. Earlier results are already canonical\n // under their original Turn and must never be re-recorded with a later Turn id.\n return commitPendingTurn.pipe(\n Effect.andThen(\n Effect.sync(() => {\n siblingResults.clear();\n stagedToolSelections.clear();\n }),\n ),\n );\n }\n case \"TurnCompleted\": {\n const turnId = event.turnId ?? turnIdForRun(runId, event.turn);\n\n return Ref.update(stateRef, (state) => ({\n ...state,\n pendingTurn: { turn: event.turn, turnId },\n }));\n }\n case \"RunCompleted\": {\n return recordCompleted(\n event.output,\n event.finishReason,\n event.exhausted,\n event.runDisposition,\n ).pipe(\n // The terminal state is available while the final canonical\n // batch is built, so its RunCompleted marker commits atomically\n // with either the no-tool response or the completion Tool result.\n Effect.andThen(commitPendingTurn),\n );\n }\n case \"RunFailed\": {\n // Preserve a completed-and-advanced final Turn for audit before the Run settles failed.\n return commitPendingTurn;\n }\n case \"ToolCallSucceeded\": {\n if (!event.providerExecuted && event.toolSelection !== undefined)\n stagedToolSelections.set(event.toolCallId, event.toolSelection);\n // Collected for the waitingForChild suspension seam: a batch that suspends never\n // reaches its results commit, so each settled sibling result is committed there as\n // a per-call late-settle batch instead (plan §2 step 2).\n if (!event.providerExecuted) {\n siblingResults.set(event.toolCallId, {\n toolCallId: event.toolCallId,\n result: event.result,\n isFailure: false,\n });\n }\n\n return Effect.void;\n }\n case \"ToolCallFailed\": {\n if (event.budgetRejected === true) budgetRejectedCalls.add(event.toolCallId);\n // Only the bounded diagnostics survive the event stream for a failed sibling; the\n // per-call late-settle carries this same bounded `{errorTag, message}` projection.\n if (!event.providerExecuted) {\n siblingResults.set(event.toolCallId, {\n toolCallId: event.toolCallId,\n result: { errorTag: event.errorTag, message: boundedText(event.message) },\n isFailure: true,\n });\n }\n\n return Effect.void;\n }\n default: {\n return Effect.void;\n }\n }\n };\n\n /**\n * The waitingForChild suspension seam (plan §2 steps 1-4): every non-waiting sibling of\n * the suspending batch has settled — commit each terminal sibling result as a per-call\n * late-settle batch (`turn-results:{runId}:{turn}:{toolCallId}`) in the batch's declared\n * order, so no sibling effect is lost to the suspension and the resumed batch injects\n * them via `resume.settled`. Record identity dedupes results already canonical (joined\n * delegation calls, resume-injected siblings).\n */\n const commitSiblingLateSettles = (\n children: AgentChildPending[\"children\"],\n ): Effect.Effect<void, DurableWorkerFailure> =>\n Effect.gen(function* () {\n const turnInfo = currentToolTurn;\n\n if (turnInfo === undefined) return;\n const waitingIds = new Set<string>(children.map((child) => child.toolCallId));\n\n // Declared order first (SUB-013's commit-order rule), then any residue in arrival order.\n const ordered = [\n ...[...declaredNamesByCallId.keys()].filter((callId) => siblingResults.has(callId)),\n ...[...siblingResults.keys()].filter((callId) => !declaredNamesByCallId.has(callId)),\n ];\n\n for (const callId of ordered) {\n if (waitingIds.has(callId)) continue;\n const settled = siblingResults.get(callId);\n\n if (settled === undefined) continue;\n const toolCallId = settled.toolCallId;\n const recordId = toolCallSettledRecordId(runId, turnInfo.turn, toolCallId);\n\n if (knownIds.has(recordId)) continue;\n const toolName = declaredNamesByCallId.get(callId);\n\n if (toolName === undefined) {\n return yield* RunJournalError.make({\n message: `Settled sibling ${toolCallId} has no declared Tool name at the suspension seam`,\n });\n }\n\n const result = yield* decodePersisted(settled.result).pipe(\n Effect.mapError((cause) =>\n RunJournalError.make({\n message: `Sibling result ${toolCallId} exceeds canonical persistence bounds`,\n cause,\n }),\n ),\n );\n\n const envelope = yield* makeEnvelope(\n recordId,\n ToolCallSettled.make({\n runId,\n toolCallId,\n toolName,\n result,\n isFailure: settled.isFailure,\n ...(stagedToolSelections.get(toolCallId) === undefined\n ? {}\n : { toolSelection: stagedToolSelections.get(toolCallId) }),\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: toolCallResultBatchId(runId, turnInfo.turn, toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n knownIds.add(recordId);\n yield* hit(\"subagent:after-sibling-settle\");\n }\n });\n\n // Durability §9: the superseding Attempt records the interruption BEFORE re-invoking the\n // model. A batch resume never re-invokes the model for the pending Turn, so it is exempt.\n if (\n pending === undefined &&\n lineage.inputWasRecorded &&\n lineage.supersededEpoch >= 1 &&\n lineage.supersededEpoch < ctx.producerEpoch\n ) {\n yield* appendInterruptedAudit(ctx, runId, lineage, knownIds);\n interruptedUsage = true;\n }\n\n const consume = Stream.runForEach(\n AgentRuntime.streamWithUsageAccountingUnknown(agent, submission.inputPayload, options).pipe(\n Stream.provideService(AgentUpdateAcceptance, {\n accept: (update) =>\n updateRuntime\n .emit({\n updateId: update.updateId,\n value: update.value,\n submission,\n runId,\n producerEpoch: ctx.producerEpoch,\n definitions: submission.agentDigests,\n })\n .pipe(\n Effect.catchTag([\"LedgerError\", \"DurableRuntimeFailpointError\"], (failure) =>\n // Preserve the original infrastructure failure at the coordinator boundary;\n // the engine's next event must not commit this Tool's failure as an outcome.\n Ref.set(haltRef, failure).pipe(\n Effect.andThen(Effect.fail(UpdateError.make({ reason: \"storage\" }))),\n ),\n ),\n ),\n }),\n Stream.provideService(ModelUsageAccounting, {\n noteIncompleteUsage: (turn) =>\n Effect.sync(() => {\n stagedUnobservedCalls.set(turn, (stagedUnobservedCalls.get(turn) ?? 0) + 1);\n }),\n }),\n Stream.provide(ThreadHistory.layer),\n Stream.provideService(SubagentHost.forTool, (source) =>\n source.threadId !== submission.threadId ||\n source.agentId !== submission.agentId ||\n source.runId !== runId\n ? SubagentHost.unavailable\n : workerRuntime.facet(\n {\n source,\n policy: agent.definition.policy,\n depth: delegationDepth,\n ...(inheritedGrant === undefined ? {} : { grant: inheritedGrant }),\n },\n submission.principal,\n submission.submissionId,\n ),\n ),\n Stream.provideService(MessagingHost.forTool, (source) =>\n source.threadId !== submission.threadId ||\n source.agentId !== submission.agentId ||\n source.runId !== runId\n ? MessagingHost.unavailable\n : messagingRuntime.forTool(source, submission.principal),\n ),\n Stream.provideService(CurrentToolFailureObserver, toolFailureObserver),\n Stream.provideService(RunToolVisibility, runToolVisibility),\n Stream.provideService(RunToolScheduling, runToolScheduling),\n Stream.provideService(ContextCompactor, compactor),\n Stream.provideService(RunContextPreparation, runContextPreparation),\n ),\n (event) =>\n halt(\n Effect.gen(function* () {\n // A broker reports hook failures as Tool preflight data. The coordinator's recorded\n // infrastructure halt must win before any subsequent event commits that Tool outcome.\n const failure = yield* Ref.get(haltRef);\n\n if (failure !== undefined) return yield* Effect.fail(failure);\n yield* handleEvent(event);\n }),\n ),\n ).pipe(Effect.as({ _tag: \"run\" as const }));\n\n // Durable §13: the abort command becomes canonical (serialized on the append gate) BEFORE\n // the Run fiber is interrupted by losing the race.\n const abortWatcher = halt(\n Effect.gen(function* () {\n while (true) {\n yield* Effect.sleep(config.abortPollInterval);\n\n const intent = yield* ledger.readAbortIntent(AbortIntentRequest.make({ submissionId }));\n\n if (intent === undefined) continue;\n yield* appendAbortRecord(ctx, intent);\n\n return { _tag: \"aborted\" as const };\n }\n }),\n );\n\n // Liveness only: the lease keeps the claim visible; correctness stays with the epoch fence.\n // OwnershipLost ends the race and interrupts the Run fiber cleanly.\n const renewal = halt(\n Effect.repeat(\n Effect.gen(function* () {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const renewal = yield* ledger.renewOwnership(\n RenewOwnershipRequest.make({ submissionId, ownershipToken }),\n );\n\n yield* Ref.set(tokenRef, renewal.ownershipToken);\n }).pipe(Effect.uninterruptible),\n { schedule: Schedule.spaced(config.leaseRenewalInterval) },\n ).pipe(Effect.andThen(Effect.never)),\n );\n\n const execution = Effect.raceFirst(consume, Effect.raceFirst(abortWatcher, renewal));\n\n const raced = (\n yieldAfter === undefined\n ? execution\n : Effect.raceFirst(\n execution,\n Deferred.await(yieldSignal).pipe(Effect.as({ _tag: \"yielded\" as const })),\n )\n ).pipe(Effect.provideService(IdGenerator, idGenerator));\n\n const result = yield* raced.pipe(\n Effect.catch(\n (\n error,\n ): Effect.Effect<\n | { readonly _tag: \"failedRun\"; readonly outcome: AttemptOutcome }\n | { readonly _tag: \"suspendedRun\"; readonly toolCallId: ToolCallId }\n | {\n readonly _tag: \"suspendedChildRun\";\n readonly children: AgentChildPending[\"children\"];\n },\n DurableWorkerFailure\n > => {\n if (error instanceof CoordinatorHalt) {\n return Effect.fail(error.failure);\n }\n const approvalPending = agentApprovalPendingOption(error);\n\n if (Option.isSome(approvalPending)) {\n // Durable approval suspension (plan §2.6): the approval hook already made the\n // request canonical; `runAttempt` owns the ledger transition. The engine decoded\n // the declared call id before raising the suspension, so a failure is a defect.\n return decodeToolCallIdUnknown(approvalPending.value.toolCallId).pipe(\n Effect.orDie,\n Effect.map((toolCallId) => ({ _tag: \"suspendedRun\" as const, toolCallId })),\n );\n }\n const childPending = agentChildPendingOption(error);\n\n if (Option.isSome(childPending)) {\n // Durable waitingForChild suspension (spec §12 step 10): every non-waiting\n // sibling settled before the Run terminated; commit their results as per-call\n // late-settle batches FIRST so no sibling effect is lost, then let `runAttempt`\n // own the ledger transition.\n return commitSiblingLateSettles(childPending.value.children).pipe(\n Effect.map(() => ({\n _tag: \"suspendedChildRun\" as const,\n children: childPending.value.children,\n })),\n );\n }\n\n return Effect.gen(function* () {\n // A recorded halt means a coordinator mutation failed inside a Tool handler\n // (the engine re-wraps step-hook and subagent-hook errors): abort the Attempt\n // with the original infrastructure failure instead of settling the Run failed.\n const halted = yield* Ref.get(haltRef);\n\n if (halted !== undefined) {\n return yield* halted;\n }\n\n // Settlement keeps only a bounded diagnostic. Report the live failure here,\n // after excluding suspensions, so hosts retain its cause and stack exactly\n // once per failed Run; reading or retrying its receipt never reports again.\n if (\n !(error instanceof AgentApprovalDenied) &&\n !(error instanceof AgentToolAuthorizationDenied)\n )\n yield* Effect.logError(\"Agent run failed\", Cause.fail(error)).pipe(\n Effect.annotateLogs({\n agentId: agent.definition.id,\n runId,\n threadId: ctx.threadId,\n submissionId,\n attemptId: lineage.attemptId,\n }),\n );\n\n return {\n _tag: \"failedRun\" as const,\n outcome: yield* failureOutcome(error),\n };\n });\n },\n ),\n );\n\n if (result._tag === \"yielded\") return result;\n if (result._tag === \"suspendedRun\") return approvalSuspension(result.toolCallId);\n if (result._tag === \"suspendedChildRun\") return childSuspension(result.children);\n if (result._tag === \"aborted\") {\n return {\n ...abortedRunPhase(yield* currentUsageSummary()),\n uncommittedModelUsage: uncommittedModelUsage(),\n };\n }\n if (result._tag === \"failedRun\") {\n const failed: RunPhaseOutcome = {\n ...result.outcome,\n usageSummary: yield* currentUsageSummary(),\n uncommittedModelUsage: uncommittedModelUsage(),\n };\n\n return failed;\n }\n const state = yield* Ref.get(stateRef);\n\n if (state.completedOutput === undefined) {\n return yield* LedgerError.make({\n operation: \"runModel\",\n message: \"Agent Run stream ended without RunCompleted\",\n });\n }\n\n const completed: RunPhaseOutcome = {\n _tag: \"completed\",\n result: state.completedOutput,\n ...(state.completedRunDisposition === undefined\n ? {}\n : { runDisposition: state.completedRunDisposition }),\n ...(state.completedFinishReason === undefined\n ? {}\n : { finishReason: state.completedFinishReason }),\n ...(state.completedFinishReason === undefined || state.completedExhausted === undefined\n ? {}\n : { exhausted: state.completedExhausted }),\n usageSummary: yield* currentUsageSummary(),\n uncommittedModelUsage: uncommittedModelUsage(),\n };\n\n return completed;\n });\n\n /**\n * One ownership period over the claimed lane head. The step order mirrors the pure recovery\n * classifier's decision table, so a fresh Attempt and a recovering Attempt take the same path\n * through the same idempotent steps. Returns `Option.none` when the lane is durably blocked\n * (Unknown Outcomes, or a durable approval suspension) — no settlement occurs and the\n * obligation stays owed.\n */\n const runAttempt = <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined =\n undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n registeredAgent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n threadId: ThreadId,\n claim: Claim,\n tokenRef: Ref.Ref<OwnershipToken>,\n yieldAfter?: DateTime.Utc,\n ) =>\n Effect.gen(function* () {\n const submissionId = claim.submissionId;\n\n // The Thread-store fence BEFORE this Attempt advances it identifies the superseded\n // ownership period for the durability §9 interruption audit.\n const supersededEpoch = yield* store.inspectTail(ThreadTailRequest.make({ threadId })).pipe(\n Effect.map((tail) => tail.producerEpoch),\n Effect.catchTag(\"ThreadNotMaterialized\", () => Effect.succeed(ZERO_EPOCH)),\n );\n\n // Advance the Thread-store fence to this Attempt's epoch (idempotent when equal).\n yield* store.materialize(\n ThreadMaterialization.make({ threadId, producerEpoch: claim.producerEpoch }),\n );\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n const submission = snapshot.submission;\n\n yield* ensureThreadCreated(threadId, submission.agentId, submission.agentDigests);\n if (submission.workerAdmission?.origin.reporting?.mode === \"standard\")\n yield* updateRuntime.repair(threadId);\n if (submission.workerAdmission !== undefined) {\n yield* workerRuntime\n .ensureOrigin(submission.workerAdmission.origin)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason }),\n ),\n );\n }\n if (submission.state === \"admitted\") {\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId }));\n }\n const ctx = yield* attemptContextFor(threadId, claim.producerEpoch);\n\n let controlThrough = (yield* store.inspectTail(ThreadTailRequest.make({ threadId })))\n .tailSequence;\n\n const initialThrough = controlThrough;\n const initialView = yield* recoveryView(threadId, initialThrough, [submissionId]);\n\n let journalMetadata =\n initialView.seed === undefined\n ? makeJournalMetadata(runIdForSubmission(submissionId))\n : undefined;\n\n const retainControl = controlRecords([submissionId]);\n\n const collectControl = (record: CanonicalRecordEnvelope): boolean => {\n // Compaction payloads may carry large summaries or handoffs. Keep their metadata\n // scoped to ordinary projection, never retained across this Attempt's model waits.\n if (record.record.payload._tag === \"CompactionCreated\") journalMetadata = undefined;\n else journalMetadata?.add(record);\n\n return retainControl(record);\n };\n\n let records: ReadonlyArray<CanonicalRecordEnvelope> = yield* Stream.runCollect(\n initialView.canonical.pipe(Stream.filter(collectControl)),\n );\n\n // The append-only prefix remains valid for this Attempt. Retain only this Run's control\n // evidence and validate each newly visible suffix against its own captured tail.\n const refreshControl = Effect.fn(\"DurableAgentRuntime.refreshAttemptControl\")(function* (\n throughSequence?: CanonicalSequence,\n ) {\n const through =\n throughSequence ??\n (yield* store.inspectTail(ThreadTailRequest.make({ threadId }))).tailSequence;\n\n if (through > controlThrough) {\n const suffix = yield* readCanonicalRange(\n threadId,\n controlThrough,\n through,\n collectControl,\n );\n\n records = [...records, ...suffix];\n controlThrough = through;\n }\n\n return records;\n });\n\n const workerOrigin = records\n .map((envelope) => envelope.record.payload)\n .find((payload) => payload._tag === \"WorkerOriginRecorded\")?.origin;\n\n if (\n workerOrigin !== undefined &&\n (submission.workerAdmission === undefined ||\n !Schema.toEquivalence(WorkerAdmission.fields.origin)(\n workerOrigin,\n submission.workerAdmission.origin,\n ))\n ) {\n return yield* RunJournalError.make({\n message: \"Worker input does not match its immutable Thread origin\",\n });\n }\n\n const childPolicy =\n workerOrigin?.policy ??\n records\n .map((envelope) => envelope.record.payload)\n .find((payload) => payload._tag === \"SubagentLineageRecorded\")?.policy;\n\n const agent =\n childPolicy === undefined\n ? registeredAgent\n : {\n ...registeredAgent,\n definition: { ...registeredAgent.definition, policy: childPolicy },\n };\n\n const evidence = yield* evidenceFor(records, submissionId, true, snapshot.hostSubmissionId);\n const knownIds = knownRecordIdsOf(records);\n\n if (evidence.recordedSettlementOutcome !== undefined) {\n const record = yield* canonicalSettlementRecord(records, submissionId);\n const settlement = yield* finalizeFromHistory(submission, record);\n const canonicalSettlement = yield* settlementPayloadFromRecord(record, submissionId);\n\n yield* settleJoinedSubmissions(ctx, canonicalSettlement);\n\n return Option.some(settlement);\n }\n if (snapshot.reservation !== undefined) {\n return Option.some(\n yield* completeReservation(ctx, submission, snapshot.reservation, false),\n );\n }\n if (snapshot.abortIntent !== undefined) {\n // request-abort-and-join (spec §13.1, SUB-022): propagate the durable abort to every\n // nonterminal attached child, join every settled child coordinator-side, and settle\n // aborted ONLY once no child obligation stays open. A waiting/blocked disposition ends\n // the ownership period without settling — the obligation stays owed.\n const disposition = yield* abortAttachedChildren(ctx, submission, tokenRef, knownIds);\n\n if (disposition === \"waiting\") {\n return Option.none<Settlement>();\n }\n if (disposition === \"blocked\") {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(ReleaseOwnershipRequest.make({ submissionId, ownershipToken }))\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return Option.none<Settlement>();\n }\n\n return Option.some(\n yield* settleAborted(ctx, submission, tokenRef, snapshot.abortIntent, evidence, knownIds),\n );\n }\n yield* applyCanonicalInput(ctx, submission, tokenRef, records, snapshot.inputApplied);\n\n const savedRunTiming = yield* ensureRunStarted(\n ctx,\n submission,\n Duration.toMillis(agent.definition.policy.maxDuration),\n yield* refreshControl(),\n );\n\n const runTiming =\n workerOrigin === undefined\n ? savedRunTiming\n : {\n ...savedRunTiming,\n deadline: DateTime.makeUnsafe(\n Math.min(\n DateTime.toEpochMillis(savedRunTiming.deadline),\n workerOrigin.expiresAtMillis,\n ),\n ),\n };\n\n let expiredChildObligation = false;\n\n if ((yield* Clock.currentTimeMillis) >= DateTime.toEpochMillis(runTiming.deadline)) {\n yield* reconcileExpiredChildren(ctx, submission, yield* Ref.get(tokenRef));\n expiredChildObligation = yield* completeJoinedReleases(submission);\n }\n\n // Recheck after duration interruption too: that Attempt may have prepared new ordinary calls.\n const ordinaryCallsResolved = Effect.gen(function* () {\n const reconciliationRecords = yield* refreshControl();\n\n const reconciliationSnapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n );\n\n const reconciliationEvidence = yield* evidenceFor(\n reconciliationRecords,\n submissionId,\n true,\n reconciliationSnapshot.hostSubmissionId,\n );\n\n if (reconciliationEvidence.openToolCalls.length === 0) return true;\n for (const envelope of reconciliationRecords) knownIds.add(envelope.record.recordId);\n const tools: Record<string, Tool.Any> = agent.definition.toolkit.tools;\n\n const review = yield* reconcileOpenCalls(\n ctx,\n submission,\n reconciliationSnapshot,\n reconciliationRecords,\n reconciliationEvidence.openToolCalls,\n knownIds,\n (toolName) => {\n const tool = tools[toolName];\n\n return tool === undefined ? undefined : getToolExecutionClass(tool);\n },\n );\n\n if (review.uncertain.length > 0 || review.unproven.length > 0) {\n if (review.uncertain.length > 0) {\n yield* markCallsUnknown(\n ctx,\n submissionId,\n knownIds,\n review.uncertain,\n \"An ordinary Tool call may have executed without a canonical outcome\",\n );\n }\n // The lane is blocked (marked Unknown, or the reconciliation policy itself failed):\n // release the claim without settling — the accepted-work obligation stays owed.\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(ReleaseOwnershipRequest.make({ submissionId, ownershipToken }))\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return false;\n }\n\n return true;\n });\n\n if (!expiredChildObligation && !(yield* ordinaryCallsResolved))\n return Option.none<Settlement>();\n\n const lineage: AttemptLineage = {\n attemptId: claim.attemptId,\n supersededEpoch,\n inputWasRecorded: evidence.inputRecorded,\n };\n\n let approvalDecisionIntents = snapshot.approvalDecisions;\n\n while (true) {\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n const canonical = Stream.concat(\n initialView.canonical,\n canonicalRange(threadId, tail.tailSequence, initialThrough),\n );\n\n const currentRecords = yield* refreshControl(tail.tailSequence);\n\n const outcome = yield* runModel(\n agent,\n ctx,\n submission,\n tokenRef,\n currentRecords,\n canonical,\n tail.tailSequence,\n initialView.seed,\n journalMetadata?.snapshot(),\n lineage,\n approvalDecisionIntents,\n runTiming,\n yieldAfter,\n );\n\n if (outcome._tag === \"yielded\") return Option.none();\n if (outcome._tag === \"suspendedChild\") {\n // Durable waitingForChild suspension (spec §12 step 10, SUB-030): the sibling\n // late-settles are already canonical; the ledger transition ends the ownership\n // period WITHOUT settling and the lane consumes no worker permit while each listed\n // child runs on its own Thread lane. A child settlement racing ahead of the\n // suspend transaction returns `resume-immediately`: the declared batch replays under\n // this same claim and the handler joins the settled child.\n const [firstChild, ...restChildren] = outcome.children;\n\n const waitingChildren: readonly [WaitingChild, ...Array<WaitingChild>] = [\n WaitingChild.make({\n toolCallId: firstChild.toolCallId,\n childSubmissionId: firstChild.childSubmissionId,\n }),\n ...restChildren.map((child) =>\n WaitingChild.make({\n toolCallId: child.toolCallId,\n childSubmissionId: child.childSubmissionId,\n }),\n ),\n ];\n\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId,\n ownershipToken,\n reason: WaitingForChildSuspension.make({ children: waitingChildren }),\n }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n for (const child of outcome.children) {\n yield* wake.notify(child.childThreadId);\n }\n if (suspension === \"suspended\") {\n return Option.none<Settlement>();\n }\n continue;\n }\n if (outcome._tag === \"suspended\") {\n // Durable approval suspension (plan §2.6): the ledger transition ends the ownership\n // period WITHOUT settling — the accepted-work obligation stays owed while the lane\n // consumes no worker permit. A decision that raced ahead of the suspend transaction\n // returns `resume-immediately`: the declared batch replays under this same claim with\n // the fresh decision intents (no model re-invocation — the response is canonical).\n const ownershipToken = yield* Ref.get(tokenRef);\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId,\n ownershipToken,\n reason: ApprovalPendingSuspension.make({ toolCallIds: [outcome.toolCallId] }),\n }),\n );\n\n yield* hit(\"approval:after-suspend\");\n if (suspension === \"suspended\") {\n return Option.none<Settlement>();\n }\n approvalDecisionIntents = (yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId }),\n )).approvalDecisions;\n continue;\n }\n if (outcome._tag === \"aborted\") {\n // The abort watcher ended the Run while attached children may still be open:\n // request-abort-and-join before the aborted settlement (spec §13.1).\n const disposition = yield* abortAttachedChildren(ctx, submission, tokenRef, knownIds);\n\n if (disposition === \"waiting\") {\n return Option.none<Settlement>();\n }\n if (disposition === \"blocked\") {\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(ReleaseOwnershipRequest.make({ submissionId, ownershipToken }))\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return Option.none<Settlement>();\n }\n\n return Option.some(yield* terminalize(ctx, submission, tokenRef, outcome, true));\n }\n // Canonical joins drive their reservation release BEFORE the parent settles (a settled\n // lane would strand the repair); a reserved row WITHOUT a canonical join is an open\n // attached-child obligation and the parent never settles across it (spec §13).\n if (outcome._tag === \"failed\" && outcome.policyLimit === \"duration\") {\n yield* reconcileExpiredChildren(ctx, submission, yield* Ref.get(tokenRef));\n }\n const openObligation = yield* completeJoinedReleases(submission);\n\n if (openObligation) {\n if (outcome._tag === \"failed\") {\n // Release the claim and leave the lane to recovery classification.\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(ReleaseOwnershipRequest.make({ submissionId, ownershipToken }))\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return Option.none<Settlement>();\n }\n\n // A completed Run with an unjoined reservation is structurally unreachable (the\n // delegation Tool Call settles only through the atomic join batch): fail closed\n // with the obligation visibly owed instead of settling across it.\n return yield* LedgerError.make({\n operation: \"runAttempt\",\n message: `Submission ${submissionId} completed with an unjoined child budget reservation; the settlement is withheld fail-closed (spec 13)`,\n });\n }\n if (\n outcome._tag === \"failed\" &&\n outcome.policyLimit === \"duration\" &&\n !(yield* ordinaryCallsResolved)\n ) {\n return Option.none<Settlement>();\n }\n\n return Option.some(yield* terminalize(ctx, submission, tokenRef, outcome, true));\n }\n }).pipe(Effect.scoped);\n\n /**\n * Framework-owned Schema-stable `ChildCompatibilityFailure` Settlement for a parent-linked\n * child whose exact Binding cannot be resolved at claim time (spec §11, SUB-023/SUB-032): no\n * application code runs, the child never executes, and the parent joins the bounded failure\n * through the normal verification path. A pre-existing reservation or canonical settlement is\n * completed instead of re-decided.\n */\n const settleChildCompatibility = Effect.fn(\"DurableAgentRuntime.settleChildCompatibility\")(\n function* (\n claim: Claim,\n submission: SubmissionSnapshot,\n failure: DurableBindingFailure,\n ): Effect.fn.Return<Settlement, DurableWorkerFailure> {\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n yield* ensureThreadCreated(submission.threadId, submission.agentId, submission.agentDigests);\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const tokenRef = yield* Ref.make(claim.ownershipToken);\n const records = yield* readControl(submission.threadId, [submission.submissionId]);\n\n const recorded = records.some(\n (envelope) =>\n envelope.record.recordId === submissionSettlementRecordId(submission.submissionId),\n );\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n if (snapshot.reservation !== undefined) {\n // An earlier pass already reserved the one exact outcome: complete it, never re-decide.\n return yield* completeReservation(ctx, submission, snapshot.reservation, recorded);\n }\n\n const result = yield* Schema.decodeEffect(SettlementFailureDiagnostic)({\n errorTag: \"ChildCompatibilityFailure\",\n message: boundedText(failure.message),\n }).pipe(Effect.orDie);\n\n return yield* terminalize(ctx, submission, tokenRef, { _tag: \"failed\", result }, false);\n },\n );\n\n /**\n * Drain one Thread lane under claim-time Binding resolution (plan §1.7): every claimed\n * head resolves through the selected private binding path before any code runs. A refusal\n * writes the framework `ChildCompatibilityFailure` Settlement for a\n * parent-linked child and surfaces the typed refusal (after releasing the claim) for a root —\n * a worker never runs a claimed head against different code (SUB-023).\n */\n type CapturedWorkerBinding = Effect.Success<ReturnType<typeof makeLegacyWorkerBinding>>;\n\n // Register cleanup before any interruptible work can observe a granted claim. The token\n // reference is shared with renewal, so cleanup never releases with a superseded token.\n const acquireClaim = Effect.fn(\"DurableAgentRuntime.acquireClaim\")(function* (\n threadId: ThreadId,\n ) {\n const claimed = yield* ledger.claim(\n ClaimRequest.make({ threadId, producerId: config.producerId }),\n );\n\n if (Option.isNone(claimed)) return Option.none();\n const claim = claimed.value;\n const tokenRef = yield* Ref.make(claim.ownershipToken);\n\n yield* Effect.addFinalizer(() =>\n Ref.get(tokenRef).pipe(\n Effect.flatMap((ownershipToken) =>\n ledger.releaseOwnership(\n ReleaseOwnershipRequest.make({ submissionId: claim.submissionId, ownershipToken }),\n ),\n ),\n Effect.catchTag(\"OwnershipLost\", () => Effect.void),\n Effect.catchTag(\"LedgerError\", () =>\n Effect.logWarning(\n \"Attempt ownership release failed; lease recovery remains required\",\n ).pipe(Effect.annotateLogs({ submissionId: claim.submissionId })),\n ),\n ),\n );\n\n return Option.some({ claim, tokenRef });\n }, Effect.uninterruptible);\n\n const processThreadHead = (\n resolve: (\n submission: SubmissionSnapshot,\n ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure>,\n threadId: ThreadId,\n options?: { readonly yieldAfter?: DateTime.Utc },\n ): Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n Effect.scoped(\n Effect.gen(function* () {\n const claimed = yield* acquireClaim(threadId);\n\n if (Option.isNone(claimed)) return Option.none();\n const { claim, tokenRef } = claimed.value;\n\n const attributes = {\n threadId,\n submissionId: claim.submissionId,\n attemptId: claim.attemptId,\n };\n\n yield* Effect.annotateCurrentSpan(attributes);\n yield* Effect.annotateLogsScoped(attributes);\n yield* hit(\"claim:after-claim\");\n\n const found = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: claim.submissionId }),\n );\n\n if (Option.isNone(found)) {\n return yield* LedgerError.make({\n operation: \"processThreadHead\",\n message: `Claimed unknown Submission ${claim.submissionId}`,\n });\n }\n const submission = found.value;\n\n // The claim head rule legally grants an `admitted` head, so the worker path\n // enforces the same AwaitParentEstablishment discipline as the recovery classifier —\n // a parent-linked child whose Thread lacks its canonical lineage record is not\n // runnable yet (the parent's idempotent establishment appends lineage BEFORE\n // readiness, SUB-016).\n // Release the claim, nudge the parent lane, and leave the child to establishment.\n if (submission.parentLinkage !== undefined && submission.state === \"admitted\") {\n const read = yield* readAllTolerant(threadId, []);\n\n const lineageRecorded = read.records.some(\n (envelope) => envelope.record.payload._tag === \"SubagentLineageRecorded\",\n );\n\n if (!lineageRecorded) {\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: claim.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n const parent = yield* ledger.lookup(\n SubmissionLookupById.make({\n submissionId: submission.parentLinkage.parentSubmissionId,\n }),\n );\n\n if (Option.isSome(parent)) {\n yield* wake.notify(parent.value.threadId);\n }\n\n return Option.none();\n }\n }\n\n const resolution = yield* resolve(submission).pipe(\n Effect.map((binding) => ({ _tag: \"resolved\" as const, binding })),\n Effect.catchTags({\n BindingUnavailable: (failure) => Effect.succeed({ _tag: \"refused\" as const, failure }),\n BindingDigestMismatch: (failure) =>\n Effect.succeed({ _tag: \"refused\" as const, failure }),\n }),\n );\n\n if (resolution._tag === \"refused\") {\n if (submission.parentLinkage !== undefined) {\n return Option.some(\n yield* settleChildCompatibility(claim, submission, resolution.failure),\n );\n }\n\n // Root Submission: release the claim and surface the typed refusal — the obligation\n // stays visible and no different code ever runs (spec §11).\n return yield* resolution.failure;\n }\n\n return yield* resolution.binding.attempt(\n (agent, attemptThreadId, attemptClaim) =>\n runAttempt(agent, attemptThreadId, attemptClaim, tokenRef, options?.yieldAfter),\n threadId,\n claim,\n );\n }),\n ).pipe(withThreadHeadSpan);\n\n const drainThread = (\n resolve: (\n submission: SubmissionSnapshot,\n ) => Effect.Effect<CapturedWorkerBinding, DurableBindingFailure>,\n threadId: ThreadId,\n ): Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n Effect.gen(function* () {\n const settlements: Array<Settlement> = [];\n\n while (true) {\n const settlement = yield* processThreadHead(resolve, threadId);\n\n if (Option.isNone(settlement)) {\n // The head is durably blocked (Unknown Outcome, approval suspension, or a\n // waitingForChild suspension): the lane frees its worker permit while the settlement\n // obligation stays visible (durability §16, plan §2.6, SUB-030).\n return settlements;\n }\n settlements.push(settlement.value);\n }\n });\n\n const processThreadImpl = <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined =\n undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n threadId: ThreadId,\n ) =>\n Effect.gen(function* () {\n // The legacy single-binding worker is a singleton resolver (plan §1.7): identity-exact —\n // a claimed head with a different Agent never runs against this binding (the latent P4\n // gap) — and digest-transparent, because this call site registers no digest authority.\n const binding = yield* makeLegacyWorkerBinding(agent);\n\n return yield* drainThread(\n (submission) =>\n submission.agentId === binding.agentId\n ? Effect.succeed(binding)\n : Effect.fail(\n BindingUnavailable.make({\n agentId: submission.agentId,\n message: `This worker is bound to Agent ${binding.agentId}; the claimed head belongs to Agent ${submission.agentId} (SUB-023)`,\n }),\n ),\n threadId,\n );\n });\n\n const processThreadResolvedImpl = (\n threadId: ThreadId,\n ): Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n drainThread(\n (submission) =>\n resolveWorkerBinding(registeredBindings, submission.agentId, submission.agentDigests),\n threadId,\n );\n\n const processThreadHeadImpl = (\n threadId: ThreadId,\n options?: { readonly yieldAfter?: DateTime.Utc },\n ): Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure> =>\n processThreadHead(\n (submission) =>\n resolveWorkerBinding(registeredBindings, submission.agentId, submission.agentDigests),\n threadId,\n options,\n );\n\n const claimFor = Effect.fn(\"DurableAgentRuntime.claimFor\")(function* (\n submission: SubmissionSnapshot,\n ): Effect.fn.Return<Option.Option<Claim>, LedgerError | OwnershipLost, Scope.Scope> {\n const head = yield* Stream.runHead(\n ledger.scanNonterminal.pipe(Stream.filter((entry) => entry.threadId === submission.threadId)),\n );\n\n if (Option.isNone(head) || head.value.submissionId !== submission.submissionId) {\n return Option.none();\n }\n const claimed = yield* acquireClaim(submission.threadId);\n\n if (Option.isNone(claimed)) return Option.none();\n if (claimed.value.claim.submissionId !== submission.submissionId) {\n // FIFO: only the lane head is claimable; this Submission must wait for the head.\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: claimed.value.claim.submissionId,\n ownershipToken: claimed.value.claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return Option.none();\n }\n\n return Option.some(claimed.value.claim);\n });\n\n /**\n * DUR-013 audit: one deterministic `RepairAnnotated` record per executed (submission, decision)\n * pair. Conflicts mean the annotation is already canonical (or a newer epoch owns the lane), so\n * they never fail the already-idempotent repair itself.\n */\n const annotateRepair = (\n threadId: ThreadId,\n submissionId: SubmissionId,\n decision: RecoveryDecision,\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n const encodedDecision = yield* Schema.encodeEffect(RecoveryDecision)(decision).pipe(\n Effect.orDie,\n );\n\n const details = yield* Schema.decodeEffect(PersistedJson)(encodedDecision).pipe(Effect.orDie);\n\n const envelope = yield* makeEnvelope(\n recoveryRepairRecordId(submissionId, decision._tag),\n RepairAnnotated.make({ reason: `recovery:${decision._tag}`, details }),\n );\n\n const tail = yield* store.inspectTail(ThreadTailRequest.make({ threadId }));\n\n yield* store.append(\n FencedAppendRequest.make({\n threadId,\n batch: CanonicalBatch.make({\n batchId: recoveryRepairBatchId(submissionId, decision._tag),\n producerId: config.producerId,\n records: [envelope],\n }),\n expectedTailSequence: tail.tailSequence,\n expectedTailDigest: tail.tailDigest,\n producerEpoch: tail.producerEpoch,\n }),\n );\n yield* wake.notify(threadId);\n }).pipe(Effect.ignore);\n\n const settleAbortedForRecovery = Effect.fn(\"DurableAgentRuntime.settleAbortedForRecovery\")(\n function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n _decision: SettleAbortedDecision,\n ): Effect.fn.Return<\"repaired\" | \"deferred\", DurableWorkerFailure, Scope.Scope> {\n const intent = snapshot.abortIntent;\n\n if (intent === undefined) return \"deferred\";\n const submission = snapshot.submission;\n\n if (submission.state === \"suspended\" && snapshot.suspension !== undefined) {\n if (snapshot.suspension.reason._tag === \"WaitingForChild\") {\n // The classifier reaches SettleAborted only when every attached-child obligation is\n // closed (open ones route to PropagateChildAbort/ResumeWaitingParent, spec §13.1), so\n // every listed child is provably settled: replay the idempotent wake to make the\n // suspended lane claimable, then settle aborted below. A wake the adapter cannot yet\n // verify defers honestly instead of guessing.\n const woken = yield* Effect.gen(function* () {\n for (const child of snapshot.suspension?.reason._tag === \"WaitingForChild\"\n ? snapshot.suspension.reason.children\n : []) {\n yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: submission.submissionId,\n childSubmissionId: child.childSubmissionId,\n }),\n );\n }\n\n return true;\n }).pipe(Effect.catchTag(\"LedgerError\", () => Effect.succeed(false)));\n\n if (!woken) return \"deferred\";\n } else {\n // A suspended head is never worker-claimable (WP2 claim rule), so the aborted\n // settlement first closes the suspension: every undecided call of the stored reason\n // gets a durable DENIED decision, which wakes the lane (`suspended → input-applied`)\n // without ever resuming the batch — the abort intent settles the Submission before\n // any Run resumes. A raced real decision also covers the reason, so its conflict is\n // absorbed.\n const decided = new Set(\n snapshot.approvalDecisions.map((decision) => decision.toolCallId),\n );\n\n for (const toolCallId of snapshot.suspension.reason.toolCallIds) {\n if (decided.has(toolCallId)) continue;\n yield* ledger\n .recordApprovalDecision(\n ApprovalDecisionCommand.make({\n submissionId: submission.submissionId,\n toolCallId,\n decision: \"denied\",\n resolver: RECOVERY_RESOLVER,\n reason:\n \"The Submission was aborted while durably suspended; the pending approval closes denied so the aborted settlement can commit\",\n }),\n )\n .pipe(\n Effect.catchTag(\"ApprovalConflict\", () => Effect.void),\n Effect.asVoid,\n );\n }\n }\n }\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) {\n // P7 §7(c): an aborted, never-claimed, still-queued `ready` Submission settles NOW\n // instead of waiting to head the lane — settlement order of never-run work is not\n // execution order (DUR-004 bounds execution; DUR-012 allows settling inactive\n // accepted work without an Attempt). The appends run at the current tail with the\n // durable abort intent as the reservation authority; any racing owner's fence\n // advance (or a concurrent joining claim) defers honestly to the next pass.\n if (submission.state === \"ready\" && snapshot.ownership === undefined) {\n return yield* Effect.gen(function* () {\n yield* materializeAtLeast(submission.threadId, ZERO_EPOCH);\n yield* ensureThreadCreated(\n submission.threadId,\n submission.agentId,\n submission.agentDigests,\n );\n const ctx = yield* attemptContextAtTail(submission.threadId);\n const tokenRef = yield* Ref.make(QUEUED_ABORT_SETTLEMENT_TOKEN);\n\n yield* settleAborted(\n ctx,\n submission,\n tokenRef,\n intent,\n evidence,\n knownRecordIdsOf(records),\n );\n\n return \"repaired\" as const;\n }).pipe(\n Effect.catchTags({\n FenceRejected: () => Effect.succeed(\"deferred\" as const),\n AppendConflict: () => Effect.succeed(\"deferred\" as const),\n OwnershipLost: () => Effect.succeed(\"deferred\" as const),\n }),\n );\n }\n\n return \"deferred\";\n }\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n yield* ensureThreadCreated(submission.threadId, submission.agentId, submission.agentDigests);\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const tokenRef = yield* Ref.make(claim.ownershipToken);\n\n yield* settleAborted(ctx, submission, tokenRef, intent, evidence, knownRecordIdsOf(records));\n\n return \"repaired\";\n },\n );\n\n /**\n * Execute the reconcile-then-mark flow for a `MarkUnknown` decision (plan §2.2). The recovery\n * pass has no Agent Binding, so no execution-class annotation is visible here — every call\n * without a durable intent or reconciler proof stays fail-closed uncertain. A lane whose open\n * calls all closed reports `repaired`; provably-retryable calls defer to a worker's batch\n * resume; the rest become Unknown Outcomes and report the `unknown` disposition.\n */\n const markUnknownForRecovery = Effect.fn(\"DurableAgentRuntime.markUnknownForRecovery\")(function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n decision: MarkUnknownDecision,\n ): Effect.fn.Return<\"repaired\" | \"deferred\" | \"unknown\", DurableWorkerFailure, Scope.Scope> {\n const submission = snapshot.submission;\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const knownIds = knownRecordIdsOf(records);\n // The classifier's decision lists ONLY ordinary open calls (S2: an open delegation call\n // never marks Unknown — its establishment is idempotent and routes through the Subagent\n // rows), so reconciliation is scoped to exactly those ids.\n const markableIds = new Set<string>(decision.openToolCallIds);\n\n const review = yield* reconcileOpenCalls(\n ctx,\n submission,\n snapshot,\n records,\n evidence.openToolCalls.filter((call) => markableIds.has(call.toolCallId)),\n knownIds,\n () => undefined,\n );\n\n let disposition: \"repaired\" | \"deferred\" | \"unknown\";\n\n if (review.uncertain.length > 0) {\n yield* markCallsUnknown(\n ctx,\n submission.submissionId,\n knownIds,\n review.uncertain,\n decision.reason,\n );\n disposition = \"unknown\";\n } else if (review.unproven.length > 0 || review.retryable.length > 0) {\n disposition = \"deferred\";\n } else {\n disposition = \"repaired\";\n }\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return disposition;\n });\n\n /**\n * Apply covering DUR-017 resolution intents canonically and wake the lane. The `unknown` head\n * is never claimable, so the appends run unfenced at the current tail (no live owner can\n * exist); the wake itself is the ledger's idempotent re-check on intent replay (WP2), so a\n * crash anywhere in this pass converges on the next one.\n */\n const applyUnknownResolutionsForRecovery = Effect.fn(\n \"DurableAgentRuntime.applyUnknownResolutionsForRecovery\",\n )(function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n ): Effect.fn.Return<\"repaired\" | \"deferred\", DurableWorkerFailure> {\n const submission = snapshot.submission;\n const ctx = yield* attemptContextAtTail(submission.threadId);\n const knownIds = knownRecordIdsOf(records);\n\n const applied = yield* reconcileOpenCalls(\n ctx,\n submission,\n snapshot,\n records,\n evidence.openToolCalls,\n knownIds,\n () => undefined,\n ).pipe(\n Effect.as(true),\n // A fence advance mid-pass means another owner took the Thread: defer to it.\n Effect.catchTag(\"FenceRejected\", () => Effect.succeed(false)),\n );\n\n if (!applied) return \"deferred\";\n for (const intent of snapshot.unknownResolutions) {\n // Replaying the stored intent re-checks the covering wake idempotently (WP2 contract).\n yield* ledger\n .recordUnknownResolution(\n UnknownResolutionCommand.make({\n submissionId: intent.submissionId,\n toolCallId: intent.toolCallId,\n author: intent.author,\n reason: intent.reason,\n resolution: intent.resolution,\n }),\n )\n .pipe(\n Effect.catchTag(\"UnknownResolutionConflict\", (error) =>\n LedgerError.make({\n operation: \"applyUnknownResolutions\",\n message: `Replaying the stored resolution intent for ${error.toolCallId} diverged`,\n cause: error,\n }),\n ),\n );\n }\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n });\n\n /**\n * Repair a lost durable suspension from canonical history (plan §2.6, crash between the\n * canonical `ToolApprovalRequested` append and the ledger `suspend` transition): the lane is\n * claimable but the Run cannot proceed without a decision, so the executor claims it and moves\n * it to `suspended` — the ledger op ends the ownership period itself — reporting `repaired`.\n * Nothing executes and nothing settles. A lane that is already suspended has nothing to\n * repair: it waits durably for the authorized `resolveApproval` path, consuming no worker\n * permit, and stays `deferred`. Decisions that raced ahead of the repair leave the lane to a\n * worker's batch resume (`deferred`).\n */\n const awaitApprovalForRecovery = Effect.fn(\"DurableAgentRuntime.awaitApprovalForRecovery\")(\n function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n ): Effect.fn.Return<\"repaired\" | \"deferred\", DurableWorkerFailure, Scope.Scope> {\n const submission = snapshot.submission;\n\n if (submission.state === \"suspended\") return \"deferred\";\n const decided = new Set(snapshot.approvalDecisions.map((decision) => decision.toolCallId));\n\n const undecided = evidence.approvalsPending.filter(\n (pending) => !decided.has(pending.toolCallId),\n );\n\n const first = undecided[0];\n\n if (first === undefined) return \"deferred\";\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n const outcome = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: ApprovalPendingSuspension.make({\n toolCallIds: [\n first.toolCallId,\n ...undecided.slice(1).map((pending) => pending.toolCallId),\n ],\n }),\n }),\n );\n\n yield* hit(\"approval:after-suspend\");\n if (outcome === \"resume-immediately\") {\n // Decisions raced in between the snapshot read and the suspend transaction: nothing to\n // repair — release the claim so a worker resumes the declared batch.\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return \"deferred\";\n }\n\n return \"repaired\";\n },\n );\n\n /**\n * Defensive branch for a `suspended` lane whose canonical approval requests are all decided\n * (the classifier's `ResumeSuspended`). Under this coordinator the state is unreachable: the\n * covering `recordApprovalDecision` wakes the lane atomically inside the adapter (WP2), and a\n * decision racing ahead of `suspend` returns `resume-immediately` without ever suspending. The\n * executor therefore only re-hints the lane and reports `deferred`, keeping the obligation\n * visible instead of guessing at a wake the ledger port does not offer.\n */\n const resumeSuspendedForRecovery = Effect.fn(\"DurableAgentRuntime.resumeSuspendedForRecovery\")(\n function* (snapshot: RecoverySnapshot): Effect.fn.Return<\"deferred\", DurableWorkerFailure> {\n yield* wake.notify(snapshot.submission.threadId);\n\n return \"deferred\";\n },\n );\n\n const executeRecoveryDecision = Effect.fn(\"DurableAgentRuntime.executeRecoveryDecision\")(\n function* (\n snapshot: RecoverySnapshot,\n evidence: RecoveryEvidence,\n decision: RecoveryDecision,\n records: ReadonlyArray<CanonicalRecordEnvelope>,\n history: RecoveryHistorySnapshot,\n ): Effect.fn.Return<\n \"repaired\" | \"deferred\" | \"none\" | \"unknown\",\n DurableWorkerFailure,\n Scope.Scope\n > {\n const submission = snapshot.submission;\n const runId = runIdForSubmission(submission.submissionId);\n const start = yield* canonicalRunStartFromRecords(records, runId);\n\n if (\n start?.payload._tag === \"RunStarted\" &&\n start.payload.runId === runId &&\n (yield* Clock.currentTimeMillis) >=\n DateTime.toEpochMillis(start.createdAt) + start.payload.maxDurationMillis &&\n (decision._tag === \"CompleteChildAdmission\" ||\n decision._tag === \"RepairSubagentStartLink\" ||\n decision._tag === \"AwaitChildAdmissionResolution\" ||\n (decision._tag === \"MarkUnknown\" &&\n snapshot.childReservations.some((reservation) => reservation.status !== \"released\")))\n ) {\n // A closed admission window must release provably-unused reservations or restore the\n // existing child's link. Do this before ordinary Unknown Outcomes make the lane\n // unclaimable, and never let binding-free recovery admit new work after expiry.\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n\n yield* reconcileExpiredChildren(ctx, submission, claim.ownershipToken);\n const open = yield* completeJoinedReleases(submission);\n\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return open ? \"deferred\" : \"repaired\";\n }\n switch (decision._tag) {\n case \"NoAction\": {\n return \"none\";\n }\n case \"ResumeFromTurnBoundary\":\n case \"ResumePendingToolBatch\": {\n // Resumption needs the Agent Binding: a claiming worker resumes from the committed\n // boundary (the declared batch resumes without model re-invocation, durability §15).\n return \"deferred\";\n }\n case \"MarkUnknown\": {\n return yield* markUnknownForRecovery(snapshot, evidence, records, decision);\n }\n case \"ApplyUnknownResolutions\": {\n return yield* applyUnknownResolutionsForRecovery(snapshot, evidence, records);\n }\n case \"AwaitUnknownResolution\": {\n // The lane stays durably blocked awaiting the authorized DUR-017 resolution path;\n // the settlement obligation stays visible, nothing replays.\n return \"unknown\";\n }\n case \"AwaitApprovalDecision\": {\n return yield* awaitApprovalForRecovery(snapshot, evidence);\n }\n case \"ResumeSuspended\": {\n return yield* resumeSuspendedForRecovery(snapshot);\n }\n case \"RevertJoining\": {\n // `joining` without a canonical `input:{sid}` record: the host never consumed the\n // input, so the claim returns to ready and is delivered exactly once later\n // (DUR-016). Ownership-free by contract; the wake hint reopens the lane.\n yield* ledger.revertJoining(\n RevertJoiningRequest.make({ submissionId: submission.submissionId }),\n );\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"RepairJoinMarker\": {\n const hostSubmissionId = snapshot.hostSubmissionId;\n\n if (hostSubmissionId === undefined) return \"deferred\";\n\n const inputEnvelope = records.find(\n (envelope) =>\n envelope.record.recordId === submissionInputRecordId(submission.submissionId),\n );\n\n if (inputEnvelope === undefined) return \"deferred\";\n if (evidence.hostSettlementOutcome !== undefined) {\n // The host settled while the marker was lost, so no host ownership can ever repair\n // it. The coverage rule decides honestly (DUR-016): an uncovered input was never\n // consumed by the host and returns to ready to run as its own Run (the canonical\n // `input:{sid}` record reattaches through the ordinary input-marker repair); a\n // covered-but-unmarked input is unreachable under this coordinator (`markJoined`\n // always precedes delivery), so it stays visible instead of being guessed at.\n if (!evidence.joinedInputCovered) {\n yield* ledger.revertJoining(\n RevertJoiningRequest.make({ submissionId: submission.submissionId }),\n );\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n\n return \"deferred\";\n }\n\n // `markJoined` is fenced by the HOST lane's ownership: claim the host head, repair\n // the marker from history (DUR-015), and release. A live host defers to that host's\n // own drain-seam repair.\n const host = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: hostSubmissionId }),\n );\n\n if (Option.isNone(host)) return \"deferred\";\n const claimed = yield* claimFor(host.value);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* ledger.markJoined(\n MarkJoinedRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n recordId: inputEnvelope.record.recordId,\n sequence: inputEnvelope.sequence,\n }),\n );\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: hostSubmissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"SettleJoinedWithHost\": {\n const hostSubmissionId = snapshot.hostSubmissionId;\n\n if (hostSubmissionId === undefined) return \"deferred\";\n const hostRecord = yield* canonicalSettlementRecord(records, hostSubmissionId);\n const hostSettlement = yield* settlementPayloadFromRecord(hostRecord, hostSubmissionId);\n // The host settled canonically, so no live owner can exist for this lane (a joined\n // head is never claimable): the joined settlement completes unfenced at the current\n // tail, deferring to any racing fence advance.\n const ctx = yield* attemptContextAtTail(submission.threadId);\n\n const applied = yield* settleOneJoined(ctx, hostSettlement, snapshot).pipe(\n Effect.as(true),\n Effect.catchTag(\"FenceRejected\", () => Effect.succeed(false)),\n );\n\n return applied ? \"repaired\" : \"deferred\";\n }\n case \"AwaitHostSettlement\": {\n // The joined input reattaches through the host Run's resume (prompt-coverage rule);\n // hint the shared lane and keep the obligation visible.\n yield* wake.notify(submission.threadId);\n\n return \"deferred\";\n }\n case \"CompleteMaterialization\":\n case \"RepairReadiness\": {\n yield* materializeAtLeast(submission.threadId, ZERO_EPOCH);\n yield* ensureThreadCreated(\n submission.threadId,\n submission.agentId,\n submission.agentDigests,\n );\n if (submission.workerAdmission !== undefined) {\n yield* workerRuntime\n .ensureOrigin(submission.workerAdmission.origin)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason }),\n ),\n );\n }\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: submission.submissionId }));\n\n return \"repaired\";\n }\n case \"ApplyInput\":\n case \"RepairInputMarker\": {\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n yield* ensureThreadCreated(\n submission.threadId,\n submission.agentId,\n submission.agentDigests,\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const tokenRef = yield* Ref.make(claim.ownershipToken);\n\n const currentRecords = yield* refreshRecoveryHistory(\n submission.threadId,\n records,\n history.throughSequence,\n history.submissionIds,\n );\n\n yield* applyCanonicalInput(\n ctx,\n submission,\n tokenRef,\n currentRecords,\n snapshot.inputApplied,\n );\n const ownershipToken = yield* Ref.get(tokenRef);\n\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return \"repaired\";\n }\n case \"AppendReservedSettlement\": {\n const reservation = snapshot.reservation;\n\n if (reservation === undefined) return \"deferred\";\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) {\n // P7 §7(c) crash replay: a queued-abort settlement that committed its reservation\n // but lost the append/finalize completes at the current tail — the aborted,\n // never-claimed row still holds no live ownership, so no claim can ever exist\n // for it while it stays queued behind the head.\n if (\n reservation.outcome === \"aborted\" &&\n snapshot.abortIntent !== undefined &&\n snapshot.ownership === undefined\n ) {\n const ctx = yield* attemptContextAtTail(submission.threadId);\n\n return yield* completeReservation(\n ctx,\n submission,\n reservation,\n evidence.recordedSettlementOutcome !== undefined,\n ).pipe(\n Effect.as(\"repaired\" as const),\n Effect.catchTags({\n FenceRejected: () => Effect.succeed(\"deferred\" as const),\n AppendConflict: () => Effect.succeed(\"deferred\" as const),\n }),\n );\n }\n\n return \"deferred\";\n }\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n\n yield* completeReservation(\n ctx,\n submission,\n reservation,\n evidence.recordedSettlementOutcome !== undefined,\n );\n\n return \"repaired\";\n }\n case \"FinalizeLedgerFromHistory\": {\n const record = yield* canonicalSettlementRecord(records, submission.submissionId);\n\n yield* finalizeFromHistory(submission, record);\n\n return \"repaired\";\n }\n case \"SettleAborted\": {\n return yield* settleAbortedForRecovery(snapshot, evidence, records, decision);\n }\n case \"CompleteChildAdmission\": {\n // Binding-free (D3): the canonical `SubagentRequested` payload carries the encoded\n // child input, intended identity, and every digest, so admission completes without a\n // live delegation handler — one child, same Receipt on every replay (SUB-016).\n const subagent = subagentRecordsOf(records, runIdForSubmission(submission.submissionId));\n const requestedPayload = subagent.requested.get(decision.toolCallId);\n\n if (requestedPayload === undefined) return \"deferred\";\n const admission = yield* establishChildFromRequest(submission, requestedPayload);\n\n return admission._tag === \"indeterminate\" ? \"deferred\" : \"repaired\";\n }\n case \"RepairSubagentStartLink\": {\n // Resolve the SAME child by its deterministic idempotency key, complete any missing\n // materialization/lineage/readiness, then append the exact deterministic\n // `SubagentStarted` link and reattach the reservation under the parent fence\n // (spec §13, SUB-016/SUB-017).\n const runId = runIdForSubmission(submission.submissionId);\n const subagent = subagentRecordsOf(records, runId);\n const requestedPayload = subagent.requested.get(decision.toolCallId);\n\n if (requestedPayload === undefined) return \"deferred\";\n const admission = yield* establishChildFromRequest(submission, requestedPayload);\n\n if (admission._tag === \"indeterminate\") return \"deferred\";\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n yield* store.materialize(\n ThreadMaterialization.make({\n threadId: submission.threadId,\n producerEpoch: claim.producerEpoch,\n }),\n );\n const ctx = yield* attemptContextFor(submission.threadId, claim.producerEpoch);\n const knownIds = knownRecordIdsOf(records);\n const startRecordId = subagentStartedRecordId(runId, decision.toolCallId);\n\n if (!knownIds.has(startRecordId)) {\n const envelope = yield* makeEnvelope(\n startRecordId,\n SubagentStarted.make({\n runId,\n toolCallId: decision.toolCallId,\n childThreadId: requestedPayload.childThreadId,\n childSubmissionId: admission.childSubmissionId,\n childReceiptId: admission.receiptId,\n childRunId: runIdForSubmission(admission.childSubmissionId),\n }),\n );\n\n yield* appendBatch(\n ctx,\n CanonicalBatch.make({\n batchId: subagentStartedBatchId(runId, decision.toolCallId),\n producerId: config.producerId,\n records: [envelope],\n }),\n ).pipe(\n Effect.catchTag(\"AppendConflict\", () => Effect.void),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-start-append\");\n }\n yield* ledger\n .attachChildToReservation(\n AttachChildToReservationRequest.make({\n reservationId: decodeChildReservationIdSync(requestedPayload.reservationId),\n ownershipToken: claim.ownershipToken,\n childSubmissionId: admission.childSubmissionId,\n }),\n )\n .pipe(\n Effect.catchTag(\n \"ChildReservationConflict\",\n conflictToLedgerError(\"attachChildToReservation\"),\n ),\n );\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n yield* wake.notify(requestedPayload.childThreadId);\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"EnsureWaitingForChild\": {\n // Restore the lost `waitingForChild` checkpoint (spec §14 \"after parent start, before\n // waitingForChild checkpoint\"): claim the lane and suspend it — the ledger op ends the\n // ownership period itself, so the lane holds no worker permit while each child runs\n // on its own lane. Never spawns a replacement invocation (SUB-018/SUB-030).\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: WaitingForChildSuspension.make({ children: decision.children }),\n }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (suspension === \"resume-immediately\") {\n // Every listed child already settled: leave the joins to a claiming worker's batch\n // resume (they need the parent Binding and its result projection).\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n\n return \"deferred\";\n }\n\n return \"repaired\";\n }\n case \"ResumeWaitingParent\": {\n // Every relevant child is provably settled: replay the idempotent ownership-free wake\n // (a dropped wake is never a lost obligation) so a claiming worker resumes the\n // declared batch and joins each child's canonical Settlement (spec §13).\n for (const child of decision.children) {\n yield* ledger.recordChildSettled(\n ChildSettledNotification.make({\n parentSubmissionId: submission.submissionId,\n childSubmissionId: child.childSubmissionId,\n }),\n );\n }\n yield* wake.notify(submission.threadId);\n\n return \"repaired\";\n }\n case \"ApplyJoinAccounting\": {\n // Budget release incomplete after a canonical join: replay the accounting decision\n // FROM the canonical `SubagentJoined` record — budget stays unavailable until repair,\n // never available twice (spec §12 join step 6, DUR-015).\n const reservation = snapshot.childReservations.find(\n (row) => row.reservationId === decision.reservationId,\n );\n\n if (reservation === undefined) return \"deferred\";\n if (reservation.status === \"released\") return \"repaired\";\n const subagent = subagentRecordsOf(records, runIdForSubmission(submission.submissionId));\n const joinedPayload = subagent.joined.get(decision.toolCallId);\n\n if (joinedPayload !== undefined) {\n yield* applyReservationRelease(decision.reservationId, joinedPayload.finalAccounting);\n\n return \"repaired\";\n }\n if (reservation.status === \"releasePending\" && reservation.accounting !== undefined) {\n // The decision is already frozen: finish the idempotent release — never re-freeze.\n yield* applyReservationRelease(decision.reservationId, reservation.accounting);\n\n return \"repaired\";\n }\n\n return \"deferred\";\n }\n case \"PropagateChildAbort\": {\n // Request-abort-and-join (spec §13.1): the ONE idempotent durable abort command per\n // nonterminal child — the recorded child `AbortIntent` row IS the propagation marker,\n // so the replayed command returns it unchanged (DUR-012) — while the parent stays (or\n // becomes) suspended `waitingForChild` for the joins.\n for (const child of decision.children) {\n yield* ledger\n .requestAbort(\n AbortCommand.make({\n submissionId: child.childSubmissionId,\n author: SUBAGENT_ABORT_AUTHOR,\n reason: SUBAGENT_ABORT_REASON,\n }),\n )\n .pipe(\n // The child settled concurrently: its one winning Settlement joins next pass.\n Effect.catchTags({\n SettlementConflict: () => Effect.void,\n JoinedToHost: conflictToLedgerError(\"PropagateChildAbort\"),\n }),\n Effect.asVoid,\n );\n yield* hit(\"subagent:after-child-abort-intent\");\n\n const childRow = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: child.childSubmissionId }),\n );\n\n if (Option.isSome(childRow)) {\n yield* wake.notify(childRow.value.threadId);\n }\n }\n if (submission.state !== \"suspended\") {\n const claimed = yield* claimFor(submission);\n\n if (Option.isNone(claimed)) return \"deferred\";\n const claim = claimed.value;\n\n const suspension = yield* ledger.suspend(\n SuspendRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n reason: WaitingForChildSuspension.make({ children: decision.children }),\n }),\n );\n\n yield* hit(\"subagent:after-suspend\");\n if (suspension === \"resume-immediately\") {\n // Every child settled while suspending: the next pass joins the winners.\n yield* ledger\n .releaseOwnership(\n ReleaseOwnershipRequest.make({\n submissionId: submission.submissionId,\n ownershipToken: claim.ownershipToken,\n }),\n )\n .pipe(Effect.catchTag(\"OwnershipLost\", () => Effect.void));\n }\n }\n\n return \"repaired\";\n }\n case \"ReleaseOrphanChildReservation\": {\n // Provably childless reservations release exactly once (spec §13/§14): freeze the\n // deterministic zero-consumed decision, then apply it idempotently.\n for (const reservationId of decision.reservationIds) {\n yield* releaseOrphanReservation(reservationId);\n }\n\n return \"repaired\";\n }\n case \"AwaitChildAdmissionResolution\": {\n // Wait-and-retry (SUB-031): the evidence assembler re-queries the authoritative owner\n // with the deterministic idempotency key on every recovery pass; an indeterminate\n // answer never permits a second admission and holds no worker permit.\n return \"deferred\";\n }\n case \"AwaitChildSettlement\": {\n // The parent lane stays dormant `waitingForChild` (SUB-030): the child's Settlement\n // wakes it durably through `recordChildSettled`; an unresolved ordinary Tool inside\n // the child keeps the parent here honestly with the obligation visible (SUB-021).\n return \"deferred\";\n }\n case \"AwaitParentEstablishment\": {\n // The child lane defers its own materialization/readiness repair until the\n // parent's idempotent establishment appends the immutable lineage record — a child\n // never runs a Turn before its lineage is canonical. A droppable wake hint nudges the\n // parent lane, whose own recovery re-drives establishment (CompleteChildAdmission /\n // RepairSubagentStartLink); the deterministic child identity makes every replay\n // converge on this one child (SUB-016).\n const parent = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: decision.parentSubmissionId }),\n );\n\n if (Option.isSome(parent)) {\n yield* wake.notify(parent.value.threadId);\n }\n\n return \"deferred\";\n }\n }\n },\n );\n\n const recoverSnapshot = Effect.fn(\"DurableAgentRuntime.recoverSnapshot\")(function* (\n submission: SubmissionSnapshot,\n history: RecoveryHistorySnapshot,\n ): Effect.fn.Return<RecoveryReport, DurableWorkerFailure> {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n // A racing steering link can name a host outside the pass's nonterminal group. Read that\n // host from the same verified prefix, without changing this snapshot's visibility.\n if (\n snapshot.hostSubmissionId !== undefined &&\n !history.submissionIds.includes(snapshot.hostSubmissionId)\n ) {\n const hostId = snapshot.hostSubmissionId;\n const hostView = yield* recoveryView(submission.threadId, history.throughSequence, [hostId]);\n\n const hostRecords = yield* Stream.runCollect(\n hostView.canonical.pipe(Stream.filter(controlRecords([hostId]))),\n );\n\n const merged = new Map(history.records.map((entry) => [entry.sequence, entry]));\n\n for (const entry of hostRecords) merged.set(entry.sequence, entry);\n history = {\n ...history,\n records: [...merged.values()].sort((left, right) => left.sequence - right.sequence),\n submissionIds: [...history.submissionIds, snapshot.hostSubmissionId],\n };\n }\n\n const evidence = yield* evidenceFor(\n history.records,\n submission.submissionId,\n history.materialized,\n snapshot.hostSubmissionId,\n );\n\n const decision = classifyRecovery(snapshot, evidence);\n\n // Untouched ready input belongs to the worker's first claim. Running attempts and\n // canonical appends with a missing marker still take their classified repair path.\n const disposition =\n decision._tag === \"ApplyInput\" && snapshot.submission.state === \"ready\"\n ? \"deferred\"\n : yield* Effect.scoped(\n executeRecoveryDecision(snapshot, evidence, decision, history.records, history),\n );\n\n if (disposition === \"repaired\") {\n yield* annotateRepair(submission.threadId, submission.submissionId, decision);\n }\n\n return RecoveryReport.make({\n submissionId: submission.submissionId,\n threadId: submission.threadId,\n decision,\n disposition,\n });\n });\n\n const recoverSubmission = Effect.fn(\"DurableAgentRuntime.recoverSubmission\")(function* (\n submissionId: SubmissionId,\n ): Effect.fn.Return<RecoveryReport, DurableWorkerFailure> {\n const found = yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n\n if (Option.isNone(found)) {\n return yield* LedgerError.make({\n operation: \"recoverSubmission\",\n message: `Unknown Submission ${submissionId}`,\n });\n }\n\n const history = yield* readRecoveryHistory(found.value.threadId, [submissionId]);\n\n if (history.materialized && found.value.workerAdmission?.origin.reporting?.mode === \"standard\")\n yield* updateRuntime.repair(found.value.threadId);\n\n return yield* recoverSnapshot(found.value, history);\n });\n\n const runRecoveryImpl = Effect.fn(\"DurableAgentRuntime.runRecovery\")(\n function* (): Effect.fn.Return<ReadonlyArray<RecoveryReport>, DurableWorkerFailure> {\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const reports: Array<RecoveryReport> = [];\n // SubmissionLedger guarantees `(threadId, queueSequence)` order. Capture and retain\n // one verified canonical prefix only for the current contiguous Thread group: read\n // work is one tail inspection plus `ceil(passStartTail / READ_PAGE)` pages per Thread\n // rather than multiplied by its nonterminal Submission count, and the prefix becomes\n // unreachable before the next Thread is read.\n let index = 0;\n\n while (index < nonterminal.length) {\n const first = nonterminal[index];\n\n if (first === undefined) break;\n const submissionIds: Array<SubmissionId> = [];\n let hasStandardReporting = false;\n\n for (let offset = index; offset < nonterminal.length; offset += 1) {\n const entry = nonterminal[offset];\n\n if (entry === undefined || entry.threadId !== first.threadId) break;\n submissionIds.push(entry.submissionId);\n hasStandardReporting ||= entry.workerAdmission?.origin.reporting?.mode === \"standard\";\n }\n const history = yield* readRecoveryHistory(first.threadId, submissionIds);\n\n if (history.materialized && hasStandardReporting)\n yield* updateRuntime.repair(first.threadId);\n\n while (index < nonterminal.length) {\n const submission = nonterminal[index];\n\n if (submission === undefined || submission.threadId !== first.threadId) {\n break;\n }\n reports.push(yield* recoverSnapshot(submission, history));\n index += 1;\n }\n }\n\n return reports;\n },\n );\n\n const submit = Effect.fn(\"DurableAgentRuntime.submit\")(function* <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ): Effect.fn.Return<Receipt, DurableSubmitFailure, InputSchema[\"EncodingServices\"]> {\n const encodedInput = yield* Schema.encodeEffect(agent.definition.input)(input).pipe(\n Effect.mapError((cause) =>\n AgentInputError.make({ message: `Unable to encode Agent input: ${cause.message}` }),\n ),\n );\n\n const inputPayload = yield* Schema.decodeUnknownEffect(PersistedJson)(encodedInput).pipe(\n Effect.mapError(() =>\n AgentInputError.make({\n message: \"Agent input does not satisfy the canonical persistence bounds\",\n }),\n ),\n );\n\n const inputDigest = yield* withCrypto(digestJson(inputPayload));\n\n const workerAdmission =\n options.workerAdmission === undefined\n ? undefined\n : yield* workerRuntime\n .validateAdmission(\n options.workerAdmission,\n options,\n agent.definition.id,\n inputDigest,\n inputPayload,\n )\n .pipe(\n Effect.mapError((cause) =>\n AdmissionPolicyError.make({\n reason:\n cause.reason === \"storage\" || cause.reason === \"unavailable\"\n ? \"unavailable\"\n : cause.reason === \"capacity\" &&\n cause.retryable === true &&\n Schema.is(FrameworkMessage)(options.messageAdmission)\n ? \"occupied\"\n : \"refused\",\n code: `worker-${cause.reason}`,\n }),\n ),\n );\n\n const pendingMessage = options.messageAdmission;\n\n const messageAdmission =\n pendingMessage === undefined\n ? undefined\n : yield* Effect.suspend((): Effect.Effect<InputMessage, MessagingError | WorkerError> =>\n Schema.is(MessageAdmission)(pendingMessage)\n ? messagingRuntime.validateAdmission(\n pendingMessage,\n options,\n agent.definition.id,\n inputDigest,\n )\n : workerRuntime.validateCompletion(\n pendingMessage,\n options,\n agent.definition.id,\n inputDigest,\n ),\n ).pipe(\n Effect.mapError((cause) =>\n AdmissionPolicyError.make({\n reason:\n cause.reason === \"storage\" || cause.reason === \"unavailable\"\n ? \"unavailable\"\n : \"refused\",\n code: `message-${cause.reason}`,\n }),\n ),\n );\n\n const admitted = yield* ledger.admit(\n yield* Schema.decodeEffect(AdmissionRequest)({\n threadId: options.threadId,\n principal: options.principal,\n idempotencyKey: options.idempotencyKey,\n ...(options.admissionGroup === undefined ? {} : { admissionGroup: options.admissionGroup }),\n ...(options.admissionFence === undefined ? {} : { admissionFence: options.admissionFence }),\n agentId: agent.definition.id,\n agentDigests: options.definitions,\n deploymentId: config.deploymentId,\n inputPayload,\n inputDigest,\n ...(workerAdmission === undefined\n ? {}\n : {\n workerAdmission: yield* Schema.encodeEffect(WorkerAdmission)(workerAdmission).pipe(\n Effect.mapError(() =>\n LedgerError.make({\n operation: \"submit\",\n message: \"Worker admission cannot be encoded\",\n }),\n ),\n ),\n }),\n ...(messageAdmission === undefined ? {} : { messageAdmission }),\n }).pipe(\n Effect.mapError(() =>\n LedgerError.make({\n operation: \"submit\",\n message: \"Admission fields do not satisfy the ledger contract\",\n }),\n ),\n ),\n );\n\n yield* hit(\"submit:after-admit\");\n\n const receipt = Receipt.make({\n receiptId: admitted.receiptId,\n submissionId: admitted.submissionId,\n threadId: options.threadId,\n queueSequence: admitted.queueSequence,\n });\n\n // A replay of an already-ready Submission resumes by returning the original Receipt;\n // an admitted-but-not-ready Submission (ours or a crashed predecessor's) is completed here.\n if (admitted.replayed && admitted.state !== \"admitted\") {\n return receipt;\n }\n yield* materializeAtLeast(options.threadId, ZERO_EPOCH);\n yield* ensureThreadCreated(options.threadId, agent.definition.id, options.definitions);\n if (workerAdmission !== undefined) {\n yield* workerRuntime\n .ensureOrigin(workerAdmission.origin)\n .pipe(\n Effect.mapError((cause) =>\n LedgerError.make({ operation: \"worker-origin\", message: cause.reason }),\n ),\n );\n }\n yield* hit(\"submit:after-materialize\");\n yield* ledger.markReady(MarkReadyRequest.make({ submissionId: admitted.submissionId }));\n yield* wake.notify(options.threadId);\n\n return receipt;\n });\n\n const authorizeSettlement = (receipt: Receipt) =>\n operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"awaitSettlement\",\n threadId: receipt.threadId,\n submissionId: receipt.submissionId,\n }),\n );\n\n const submitRegistered = Effect.fn(\"DurableAgentRuntime.submitRegistered\")(function* <\n InputSchema extends Schema.Top,\n >(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: Omit<DurableSubmitOptions, \"definitions\">,\n ) {\n const binding = yield* resolveDefinitionBinding(registeredBindings, agent.definition);\n\n return yield* submit(agent, input, { ...options, definitions: binding.digests });\n });\n\n const readSubmissionStatus = Effect.fn(\"DurableAgentRuntime.readSubmissionStatus\")(function* (\n receipt: Receipt,\n ): Effect.fn.Return<SubmissionStatus, DurableAwaitFailure> {\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: receipt.submissionId }),\n );\n\n if (Option.isNone(snapshot)) {\n return yield* LedgerError.make({\n operation: \"awaitSettlement\",\n message: `Unknown Submission ${receipt.submissionId}`,\n });\n }\n if (\n snapshot.value.threadId !== receipt.threadId ||\n snapshot.value.receiptId !== receipt.receiptId ||\n snapshot.value.queueSequence !== receipt.queueSequence\n ) {\n return yield* OperationDenied.make({\n operation: \"awaitSettlement\",\n reason: \"Receipt does not match the authorized Submission\",\n threadId: receipt.threadId,\n submissionId: receipt.submissionId,\n });\n }\n if (snapshot.value.state !== \"settled\") return PendingSubmission.make({});\n\n // Finalization replay reads the canonical outcome without changing settledAt.\n const settlement = yield* ledger.finalizeSettlement(\n SettlementFinalization.make({\n submissionId: receipt.submissionId,\n settlementId: submissionSettlementId(receipt.submissionId),\n }),\n );\n\n const recovery = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: receipt.submissionId }),\n );\n\n return SettledSubmission.make({\n settlement: materializeSettlement(settlement, recovery.reservation?.record),\n });\n });\n\n const submissionStatus = Effect.fn(\"DurableAgentRuntime.submissionStatus\")(function* (\n receipt: Receipt,\n ): Effect.fn.Return<SubmissionStatus, DurableAwaitFailure> {\n yield* authorizeSettlement(receipt);\n\n return yield* readSubmissionStatus(receipt);\n });\n\n const settlementRecord = Effect.fn(\"DurableAgentRuntime.settlementRecord\")(function* (\n receipt: Receipt,\n ) {\n yield* authorizeSettlement(receipt);\n const status = yield* readSubmissionStatus(receipt);\n\n if (status._tag !== \"settled\") {\n return yield* LedgerError.make({\n operation: \"settlementRecord\",\n message: \"Submission has not settled\",\n });\n }\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: receipt.submissionId }),\n );\n\n if (snapshot.reservation === undefined) {\n return yield* LedgerError.make({\n operation: \"settlementRecord\",\n message: \"Settlement has no canonical reservation\",\n });\n }\n\n const record = yield* settlementPayloadFromRecord(\n snapshot.reservation.record,\n receipt.submissionId,\n );\n\n if (\n record.receiptId !== receipt.receiptId ||\n record.settlementId !== status.settlement.settlementId ||\n record.outcome !== status.settlement.outcome\n ) {\n return yield* LedgerError.make({\n operation: \"settlementRecord\",\n message: \"Canonical Settlement disagrees with the receipt or finalized outcome\",\n });\n }\n\n return record;\n });\n\n const awaitSettlement = Effect.fn(\"DurableAgentRuntime.awaitSettlement\")(function* (\n receipt: Receipt,\n ): Effect.fn.Return<Settlement, DurableAwaitFailure> {\n // Authorization lasts for this wait, as it does for one observe subscription.\n yield* authorizeSettlement(receipt);\n while (true) {\n const status = yield* readSubmissionStatus(receipt);\n\n if (status._tag === \"settled\") return status.settlement;\n // Wake delivery is a pure liveness hint; the ledger poll below guarantees progress.\n yield* Effect.raceFirst(\n Stream.runDrain(\n wake.wakes.pipe(\n Stream.filter((threadId) => threadId === receipt.threadId),\n Stream.take(1),\n ),\n ),\n Effect.sleep(config.settlementPollInterval),\n );\n }\n });\n\n const awaitProgress = Effect.fn(\"DurableAgentRuntime.awaitProgress\")(function* (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n ): Effect.fn.Return<void, DurableProgressFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"observe\",\n threadId,\n }),\n );\n yield* Effect.scoped(\n Effect.gen(function* () {\n // Registration MUST precede the authoritative read. A notify between this acquisition\n // and parking completes the returned one-shot Effect, so neither subscribe/check nor\n // check/park can lose progress.\n const awaitHint = yield* wake.subscribe(threadId);\n\n const committed = yield* Stream.runHead(\n store.read(\n ThreadRead.make({\n threadId,\n afterSequence,\n limit: 1,\n }),\n ),\n );\n\n if (Option.isSome(committed)) return;\n // A wake is only a hint. The caller re-reads canonical records after this returns.\n yield* awaitHint;\n }),\n );\n });\n\n const observe = (receipt: Receipt, options?: DurableObserveOptions) =>\n Stream.unwrap(\n operationAuthorizer\n .authorize(\n OperationAuthorizationRequest.make({\n operation: \"observe\",\n threadId: receipt.threadId,\n submissionId: receipt.submissionId,\n }),\n )\n .pipe(\n Effect.as(\n store.observe(\n ThreadObservation.make({\n threadId: receipt.threadId,\n ...(options?.after === undefined ? {} : { afterOffset: options.after }),\n }),\n ),\n ),\n ),\n );\n\n const abort = Effect.fn(\"DurableAgentRuntime.abort\")(function* (\n command: AbortCommand,\n ): Effect.fn.Return<AbortIntent, DurableAbortFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"abort\",\n submissionId: command.submissionId,\n }),\n );\n const intent = yield* ledger.requestAbort(command);\n\n yield* hit(\"abort:after-intent\");\n\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (Option.isSome(snapshot)) {\n yield* wake.notify(snapshot.value.threadId);\n }\n\n return intent;\n });\n\n /**\n * DUR-017 resolution surface (abort-shaped, plan §2.2): the durable ledger intent commits\n * first; the canonical `ToolCallResolved` (+ `ToolCallSettled` for a recovered result) is\n * appended by the recovery pass or the next owning Attempt. An `AbortSubmission` resolution\n * routes into the existing abort path — the unknown calls stay recorded and abort never\n * asserts external rollback (durability §13). Possession of this service plus the mandatory\n * author/reason audit fields is the Phase 5 authorization boundary, identical to `abort`; the\n * authenticated operator surface is a P7 deliverable.\n */\n const resolveUnknown = Effect.fn(\"DurableAgentRuntime.resolveUnknown\")(function* (\n command: UnknownResolutionCommand,\n ): Effect.fn.Return<UnknownResolutionIntent, DurableResolveFailure | OperationDenied> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"resolveUnknown\",\n submissionId: command.submissionId,\n }),\n );\n const intent = yield* ledger.recordUnknownResolution(command);\n\n yield* hit(\"resolve:after-intent\");\n if (command.resolution._tag === \"AbortSubmission\") {\n yield* ledger.requestAbort(\n AbortCommand.make({\n submissionId: command.submissionId,\n author: command.author,\n reason: command.reason,\n }),\n );\n }\n\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (Option.isSome(snapshot)) {\n yield* wake.notify(snapshot.value.threadId);\n }\n\n return intent;\n });\n\n /**\n * Durable approval decision surface (plan §2.6, abort-shaped): the ledger intent commits\n * first — idempotent per (submission, tool call), with a typed `ApprovalConflict` on a\n * divergent re-decision — and the adapter transitions `suspended → input-applied` atomically\n * once every pending call of the stored suspension reason is decided; the wake hint then lets\n * a worker resume the declared batch through the batch-resume seam (no model re-invocation).\n * The canonical `ToolApprovalDecided` record is appended by the resuming Attempt's approval\n * hook before the decision is honored — never here. A denied decision fails the Run through\n * the engine's `AgentApprovalDenied` path (denial-terminal, P2 policy default). Possession of\n * this service plus the mandatory resolver/reason audit fields is the Phase 5 authorization\n * boundary, identical to `abort`; the authenticated operator surface is a P7 deliverable.\n */\n const resolveApproval = Effect.fn(\"DurableAgentRuntime.resolveApproval\")(function* (\n command: ApprovalDecisionCommand,\n ): Effect.fn.Return<ApprovalDecisionIntent, DurableApprovalFailure | OperationDenied> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"resolveApproval\",\n submissionId: command.submissionId,\n }),\n );\n const intent = yield* ledger.recordApprovalDecision(command);\n\n const snapshot = yield* ledger.lookup(\n SubmissionLookupById.make({ submissionId: command.submissionId }),\n );\n\n if (Option.isSome(snapshot)) {\n yield* wake.notify(snapshot.value.threadId);\n }\n\n return intent;\n });\n\n // -------------------------------------------------------------------------\n // P7 administrative operations (plan §3): explain/verify/retry/wake/scanObligations over the\n // SAME two ports the coordinator already owns, so they behave identically on DN and DC.\n // -------------------------------------------------------------------------\n\n /** Whole non-negative seconds between a recorded instant and Effect Clock-now. */\n const ageSecondsSince = (instant: DateTime.Utc, nowMillis: number): number =>\n Math.max(0, Math.floor((nowMillis - DateTime.toEpochMillis(instant)) / 1_000));\n\n const lookupKnownSubmission = Effect.fn(\"DurableAgentRuntime.lookupKnownSubmission\")(function* (\n operation: string,\n submissionId: SubmissionId,\n ): Effect.fn.Return<SubmissionSnapshot, LedgerError> {\n const found = yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n\n if (Option.isNone(found)) {\n return yield* LedgerError.make({\n operation,\n message: `Unknown Submission ${submissionId}`,\n });\n }\n\n return found.value;\n });\n\n /**\n * Read-only explanation of one Submission: the same snapshot + tolerant canonical read +\n * pure classification the recovery pass performs, packaged WITHOUT executing anything —\n * assembling it performs zero writes (P7 exit gate: operators explain recovery state without\n * editing storage).\n */\n const explainSubmission = Effect.fn(\"DurableAgentRuntime.explainSubmission\")(function* (\n submission: SubmissionSnapshot,\n ): Effect.fn.Return<RecoveryExplanation, LedgerError | ThreadStoreError | RunJournalError> {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n const read = yield* readRecoveryHistory(submission.threadId, [\n submission.submissionId,\n ...(snapshot.hostSubmissionId === undefined ? [] : [snapshot.hostSubmissionId]),\n ]);\n\n const evidence = yield* evidenceFor(\n read.records,\n submission.submissionId,\n read.materialized,\n snapshot.hostSubmissionId,\n );\n\n const decision = classifyRecovery(snapshot, evidence);\n const nowMillis = yield* Clock.currentTimeMillis;\n const explainedAt = yield* nowUtc;\n const runId = runIdForSubmission(submission.submissionId);\n const resolvedIds = new Set(snapshot.unknownResolutions.map((intent) => intent.toolCallId));\n const unknownCalls: Array<ExplainedUnknownCall> = [];\n\n for (const envelope of read.records) {\n const payload = envelope.record.payload;\n\n if (payload._tag !== \"ToolCallUnknown\" || payload.runId !== runId) continue;\n unknownCalls.push(\n ExplainedUnknownCall.make({\n toolCallId: payload.toolCallId,\n toolName: payload.toolName,\n reason: payload.reason,\n recordedAt: envelope.record.createdAt,\n resolved: resolvedIds.has(payload.toolCallId),\n }),\n );\n }\n const row = snapshot.submission;\n\n return RecoveryExplanation.make({\n submission: ExplainedSubmission.make({\n submissionId: row.submissionId,\n threadId: row.threadId,\n state: row.state,\n queueSequence: row.queueSequence,\n createdAt: row.createdAt,\n ageSeconds: ageSecondsSince(row.createdAt, nowMillis),\n ...(row.readyAt === undefined\n ? {}\n : { readyAt: row.readyAt, readyAgeSeconds: ageSecondsSince(row.readyAt, nowMillis) }),\n ...(row.parentLinkage === undefined ? {} : { parentLinkage: row.parentLinkage }),\n }),\n evidence: ExplainedEvidence.make({\n threadMaterialized: evidence.threadMaterialized,\n inputRecorded: evidence.inputRecorded,\n abortRecorded: evidence.abortRecorded,\n openToolCalls: evidence.openToolCalls,\n openDelegationCalls: evidence.openDelegationCalls,\n approvalsPending: evidence.approvalsPending,\n unknownCalls,\n approvalDecisions: snapshot.approvalDecisions,\n unknownResolutions: snapshot.unknownResolutions,\n childAttachments: snapshot.childAttachments,\n joins: snapshot.joins,\n ...(evidence.recordedSettlementOutcome === undefined\n ? {}\n : { recordedSettlementOutcome: evidence.recordedSettlementOutcome }),\n ...(snapshot.hostSubmissionId === undefined\n ? {}\n : { hostSubmissionId: snapshot.hostSubmissionId }),\n ...(snapshot.suspension === undefined ? {} : { suspension: snapshot.suspension }),\n ...(snapshot.abortIntent === undefined ? {} : { abortIntent: snapshot.abortIntent }),\n }),\n decision,\n decisionMeaning: recoveryDecisionMeaning(decision._tag),\n disposition: predictRecoveryDisposition(decision, snapshot),\n explainedAt,\n });\n });\n\n const explain = Effect.fn(\"DurableAgentRuntime.explain\")(function* (\n submissionId: SubmissionId,\n ): Effect.fn.Return<RecoveryExplanation, DurableExplainFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"explain\", submissionId }),\n );\n const submission = yield* lookupKnownSubmission(\"explain\", submissionId);\n\n return yield* explainSubmission(submission);\n });\n\n const explainThread = Effect.fn(\"DurableAgentRuntime.explainThread\")(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<ReadonlyArray<RecoveryExplanation>, DurableExplainFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"explain\", threadId }),\n );\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const explanations: Array<RecoveryExplanation> = [];\n\n for (const submission of nonterminal) {\n if (submission.threadId !== threadId) continue;\n explanations.push(yield* explainSubmission(submission));\n }\n\n return explanations;\n });\n\n const verifyImpl = Effect.fn(\"DurableAgentRuntime.verify\")(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<IntegrityReport, DurableVerifyFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"verify\", threadId }),\n );\n const exported = yield* store.export(ThreadExportRequest.make({ threadId }));\n // Lane rows: the nonterminal scan plus every Submission the canonical log itself names —\n // the ledger port scans nonterminal work only, and canonical history is the authority for\n // everything settled (DUR-015).\n const rows = new Map<SubmissionId, SubmissionSnapshot>();\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n\n for (const submission of nonterminal) {\n if (submission.threadId === threadId) {\n rows.set(submission.submissionId, submission);\n }\n }\n const named = new Set<SubmissionId>();\n\n for (const envelope of exported.records) {\n const payload = envelope.record.payload;\n\n if (\n payload._tag === \"UserInputRecorded\" ||\n payload._tag === \"SubmissionSettled\" ||\n payload._tag === \"AbortRequested\"\n ) {\n if (payload.submissionId !== undefined) named.add(payload.submissionId);\n }\n }\n for (const submissionId of named) {\n if (rows.has(submissionId)) continue;\n const found = yield* ledger.lookup(SubmissionLookupById.make({ submissionId }));\n\n if (Option.isSome(found) && found.value.threadId === threadId) {\n rows.set(submissionId, found.value);\n }\n }\n\n // The latest stored checkpoint binds against the report; a typed load rejection IS an\n // integrity finding rather than an operation failure.\n const checkpointLoad:\n | { readonly _tag: \"loaded\"; readonly checkpoint: ThreadCheckpoint | undefined }\n | { readonly _tag: \"rejected\"; readonly reason: string }\n | { readonly _tag: \"unsupported\" } =\n store.checkpoints === undefined\n ? { _tag: \"unsupported\" }\n : yield* store.checkpoints.load(LoadCheckpointRequest.make({ threadId })).pipe(\n Effect.map((checkpoint) => ({\n _tag: \"loaded\" as const,\n checkpoint: Option.getOrUndefined(checkpoint),\n })),\n Effect.catchTag(\"CheckpointRejected\", (rejected) =>\n Effect.succeed({ _tag: \"rejected\" as const, reason: rejected.reason }),\n ),\n );\n\n const report = yield* verifyThreadInvariants({\n export: exported,\n submissions: [...rows.values()],\n checkpointsSupported: checkpointLoad._tag !== \"unsupported\",\n ...(checkpointLoad._tag === \"loaded\" && checkpointLoad.checkpoint !== undefined\n ? { checkpoint: checkpointLoad.checkpoint }\n : {}),\n }).pipe(withCrypto);\n\n if (checkpointLoad._tag === \"rejected\") {\n const checks = [\n ...report.checks.filter((result) => result.name !== \"checkpoint-binding\"),\n IntegrityCheck.make({\n name: \"checkpoint-binding\",\n status: \"failed\",\n detail: `the stored checkpoint was rejected on load: ${checkpointLoad.reason}`,\n }),\n ];\n\n return IntegrityReport.make({\n threadId: report.threadId,\n tailSequence: report.tailSequence,\n recordCount: report.recordCount,\n submissionCount: report.submissionCount,\n checks,\n ok: false,\n });\n }\n\n return report;\n });\n\n /**\n * Safe re-drive of exactly one Submission's recovery decision (plan §3): classify, execute\n * the ONE repair the classifier names, append the deterministic `RepairAnnotated` audit when\n * it repairs (DUR-013 — retry adds no new record type), and wake the lane. Typed refusals\n * protect the paths that own their own operations: settled work (`NoAction`), lanes blocked\n * on Unknown Outcomes (`resolveUnknown`, DUR-017), and lanes awaiting approval decisions\n * (`resolveApproval`). The mandatory `author`/`reason` audit fields (SEC-011) annotate the\n * structured operator log.\n */\n const retryImpl = Effect.fn(\"DurableAgentRuntime.retry\")(function* (\n command: RetryCommand,\n ): Effect.fn.Return<RecoveryReport, DurableRetryFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({\n operation: \"retry\",\n submissionId: command.submissionId,\n }),\n );\n const submission = yield* lookupKnownSubmission(\"retry\", command.submissionId);\n\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: command.submissionId }),\n );\n\n const read = yield* readRecoveryHistory(submission.threadId, [\n submission.submissionId,\n ...(snapshot.hostSubmissionId === undefined ? [] : [snapshot.hostSubmissionId]),\n ]);\n\n const evidence = yield* evidenceFor(\n read.records,\n command.submissionId,\n read.materialized,\n snapshot.hostSubmissionId,\n );\n\n const decision = classifyRecovery(snapshot, evidence);\n\n if (decision._tag === \"NoAction\") {\n return yield* RetryRefused.make({\n submissionId: command.submissionId,\n refusal: \"settled\",\n decisionTag: decision._tag,\n message: \"The Submission is settled; terminal outcomes are never revisited (DUR-002).\",\n });\n }\n if (decision._tag === \"AwaitUnknownResolution\") {\n return yield* RetryRefused.make({\n submissionId: command.submissionId,\n refusal: \"await-unknown-resolution\",\n decisionTag: decision._tag,\n message:\n \"The lane is durably blocked on Unknown Outcomes; resolve them through the authorized resolveUnknown path (DUR-017) instead of retrying.\",\n });\n }\n if (decision._tag === \"AwaitApprovalDecision\") {\n return yield* RetryRefused.make({\n submissionId: command.submissionId,\n refusal: \"await-approval-decision\",\n decisionTag: decision._tag,\n message:\n \"The lane is durably waiting for approval decisions; decide them through resolveApproval instead of retrying.\",\n });\n }\n yield* Effect.logInfo(\"DurableAgentRuntime.retry executed an operator re-drive\").pipe(\n Effect.annotateLogs({\n submissionId: command.submissionId,\n threadId: submission.threadId,\n author: command.author,\n reason: command.reason,\n decision: decision._tag,\n }),\n );\n\n const disposition = yield* Effect.scoped(\n executeRecoveryDecision(snapshot, evidence, decision, read.records, read),\n );\n\n if (disposition === \"repaired\") {\n yield* annotateRepair(submission.threadId, command.submissionId, decision);\n }\n yield* wake.notify(submission.threadId);\n\n return RecoveryReport.make({\n submissionId: command.submissionId,\n threadId: submission.threadId,\n decision,\n disposition,\n });\n });\n\n /** The documented operator liveness nudge: a droppable wake hint for one lane. */\n const wakeImpl = Effect.fn(\"DurableAgentRuntime.wake\")(function* (\n threadId: ThreadId,\n ): Effect.fn.Return<void, OperationDenied> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"wake\", threadId }),\n );\n yield* wake.notify(threadId);\n });\n\n /**\n * Scan-based DUR-017/OPS-001 obligation report — never a daemon: one ledger scan folded into\n * aged, severity-classified rows. Ages come from timestamps that already exist: `readyAt`/\n * `createdAt` for queued and running work, `suspendedAt` for durable suspensions, and the\n * oldest unresolved canonical `ToolCallUnknown` record for DUR-017 blocks (OPS-002).\n */\n const scanObligationsImpl = Effect.fn(\"DurableAgentRuntime.scanObligations\")(function* (\n thresholds: ObligationThresholds,\n ): Effect.fn.Return<ObligationReport, DurableObligationFailure> {\n yield* operationAuthorizer.authorize(\n OperationAuthorizationRequest.make({ operation: \"scanObligations\" }),\n );\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const nowMillis = yield* Clock.currentTimeMillis;\n const generatedAt = yield* nowUtc;\n const entries: Array<ObligationEntry> = [];\n\n for (const submission of nonterminal) {\n const snapshot = yield* ledger.loadRecoverySnapshot(\n RecoverySnapshotRequest.make({ submissionId: submission.submissionId }),\n );\n\n let blockedOn: ObligationBlockedOn;\n let since: DateTime.Utc = submission.readyAt ?? submission.createdAt;\n\n switch (submission.state) {\n case \"unknown\": {\n blockedOn = \"unknown\";\n\n const records = (yield* readAllTolerant(submission.threadId, [submission.submissionId]))\n .records;\n\n const resolvedIds = new Set(\n snapshot.unknownResolutions.map((intent) => intent.toolCallId),\n );\n\n const runId = runIdForSubmission(submission.submissionId);\n let earliest: DateTime.Utc | undefined;\n\n for (const envelope of records) {\n const payload = envelope.record.payload;\n\n if (payload._tag !== \"ToolCallUnknown\" || payload.runId !== runId) continue;\n if (resolvedIds.has(payload.toolCallId)) continue;\n const recordedAt = envelope.record.createdAt;\n\n if (\n earliest === undefined ||\n DateTime.toEpochMillis(recordedAt) < DateTime.toEpochMillis(earliest)\n ) {\n earliest = recordedAt;\n }\n }\n since = earliest ?? snapshot.suspension?.suspendedAt ?? since;\n break;\n }\n case \"suspended\": {\n blockedOn =\n snapshot.suspension?.reason._tag === \"WaitingForChild\" ? \"waitingForChild\" : \"approval\";\n since = snapshot.suspension?.suspendedAt ?? since;\n break;\n }\n case \"admitted\":\n case \"ready\": {\n blockedOn = \"ready-aged\";\n break;\n }\n default: {\n blockedOn = \"running-aged\";\n break;\n }\n }\n const ageSeconds = ageSecondsSince(since, nowMillis);\n\n entries.push(\n ObligationEntry.make({\n submissionId: submission.submissionId,\n threadId: submission.threadId,\n state: submission.state,\n blockedOn,\n ageSeconds,\n severity: obligationSeverityOf(ageSeconds, thresholds),\n }),\n );\n }\n\n return ObligationReport.make({ thresholds, entries, generatedAt });\n });\n\n const runWorkerImpl = <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends InputPromptSource<InputSchema[\"Type\"], unknown, unknown> | undefined =\n undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n ) =>\n Effect.gen(function* () {\n // Wake subscriptions may drop hints, so a ledger scan seeds the worklist (persistence §14).\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const seen = new Set<ThreadId>();\n\n for (const submission of nonterminal) {\n if (seen.has(submission.threadId)) continue;\n seen.add(submission.threadId);\n yield* processThreadImpl(agent, submission.threadId);\n }\n yield* Stream.runForEach(wake.wakes, (threadId) => processThreadImpl(agent, threadId));\n });\n\n const runResolvedWorkerImpl = Effect.gen(function* () {\n // The multi-binding worker (plan §1.7): every claimed head resolves its exact stored\n // Binding from the explicit registration array, so one worker pool serves parent and child\n // lanes (spec §12's smallest-pool wakeup proof runs over this loop).\n const nonterminal = yield* Stream.runCollect(ledger.scanNonterminal);\n const seen = new Set<ThreadId>();\n\n for (const submission of nonterminal) {\n if (seen.has(submission.threadId)) continue;\n seen.add(submission.threadId);\n yield* processThreadResolvedImpl(submission.threadId);\n }\n yield* Stream.runForEach(wake.wakes, (threadId) => processThreadResolvedImpl(threadId));\n });\n\n const messagingRuntime = yield* makeMessagingRuntime({\n bindings: registeredBindings,\n deploymentId: config.deploymentId,\n producerId: config.producerId,\n });\n\n const workerRuntime = yield* makeWorkerRuntime({\n bindings: registeredBindings,\n deploymentId: config.deploymentId,\n producerId: config.producerId,\n settlementPollInterval: config.settlementPollInterval,\n }).pipe(\n Effect.provideService(WorkerInputControl, {\n status: readSubmissionStatus,\n abort,\n submit: (envelope) =>\n submit({ definition: { id: envelope.agentId, input: PersistedJson } }, envelope.input, {\n threadId: envelope.threadId,\n principal: envelope.deliveryPrincipal,\n idempotencyKey: envelope.admissionKey,\n definitions: envelope.definitions,\n ...(envelope.workerAdmission === undefined\n ? {}\n : { workerAdmission: envelope.workerAdmission }),\n ...(envelope.messageAdmission === undefined\n ? {}\n : { messageAdmission: envelope.messageAdmission }),\n }),\n }),\n );\n\n const updateRuntime = yield* makeAgentUpdateRuntime({\n deploymentId: config.deploymentId,\n producerId: config.producerId,\n }).pipe(Effect.provideService(WorkerRuntime, workerRuntime));\n\n return DurableAgentRuntime.of({\n workerHost: workerRuntime.acquire,\n messagingHost: messagingRuntime.acquire,\n submitRegistered,\n settlementRecord,\n submit,\n submissionStatus,\n inspectSubmissionStatus: readSubmissionStatus,\n awaitSettlement,\n awaitProgress,\n observe,\n abort,\n resolveUnknown,\n resolveApproval,\n explain,\n explainThread,\n verify: verifyImpl,\n retry: retryImpl,\n wake: wakeImpl,\n scanObligations: scanObligationsImpl,\n processThread: processThreadImpl,\n processThreadResolved: processThreadResolvedImpl,\n processThreadHead: processThreadHeadImpl,\n runWorker: runWorkerImpl,\n runResolvedWorker: runResolvedWorkerImpl,\n runRecovery: runRecoveryImpl(),\n recoverSubmission,\n });\n});\n\n/**\n * Durable Agent Runtime coordinator (deployment class DN; D1/D2). It coordinates the\n * SubmissionLedger, ThreadStore, and WakeScheduler ports so that once `submit` returns a\n * Receipt, the Submission settles exactly once (DUR-001/DUR-002) while every external effect\n * remains at-least-once (DUR-003) — this runtime never claims exactly-once side effects.\n *\n * - `submit(agent, input, options)` — durable admission → Thread materialization →\n * `ThreadCreated` → readiness → Receipt, with failpoints between the steps; a retry with\n * the same (thread, principal, idempotencyKey) resumes and returns the same Receipt.\n * - `awaitSettlement(receipt)` — authorized once before the first ledger read, for the lifetime\n * of this wait; interrupting it detaches the caller only and never cancels accepted work.\n * - `observe(receipt, {after})` — canonical record observation from a stored offset.\n * - `abort(command)` — authorized before ledger access; durable idempotent abort intent; inactive work settles aborted through\n * recovery, an active worker makes the command canonical before interrupting its Run (§13),\n * settled work fails with `SettlementConflict` (DUR-012). A `joined` Submission fails with a\n * typed `JoinedToHost` conflict carrying the host identity — it settles with its host, so the\n * abort target is the host; aborting a `joining` Submission records the intent, honored only\n * if the host has not consumed the input (revert-then-abort, plan §2.5).\n * - `resolveUnknown(command)` — the authorized DUR-017 resolution path for Unknown Outcomes:\n * the durable intent is idempotent per (submission, tool call) and conflicts typed on\n * divergence; the canonical resolution records are applied by recovery or the next Attempt,\n * and the lane wakes once every marked call is covered.\n * - `resolveApproval(command)` — the durable approval decision path (plan §2.6): the intent is\n * idempotent per (submission, tool call) with a typed `ApprovalConflict` on divergence; once\n * every pending call of the suspension reason is decided the lane wakes\n * (`suspended → input-applied`) and the next Attempt resumes the declared batch without model\n * re-invocation, appending the canonical `ToolApprovalDecided` before honoring the decision.\n * - `processThread(agent, threadId)` — drain one lane: fenced FIFO-head claims,\n * canonical input apply, split response/prepared/results Turn commits (plan §2.1),\n * reconcile-then-mark for open ordinary Tool Calls (DUR-009, never an automatic replay),\n * declared-batch resume without model re-invocation (§15), and terminalization. An active\n * host Run claims the contiguous ready prefix of later queued Submissions at every safe Turn\n * seam (Joining/Joined, plan §2.5): the queued input becomes canonical (`input:{sid}`) before\n * the next model request, reattaches through the prompt-coverage rule after a crash, and the\n * joined Submissions settle with the host outcome (DUR-002/DUR-016).\n * - `runWorker(agent)` — scan-seeded, wake-driven worker loop over every lane (WP4's host driver),\n * reimplemented over a singleton identity-exact (digest-transparent) Binding resolution: a\n * claimed head belonging to a different Agent never runs against this binding (SUB-023); a\n * parent-linked head refused this way settles with the framework `ChildCompatibilityFailure`.\n * - `processThreadResolved(threadId)` / `runResolvedWorker` — the\n * S2 multi-binding equivalents over registrations owned by the runtime Layer (spec §11, D7): every claimed\n * head's stored `(agentId, agentDigests)` resolves to the exact registered Binding before any\n * code runs; an unresolvable parent-linked child settles with the Schema-stable framework\n * `ChildCompatibilityFailure` (no application code, the child never executes), and an\n * unresolvable root surfaces the typed refusal after releasing the claim.\n * - `runRecovery()` — classify every nonterminal Submission with the pure `classifyRecovery` and\n * execute the repair decisions, appending a `RepairAnnotated` audit record per executed decision\n * (DUR-013). Untouched ready input and model-resuming work are reported `deferred` for a\n * worker claim; lanes blocked on\n * Unknown Outcomes are reported `unknown`. The S2 binding-free Subagent executors (admission\n * completion, start-link repair, waiting restoration, wake replay, canonical join accounting,\n * abort propagation, orphan reservation release) run here; the settlement join itself is\n * deferred to a claiming worker because it needs the parent Binding's result projection.\n * - `explain`/`explainThread`, `verify`, `retry`, `wake`, `scanObligations` — the P7\n * administrative operations (plan §3) over the same two ports, identical on DN and DC.\n * `explain` and `verify` are strictly read-only; `retry` re-drives exactly one classified\n * repair with mandatory author/reason audit and typed refusals; `scanObligations` is the\n * scan-based DUR-017/OPS-001 obligation surface. Every one of them (plus `observe`,\n * `resolveUnknown`, `resolveApproval`) consults the `OperationAuthorizer` reference\n * fail-closed — the default Layer preserves the service-possession behavior, and a\n * host-supplied authorizer turns denials into the typed `OperationDenied`.\n */\nexport class DurableAgentRuntime extends Context.Service<\n DurableAgentRuntime,\n {\n /** Acquire an authenticated source Thread facet; its References confer no authority. */\n readonly workerHost: (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n /** Exact retained owner input for captured source policy; never selects the latest input. */\n readonly sourceSubmissionId?: SubmissionId;\n }) => Effect.Effect<SubagentHost[\"Service\"], WorkerError>;\n readonly messagingHost: (request: {\n readonly sourceThreadId: ThreadId;\n readonly principal: Principal;\n }) => Effect.Effect<MessagingHost[\"Service\"], MessagingError>;\n /** Admit the exact registered Definition instance; reject missing, ambiguous, or different definitions. */\n readonly submitRegistered: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: Omit<DurableSubmitOptions, \"definitions\">,\n ) => Effect.Effect<\n Receipt,\n DurableSubmitFailure | BindingUnavailable,\n InputSchema[\"EncodingServices\"]\n >;\n /** Authorized exact canonical terminal record, including the encoded output. Reject pending work. */\n readonly settlementRecord: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionSettledRecord, DurableAwaitFailure>;\n readonly submit: <InputSchema extends Schema.Top>(\n agent: DurableSubmitAgent<InputSchema>,\n input: InputSchema[\"Type\"],\n options: DurableSubmitOptions,\n ) => Effect.Effect<Receipt, DurableSubmitFailure, InputSchema[\"EncodingServices\"]>;\n readonly awaitSettlement: (receipt: Receipt) => Effect.Effect<Settlement, DurableAwaitFailure>;\n /** Authorized, nonblocking read. Only the durable Settlement marks work complete. */\n readonly submissionStatus: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, DurableAwaitFailure>;\n /**\n * Trusted worker inspection under the same runtime authority as processThread/recoverSubmission.\n * Caller-facing observations must use submissionStatus or awaitSettlement for authorization.\n */\n readonly inspectSubmissionStatus: (\n receipt: Receipt,\n ) => Effect.Effect<SubmissionStatus, DurableAwaitFailure>;\n /**\n * Wait for an already-committed record or one incarnation-local progress hint after\n * `afterSequence`. Canonical records remain authoritative: callers re-read after return.\n */\n readonly awaitProgress: (\n threadId: ThreadId,\n afterSequence: CanonicalSequence,\n ) => Effect.Effect<void, DurableProgressFailure>;\n readonly observe: (\n receipt: Receipt,\n options?: DurableObserveOptions,\n ) => Stream.Stream<\n CanonicalRecordEnvelope,\n ThreadStoreError | ThreadNotMaterialized | OperationDenied\n >;\n readonly abort: (command: AbortCommand) => Effect.Effect<AbortIntent, DurableAbortFailure>;\n readonly resolveUnknown: (\n command: UnknownResolutionCommand,\n ) => Effect.Effect<UnknownResolutionIntent, DurableResolveFailure | OperationDenied>;\n readonly resolveApproval: (\n command: ApprovalDecisionCommand,\n ) => Effect.Effect<ApprovalDecisionIntent, DurableApprovalFailure | OperationDenied>;\n /**\n * Read-only recovery explanation of one Submission (P7 plan §3): snapshot + tolerant\n * canonical read + the pure classifier, packaged with the decision's operator meaning and\n * predicted disposition. Performs ZERO writes — the canonical log and every ledger row are\n * byte-identical before and after.\n */\n readonly explain: (\n submissionId: SubmissionId,\n ) => Effect.Effect<RecoveryExplanation, DurableExplainFailure>;\n /** `explain` for every nonterminal lane member of one Thread, in queue order. */\n readonly explainThread: (\n threadId: ThreadId,\n ) => Effect.Effect<ReadonlyArray<RecoveryExplanation>, DurableExplainFailure>;\n /**\n * Read-only integrity verification of one Thread (P7 plan §3): Schema round-trips,\n * record-identity uniqueness, sequence contiguity, FIFO input/settlement order,\n * ledger-terminal vs canonical-settlement agreement (DUR-015), and checkpoint binding —\n * typed per-check results, never a repair. The digest-chain check reports `skipped` with\n * the honest reason: full chain recomputation needs per-batch producer identity, which the\n * ThreadStore port deliberately does not export (supply it to\n * `verifyThreadInvariants` directly; adapter-level `verifyOnOpen` is the\n * storage-side audit).\n */\n readonly verify: (threadId: ThreadId) => Effect.Effect<IntegrityReport, DurableVerifyFailure>;\n /**\n * Safe re-drive of one Submission's recovery decision with mandatory author/reason audit\n * (SEC-011): executes exactly the repair the classifier names and appends the\n * deterministic `RepairAnnotated` record when it repairs (DUR-013). Typed `RetryRefused`\n * for settled work and for lanes owned by the resolveUnknown/resolveApproval paths.\n */\n readonly retry: (command: RetryCommand) => Effect.Effect<RecoveryReport, DurableRetryFailure>;\n /** The documented operator liveness nudge: a droppable wake hint for one lane. */\n readonly wake: (threadId: ThreadId) => Effect.Effect<void, OperationDenied>;\n /**\n * Scan-based DUR-017/OPS-001 obligation report: every nonterminal Submission with what it\n * is visibly blocked on, its age, and a threshold-classified severity. Never a daemon —\n * hosts run it periodically and own the alert loop (OPS-002).\n */\n readonly scanObligations: (\n thresholds: ObligationThresholds,\n ) => Effect.Effect<ObligationReport, DurableObligationFailure>;\n readonly processThread: <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends\n | InputPromptSource<InputSchema[\"Type\"], unknown, unknown>\n | undefined = undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n threadId: ThreadId,\n ) => Effect.Effect<\n ReadonlyArray<Settlement>,\n DurableWorkerFailure | DurableBindingFailure,\n DurableWorkerRequirements<\n RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n InstructionRequirements\n >\n >;\n readonly processThreadResolved: (\n threadId: ThreadId,\n ) => Effect.Effect<ReadonlyArray<Settlement>, DurableWorkerFailure | DurableBindingFailure>;\n /**\n * Advance at most one FIFO-head Attempt, closing its resources before returning. A vacant,\n * owned, unknown, or suspended head returns None and leaves accepted work pending.\n * Ready input may join this Run through the existing Turn seams and settle with its head.\n * Interruption ends only this Attempt; ownership cleanup uses its latest renewed token.\n * A trusted host may supply `yieldAfter` to return None before the next Turn's context\n * preparation, committing any completed Turn first. This releases ownership without settling or resetting the durable\n * Run deadline. It is a cooperative scheduling deadline, not a hard interruption timeout.\n */\n readonly processThreadHead: (\n threadId: ThreadId,\n options?: { readonly yieldAfter?: DateTime.Utc },\n ) => Effect.Effect<Option.Option<Settlement>, DurableWorkerFailure | DurableBindingFailure>;\n readonly runWorker: <\n InputSchema extends Schema.Top,\n OutputSchema extends Schema.Top,\n Instructions,\n Tools extends Record<string, Tool.Any>,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError = InstructionErrorOf<Instructions, InputSchema[\"Type\"]>,\n InstructionRequirements = InstructionRequirementsOf<Instructions, InputSchema[\"Type\"]>,\n RunDispositionValue extends\n | RunDispositionDeclaration<OutputSchema[\"Type\"], Schema.Top>\n | undefined = undefined,\n InputPromptValue extends\n | InputPromptSource<InputSchema[\"Type\"], unknown, unknown>\n | undefined = undefined,\n UpdatesSchema extends Schema.Top | undefined = undefined,\n >(\n agent: RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n ) => Effect.Effect<\n void,\n DurableWorkerFailure | DurableBindingFailure,\n DurableWorkerRequirements<\n RuntimeBinding<\n InputSchema,\n OutputSchema,\n Instructions,\n Tools,\n Provider,\n ModelProvides,\n ModelRequires,\n InstructionError,\n InstructionRequirements,\n RunDispositionValue,\n InputPromptValue,\n UpdatesSchema\n >,\n InstructionRequirements\n >\n >;\n readonly runResolvedWorker: Effect.Effect<void, DurableWorkerFailure | DurableBindingFailure>;\n readonly runRecovery: Effect.Effect<ReadonlyArray<RecoveryReport>, DurableWorkerFailure>;\n /** Apply one recovery decision; untouched ready input is deferred to its worker claim. */\n readonly recoverSubmission: (\n submissionId: SubmissionId,\n ) => Effect.Effect<RecoveryReport, DurableWorkerFailure>;\n }\n>()(\"@effect-agent/thread/DurableAgentRuntime\") {\n /**\n * Resolve typed registrations and capture their services once in the runtime's Layer Scope.\n * Every claimed head must match an exact registered identity and digest triple. Worker calls\n * cannot replace these registrations or their captured services. Tool authorization is required.\n */\n static layerRegistered<const Entries extends ReadonlyArray<AgentRegistration>>(\n registrations: Entries,\n ) {\n return Layer.effect(DurableAgentRuntime)(\n Effect.flatMap(compileRegistrations(registrations), make),\n );\n }\n\n /** Construct from precompiled registrations whose captured resources belong to the caller's Scope. */\n static layerWithBindings(bindings: ReadonlyArray<ResolvedBinding>) {\n return Layer.effect(DurableAgentRuntime)(make(bindings));\n }\n\n /** Captures optional context preparation; Tool authorization remains required in `R`. */\n static readonly layerWithServices: Layer.Layer<\n DurableAgentRuntime,\n never,\n | SubmissionLedger\n | ThreadStore\n | WakeScheduler\n | DurableRuntimeFailpoint\n | DurableRuntimeConfig\n | ToolReconciler\n | RunToolAuthorization\n | Crypto.Crypto\n > = DurableAgentRuntime.layerWithBindings([]);\n\n /** Compatible defaults: no host prompt transformation and allow-all Tool authorization. */\n static readonly layer: Layer.Layer<\n DurableAgentRuntime,\n never,\n | SubmissionLedger\n | ThreadStore\n | WakeScheduler\n | DurableRuntimeFailpoint\n | DurableRuntimeConfig\n | ToolReconciler\n | Crypto.Crypto\n > = DurableAgentRuntime.layerWithServices.pipe(\n Layer.provide([RunContextPreparationPassthrough, RunToolAuthorization.allowAll]),\n );\n}\n"],"mappings":"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"}
|